Add 'display-commonsys-intf/' from commit '9e007e8c997fef5aa3cb595df1748bf09bf20f1f'
git-subtree-dir: display-commonsys-intf
git-subtree-mainline: dd01e83c7a3d9006071939cd1bcb3b037f62e172
git-subtree-split: 9e007e8c997fef5aa3cb595df1748bf09bf20f1f
Change-Id: I6d244a265ff8e93264c355d628352a140db49fcf
diff --git a/Android.bp b/Android.bp
index 408e904..d4b6c28 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,10 +1,39 @@
-cc_library_headers {
- name: "display_intf_headers",
- vendor_available: true,
- export_include_dirs: [
- "gralloc",
- "include",
- "libqdmetadata",
- "services",
+cc_defaults {
+ name: "display_defaults",
+ cflags: [
+ "-Wno-missing-field-initializers",
+ "-Wconversion",
+ "-Wall",
+ "-Werror",
],
+ shared_libs: [
+ "liblog",
+ "libcutils",
+ "libutils",
+ ],
+ header_libs: ["display_headers"],
+ clang: true,
}
+
+cc_library_headers {
+ name: "display_headers",
+ vendor: true,
+ export_include_dirs: [
+ "include",
+ "libcopybit",
+ "libdrmutils",
+ "libqdutils",
+ "libqservice",
+ "gpu_tonemapper",
+ "sdm/include",
+ "gralloc",
+ "libdebug",
+ ],
+ header_libs: ["libhardware_headers", "display_intf_headers"],
+ export_header_lib_headers: ["libhardware_headers", "display_intf_headers"],
+}
+
+subdirs = [
+ "libqservice",
+ "libqdutils",
+]
diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..e8cab37
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,19 @@
+ifneq ($(TARGET_DISABLE_DISPLAY),true)
+sdm-libs := sdm/libs
+display-hals := include $(sdm-libs)/utils $(sdm-libs)/core libdebug
+
+ifneq ($(TARGET_IS_HEADLESS), true)
+ display-hals += libcopybit liblight libmemtrack hdmi_cec \
+ $(sdm-libs)/hwc2 gpu_tonemapper libdrmutils
+endif
+
+display-hals += gralloc
+
+ifeq ($(call is-vendor-board-platform,QCOM),true)
+ include $(call all-named-subdir-makefiles,$(display-hals))
+else
+ifneq ($(filter msm% apq%,$(TARGET_BOARD_PLATFORM)),)
+ include $(call all-named-subdir-makefiles,$(display-hals))
+endif
+endif
+endif #TARGET_DISABLE_DISPLAY
diff --git a/CleanSpec.mk b/CleanSpec.mk
new file mode 100644
index 0000000..e3eda5b
--- /dev/null
+++ b/CleanSpec.mk
@@ -0,0 +1,46 @@
+# Clean old composer
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.graphics.composer@2.1-service)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.graphics.composer@2.1-service.rc)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/android.hardware.graphics.composer@2.1-impl.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.graphics.composer@2.2-service)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.graphics.composer@2.2-service.rc)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/android.hardware.graphics.composer@2.2-impl.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/bin/hw/android.hardware.graphics.composer@2.3-service)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/android.hardware.graphics.composer@2.3-service.rc)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/android.hardware.graphics.composer@2.3-impl.so)
+
+
+# Clean old target objs
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/hwcomposer.msmnile.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/hwcomposer.msmnile.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/gralloc.msmnile.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/gralloc.msmnile.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/lights.msmnile.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/lights.msmnile.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/memtrack.msmnile.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/memtrack.msmnile.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/hwcomposer.trinket.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/hwcomposer.trinket.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/gralloc.trinket.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/gralloc.trinket.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/lights.trinket.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/lights.trinket.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/memtrack.trinket.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/memtrack.trinket.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/hwcomposer.talos.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/hwcomposer.talos.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/gralloc.talos.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/gralloc.talos.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/lights.talos.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/lights.talos.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/memtrack.talos.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/memtrack.talos.so)
+
+#Clean display includes
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/include/qcom/display)
+
+# Clean old allocator rc file
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/etc/init/vendor.qti.hardware.display.allocator@1.0-service.rc)
+
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib/hw/android.hardware.graphics.mapper@2.0-impl-qti-display.so)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/vendor/lib64/hw/android.hardware.graphics.mapper@2.0-impl-qti-display.so)
diff --git a/Makefile.am b/Makefile.am
index 8009b42..991d981 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,2 +1,5 @@
+# Makefile.am - Automake script for sdm
+
ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = libqdmetadata
+
+SUBDIRS = libqservice libdebug libdrmutils sdm/libs/utils sdm/libs/core libqdutils
diff --git a/common.mk b/common.mk
new file mode 100644
index 0000000..a30c0d9
--- /dev/null
+++ b/common.mk
@@ -0,0 +1,80 @@
+#Common headers
+display_top := $(call my-dir)
+
+#Common C flags
+common_flags := -Wno-missing-field-initializers
+common_flags += -Wconversion -Wall -Werror
+common_flags += -DUSE_GRALLOC1
+ifeq ($(TARGET_IS_HEADLESS), true)
+ common_flags += -DTARGET_HEADLESS
+ LOCAL_CLANG := false
+endif
+
+ifeq ($(TARGET_USES_COLOR_METADATA), true)
+ common_flags += -DUSE_COLOR_METADATA
+endif
+
+ifeq ($(TARGET_USES_QCOM_BSP),true)
+ common_flags += -DQTI_BSP
+endif
+
+ifeq ($(ARCH_ARM_HAVE_NEON),true)
+ common_flags += -D__ARM_HAVE_NEON
+endif
+
+ifeq ($(call is-board-platform-in-list, $(MASTER_SIDE_CP_TARGET_LIST)), true)
+ common_flags += -DMASTER_SIDE_CP
+endif
+
+use_hwc2 := false
+ifeq ($(TARGET_USES_HWC2), true)
+ use_hwc2 := true
+ common_flags += -DVIDEO_MODE_DEFER_RETIRE_FENCE
+endif
+
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+ common_flags += -DUSER_DEBUG
+endif
+
+ifeq ($(LLVM_SA), true)
+ common_flags += --compile-and-analyze --analyzer-perf --analyzer-Werror
+endif
+
+common_includes := system/core/base/include
+CHECK_VERSION_LE = $(shell if [ $(1) -le $(2) ] ; then echo true ; else echo false ; fi)
+PLATFORM_SDK_NOUGAT = 25
+ifeq "REL" "$(PLATFORM_VERSION_CODENAME)"
+ifeq ($(call CHECK_VERSION_LE, $(PLATFORM_SDK_VERSION), $(PLATFORM_SDK_NOUGAT)), true)
+version_flag := -D__NOUGAT__
+
+# These include paths are deprecated post N
+common_includes += $(display_top)/libqdutils
+common_includes += $(display_top)/libqservice
+common_includes += $(display_top)/gpu_tonemapper
+ifneq ($(TARGET_IS_HEADLESS), true)
+ common_includes += $(display_top)/libcopybit
+endif
+
+common_includes += $(display_top)/include
+common_includes += $(display_top)/sdm/include
+common_flags += -isystem $(TARGET_OUT_HEADERS)/qcom/display
+endif
+endif
+
+common_header_export_path := qcom/display
+
+#Common libraries external to display HAL
+common_libs := liblog libutils libcutils libhardware
+common_deps :=
+kernel_includes :=
+
+ifeq ($(TARGET_COMPILE_WITH_MSM_KERNEL),true)
+# This check is to pick the kernel headers from the right location.
+# If the macro above is defined, we make the assumption that we have the kernel
+# available in the build tree.
+# If the macro is not present, the headers are picked from hardware/qcom/msmXXXX
+# failing which, they are picked from bionic.
+ common_deps += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+ kernel_includes += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include/display
+endif
diff --git a/config/display-board.mk b/config/display-board.mk
new file mode 100644
index 0000000..db15d83
--- /dev/null
+++ b/config/display-board.mk
@@ -0,0 +1,20 @@
+#Display target definitions for msmnile
+
+#Enable Charging Icon
+TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888
+TARGET_USES_GRALLOC1 := true
+TARGET_USES_DRM_PP := true
+TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS := true
+MAX_VIRTUAL_DISPLAY_DIMENSION := 4096
+NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3
+TARGET_USES_HWC2 := true
+TARGET_USES_QCOM_DISPLAY_BSP := true
+TARGET_USES_COLOR_METADATA := true
+TARGET_HAS_WIDE_COLOR_DISPLAY := true
+TARGET_HAS_HDR_DISPLAY := true
+TARGET_USES_DISPLAY_RENDER_INTENTS := true
+TARGET_USE_COLOR_MANAGEMENT := true
+SF_WCG_COMPOSITION_DATA_SPACE := 143261696
+TARGET_USES_QTI_MAPPER_2_0 := true
+TARGET_USES_QTI_MAPPER_EXTENSIONS_1_1 := true
+TARGET_USES_GRALLOC4 := true
diff --git a/config/display-product.mk b/config/display-product.mk
new file mode 100644
index 0000000..a76dded
--- /dev/null
+++ b/config/display-product.mk
@@ -0,0 +1,154 @@
+# Display product definitions
+PRODUCT_PACKAGES += \
+ android.hardware.graphics.composer@2.4-impl \
+ android.hardware.graphics.composer@2.4-service \
+ android.hardware.graphics.mapper@3.0-impl-qti-display \
+ android.hardware.graphics.mapper@4.0-impl-qti-display \
+ vendor.qti.hardware.display.allocator-service \
+ android.hardware.memtrack@1.0-impl \
+ android.hardware.memtrack@1.0-service \
+ gralloc.$(TARGET_BOARD_PLATFORM) \
+ lights.$(TARGET_BOARD_PLATFORM) \
+ hwcomposer.$(TARGET_BOARD_PLATFORM) \
+ memtrack.$(TARGET_BOARD_PLATFORM) \
+ libqdMetaData.vendor \
+ libdisplayconfig.vendor \
+ libdisplayconfig.qti.vendor \
+ vendor.display.config@1.0.vendor \
+ vendor.display.config@1.1.vendor \
+ vendor.display.config@1.2.vendor \
+ vendor.display.config@1.3.vendor \
+ vendor.display.config@1.4.vendor \
+ vendor.display.config@1.5.vendor \
+ vendor.display.config@1.6.vendor \
+ vendor.display.config@1.7.vendor \
+ vendor.display.config@1.8.vendor \
+ vendor.display.config@1.9.vendor \
+ vendor.display.config@1.10.vendor \
+ vendor.display.config@2.0.vendor \
+ vendor.qti.hardware.display.mapper@3.0 \
+ vendor.qti.hardware.display.mapper@4.0.vendor \
+ modetest
+
+#QDCM calibration xml file for 2k panel
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_nt35597_cmd_mode_dsi_truly_panel_with_DSC.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_nt35597_cmd_mode_dsi_truly_panel_with_DSC.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_nt35597_cmd_mode_dsi_truly_panel_with_DSC.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_nt35597_video_mode_dsi_truly_panel_with_DSC.xml
+
+#QDCM calibration xml file for 2k dual dsi panel
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_nt35597_cmd_mode_dsi_truly_panel_with_DSC.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Dual_nt35597_cmd_mode_dsi_truly_panel_without_DSC.xml.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_nt35597_cmd_mode_dsi_truly_panel_with_DSC.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Dual_nt35597_video_mode_dsi_truly_panel_without_DSC.xml.xml
+
+#QDCM calibration xml file for 4k panel
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_Sharp_4k_cmd_mode_dsc_dsi_panel.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Sharp_4k_cmd_mode_dsc_dsi_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_Sharp_4k_cmd_mode_dsc_dsi_panel.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Sharp_4k_video_mode_dsc_dsi_panel.xml
+
+#QDCM calibration xml file for amoled panel
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_sw43404_amoled_cmd_mode_dsi_boe_panel_with_DSC.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_sw43404_amoled_cmd_mode_dsi_boe_panel_with_DSC.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_sw43404_amoled_cmd_mode_dsi_boe_panel_with_DSC.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_sw43404_amoled_video_mode_dsi_boe_panel_with_DSC.xml
+
+#QDCM calibration xml file for primary panel sharp 1080p
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_sharp_1080p_cmd_mode_dsi_panel.xml
+
+#QDCM calibration xml file for secondary panel nt35695b
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_nt35695b_truly_fhd_command_mode_dsi_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_nt35695b_truly_fhd_video_mode_dsi_panel.xml
+
+#QDCM calibration xml file base on Talos panel type hx83112a
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_talos_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_hx83112a_video_mode_dsi_truly_panel.xml
+
+#QDCM calibration xml file base on Talos panel type td4328
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_talos_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_td4328_cmd_mode_dsi_truly_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_talos_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_td4328_video_mode_dsi_truly_panel.xml
+
+#QDCM calibration xml file base on Moorea panel type fhd+
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_sw43404_amoled_boe_fhd+_panel_with_DSC.xml
+
+#QDCM calibration xml file base on td4330
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_trinket_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_td4330_cmd_mode_dsi_truly_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_trinket_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_td4330_video_mode_dsi_truly_panel.xml
+
+#QDCM calibration xml file base on Moorea panel type wqhd
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Dual_Sharp_WQHD_cmd_mode_dsi_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Dual_Sharp_wqhd_video_mode_dsi_panel.xml
+
+#QDCM calibration xml file base on nt36672
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_trinket_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_nt36672_truly_fhd_video_mode_dsi_panel.xml
+
+#QDCM calibration xml file base on Rennell FHD+ visionox panel
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_rm69299_amoled_fhd+_video_mode_dsi_visionox_panel.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_rm69299_amoled_fhd+_video_mode_dsi_visionox_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_rm69299_amoled_fhd+_video_mode_dsi_visionox_panel.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_rm69299_amoled_fhd+_cmd_mode_dsi_visionox_panel.xml
+#QDCM calibration xml file for sharp 120hz panel etc
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_sharp_1080p_120hz_dual_dsi_cmd_mode_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Dual_s6e3ha3_amoled_cmd_mode_dsi_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Dual_nt36850_cmd_mode_dsi_truly_panel_without_DSC.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_nt36672c_fhd_plus_video_mode_dsi_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_rm69298_amoled_fhd+_video_mode_dsi_truly_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_rm69298_amoled_fhd+_cmd_mode_dsi_truly_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Sharp_2k_cmd_mode_qsync_dsi_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Sharp_2k_video_mode_qsync_dsi_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Sharp_fhd_video_mode_qsync_dsi_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Sharp_fhd_cmd_mode_qsync_dsi_panel.xml
+
+
+PRODUCT_PROPERTY_OVERRIDES += \
+ persist.demo.hdmirotationlock=false \
+ persist.sys.sf.color_saturation=1.0 \
+ debug.sf.hw=0 \
+ debug.egl.hw=0 \
+ debug.mdpcomp.logs=0 \
+ vendor.gralloc.disable_ubwc=0 \
+ vendor.display.disable_scaler=0 \
+ vendor.display.disable_inline_rotator=1 \
+ vendor.display.disable_decimation=1 \
+ vendor.display.enable_null_display=0 \
+ vendor.display.disable_excl_rect=0 \
+ vendor.display.comp_mask=0 \
+ vendor.display.enable_default_color_mode=1 \
+ vendor.display.enable_optimize_refresh=1 \
+ vendor.display.disable_ui_3d_tonemap=1
+
+#Set WCG properties
+ifeq ($(TARGET_BOARD_PLATFORM), sm8150)
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.has_wide_color_display=true
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.has_HDR_display=true
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.use_color_management=true
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.wcg_composition_dataspace=143261696
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.protected_contents=true
+endif
+
+PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.surface_flinger.force_hwc_copy_for_virtual_displays=true
+
+ifeq ($(TARGET_BOARD_PLATFORM),$(TRINKET))
+PRODUCT_PROPERTY_OVERRIDES += vendor.display.disable_excl_rect_partial_fb=1
+endif
+
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+# Recovery is enabled, logging is enabled
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.display.disable_hw_recovery_dump=0
+else
+# Recovery is enabled, logging is disabled
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.display.disable_hw_recovery_dump=1
+endif
+
+# Properties using default value:
+# vendor.display.disable_hw_recovery=0
+
+# This matrix should be in column major order, per SurfaceFlinger requirement
+# 1.0 0.0 0.0
+# 0.0 1.0 0.0
+# 0.0 0.0 1.0
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.display.dataspace_saturation_matrix=1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0
+
+ifneq ($(TARGET_HAS_LOW_RAM),true)
+PRODUCT_PACKAGES += vendor.display.color@1.0.vendor \
+ vendor.display.color@1.1.vendor \
+ vendor.display.color@1.2.vendor \
+ vendor.display.color@1.3.vendor \
+ vendor.display.postproc@1.0.vendor \
+ vendor.display.color@1.0-service \
+ vendor.display.color@1.0-service.rc \
+ ppd
+endif
diff --git a/config/qdcm_calib_data_Sharp_4k_cmd_mode_dsc_dsi_panel.xml b/config/qdcm_calib_data_Sharp_4k_cmd_mode_dsc_dsi_panel.xml
new file mode 100644
index 0000000..73c51fe
--- /dev/null
+++ b/config/qdcm_calib_data_Sharp_4k_cmd_mode_dsc_dsi_panel.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" ?>
+<!--
+Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+-->
+<Calib_Data>
+ <Disp_Modes NumModes="4" DefaultMode="0">
+ <Mode ModeID="0" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="native" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="native">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="1" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="HDR" NumOfFeatures="15" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="hdr" ColorGamut="dcip3" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000D90000000000000000000000000200000000000000000000B201000000000000000000000003000000000000000000008C02000000000000000000000004000000000000000000006503000000000000000000000005000000000000000000003F0400000000000000000000000600000000000000000000190500000000000000000000000700000000000000000000F30500000000000000000000000800000000000000000000CD0600000000000000000000000900000000000000000000A60700000000000000000000000A000000000000000000007F0800000000000000000000000B00000000000000000000580900000000000000000000000C00000000000000000000310A00000000000000000000000D00000000000000000000080B00000000000000000000000E00000000000000000000DF0B00000000000000000000000F00000000000000000000B60C000000000000000000000010000000000000000000008B0D00000000000000000000000000000001000000000000270000002A01000000000000000100000001000000000000FF0000001301000000000000000200000001000000000000D8010000FE00000000000000000300000001000000000000B2020000E8000000000000000004000000010000000000008B030000D40000000000000000050000000100000000000065040000C0000000000000000006000000010000000000003F050000AD00000000000000000700000001000000000000180600009A00000000000000000800000001000000000000F20600008800000000000000000900000001000000000000CB0700007700000000000000000A00000001000000000000A40800006600000000000000000B000000010000000000007D0900005500000000000000000C00000001000000000000550A00004500000000000000000D000000010000000000002D0B00003600000000000000000E00000001000000000000030C00002700000000000000000F00000001000000000000DA0C00001900000000000000001000000001000000000000AF0D00000B000000000000000000000000020000000000004E0000005102000000000000000100000002000000000000270100003A02000000000000000200000002000000000000FF0100002302000000000000000300000002000000000000D90200000E02000000000000000400000002000000000000B2030000F9010000000000000005000000020000000000008B040000E40100000000000000060000000200000000000065050000D0010000000000000007000000020000000000003E060000BD0100000000000000080000000200000000000018070000AB01000000000000000900000002000000000000F10700009901000000000000000A00000002000000000000CA0800008701000000000000000B00000002000000000000A20900007601000000000000000C000000020000000000007A0A00006601000000000000000D00000002000000000000520B00005601000000000000000E00000002000000000000290C00004701000000000000000F00000002000000000000FF0C00003801000000000000001000000002000000000000D40D00002A010000000000000000000000030000000000007700000075030000000000000001000000030000000000004F0100005D03000000000000000200000003000000000000270200004603000000000000000300000003000000000000000300003003000000000000000400000003000000000000DA0300001A03000000000000000500000003000000000000B304000006030000000000000006000000030000000000008C050000F10200000000000000070000000300000000000066060000DE020000000000000008000000030000000000003F070000CA0200000000000000090000000300000000000018080000B802000000000000000A00000003000000000000F1080000A602000000000000000B00000003000000000000C90900009402000000000000000C00000003000000000000A10A00008402000000000000000D00000003000000000000780B00007302000000000000000E000000030000000000004F0C00006302000000000000000F00000003000000000000240D00005402000000000000001000000003000000000000F90D00004502000000000000000000000004000000000000A00000009704000000000000000100000004000000000000780100007E04000000000000000200000004000000000000500200006704000000000000000300000004000000000000290300005004000000000000000400000004000000000000020400003A04000000000000000500000004000000000000DB0400002504000000000000000600000004000000000000B505000010040000000000000007000000040000000000008E060000FC0300000000000000080000000400000000000067070000E80300000000000000090000000400000000000040080000D503000000000000000A0000000400000000000018090000C203000000000000000B00000004000000000000F0090000B003000000000000000C00000004000000000000C80A00009F03000000000000000D000000040000000000009F0B00008E03000000000000000E00000004000000000000750C00007E03000000000000000F000000040000000000004B0D00006E03000000000000001000000004000000000000200E00005F03000000000000000000000005000000000000CA000000B705000000000000000100000005000000000000A20100009E050000000000000002000000050000000000007A0200008605000000000000000300000005000000000000530300006F050000000000000004000000050000000000002C0400005805000000000000000500000005000000000000040500004205000000000000000600000005000000000000DE0500002D05000000000000000700000005000000000000B706000018050000000000000008000000050000000000008F070000040500000000000000090000000500000000000068080000F004000000000000000A0000000500000000000040090000DD04000000000000000B00000005000000000000180A0000CB04000000000000000C00000005000000000000F00A0000B904000000000000000D00000005000000000000C70B0000A704000000000000000E000000050000000000009D0C00009604000000000000000F00000005000000000000720D00008604000000000000001000000005000000000000470E00007604000000000000000000000006000000000000F4000000D506000000000000000100000006000000000000CC010000BC06000000000000000200000006000000000000A4020000A4060000000000000003000000060000000000007D0300008C060000000000000004000000060000000000005504000075060000000000000005000000060000000000002E0500005E06000000000000000600000006000000000000070600004806000000000000000700000006000000000000E00600003306000000000000000800000006000000000000B90700001E06000000000000000900000006000000000000910800000A06000000000000000A0000000600000000000069090000F705000000000000000B00000006000000000000410A0000E405000000000000000C00000006000000000000180B0000D105000000000000000D00000006000000000000EF0B0000BF05000000000000000E00000006000000000000C50C0000AE05000000000000000F000000060000000000009A0D00009D050000000000000010000000060000000000006F0E00008C0500000000000000000000000700000000000020010000F307000000000000000100000007000000000000F7010000DA07000000000000000200000007000000000000CF020000C107000000000000000300000007000000000000A7030000A807000000000000000400000007000000000000800400009107000000000000000500000007000000000000590500007A070000000000000006000000070000000000003106000063070000000000000007000000070000000000000A0700004D07000000000000000800000007000000000000E20700003807000000000000000900000007000000000000BB0800002307000000000000000A00000007000000000000930900000F07000000000000000B000000070000000000006A0A0000FC06000000000000000C00000007000000000000410B0000E906000000000000000D00000007000000000000180C0000D606000000000000000E00000007000000000000EE0C0000C406000000000000000F00000007000000000000C30D0000B306000000000000001000000007000000000000970E0000A2060000000000000000000000080000000000004B010000110900000000000000010000000800000000000023020000F708000000000000000200000008000000000000FA020000DD08000000000000000300000008000000000000D3030000C408000000000000000400000008000000000000AB040000AC080000000000000005000000080000000000008305000095080000000000000006000000080000000000005C0600007E080000000000000007000000080000000000003407000067080000000000000008000000080000000000000D0800005208000000000000000900000008000000000000E50800003C08000000000000000A00000008000000000000BD0900002808000000000000000B00000008000000000000940A00001408000000000000000C000000080000000000006B0B00000008000000000000000D00000008000000000000410C0000ED07000000000000000E00000008000000000000170D0000DB07000000000000000F00000008000000000000EC0D0000C907000000000000001000000008000000000000C00E0000B707000000000000000000000009000000000000770100002F0A0000000000000001000000090000000000004F020000140A00000000000000020000000900000000000026030000FA09000000000000000300000009000000000000FE030000E109000000000000000400000009000000000000D6040000C809000000000000000500000009000000000000AF050000B0090000000000000006000000090000000000008706000098090000000000000007000000090000000000005F0700008209000000000000000800000009000000000000370800006B090000000000000009000000090000000000000F0900005609000000000000000A00000009000000000000E70900004009000000000000000B00000009000000000000BE0A00002C09000000000000000C00000009000000000000950B00001809000000000000000D000000090000000000006B0C00000409000000000000000E00000009000000000000400D0000F108000000000000000F00000009000000000000150E0000DF08000000000000001000000009000000000000E90E0000CD0800000000000000000000000A000000000000A40100004D0B00000000000000010000000A0000000000007B020000320B00000000000000020000000A00000000000052030000180B00000000000000030000000A0000000000002A040000FE0A00000000000000040000000A00000000000002050000E40A00000000000000050000000A000000000000DA050000CC0A00000000000000060000000A000000000000B2060000B40A00000000000000070000000A0000000000008A0700009C0A00000000000000080000000A00000000000062080000860A00000000000000090000000A0000000000003A0900006F0A000000000000000A0000000A000000000000110A00005A0A000000000000000B0000000A000000000000E80A0000450A000000000000000C0000000A000000000000BF0B0000300A000000000000000D0000000A000000000000950C00001C0A000000000000000E0000000A0000000000006A0D0000090A000000000000000F0000000A0000000000003F0E0000F60900000000000000100000000A000000000000130F0000E30900000000000000000000000B000000000000D00100006D0C00000000000000010000000B000000000000A7020000510C00000000000000020000000B0000000000007E030000360C00000000000000030000000B000000000000560400001C0C00000000000000040000000B0000000000002E050000020C00000000000000050000000B00000000000006060000E90B00000000000000060000000B000000000000DE060000D00B00000000000000070000000B000000000000B5070000B90B00000000000000080000000B0000000000008D080000A10B00000000000000090000000B000000000000650900008A0B000000000000000A0000000B0000000000003C0A0000740B000000000000000B0000000B000000000000130B00005F0B000000000000000C0000000B000000000000E90B00004A0B000000000000000D0000000B000000000000BF0C0000350B000000000000000E0000000B000000000000940D0000210B000000000000000F0000000B000000000000690E00000D0B00000000000000100000000B0000000000003C0F0000FA0A00000000000000000000000C000000000000FD0100008F0D00000000000000010000000C000000000000D3020000720D00000000000000020000000C000000000000AB030000570D00000000000000030000000C000000000000820400003C0D00000000000000040000000C0000000000005A050000210D00000000000000050000000C00000000000031060000080D00000000000000060000000C00000000000009070000EF0C00000000000000070000000C000000000000E1070000D60C00000000000000080000000C000000000000B8080000BE0C00000000000000090000000C00000000000090090000A70C000000000000000A0000000C000000000000670A0000900C000000000000000B0000000C0000000000003E0B00007A0C000000000000000C0000000C000000000000140C0000650C000000000000000D0000000C000000000000E90C0000500C000000000000000E0000000C000000000000BE0D00003B0C000000000000000F0000000C000000000000930E0000270C00000000000000100000000C000000000000660F0000130C00000000000000000000000D00000000000029020000B20E00000000000000010000000D00000000000000030000950E00000000000000020000000D000000000000D7030000790E00000000000000030000000D000000000000AE0400005E0E00000000000000040000000D00000000000085050000430E00000000000000050000000D0000000000005D060000290E00000000000000060000000D000000000000350700000F0E00000000000000070000000D0000000000000C080000F60D00000000000000080000000D000000000000E4080000DE0D00000000000000090000000D000000000000BB090000C60D000000000000000A0000000D000000000000920A0000AF0D000000000000000B0000000D000000000000680B0000980D000000000000000C0000000D0000000000003E0C0000820D000000000000000D0000000D000000000000140D00006C0D000000000000000E0000000D000000000000E90D0000570D000000000000000F0000000D000000000000BD0E0000430D00000000000000100000000D000000000000900F00002F0D00000000000000000000000E00000000000056020000D90F00000200000000010000000E0000000000002C030000BB0F00000000000000020000000E000000000000030400009F0F00000000000000030000000E000000000000DA040000820F00000000000000040000000E000000000000B1050000670F00000000000000050000000E000000000000890600004C0F00000000000000060000000E00000000000060070000320F00000000000000070000000E00000000000037080000190F00000000000000080000000E0000000000000F090000000F00000000000000090000000E000000000000E6090000E80E000000000000000A0000000E000000000000BC0A0000D00E000000000000000B0000000E000000000000930B0000B90E000000000000000C0000000E000000000000690C0000A20E000000000000000D0000000E0000000000003E0D00008C0E000000000000000E0000000E000000000000130E0000760E000000000000000F0000000E000000000000E60E0000610E00000000000000100000000E000000000000B90F00004C0E00000000000000000000000F00000000000082020000FF0F00000500000000010000000F00000000000058030000FF0F00000000000000020000000F0000000000002F040000FF0F00000000000000030000000F00000000000006050000FF0F00000000000000040000000F000000000000DD050000FF0F00000000000000050000000F000000000000B4060000FF0F00000000000000060000000F0000000000008B070000FF0F00000000000000070000000F00000000000062080000FF0F00000000000000080000000F0000000000003A090000FF0F00000000000000090000000F000000000000100A0000FF0F000000000000000A0000000F000000000000E70A0000F40F000000000000000B0000000F000000000000BD0B0000DC0F000000000000000C0000000F000000000000930C0000C50F000000000000000D0000000F000000000000680D0000AE0F000000000000000E0000000F0000000000003C0E0000980F000000000000000F0000000F000000000000100F0000830F00000000000000100000000F000000000000E30F00006D0F000000000000000000000010000000000000AE020000FF0F00000700000000010000001000000000000084030000FF0F0000000000000002000000100000000000005B040000FF0F00000000000000030000001000000000000031050000FF0F00000000000000040000001000000000000008060000FF0F000000000000000500000010000000000000DF060000FF0F000000000000000600000010000000000000B6070000FF0F0000000000000007000000100000000000008D080000FF0F00000000000000080000001000000000000064090000FF0F0000000000000009000000100000000000003B0A0000FF0F000000000000000A00000010000000000000110B0000FF0F000000000000000B00000010000000000000E70B0000FF0F000000000000000C00000010000000000000BD0C0000FF0F000000000000000D00000010000000000000920D0000FF0F000000000000000E00000010000000000000660E0000FF0F000000000000000F00000010000000000000390F0000FF0F000000000000001000000010000000000000FF0F0000FF0F000000000000000000000000000000010000030000000000000010010000000100000000000000010000DC0000000000000003010000000200000000000000010000B501000000000000F80000000003000000000000000100008E02000000000000EF0000000004000000000000000100006803000000000000E70000000005000000000000000100004204000000000000E00000000006000000000000000100001B05000000000000DA000000000700000000000000010000F505000000000000D5000000000800000000000000010000CF06000000000000D1000000000900000000000000010000A807000000000000CD000000000A000000000000000100008108000000000000CA000000000B000000000000000100005A09000000000000C8000000000C00000000000000010000320A000000000000C5000000000D000000000000000100000A0B000000000000C3000000000E00000000000000010000E10B000000000000C0000000000F00000000000000010000B70C000000000000BD0000000010000000000000000100008C0D000000000000BA0000000000000000010000000100002A000000190100000B0100000001000000010000000100000201000003010000FF000000000200000001000000010000DB010000ED000000F4000000000300000001000000010000B4020000D8000000EB0000000004000000010000000100008E030000C4000000E300000000050000000100000001000067040000B0000000DC000000000600000001000000010000410500009D000000D60000000007000000010000000100001A0600008A000000D2000000000800000001000000010000F406000078000000CE000000000900000001000000010000CD07000067000000CA000000000A00000001000000010000A608000056000000C7000000000B000000010000000100007E09000045000000C5000000000C00000001000000010000560A000036000000C2000000000D000000010000000100002E0B000026000000C0000000000E00000001000000010000050C000018000000BD000000000F00000001000000010000DB0C000009000000BB000000001000000001000000010000B00D000000000000B80000000000000000020000000100005100000040020000080100000001000000020000000100002A01000029020000FC0000000002000000020000000100000202000012020000F1000000000300000002000000010000DB020000FD010000E8000000000400000002000000010000B4030000E8010000E00000000005000000020000000100008E040000D4010000D900000000060000000200000001000067050000C0010000D400000000070000000200000001000041060000AD010000CF0000000008000000020000000100001A0700009A010000CB000000000900000002000000010000F307000088010000C8000000000A00000002000000010000CC08000077010000C5000000000B00000002000000010000A409000066010000C3000000000C000000020000000100007C0A000056010000C0000000000D00000002000000010000530B000046010000BE000000000E000000020000000100002A0C000037010000BC000000000F00000002000000010000FF0C000028010000B9000000001000000002000000010000D40D00001A010000B60000000000000000030000000100007A0000006303000006010000000100000003000000010000520100004C030000FA0000000002000000030000000100002A02000035030000EF000000000300000003000000010000030300001F030000E6000000000400000003000000010000DC03000009030000DE000000000500000003000000010000B5040000F5020000D80000000006000000030000000100008F050000E0020000D200000000070000000300000001000068060000CD020000CD00000000080000000300000001000041070000BA020000CA0000000009000000030000000100001A080000A7020000C6000000000A00000003000000010000F208000095020000C4000000000B00000003000000010000CA09000084020000C1000000000C00000003000000010000A20A000073020000BF000000000D00000003000000010000790B000063020000BD000000000E00000003000000010000500C000053020000BB000000000F00000003000000010000250D000044020000B8000000001000000003000000010000FA0D000035020000B5000000000000000004000000010000A300000085040000040100000001000000040000000100007B0100006D040000F80000000002000000040000000100005302000055040000EE0000000003000000040000000100002C0300003F040000E50000000004000000040000000100000504000029040000DD000000000500000004000000010000DE04000013040000D6000000000600000004000000010000B7050000FF030000D100000000070000000400000001000090060000EA030000CD00000000080000000400000001000069070000D7030000C900000000090000000400000001000041080000C4030000C6000000000A000000040000000100001A090000B1030000C3000000000B00000004000000010000F2090000A0030000C1000000000C00000004000000010000C90A00008E030000BF000000000D00000004000000010000A00B00007E030000BD000000000E00000004000000010000760C00006D030000BB000000000F000000040000000100004C0D00005D030000B8000000001000000004000000010000200E00004E030000B5000000000000000005000000010000CD000000A405000003010000000100000005000000010000A50100008C050000F70000000002000000050000000100007D02000074050000ED000000000300000005000000010000550300005D050000E40000000004000000050000000100002E04000046050000DC0000000005000000050000000100000705000030050000D6000000000600000005000000010000E00500001B050000D1000000000700000005000000010000B806000006050000CC00000000080000000500000001000091070000F2040000C90000000009000000050000000100006A080000DF040000C6000000000A0000000500000001000042090000CC040000C3000000000B000000050000000100001A0A0000BA040000C1000000000C00000005000000010000F10A0000A8040000BF000000000D00000005000000010000C80B000096040000BD000000000E000000050000000100009E0C000086040000BB000000000F00000005000000010000730D000075040000B9000000001000000005000000010000480E000066040000B6000000000000000006000000010000F7000000C306000003010000000100000006000000010000CF010000AA060000F7000000000200000006000000010000A702000091060000ED0000000003000000060000000100007F03000079060000E40000000004000000060000000100005804000062060000DC000000000500000006000000010000300500004C060000D60000000006000000060000000100000906000036060000D1000000000700000006000000010000E206000021060000CD000000000800000006000000010000BA0700000D060000C900000000090000000600000001000093080000F9050000C6000000000A000000060000000100006B090000E5050000C4000000000B00000006000000010000420A0000D2050000C2000000000C00000006000000010000190B0000C0050000C0000000000D00000006000000010000F00B0000AE050000BE000000000E00000006000000010000C60C00009D050000BC000000000F000000060000000100009B0D00008C050000BA0000000010000000060000000100006F0E00007C050000B800000000000000000700000001000022010000E007000003010000000100000007000000010000FA010000C7070000F7000000000200000007000000010000D2020000AE070000ED000000000300000007000000010000AA03000095070000E4000000000400000007000000010000820400007E070000DD0000000005000000070000000100005B05000067070000D70000000006000000070000000100003306000051070000D20000000007000000070000000100000C0700003B070000CE000000000800000007000000010000E407000026070000CA000000000900000007000000010000BC08000011070000C8000000000A0000000700000001000094090000FD060000C5000000000B000000070000000100006C0A0000EA060000C3000000000C00000007000000010000420B0000D7060000C2000000000D00000007000000010000190C0000C5060000C0000000000E00000007000000010000EF0C0000B3060000BE000000000F00000007000000010000C40D0000A2060000BC000000001000000007000000010000980E000091060000BA0000000000000000080000000100004E010000FD0800000401000000010000000800000001000025020000E3080000F8000000000200000008000000010000FD020000CA080000EE000000000300000008000000010000D5030000B1080000E5000000000400000008000000010000AD04000099080000DE0000000005000000080000000100008505000082080000D80000000006000000080000000100005E0600006B080000D30000000007000000080000000100003607000055080000CF0000000008000000080000000100000E0800003F080000CC000000000900000008000000010000E60800002A080000C9000000000A00000008000000010000BE09000016080000C7000000000B00000008000000010000950A000002080000C5000000000C000000080000000100006C0B0000EE070000C4000000000D00000008000000010000420C0000DC070000C2000000000E00000008000000010000180D0000C9070000C0000000000F00000008000000010000ED0D0000B7070000BE000000001000000008000000010000C10E0000A6070000BC0000000000000000090000000100007A0100001B0A00000501000000010000000900000001000051020000000A0000F900000000020000000900000001000029030000E6090000EF00000000030000000900000001000000040000CD090000E7000000000400000009000000010000D8040000B4090000E0000000000500000009000000010000B00500009D090000DA0000000006000000090000000100008906000085090000D5000000000700000009000000010000610700006F090000D10000000008000000090000000100003908000058090000CE0000000009000000090000000100001109000043090000CB000000000A00000009000000010000E80900002E090000C9000000000B00000009000000010000BF0A00001A090000C7000000000C00000009000000010000960B000006090000C6000000000D000000090000000100006C0C0000F2080000C4000000000E00000009000000010000410D0000DF080000C3000000000F00000009000000010000160E0000CD080000C1000000001000000009000000010000EA0E0000BB080000BF00000000000000000A000000010000A6010000390B00000601000000010000000A0000000100007D0200001E0B0000FB00000000020000000A00000001000054030000030B0000F100000000030000000A0000000100002C040000EA0A0000E900000000040000000A00000001000004050000D10A0000E200000000050000000A000000010000DC050000B80A0000DC00000000060000000A000000010000B4060000A00A0000D700000000070000000A0000000100008C070000890A0000D300000000080000000A00000001000064080000720A0000D000000000090000000A0000000100003B0900005C0A0000CE000000000A0000000A000000010000130A0000470A0000CC000000000B0000000A000000010000EA0A0000320A0000CA000000000C0000000A000000010000C00B00001E0A0000C9000000000D0000000A000000010000960C00000A0A0000C7000000000E0000000A0000000100006B0D0000F6090000C6000000000F0000000A000000010000400E0000E4090000C400000000100000000A000000010000130F0000D1090000C200000000000000000B000000010000D3010000580C00000801000000010000000B000000010000A90200003D0C0000FD00000000020000000B00000001000080030000220C0000F300000000030000000B00000001000058040000070C0000EB00000000040000000B00000001000030050000EE0B0000E400000000050000000B00000001000007060000D50B0000DE00000000060000000B000000010000DF060000BD0B0000D900000000070000000B000000010000B7070000A50B0000D600000000080000000B0000000100008F0800008E0B0000D300000000090000000B00000001000066090000770B0000D0000000000A0000000B0000000100003D0A0000610B0000CE000000000B0000000B000000010000140B00004C0B0000CD000000000C0000000B000000010000EA0B0000370B0000CC000000000D0000000B000000010000C00C0000220B0000CA000000000E0000000B000000010000950D00000F0B0000C9000000000F0000000B000000010000690E0000FB0A0000C700000000100000000B0000000100003D0F0000E80A0000C500000000000000000C000000010000FF010000790D00000A01000000010000000C000000010000D60200005D0D0000FF00000000020000000C000000010000AD030000420D0000F500000000030000000C00000001000084040000270D0000ED00000000040000000C0000000100005B0500000D0D0000E600000000050000000C00000001000033060000F30C0000E000000000060000000C0000000100000B070000DA0C0000DC00000000070000000C000000010000E2070000C20C0000D800000000080000000C000000010000BA080000AB0C0000D500000000090000000C00000001000091090000930C0000D3000000000A0000000C000000010000680A00007D0C0000D1000000000B0000000C0000000100003F0B0000670C0000D0000000000C0000000C000000010000150C0000520C0000CF000000000D0000000C000000010000EA0C00003D0C0000CE000000000E0000000C000000010000BF0D0000280C0000CC000000000F0000000C000000010000930E0000140C0000CB00000000100000000C000000010000660F0000010C0000C900000000000000000D0000000100002C0200009C0E00000C01000000010000000D00000001000002030000800E00000101000000020000000D000000010000D9030000640E0000F700000000030000000D000000010000B0040000480E0000EF00000000040000000D000000010000870500002E0E0000E800000000050000000D0000000100005F060000140E0000E300000000060000000D00000001000036070000FB0D0000DE00000000070000000D0000000100000E080000E20D0000DB00000000080000000D000000010000E5080000CA0D0000D800000000090000000D000000010000BC090000B20D0000D6000000000A0000000D000000010000930A00009B0D0000D4000000000B0000000D000000010000690B0000850D0000D3000000000C0000000D0000000100003F0C00006F0D0000D2000000000D0000000D000000010000140D0000590D0000D1000000000E0000000D000000010000E90D0000440D0000D0000000000F0000000D000000010000BD0E0000300D0000CF00000000100000000D000000010000900F00001C0D0000CD00000000000000000E00000001000058020000C20F00000E01000000010000000E0000000100002E030000A50F00000301000000020000000E00000001000005040000890F0000F900000000030000000E000000010000DC0400006D0F0000F100000000040000000E000000010000B3050000520F0000EB00000000050000000E0000000100008A060000370F0000E500000000060000000E000000010000610700001D0F0000E100000000070000000E00000001000039080000040F0000DE00000000080000000E00000001000010090000EB0E0000DB00000000090000000E000000010000E7090000D30E0000D9000000000A0000000E000000010000BD0A0000BC0E0000D8000000000B0000000E000000010000940B0000A50E0000D6000000000C0000000E000000010000690C00008E0E0000D5000000000D0000000E0000000100003F0D0000780E0000D4000000000E0000000E000000010000130E0000630E0000D3000000000F0000000E000000010000E70E00004E0E0000D200000000100000000E000000010000BA0F00003A0E0000D100000000000000000F00000001000084020000FF0F00001001000000010000000F0000000100005A030000FF0F00000501000000020000000F00000001000031040000FF0F0000FB00000000030000000F00000001000007050000FF0F0000F400000000040000000F000000010000DE050000FF0F0000ED00000000050000000F000000010000B6060000FF0F0000E800000000060000000F0000000100008D070000FF0F0000E400000000070000000F00000001000064080000FF0F0000E000000000080000000F0000000100003B090000FF0F0000DE00000000090000000F000000010000120A0000F80F0000DC000000000A0000000F000000010000E80A0000E00F0000DB000000000B0000000F000000010000BE0B0000C80F0000DA000000000C0000000F000000010000940C0000B10F0000D9000000000D0000000F000000010000690D00009B0F0000D8000000000E0000000F0000000100003D0E0000850F0000D7000000000F0000000F000000010000110F00006F0F0000D600000000100000000F000000010000E30F00005A0F0000D4000000000000000010000000010000B0020000FF0F00001201000000010000001000000001000086030000FF0F0000070100000002000000100000000100005C040000FF0F0000FE00000000030000001000000001000033050000FF0F0000F60000000004000000100000000100000A060000FF0F0000EF000000000500000010000000010000E1060000FF0F0000EA000000000600000010000000010000B8070000FF0F0000E60000000007000000100000000100008F080000FF0F0000E300000000080000001000000001000065090000FF0F0000E10000000009000000100000000100003C0A0000FF0F0000DF000000000A00000010000000010000120B0000FF0F0000DE000000000B00000010000000010000E80B0000FF0F0000DD000000000C00000010000000010000BD0C0000FF0F0000DC000000000D00000010000000010000920D0000FF0F0000DB000000000E00000010000000010000660E0000FF0F0000DA000000000F000000100000000100003A0F0000FF0F0000D9000000001000000010000000010000FF0F0000FF0F0000D800000000000000000000000002000005000000000000001E020000000100000000000000020000DE0000000000000011020000000200000000000000020000B701000000000000060200000003000000000000000200009002000000000000FD0100000004000000000000000200006903000000000000F40100000005000000000000000200004304000000000000ED0100000006000000000000000200001D05000000000000E7010000000700000000000000020000F605000000000000E2010000000800000000000000020000D006000000000000DE010000000900000000000000020000A907000000000000DA010000000A000000000000000200008208000000000000D7010000000B000000000000000200005A09000000000000D4010000000C00000000000000020000320A000000000000D1010000000D000000000000000200000A0B000000000000CE010000000E00000000000000020000E00B000000000000CC010000000F00000000000000020000B60C000000000000C90100000010000000000000000200008C0D000000000000C50100000000000000010000000200002C0000000E0100001A02000000010000000100000002000004010000F70000000D020000000200000001000000020000DD010000E100000002020000000300000001000000020000B6020000CC000000F90100000004000000010000000200008F030000B8000000F001000000050000000100000002000068040000A4000000E90100000006000000010000000200004205000091000000E30100000007000000010000000200001B0600007E000000DE010000000800000001000000020000F40600006C000000DA010000000900000001000000020000CE0700005B000000D7010000000A00000001000000020000A60800004A000000D3010000000B000000010000000200007F0900003A000000D1010000000C00000001000000020000560A00002A000000CE010000000D000000010000000200002E0B00001B000000CB010000000E00000001000000020000040C00000C000000C9010000000F00000001000000020000DA0C000000000000C6010000001000000001000000020000AF0D000000000000C30100000000000000020000000200005300000033020000160200000001000000020000000200002B0100001C0200000A0200000002000000020000000200000402000006020000FF010000000300000002000000020000DD020000F1010000F5010000000400000002000000020000B6030000DC010000ED0100000005000000020000000200008F040000C7010000E601000000060000000200000002000068050000B4010000E101000000070000000200000002000041060000A1010000DC0100000008000000020000000200001A0700008E010000D8010000000900000002000000020000F30700007C010000D4010000000A00000002000000020000CC0800006B010000D1010000000B00000002000000020000A40900005A010000CE010000000C000000020000000200007C0A00004A010000CC010000000D00000002000000020000530B00003A010000C9010000000E00000002000000020000290C00002B010000C7010000000F00000002000000020000FF0C00001D010000C4010000001000000002000000020000D40D00000E010000C10100000000000000030000000200007B0000005703000013020000000100000003000000020000530100003F030000070200000002000000030000000200002C02000028030000FC0100000003000000030000000200000403000012030000F3010000000400000003000000020000DD030000FD020000EB010000000500000003000000020000B6040000E8020000E40100000006000000030000000200008F050000D4020000DF01000000070000000300000002000068060000C0020000DA01000000080000000300000002000041070000AD020000D60100000009000000030000000200001A0800009B020000D2010000000A00000003000000020000F208000089020000CF010000000B00000003000000020000CA09000078020000CD010000000C00000003000000020000A20A000067020000CA010000000D00000003000000020000790B000057020000C8010000000E000000030000000200004F0C000047020000C6010000000F00000003000000020000250D000038020000C3010000001000000003000000020000F90D000029020000C0010000000000000004000000020000A400000077040000110200000001000000040000000200007C0100005F040000050200000002000000040000000200005402000048040000FA0100000003000000040000000200002D03000032040000F1010000000400000004000000020000060400001C040000E9010000000500000004000000020000DF04000006040000E3010000000600000004000000020000B8050000F2030000DD01000000070000000400000002000090060000DE030000D901000000080000000400000002000069070000CA030000D501000000090000000400000002000042080000B7030000D1010000000A000000040000000200001A090000A5030000CF010000000B00000004000000020000F209000093030000CC010000000C00000004000000020000C90A000082030000CA010000000D00000004000000020000A00B000071030000C8010000000E00000004000000020000760C000061030000C5010000000F000000040000000200004B0D000052030000C3010000001000000004000000020000200E000042030000C0010000000000000005000000020000CE0000009605000010020000000100000005000000020000A60100007E050000040200000002000000050000000200007E02000066050000F9010000000300000005000000020000560300004F050000F00100000004000000050000000200002F04000039050000E90100000005000000050000000200000805000023050000E2010000000600000005000000020000E00500000E050000DD010000000700000005000000020000B9060000F9040000D801000000080000000500000002000092070000E5040000D40100000009000000050000000200006A080000D2040000D1010000000A0000000500000002000042090000BF040000CE010000000B000000050000000200001A0A0000AD040000CC010000000C00000005000000020000F10A00009B040000CA010000000D00000005000000020000C70B00008A040000C8010000000E000000050000000200009D0C000079040000C6010000000F00000005000000020000730D000069040000C3010000001000000005000000020000470E000059040000C0010000000000000006000000020000F9000000B406000010020000000100000006000000020000D00100009B06000003020000000200000006000000020000A802000083060000F9010000000300000006000000020000800300006C060000F00100000004000000060000000200005904000055060000E8010000000500000006000000020000310500003E060000E20100000006000000060000000200000A06000029060000DD010000000700000006000000020000E206000014060000D8010000000800000006000000020000BB070000FF050000D501000000090000000600000002000093080000EB050000D2010000000A000000060000000200006B090000D8050000CF010000000B00000006000000020000420A0000C5050000CD010000000C00000006000000020000190B0000B3050000CB010000000D00000006000000020000F00B0000A1050000C9010000000E00000006000000020000C50C000090050000C7010000000F000000060000000200009A0D000080050000C40100000010000000060000000200006F0E00006F050000C201000000000000000700000002000024010000D10700000F020000000100000007000000020000FB010000B807000004020000000200000007000000020000D30200009F070000F9010000000300000007000000020000AB03000087070000F00100000004000000070000000200008304000070070000E90100000005000000070000000200005B05000059070000E30100000006000000070000000200003406000043070000DD0100000007000000070000000200000C0700002D070000D9010000000800000007000000020000E407000018070000D5010000000900000007000000020000BC08000004070000D2010000000A0000000700000002000094090000F0060000D0010000000B000000070000000200006B0A0000DD060000CE010000000C00000007000000020000420B0000CA060000CC010000000D00000007000000020000180C0000B8060000CA010000000E00000007000000020000EE0C0000A6060000C8010000000F00000007000000020000C30D000095060000C6010000001000000007000000020000970E000084060000C30100000000000000080000000200004F010000EE0800001002000000010000000800000002000026020000D408000004020000000200000008000000020000FE020000BB080000FA010000000300000008000000020000D6030000A2080000F1010000000400000008000000020000AE0400008B080000EA0100000005000000080000000200008605000073080000E30100000006000000080000000200005E0600005D080000DE0100000007000000080000000200003607000047080000DA0100000008000000080000000200000F08000031080000D7010000000900000008000000020000E60800001C080000D4010000000A00000008000000020000BE09000008080000D2010000000B00000008000000020000950A0000F4070000D0010000000C000000080000000200006C0B0000E1070000CE010000000D00000008000000020000420C0000CE070000CC010000000E00000008000000020000170D0000BC070000CA010000000F00000008000000020000EC0D0000AA070000C8010000001000000008000000020000C00E000099070000C60100000000000000090000000200007B0100000B0A00001102000000010000000900000002000052020000F10900000502000000020000000900000002000029030000D7090000FB01000000030000000900000002000001040000BE090000F2010000000400000009000000020000D9040000A6090000EB010000000500000009000000020000B10500008E090000E50100000006000000090000000200008906000077090000E00100000007000000090000000200006107000060090000DC010000000800000009000000020000390800004A090000D80100000009000000090000000200001109000035090000D6010000000A00000009000000020000E809000020090000D4010000000B00000009000000020000BF0A00000C090000D2010000000C00000009000000020000960B0000F8080000D0010000000D000000090000000200006B0C0000E5080000CE010000000E00000009000000020000410D0000D2080000CD010000000F00000009000000020000150E0000C0080000CB010000001000000009000000020000E90E0000AE080000C801000000000000000A000000020000A7010000290B00001202000000010000000A0000000200007E0200000E0B00000602000000020000000A00000002000055030000F40A0000FC01000000030000000A0000000200002D040000DA0A0000F401000000040000000A00000002000004050000C10A0000EC01000000050000000A000000020000DC050000A90A0000E701000000060000000A000000020000B4060000910A0000E201000000070000000A0000000200008C0700007A0A0000DE01000000080000000A00000002000064080000640A0000DA01000000090000000A0000000200003B0900004E0A0000D8010000000A0000000A000000020000120A0000390A0000D6010000000B0000000A000000020000E90A0000240A0000D4010000000C0000000A000000020000C00B0000100A0000D2010000000D0000000A000000020000950C0000FC090000D1010000000E0000000A0000000200006A0D0000E9090000CF010000000F0000000A0000000200003F0E0000D6090000CD01000000100000000A000000020000120F0000C4090000CB01000000000000000B000000020000D4010000480C00001302000000010000000B000000020000AA0200002C0C00000802000000020000000B00000002000081030000120C0000FE01000000030000000B00000002000059040000F70B0000F501000000040000000B00000002000030050000DE0B0000EE01000000050000000B00000002000008060000C50B0000E801000000060000000B000000020000E0060000AD0B0000E401000000070000000B000000020000B7070000960B0000E001000000080000000B0000000200008F0800007F0B0000DD01000000090000000B00000002000066090000680B0000DA010000000A0000000B0000000200003D0A0000530B0000D8010000000B0000000B000000020000140B00003D0B0000D7010000000C0000000B000000020000EA0B0000290B0000D5010000000D0000000B000000020000BF0C0000140B0000D4010000000E0000000B000000020000940D0000010B0000D2010000000F0000000B000000020000690E0000ED0A0000D101000000100000000B0000000200003C0F0000DB0A0000CE01000000000000000C00000002000000020000680D00001502000000010000000C000000020000D70200004C0D00000902000000020000000C000000020000AD030000310D00000002000000030000000C00000002000084040000170D0000F701000000040000000C0000000200005C050000FD0C0000F001000000050000000C00000002000033060000E30C0000EB01000000060000000C0000000200000B070000CB0C0000E601000000070000000C000000020000E2070000B30C0000E201000000080000000C000000020000BA0800009B0C0000DF01000000090000000C00000002000091090000840C0000DD010000000A0000000C000000020000680A00006E0C0000DB010000000B0000000C0000000200003E0B0000580C0000D9010000000C0000000C000000020000140C0000430C0000D8010000000D0000000C000000020000EA0C00002E0C0000D7010000000E0000000C000000020000BE0D00001A0C0000D5010000000F0000000C000000020000920E0000070C0000D401000000100000000C000000020000660F0000F30B0000D201000000000000000D0000000200002C0200008B0E00001602000000010000000D000000020000030300006F0E00000B02000000020000000D000000020000D9030000530E00000102000000030000000D000000020000B0040000380E0000F901000000040000000D000000020000880500001D0E0000F201000000050000000D0000000200005F060000040E0000ED01000000060000000D00000002000036070000EA0D0000E801000000070000000D0000000200000E080000D20D0000E501000000080000000D000000020000E5080000BA0D0000E201000000090000000D000000020000BC090000A30D0000E0010000000A0000000D000000020000930A00008C0D0000DE010000000B0000000D000000020000690B0000760D0000DC010000000C0000000D0000000200003F0C0000600D0000DB010000000D0000000D000000020000140D00004B0D0000DA010000000E0000000D000000020000E80D0000360D0000D9010000000F0000000D000000020000BC0E0000220D0000D701000000100000000D0000000200008F0F00000E0D0000D501000000000000000E00000002000059020000B00F00001802000000010000000E0000000200002F030000930F00000D02000000020000000E00000002000005040000770F00000302000000030000000E000000020000DC0400005C0F0000FB01000000040000000E000000020000B3050000410F0000F501000000050000000E0000000200008A060000260F0000EF01000000060000000E000000020000620700000D0F0000EB01000000070000000E00000002000039080000F40E0000E701000000080000000E00000002000010090000DB0E0000E401000000090000000E000000020000E7090000C30E0000E2010000000A0000000E000000020000BD0A0000AC0E0000E1010000000B0000000E000000020000930B0000950E0000DF010000000C0000000E000000020000690C00007F0E0000DE010000000D0000000E0000000200003E0D00006A0E0000DD010000000E0000000E000000020000120E0000540E0000DC010000000F0000000E000000020000E60E0000400E0000DB01000000100000000E000000020000B90F00002B0E0000D901000000000000000F00000002000085020000FF0F00001A02000000010000000F0000000200005B030000FF0F00000F02000000020000000F00000002000031040000FF0F00000502000000030000000F00000002000008050000FF0F0000FD01000000040000000F000000020000DF050000FF0F0000F701000000050000000F000000020000B6060000FF0F0000F101000000060000000F0000000200008D070000FF0F0000ED01000000070000000F00000002000064080000FF0F0000EA01000000080000000F0000000200003B090000FF0F0000E701000000090000000F000000020000110A0000E80F0000E5010000000A0000000F000000020000E80A0000D00F0000E4010000000B0000000F000000020000BE0B0000B80F0000E2010000000C0000000F000000020000930C0000A20F0000E1010000000D0000000F000000020000680D00008C0F0000E0010000000E0000000F0000000200003C0E0000760F0000DF010000000F0000000F000000020000100F0000610F0000DE01000000100000000F000000020000E20F00004C0F0000DC010000000000000010000000020000B1020000FF0F00001B02000000010000001000000002000087030000FF0F0000100200000002000000100000000200005D040000FF0F00000702000000030000001000000002000033050000FF0F0000FF0100000004000000100000000200000A060000FF0F0000F9010000000500000010000000020000E1060000FF0F0000F3010000000600000010000000020000B8070000FF0F0000EF0100000007000000100000000200008E080000FF0F0000EC01000000080000001000000002000065090000FF0F0000E90100000009000000100000000200003C0A0000FF0F0000E8010000000A00000010000000020000120B0000FF0F0000E6010000000B00000010000000020000E80B0000FF0F0000E5010000000C00000010000000020000BD0C0000FF0F0000E4010000000D00000010000000020000920D0000FF0F0000E3010000000E00000010000000020000660E0000FF0F0000E3010000000F00000010000000020000390F0000FF0F0000E1010000001000000010000000020000FF0F0000FF0F0000E001000000000000000000000003000006000000000000002C030000000100000000000000030000DF000000000000001F030000000200000000000000030000B7010000000000001303000000030000000000000003000090020000000000000A0300000004000000000000000300006A03000000000000010300000005000000000000000300004304000000000000FA0200000006000000000000000300001D05000000000000F3020000000700000000000000030000F605000000000000EE020000000800000000000000030000CF06000000000000EA020000000900000000000000030000A807000000000000E6020000000A000000000000000300008108000000000000E2020000000B000000000000000300005909000000000000DF020000000C00000000000000030000310A000000000000DC020000000D00000000000000030000080B000000000000D9020000000E00000000000000030000DF0B000000000000D6020000000F00000000000000030000B50C000000000000D30200000010000000000000000300008A0D000000000000CF0200000000000000010000000300002D000000050100002703000000010000000100000003000005010000EF0000001A030000000200000001000000030000DD010000D90000000F030000000300000001000000030000B6020000C4000000050300000004000000010000000300008F030000B0000000FD020000000500000001000000030000690400009C000000F60200000006000000010000000300004205000089000000EF0200000007000000010000000300001B06000077000000EA020000000800000001000000030000F406000065000000E6020000000900000001000000030000CD07000053000000E2020000000A00000001000000030000A608000043000000DF020000000B000000010000000300007E09000032000000DC020000000C00000001000000030000550A000023000000D9020000000D000000010000000300002D0B000014000000D6020000000E00000001000000030000030C000005000000D3020000000F00000001000000030000D90C000000000000D0020000001000000001000000030000AE0D000000000000CD020000000000000002000000030000540000002B020000230300000001000000020000000300002C010000140200001603000000020000000200000003000004020000FE0100000B030000000300000002000000030000DD020000E801000002030000000400000002000000030000B6030000D3010000F90200000005000000020000000300008F040000BF010000F202000000060000000200000003000068050000AC010000EC0200000007000000020000000300004106000099010000E70200000008000000020000000300001A07000086010000E3020000000900000002000000030000F307000074010000DF020000000A00000002000000030000CB08000063010000DC020000000B00000002000000030000A309000053010000D9020000000C000000020000000300007B0A000042010000D6020000000D00000002000000030000520B000033010000D4020000000E00000002000000030000280C000024010000D1020000000F00000002000000030000FD0C000015010000CE020000001000000002000000030000D20D000007010000CB0200000000000000030000000300007C0000004D030000200300000001000000030000000300005401000036030000130300000002000000030000000300002C0200001F030000080300000003000000030000000300000503000009030000FF020000000400000003000000030000DD030000F4020000F7020000000500000003000000030000B6040000DF020000F00200000006000000030000000300008F050000CB020000EA02000000070000000300000003000068060000B8020000E502000000080000000300000003000041070000A5020000E10200000009000000030000000300001908000093020000DD020000000A00000003000000030000F208000081020000DA020000000B00000003000000030000CA09000070020000D7020000000C00000003000000030000A10A00005F020000D5020000000D00000003000000030000780B00004F020000D2020000000E000000030000000300004E0C00003F020000D0020000000F00000003000000030000230D000030020000CD020000001000000003000000030000F80D000022020000CA020000000000000004000000030000A50000006E0400001E0300000001000000040000000300007D0100005604000011030000000200000004000000030000550200003F040000060300000003000000040000000300002D03000028040000FD0200000004000000040000000300000604000013040000F5020000000500000004000000030000DE040000FD030000EE020000000600000004000000030000B7050000E9030000E802000000070000000400000003000090060000D5030000E402000000080000000400000003000069070000C2030000DF02000000090000000400000003000041080000AF030000DC020000000A00000004000000030000190900009D030000D9020000000B00000004000000030000F10900008B030000D6020000000C00000004000000030000C80A00007A030000D4020000000D000000040000000300009E0B000069030000D2020000000E00000004000000030000740C000059030000CF020000000F000000040000000300004A0D00004A030000CC0200000010000000040000000300001E0E00003A030000C9020000000000000005000000030000CF0000008D0500001C030000000100000005000000030000A601000074050000100300000002000000050000000300007E0200005D050000050300000003000000050000000300005603000046050000FC0200000004000000050000000300002F0400002F050000F4020000000500000005000000030000070500001A050000ED020000000600000005000000030000E005000005050000E8020000000700000005000000030000B9060000F0040000E302000000080000000500000003000091070000DC040000DF02000000090000000500000003000069080000C9040000DC020000000A0000000500000003000041090000B6040000D9020000000B00000005000000030000190A0000A4040000D6020000000C00000005000000030000F00A000093040000D4020000000D00000005000000030000C60B000082040000D2020000000E000000050000000300009C0C000071040000CF020000000F00000005000000030000710D000061040000CD020000001000000005000000030000450E000051040000CA020000000000000006000000030000F9000000AA0600001B030000000100000006000000030000D1010000910600000F030000000200000006000000030000A802000079060000040300000003000000060000000300008003000062060000FB020000000400000006000000030000590400004B060000F30200000005000000060000000300003105000035060000ED020000000600000006000000030000090600001F060000E7020000000700000006000000030000E20600000A060000E3020000000800000006000000030000BA070000F6050000DF02000000090000000600000003000092080000E2050000DC020000000A000000060000000300006A090000CF050000D9020000000B00000006000000030000410A0000BC050000D7020000000C00000006000000030000180B0000AA050000D4020000000D00000006000000030000EE0B000099050000D2020000000E00000006000000030000C40C000088050000D0020000000F00000006000000030000990D000077050000CD0200000010000000060000000300006D0E000067050000CB02000000000000000700000003000024010000C70700001B030000000100000007000000030000FB010000AD0700000F030000000200000007000000030000D30200009507000004030000000300000007000000030000AB0300007D070000FB0200000004000000070000000300008304000065070000F40200000005000000070000000300005B0500004F070000ED0200000006000000070000000300003306000039070000E80200000007000000070000000300000C07000023070000E3020000000800000007000000030000E40700000F070000DF020000000900000007000000030000BC080000FA060000DC020000000A0000000700000003000093090000E7060000DA020000000B000000070000000300006A0A0000D4060000D8020000000C00000007000000030000410B0000C1060000D5020000000D00000007000000030000170C0000AF060000D3020000000E00000007000000030000ED0C00009D060000D1020000000F00000007000000030000C10D00008C060000CF020000001000000007000000030000950E00007C060000CC02000000000000000800000003000050010000E30800001B03000000010000000800000003000027020000C90800000F030000000200000008000000030000FE020000B008000005030000000300000008000000030000D603000098080000FC020000000400000008000000030000AE04000080080000F40200000005000000080000000300008605000069080000EE0200000006000000080000000300005E06000052080000E8020000000700000008000000030000360700003C080000E40200000008000000080000000300000E08000027080000E1020000000900000008000000030000E508000012080000DE020000000A00000008000000030000BD090000FE070000DB020000000B00000008000000030000940A0000EB070000D9020000000C000000080000000300006A0B0000D7070000D7020000000D00000008000000030000400C0000C5070000D5020000000E00000008000000030000160D0000B3070000D3020000000F00000008000000030000EA0D0000A1070000D1020000001000000008000000030000BE0E000090070000CE0200000000000000090000000300007B010000FF0900001B03000000010000000900000003000052020000E50900001003000000020000000900000003000029030000CC0900000503000000030000000900000003000001040000B3090000FC020000000400000009000000030000D90400009A090000F5020000000500000009000000030000B105000083090000EF020000000600000009000000030000890600006C090000EA0200000007000000090000000300006007000055090000E50200000008000000090000000300003808000040090000E2020000000900000009000000030000100900002A090000DF020000000A00000009000000030000E709000016090000DD020000000B00000009000000030000BE0A000002090000DB020000000C00000009000000030000940B0000EE080000D9020000000D000000090000000300006A0C0000DB080000D7020000000E000000090000000300003F0D0000C9080000D5020000000F00000009000000030000130E0000B7080000D3020000001000000009000000030000E70E0000A5080000D102000000000000000A000000030000A70100001D0B00001C03000000010000000A0000000300007E020000020B00001003000000020000000A00000003000055030000E80A00000603000000030000000A0000000300002C040000CE0A0000FE02000000040000000A00000003000004050000B60A0000F602000000050000000A000000030000DC0500009E0A0000F002000000060000000A000000030000B4060000860A0000EB02000000070000000A0000000300008B0700006F0A0000E702000000080000000A00000003000063080000590A0000E402000000090000000A0000000300003A090000430A0000E1020000000A0000000A000000030000110A00002E0A0000DF020000000B0000000A000000030000E80A00001A0A0000DD020000000C0000000A000000030000BE0B0000060A0000DB020000000D0000000A000000030000940C0000F2090000DA020000000E0000000A000000030000690D0000DF090000D8020000000F0000000A0000000300003D0E0000CD090000D602000000100000000A000000030000100F0000BB090000D302000000000000000B000000030000D40100003B0C00001D03000000010000000B000000030000AA020000200C00001203000000020000000B00000003000081030000050C00000803000000030000000B00000003000058040000EB0B0000FF02000000040000000B00000003000030050000D20B0000F802000000050000000B00000003000007060000BA0B0000F202000000060000000B000000030000DF060000A20B0000ED02000000070000000B000000030000B60700008A0B0000E902000000080000000B0000000300008E080000740B0000E602000000090000000B000000030000650900005D0B0000E3020000000A0000000B0000000300003C0A0000480B0000E1020000000B0000000B000000030000120B0000330B0000DF020000000C0000000B000000030000E80B00001E0B0000DE020000000D0000000B000000030000BE0C00000A0B0000DC020000000E0000000B000000030000930D0000F70A0000DB020000000F0000000B000000030000670E0000E40A0000D902000000100000000B0000000300003A0F0000D10A0000D602000000000000000C000000030000000200005B0D00001F03000000010000000C000000030000D60200003F0D00001303000000020000000C000000030000AD030000240D00000903000000030000000C000000030000840400000A0D00000103000000040000000C0000000300005B050000F00C0000FA02000000050000000C00000003000033060000D70C0000F402000000060000000C0000000300000A070000BF0C0000EF02000000070000000C000000030000E2070000A70C0000EB02000000080000000C000000030000B9080000900C0000E802000000090000000C00000003000090090000790C0000E6020000000A0000000C000000030000670A0000630C0000E4020000000B0000000C0000000300003D0B00004D0C0000E2020000000C0000000C000000030000130C0000380C0000E0020000000D0000000C000000030000E80C0000240C0000DF020000000E0000000C000000030000BD0D0000100C0000DD020000000F0000000C000000030000900E0000FC0B0000DC02000000100000000C000000030000640F0000E90B0000DA02000000000000000D0000000300002C0200007D0E00002003000000010000000D00000003000002030000610E00001403000000020000000D000000030000D9030000460E00000B03000000030000000D000000030000B00400002B0E00000203000000040000000D00000003000087050000110E0000FC02000000050000000D0000000300005E060000F70D0000F602000000060000000D00000003000035070000DE0D0000F102000000070000000D0000000300000D080000C60D0000ED02000000080000000D000000030000E4080000AE0D0000EA02000000090000000D000000030000BB090000970D0000E8020000000A0000000D000000030000910A0000800D0000E6020000000B0000000D000000030000670B00006A0D0000E5020000000C0000000D0000000300003D0C0000550D0000E3020000000D0000000D000000030000120D0000400D0000E2020000000E0000000D000000030000E70D00002B0D0000E1020000000F0000000D000000030000BA0E0000170D0000DF02000000100000000D0000000300008D0F0000040D0000DD02000000000000000E00000003000059020000A20F00002103000000010000000E0000000300002F030000860F00001603000000020000000E000000030000050400006A0F00000C03000000030000000E000000030000DC0400004E0F00000403000000040000000E000000030000B3050000340F0000FD02000000050000000E0000000300008A0600001A0F0000F802000000060000000E00000003000061070000000F0000F302000000070000000E00000003000038080000E70E0000F002000000080000000E0000000300000F090000CF0E0000ED02000000090000000E000000030000E5090000B80E0000EB020000000A0000000E000000030000BC0A0000A00E0000E9020000000B0000000E000000030000920B00008A0E0000E7020000000C0000000E000000030000670C0000740E0000E6020000000D0000000E0000000300003C0D00005F0E0000E5020000000E0000000E000000030000110E00004A0E0000E4020000000F0000000E000000030000E40E0000350E0000E202000000100000000E000000030000B70F0000210E0000E002000000000000000F00000003000085020000FF0F00002303000000010000000F0000000300005A030000FF0F00001703000000020000000F00000003000031040000FF0F00000E03000000030000000F00000003000007050000FF0F00000603000000040000000F000000030000DE050000FF0F0000FF02000000050000000F000000030000B5060000FF0F0000FA02000000060000000F0000000300008C070000FF0F0000F502000000070000000F00000003000063080000FF0F0000F202000000080000000F00000003000039090000F30F0000EF02000000090000000F000000030000100A0000DB0F0000ED020000000A0000000F000000030000E60A0000C40F0000EB020000000B0000000F000000030000BC0B0000AD0F0000EA020000000C0000000F000000030000910C0000960F0000E9020000000D0000000F000000030000660D0000800F0000E8020000000E0000000F0000000300003A0E00006B0F0000E7020000000F0000000F0000000300000E0F0000560F0000E502000000100000000F000000030000E00F0000410F0000E4020000000000000010000000030000B0020000FF0F00002403000000010000001000000003000086030000FF0F0000190300000002000000100000000300005C040000FF0F00000F03000000030000001000000003000032050000FF0F00000803000000040000001000000003000009060000FF0F000001030000000500000010000000030000E0060000FF0F0000FC020000000600000010000000030000B7070000FF0F0000F70200000007000000100000000300008D080000FF0F0000F402000000080000001000000003000064090000FF0F0000F10200000009000000100000000300003A0A0000FF0F0000EF020000000A00000010000000030000100B0000FF0F0000EE020000000B00000010000000030000E60B0000FF0F0000ED020000000C00000010000000030000BB0C0000FF0F0000EC020000000D00000010000000030000900D0000FF0F0000EB020000000E00000010000000030000640E0000FF0F0000EA020000000F00000010000000030000370F0000FF0F0000E8020000001000000010000000030000FF0F0000FF0F0000E7020000000000000000000000040000070000000000000038040000000100000000000000040000DF000000000000002B040000000200000000000000040000B7010000000000002004000000030000000000000004000090020000000000001504000000040000000000000004000069030000000000000D0400000005000000000000000400004304000000000000050400000006000000000000000400001C05000000000000FF030000000700000000000000040000F505000000000000F9030000000800000000000000040000CE06000000000000F4030000000900000000000000040000A707000000000000F0030000000A000000000000000400008008000000000000ED030000000B000000000000000400005809000000000000E9030000000C000000000000000400002F0A000000000000E6030000000D00000000000000040000070B000000000000E3030000000E00000000000000040000DD0B000000000000E0030000000F00000000000000040000B30C000000000000DC030000001000000000000000040000880D000000000000D80300000000000000010000000400002D000000000100003304000000010000000100000004000005010000EA00000026040000000200000001000000040000DD010000D40000001B040000000300000001000000040000B6020000C0000000110400000004000000010000000400008F030000AB000000080400000005000000010000000400006804000098000000010400000006000000010000000400004105000084000000FA0300000007000000010000000400001A06000072000000F5030000000800000001000000040000F306000060000000F0030000000900000001000000040000CC0700004F000000EC030000000A00000001000000040000A40800003E000000E9030000000B000000010000000400007C0900002E000000E5030000000C00000001000000040000540A00001E000000E2030000000D000000010000000400002B0B00000F000000E0030000000E00000001000000040000010C000001000000DC030000000F00000001000000040000D60C000000000000D9030000001000000001000000040000AB0D000000000000D503000000000000000200000004000054000000250200002F0400000001000000020000000400002C0100000F0200002204000000020000000200000004000004020000F901000017040000000300000002000000040000DD020000E30100000D040000000400000002000000040000B5030000CE010000040400000005000000020000000400008E040000BA010000FD03000000060000000200000004000067050000A7010000F70300000007000000020000000400004006000094010000F20300000008000000020000000400001907000081010000ED030000000900000002000000040000F107000070010000E9030000000A00000002000000040000CA0800005E010000E6030000000B00000002000000040000A20900004E010000E3030000000C00000002000000040000790A00003E010000E0030000000D00000002000000040000500B00002E010000DD030000000E00000002000000040000260C00001F010000DA030000000F00000002000000040000FB0C000011010000D7030000001000000002000000040000D00D000003010000D30300000000000000030000000400007C000000480300002C04000000010000000300000004000054010000300300001F0400000002000000030000000400002C0200001A0300001404000000030000000300000004000004030000040300000A040000000400000003000000040000DD030000EF02000002040000000500000003000000040000B6040000DA020000FA0300000006000000030000000400008E050000C6020000F403000000070000000300000004000067060000B3020000EF03000000080000000300000004000040070000A0020000EB030000000900000003000000040000180800008E020000E7030000000A00000003000000040000F00800007C020000E4030000000B00000003000000040000C80900006B020000E1030000000C000000030000000400009F0A00005A020000DE030000000D00000003000000040000760B00004A020000DB030000000E000000030000000400004C0C00003B020000D9030000000F00000003000000040000210D00002C020000D5030000001000000003000000040000F50D00001D020000D2030000000000000004000000040000A500000068040000290400000001000000040000000400007C010000500400001C0400000002000000040000000400005402000039040000110400000003000000040000000400002D0300002204000008040000000400000004000000040000050400000D04000000040000000500000004000000040000DE040000F8030000F9030000000600000004000000040000B6050000E3030000F30300000007000000040000000400008F060000CF030000EE03000000080000000400000004000067070000BC030000E903000000090000000400000004000040080000A9030000E6030000000A000000040000000400001709000097030000E2030000000B00000004000000040000EF09000086030000E0030000000C00000004000000040000C60A000075030000DD030000000D000000040000000400009C0B000064030000DA030000000E00000004000000040000720C000054030000D8030000000F00000004000000040000470D000045030000D50300000010000000040000000400001C0E000036030000D2030000000000000005000000040000CF0000008605000027040000000100000005000000040000A60100006E0500001B0400000002000000050000000400007E0200005605000010040000000300000005000000040000560300003F050000060400000004000000050000000400002E04000029050000FE0300000005000000050000000400000605000013050000F7030000000600000005000000040000DF050000FF040000F1030000000700000005000000040000B7060000EA040000ED03000000080000000500000004000090070000D6040000E803000000090000000500000004000068080000C3040000E5030000000A000000050000000400003F090000B1040000E2030000000B00000005000000040000170A00009F040000DF030000000C00000005000000040000EE0A00008D040000DD030000000D00000005000000040000C40B00007C040000DA030000000E000000050000000400009A0C00006C040000D8030000000F000000050000000400006F0D00005C040000D5030000001000000005000000040000430E00004C040000D2030000000000000006000000040000F9000000A306000026040000000100000006000000040000D00100008A06000019040000000200000006000000040000A8020000720600000F040000000300000006000000040000800300005B060000050400000004000000060000000400005804000044060000FD030000000500000006000000040000300500002E060000F70300000006000000060000000400000806000019060000F1030000000700000006000000040000E106000004060000EC030000000800000006000000040000B9070000F0050000E803000000090000000600000004000091080000DC050000E5030000000A0000000600000004000068090000C9050000E2030000000B000000060000000400003F0A0000B6050000DF030000000C00000006000000040000160B0000A4050000DD030000000D00000006000000040000EC0B000093050000DB030000000E00000006000000040000C20C000082050000D8030000000F00000006000000040000960D000072050000D60300000010000000060000000400006A0E000062050000D303000000000000000700000004000024010000BF07000025040000000100000007000000040000FB010000A607000019040000000200000007000000040000D20200008D0700000E040000000300000007000000040000AA0300007507000005040000000400000007000000040000820400005E070000FD0300000005000000070000000400005A05000048070000F70300000006000000070000000400003206000032070000F10300000007000000070000000400000A0700001D070000EC030000000800000007000000040000E207000008070000E9030000000900000007000000040000BA080000F4060000E5030000000A0000000700000004000091090000E0060000E2030000000B00000007000000040000680A0000CD060000E0030000000C000000070000000400003F0B0000BB060000DE030000000D00000007000000040000150C0000A9060000DC030000000E00000007000000040000EA0C000098060000D9030000000F00000007000000040000BF0D000087060000D7030000001000000007000000040000930E000076060000D40300000000000000080000000400004F010000DB0800002504000000010000000800000004000026020000C108000019040000000200000008000000040000FD020000A80800000E040000000300000008000000040000D50300009008000005040000000400000008000000040000AD04000078080000FE0300000005000000080000000400008505000061080000F70300000006000000080000000400005C0600004B080000F20300000007000000080000000400003407000035080000ED0300000008000000080000000400000C08000020080000E9030000000900000008000000040000E40800000C080000E6030000000A00000008000000040000BB090000F7070000E4030000000B00000008000000040000920A0000E4070000E1030000000C00000008000000040000680B0000D1070000DF030000000D000000080000000400003E0C0000BF070000DD030000000E00000008000000040000130D0000AD070000DB030000000F00000008000000040000E80D00009B070000D9030000001000000008000000040000BB0E00008B070000D60300000000000000090000000400007B010000F70900002504000000010000000900000004000052020000DD0900001904000000020000000900000004000029030000C30900000F04000000030000000900000004000000040000AB09000006040000000400000009000000040000D804000092090000FE030000000500000009000000040000AF0500007B090000F80300000006000000090000000400008706000064090000F30300000007000000090000000400005F0700004E090000EE0300000008000000090000000400003708000038090000EB0300000009000000090000000400000E09000023090000E8030000000A00000009000000040000E50900000F090000E5030000000B00000009000000040000BC0A0000FB080000E3030000000C00000009000000040000920B0000E8080000E1030000000D00000009000000040000680C0000D5080000DF030000000E000000090000000400003D0D0000C2080000DD030000000F00000009000000040000110E0000B0080000DB030000001000000009000000040000E40E00009F080000D803000000000000000A000000040000A7010000140B00002604000000010000000A0000000400007D020000F90A00001A04000000020000000A00000004000054030000DF0A00000F04000000030000000A0000000400002B040000C60A00000704000000040000000A00000004000003050000AD0A0000FF03000000050000000A000000040000DB050000950A0000F903000000060000000A000000040000B20600007E0A0000F403000000070000000A0000000400008A070000670A0000F003000000080000000A00000004000061080000510A0000EC03000000090000000A000000040000380900003C0A0000E9030000000A0000000A0000000400000F0A0000270A0000E7030000000B0000000A000000040000E60A0000130A0000E5030000000C0000000A000000040000BC0B0000FF090000E3030000000D0000000A000000040000910C0000EB090000E1030000000E0000000A000000040000660D0000D8090000DF030000000F0000000A0000000400003A0E0000C6090000DD03000000100000000A0000000400000E0F0000B4090000DB03000000000000000B000000040000D3010000320C00002604000000010000000B000000040000A9020000170C00001B04000000020000000B00000004000080030000FC0B00001004000000030000000B00000004000057040000E20B00000804000000040000000B0000000400002E050000C90B00000104000000050000000B00000004000006060000B10B0000FA03000000060000000B000000040000DD060000990B0000F503000000070000000B000000040000B5070000820B0000F103000000080000000B0000000400008C0800006C0B0000EE03000000090000000B00000004000063090000560B0000EB030000000A0000000B0000000400003A0A0000400B0000E9030000000B0000000B000000040000100B00002B0B0000E7030000000C0000000B000000040000E60B0000170B0000E5030000000D0000000B000000040000BC0C0000030B0000E4030000000E0000000B000000040000900D0000F00A0000E2030000000F0000000B000000040000640E0000DD0A0000E003000000100000000B000000040000370F0000CB0A0000DD03000000000000000C000000040000FF010000510D00002704000000010000000C000000040000D5020000360D00001C04000000020000000C000000040000AC0300001B0D00001204000000030000000C00000004000083040000010D00000904000000040000000C0000000400005A050000E70C00000204000000050000000C00000004000031060000CE0C0000FC03000000060000000C00000004000009070000B60C0000F703000000070000000C000000040000E00700009E0C0000F303000000080000000C000000040000B7080000870C0000F003000000090000000C0000000400008E090000710C0000ED030000000A0000000C000000040000650A00005B0C0000EB030000000B0000000C0000000400003B0B0000460C0000E9030000000C0000000C000000040000100C0000310C0000E8030000000D0000000C000000040000E60C00001D0C0000E6030000000E0000000C000000040000BA0D0000090C0000E4030000000F0000000C0000000400008E0E0000F60B0000E303000000100000000C000000040000610F0000E30B0000E003000000000000000D0000000400002B020000730E00002804000000010000000D00000004000001030000570E00001D04000000020000000D000000040000D80300003C0E00001304000000030000000D000000040000AF040000210E00000B04000000040000000D00000004000086050000070E00000404000000050000000D0000000400005D060000EE0D0000FE03000000060000000D00000004000034070000D50D0000F903000000070000000D0000000400000B080000BD0D0000F503000000080000000D000000040000E2080000A50D0000F203000000090000000D000000040000B90900008F0D0000EF030000000A0000000D0000000400008F0A0000780D0000ED030000000B0000000D000000040000650B0000620D0000EC030000000C0000000D0000000400003B0C00004D0D0000EA030000000D0000000D000000040000100D0000380D0000E9030000000E0000000D000000040000E40D0000240D0000E7030000000F0000000D000000040000B80E0000100D0000E603000000100000000D0000000400008A0F0000FD0C0000E303000000000000000E00000004000058020000980F00002904000000010000000E0000000400002D0300007B0F00001E04000000020000000E000000040000040400005F0F00001404000000030000000E000000040000DA040000440F00000C04000000040000000E000000040000B10500002A0F00000504000000050000000E00000004000088060000100F0000FF03000000060000000E0000000400005F070000F70E0000FB03000000070000000E00000004000036080000DE0E0000F703000000080000000E0000000400000D090000C60E0000F403000000090000000E000000040000E3090000AF0E0000F2030000000A0000000E000000040000BA0A0000980E0000F0030000000B0000000E000000040000900B0000820E0000EE030000000C0000000E000000040000650C00006C0E0000ED030000000D0000000E0000000400003A0D0000570E0000EC030000000E0000000E0000000400000E0E0000420E0000EA030000000F0000000E000000040000E10E00002E0E0000E903000000100000000E000000040000B40F00001A0E0000E703000000000000000F00000004000084020000FF0F00002B04000000010000000F00000004000059030000FF0F00001F04000000020000000F0000000400002F040000FF0F00001604000000030000000F00000004000006050000FF0F00000D04000000040000000F000000040000DC050000FF0F00000704000000050000000F000000040000B3060000FF0F00000104000000060000000F0000000400008A070000FF0F0000FD03000000070000000F00000004000061080000FF0F0000F903000000080000000F00000004000037090000EA0F0000F603000000090000000F0000000400000E0A0000D20F0000F4030000000A0000000F000000040000E40A0000BB0F0000F2030000000B0000000F000000040000BA0B0000A40F0000F1030000000C0000000F0000000400008F0C00008E0F0000F0030000000D0000000F000000040000640D0000780F0000EE030000000E0000000F000000040000380E0000630F0000ED030000000F0000000F0000000400000B0F00004E0F0000EC03000000100000000F000000040000DD0F00003A0F0000EA030000000000000010000000040000AF020000FF0F00002B04000000010000001000000004000085030000FF0F0000200400000002000000100000000400005B040000FF0F00001704000000030000001000000004000031050000FF0F00000F04000000040000001000000004000007060000FF0F000008040000000500000010000000040000DE060000FF0F000003040000000600000010000000040000B5070000FF0F0000FE0300000007000000100000000400008B080000FF0F0000FB03000000080000001000000004000062090000FF0F0000F8030000000900000010000000040000380A0000FF0F0000F6030000000A000000100000000400000E0B0000FF0F0000F4030000000B00000010000000040000E40B0000FF0F0000F3030000000C00000010000000040000B90C0000FF0F0000F2030000000D000000100000000400008D0D0000FF0F0000F1030000000E00000010000000040000610E0000FF0F0000F0030000000F00000010000000040000340F0000FF0F0000EE030000001000000010000000040000FF0F0000FF0F0000ED030000000000000000000000050000060000000000000044050000000100000000000000050000DE0000000000000036050000000200000000000000050000B7010000000000002B0500000003000000000000000500009002000000000000200500000004000000000000000500006803000000000000170500000005000000000000000500004204000000000000100500000006000000000000000500001B0500000000000009050000000700000000000000050000F40500000000000003050000000800000000000000050000CD06000000000000FE040000000900000000000000050000A507000000000000FA040000000A000000000000000500007E08000000000000F6040000000B000000000000000500005609000000000000F2040000000C000000000000000500002D0A000000000000EF040000000D00000000000000050000040B000000000000EC040000000E00000000000000050000DB0B000000000000E8040000000F00000000000000050000B00C000000000000E5040000001000000000000000050000850D000000000000E10400000000000000010000000500002C000000FE0000003E05000000010000000100000005000004010000E800000031050000000200000001000000050000DD010000D200000025050000000300000001000000050000B5020000BD0000001B0500000004000000010000000500008E030000A90000001305000000050000000100000005000067040000950000000B0500000006000000010000000500004005000082000000040500000007000000010000000500001906000070000000FF040000000800000001000000050000F10600005E000000FA040000000900000001000000050000CA0700004D000000F6040000000A00000001000000050000A20800003C000000F2040000000B000000010000000500007A0900002C000000EE040000000C00000001000000050000520A00001D000000EB040000000D00000001000000050000280B00000E000000E8040000000E00000001000000050000FE0B000000000000E5040000000F00000001000000050000D40C000000000000E1040000001000000001000000050000A80D000000000000DD04000000000000000200000005000054000000220200003A0500000001000000020000000500002B0100000C0200002D05000000020000000200000005000003020000F601000021050000000300000002000000050000DC020000E001000017050000000400000002000000050000B4030000CC0100000F0500000005000000020000000500008D040000B70100000705000000060000000200000005000066050000A4010000010500000007000000020000000500003F06000091010000FB040000000800000002000000050000170700007F010000F6040000000900000002000000050000F00700006D010000F2040000000A00000002000000050000C80800005C010000EF040000000B000000020000000500009F0900004C010000EB040000000C00000002000000050000770A00003C010000E8040000000D000000020000000500004D0B00002C010000E5040000000E00000002000000050000230C00001D010000E2040000000F00000002000000050000F90C00000F010000DF040000001000000002000000050000CD0D000001010000DB0400000000000000030000000500007C0000004403000036050000000100000003000000050000530100002D030000290500000002000000030000000500002B020000170300001E050000000300000003000000050000030300000103000014050000000400000003000000050000DC030000EC0200000B050000000500000003000000050000B4040000D7020000040500000006000000030000000500008D050000C3020000FE04000000070000000300000005000066060000B0020000F80400000008000000030000000500003E0700009D020000F4040000000900000003000000050000160800008B020000F0040000000A00000003000000050000EE08000079020000EC040000000B00000003000000050000C609000068020000E9040000000C000000030000000500009D0A000058020000E6040000000D00000003000000050000730B000048020000E3040000000E00000003000000050000490C000038020000E0040000000F000000030000000500001E0D00002A020000DD040000001000000003000000050000F20D00001B020000DA040000000000000004000000050000A400000064040000330500000001000000040000000500007C0100004C0400002705000000020000000400000005000054020000350400001B0500000003000000040000000500002C0300001F04000012050000000400000004000000050000040400000904000009050000000500000004000000050000DC040000F403000002050000000600000004000000050000B5050000E0030000FC0400000007000000040000000500008D060000CC030000F704000000080000000400000005000066070000B9030000F20400000009000000040000000500003E080000A6030000EE040000000A000000040000000500001509000094030000EB040000000B00000004000000050000ED09000083030000E8040000000C00000004000000050000C40A000072030000E5040000000D000000040000000500009A0B000061030000E2040000000E00000004000000050000700C000052030000DF040000000F00000004000000050000450D000042030000DC040000001000000004000000050000190E000033030000D9040000000000000005000000050000CE0000008105000031050000000100000005000000050000A501000069050000240500000002000000050000000500007D0200005205000019050000000300000005000000050000550300003B050000100500000004000000050000000500002D0400002505000007050000000500000005000000050000050500001005000000050000000600000005000000050000DD050000FB040000FA040000000700000005000000050000B6060000E7040000F50400000008000000050000000500008E070000D3040000F104000000090000000500000005000066080000C0040000ED040000000A000000050000000500003D090000AD040000EA040000000B00000005000000050000150A00009C040000E7040000000C00000005000000050000EB0A00008A040000E5040000000D00000005000000050000C10B000079040000E2040000000E00000005000000050000970C000069040000DF040000000F000000050000000500006C0D000059040000DC040000001000000005000000050000400E00004A040000D9040000000000000006000000050000F80000009E06000030050000000100000006000000050000CF0100008506000023050000000200000006000000050000A70200006E060000180500000003000000060000000500007E030000560600000F0500000004000000060000000500005604000040060000060500000005000000060000000500002F0500002A060000000500000006000000060000000500000706000015060000FA040000000700000006000000050000DF06000000060000F5040000000800000006000000050000B7070000EC050000F10400000009000000060000000500008F080000D8050000ED040000000A0000000600000005000066090000C5050000EA040000000B000000060000000500003D0A0000B3050000E7040000000C00000006000000050000140B0000A1050000E5040000000D00000006000000050000EA0B000090050000E2040000000E00000006000000050000BF0C00007F050000E0040000000F00000006000000050000940D00006F050000DD040000001000000006000000050000670E00005F050000D904000000000000000700000005000023010000BA0700002F050000000100000007000000050000FA010000A107000022050000000200000007000000050000D10200008807000017050000000300000007000000050000A9030000710700000E050000000400000007000000050000810400005A070000060500000005000000070000000500005905000043070000FF040000000600000007000000050000310600002E070000F90400000007000000070000000500000807000018070000F5040000000800000007000000050000E007000004070000F1040000000900000007000000050000B8080000F0060000ED040000000A000000070000000500008F090000DC060000EA040000000B00000007000000050000660A0000CA060000E8040000000C000000070000000500003C0B0000B7060000E5040000000D00000007000000050000120C0000A6060000E3040000000E00000007000000050000E70C000094060000E0040000000F00000007000000050000BC0D000083060000DE040000001000000007000000050000900E000073060000DB0400000000000000080000000500004E010000D50800002E05000000010000000800000005000025020000BC08000022050000000200000008000000050000FC020000A308000017050000000300000008000000050000D40300008B0800000E050000000400000008000000050000AB0400007308000006050000000500000008000000050000830500005C080000FF0400000006000000080000000500005B06000046080000FA0400000007000000080000000500003307000031080000F50400000008000000080000000500000A0800001C080000F1040000000900000008000000050000E208000007080000EE040000000A00000008000000050000B9090000F3070000EB040000000B00000008000000050000900A0000E0070000E9040000000C00000008000000050000660B0000CD070000E6040000000D000000080000000500003B0C0000BB070000E4040000000E00000008000000050000100D0000A9070000E2040000000F00000008000000050000E50D000098070000DF040000001000000008000000050000B80E000087070000DC0400000000000000090000000500007A010000F10900002E05000000010000000900000005000050020000D70900002205000000020000000900000005000027030000BE09000017050000000300000009000000050000FF030000A50900000E050000000400000009000000050000D60400008D09000006050000000500000009000000050000AE0500007609000000050000000600000009000000050000850600005F090000FA0400000007000000090000000500005D07000049090000F60400000008000000090000000500003508000034090000F20400000009000000090000000500000C0900001F090000EF040000000A00000009000000050000E30900000A090000EC040000000B00000009000000050000B90A0000F7080000EA040000000C000000090000000500008F0B0000E3080000E8040000000D00000009000000050000650C0000D1080000E6040000000E000000090000000500003A0D0000BE080000E4040000000F000000090000000500000E0E0000AD080000E1040000001000000009000000050000E10E00009B080000DE04000000000000000A000000050000A60100000D0B00002E05000000010000000A0000000500007C020000F30A00002205000000020000000A00000005000053030000D90A00001805000000030000000A0000000500002A040000C00A00000F05000000040000000A00000005000001050000A70A00000705000000050000000A000000050000D9050000900A00000105000000060000000A000000050000B0060000790A0000FB04000000070000000A00000005000088070000620A0000F704000000080000000A0000000500005F0800004C0A0000F304000000090000000A00000005000036090000370A0000F0040000000A0000000A0000000500000D0A0000220A0000EE040000000B0000000A000000050000E30A00000E0A0000EC040000000C0000000A000000050000B90B0000FA090000EA040000000D0000000A0000000500008F0C0000E7090000E8040000000E0000000A000000050000630D0000D4090000E6040000000F0000000A000000050000370E0000C2090000E304000000100000000A0000000500000B0F0000B0090000E104000000000000000B000000050000D20100002B0C00002F05000000010000000B000000050000A8020000100C00002305000000020000000B0000000500007F030000F60B00001805000000030000000B00000005000056040000DC0B00001005000000040000000B0000000500002D050000C30B00000805000000050000000B00000005000004060000AB0B00000205000000060000000B000000050000DB060000930B0000FD04000000070000000B000000050000B30700007C0B0000F804000000080000000B0000000500008A080000660B0000F504000000090000000B00000005000061090000500B0000F2040000000A0000000B000000050000380A00003B0B0000F0040000000B0000000B0000000500000E0B0000260B0000EE040000000C0000000B000000050000E40B0000120B0000EC040000000D0000000B000000050000B90C0000FF0A0000EA040000000E0000000B0000000500008D0D0000EB0A0000E8040000000F0000000B000000050000610E0000D90A0000E604000000100000000B000000050000340F0000C70A0000E304000000000000000C000000050000FE0100004A0D00002F05000000010000000C000000050000D40200002E0D00002305000000020000000C000000050000AB030000140D00001905000000030000000C00000005000081040000FA0C00001105000000040000000C00000005000058050000E10C00000905000000050000000C0000000500002F060000C80C00000305000000060000000C00000005000007070000B00C0000FE04000000070000000C000000050000DE070000980C0000FA04000000080000000C000000050000B5080000820C0000F704000000090000000C0000000500008C0900006B0C0000F4040000000A0000000C000000050000620A0000560C0000F2040000000B0000000C000000050000380B0000400C0000F0040000000C0000000C0000000500000E0C00002C0C0000EE040000000D0000000C000000050000E30C0000180C0000EC040000000E0000000C000000050000B70D0000040C0000EB040000000F0000000C0000000500008B0E0000F10B0000E904000000100000000C0000000500005E0F0000DE0B0000E604000000000000000D0000000500002A0200006B0E00003005000000010000000D000000050000000300004F0E00002405000000020000000D000000050000D6030000340E00001A05000000030000000D000000050000AD0400001A0E00001205000000040000000D00000005000084050000000E00000B05000000050000000D0000000500005B060000E70D00000505000000060000000D00000005000032070000CE0D00000005000000070000000D00000005000009080000B70D0000FC04000000080000000D000000050000E00800009F0D0000F804000000090000000D000000050000B6090000880D0000F6040000000A0000000D0000000500008D0A0000720D0000F4040000000B0000000D000000050000630B00005D0D0000F2040000000C0000000D000000050000380C0000480D0000F0040000000D0000000D0000000500000D0D0000330D0000EF040000000E0000000D000000050000E10D00001F0D0000ED040000000F0000000D000000050000B50E00000C0D0000EB04000000100000000D000000050000870F0000F80C0000E904000000000000000E000000050000560200008F0F00003105000000010000000E0000000500002C030000730F00002505000000020000000E00000005000002040000570F00001B05000000030000000E000000050000D90400003C0F00001305000000040000000E000000050000AF050000220F00000C05000000050000000E00000005000086060000090F00000605000000060000000E0000000500005D070000F00E00000105000000070000000E00000005000034080000D70E0000FD04000000080000000E0000000500000A090000C00E0000FA04000000090000000E000000050000E1090000A80E0000F8040000000A0000000E000000050000B70A0000920E0000F6040000000B0000000E0000000500008D0B00007C0E0000F4040000000C0000000E000000050000620C0000660E0000F3040000000D0000000E000000050000370D0000510E0000F1040000000E0000000E0000000500000B0E00003D0E0000F0040000000F0000000E000000050000DE0E0000290E0000EE04000000100000000E000000050000B10F0000150E0000EC04000000000000000F00000005000082020000FF0F00003105000000010000000F00000005000058030000FF0F00002605000000020000000F0000000500002E040000FF0F00001C05000000030000000F00000005000004050000FF0F00001405000000040000000F000000050000DA050000FF0F00000D05000000050000000F000000050000B1060000FF0F00000805000000060000000F00000005000088070000FF0F00000305000000070000000F0000000500005F080000FB0F0000FF04000000080000000F00000005000035090000E30F0000FC04000000090000000F0000000500000B0A0000CB0F0000FA040000000A0000000F000000050000E10A0000B40F0000F8040000000B0000000F000000050000B70B00009E0F0000F6040000000C0000000F0000000500008C0C0000880F0000F5040000000D0000000F000000050000610D0000720F0000F4040000000E0000000F000000050000350E00005D0F0000F2040000000F0000000F000000050000080F0000490F0000F104000000100000000F000000050000DA0F0000350F0000EF040000000000000010000000050000AE020000FF0F00003205000000010000001000000005000083030000FF0F00002705000000020000001000000005000059040000FF0F00001D0500000003000000100000000500002F050000FF0F00001505000000040000001000000005000005060000FF0F00000E050000000500000010000000050000DC060000FF0F000009050000000600000010000000050000B2070000FF0F00000405000000070000001000000005000089080000FF0F0000010500000008000000100000000500005F090000FF0F0000FE040000000900000010000000050000360A0000FF0F0000FC040000000A000000100000000500000B0B0000FF0F0000FA040000000B00000010000000050000E10B0000FF0F0000F9040000000C00000010000000050000B60C0000FF0F0000F7040000000D000000100000000500008A0D0000FF0F0000F6040000000E000000100000000500005E0E0000FF0F0000F5040000000F00000010000000050000310F0000FF0F0000F4040000001000000010000000050000FF0F0000FF0F0000F204000000000000000000000006000006000000000000004E060000000100000000000000060000DE0000000000000041060000000200000000000000060000B601000000000000350600000003000000000000000600008F020000000000002A060000000400000000000000060000670300000000000021060000000500000000000000060000400400000000000019060000000600000000000000060000190500000000000012060000000700000000000000060000F2050000000000000C060000000800000000000000060000CB0600000000000007060000000900000000000000060000A40700000000000003060000000A000000000000000600007C08000000000000FE050000000B000000000000000600005409000000000000FB050000000C000000000000000600002B0A000000000000F7050000000D00000000000000060000020B000000000000F4050000000E00000000000000060000D80B000000000000F0050000000F00000000000000060000AD0C000000000000EC050000001000000000000000060000820D000000000000E80500000000000000010000000600002C000000FD0000004906000000010000000100000006000004010000E70000003B060000000200000001000000060000DC010000D10000002F060000000300000001000000060000B4020000BD000000250600000004000000010000000600008D030000A80000001C0600000005000000010000000600006604000095000000140600000006000000010000000600003E050000820000000D060000000700000001000000060000170600007000000008060000000800000001000000060000F00600005E00000003060000000900000001000000060000C80700004D000000FE050000000A00000001000000060000A00800003C000000FA050000000B00000001000000060000780900002C000000F7050000000C000000010000000600004F0A00001D000000F3050000000D00000001000000060000260B00000E000000F0050000000E00000001000000060000FC0B000000000000EC050000000F00000001000000060000D10C000000000000E9050000001000000001000000060000A60D000000000000E40500000000000000020000000600005300000021020000440600000001000000020000000600002B0100000B0200003706000000020000000200000006000003020000F50100002B060000000300000002000000060000DB020000DF01000021060000000400000002000000060000B3030000CB010000180600000005000000020000000600008C040000B70100001006000000060000000200000006000064050000A30100000A0600000007000000020000000600003D0600009001000004060000000800000002000000060000160700007E010000FF050000000900000002000000060000EE0700006D010000FB050000000A00000002000000060000C60800005C010000F7050000000B000000020000000600009D0900004B010000F3050000000C00000002000000060000740A00003B010000F0050000000D000000020000000600004B0B00002C010000ED050000000E00000002000000060000210C00001D010000E9050000000F00000002000000060000F60C00000E010000E6050000001000000002000000060000CA0D000000010000E20500000000000000030000000600007B0000004303000040060000000100000003000000060000520100002B030000330600000002000000030000000600002A020000150300002706000000030000000300000006000002030000FF0200001D060000000400000003000000060000DB030000EA02000014060000000500000003000000060000B3040000D60200000D0600000006000000030000000600008B050000C20200000606000000070000000300000006000064060000AF020000010600000008000000030000000600003C0700009C020000FC050000000900000003000000060000140800008A020000F8050000000A00000003000000060000EC08000078020000F4050000000B00000003000000060000C309000068020000F1050000000C000000030000000600009A0A000057020000EE050000000D00000003000000060000710B000047020000EB050000000E00000003000000060000460C000038020000E7050000000F000000030000000600001B0D000029020000E4050000001000000003000000060000EF0D00001B020000E0050000000000000004000000060000A4000000620400003D0600000001000000040000000600007B0100004A040000300600000002000000040000000600005302000033040000240600000003000000040000000600002B0300001D0400001A060000000400000004000000060000030400000704000012060000000500000004000000060000DB040000F30300000A060000000600000004000000060000B3050000DE030000040600000007000000040000000600008C060000CB030000FF05000000080000000400000006000064070000B8030000FA0500000009000000040000000600003C080000A5030000F6050000000A000000040000000600001309000093030000F2050000000B00000004000000060000EB09000082030000EF050000000C00000004000000060000C10A000071030000EC050000000D00000004000000060000970B000061030000E9050000000E000000040000000600006D0C000051030000E6050000000F00000004000000060000420D000041030000E3050000001000000004000000060000160E000033030000DF050000000000000005000000060000CD0000007F0500003A060000000100000005000000060000A4010000670500002D0600000002000000050000000600007C02000050050000220600000003000000050000000600005403000039050000180600000004000000050000000600002C0400002305000010060000000500000005000000060000040500000E05000009060000000600000005000000060000DC050000F904000002060000000700000005000000060000B4060000E5040000FD0500000008000000050000000600008C070000D1040000F905000000090000000500000006000064080000BE040000F5050000000A000000050000000600003B090000AC040000F1050000000B00000005000000060000120A00009A040000EE050000000C00000005000000060000E90A000089040000EC050000000D00000005000000060000BF0B000078040000E9050000000E00000005000000060000940C000068040000E6050000000F00000005000000060000690D000058040000E30500000010000000050000000600003D0E000049040000DF050000000000000006000000060000F70000009B06000038060000000100000006000000060000CE010000820600002C060000000200000006000000060000A60200006B060000210600000003000000060000000600007D0300005406000017060000000400000006000000060000550400003D0600000F0600000005000000060000000600002D0500002706000007060000000600000006000000060000050600001206000001060000000700000006000000060000DD060000FE050000FC050000000800000006000000060000B5070000EA050000F80500000009000000060000000600008C080000D6050000F4050000000A0000000600000006000064090000C4050000F1050000000B000000060000000600003B0A0000B1050000EE050000000C00000006000000060000110B0000A0050000EB050000000D00000006000000060000E70B00008E050000E9050000000E00000006000000060000BC0C00007E050000E6050000000F00000006000000060000910D00006D050000E3050000001000000006000000060000640E00005E050000E005000000000000000700000006000022010000B607000037060000000100000007000000060000F90100009D0700002A060000000200000007000000060000D0020000850700001F060000000300000007000000060000A70300006E070000160600000004000000070000000600007F040000570700000E0600000005000000070000000600005705000040070000070600000006000000070000000600002F0600002B070000010600000007000000070000000600000707000016070000FC050000000800000007000000060000DE07000001070000F8050000000900000007000000060000B6080000EE060000F4050000000A000000070000000600008D090000DA060000F1050000000B00000007000000060000640A0000C8060000EE050000000C000000070000000600003A0B0000B5060000EC050000000D00000007000000060000100C0000A4060000E9050000000E00000007000000060000E50C000093060000E7050000000F00000007000000060000B90D000082060000E40500000010000000070000000600008C0E000072060000E10500000000000000080000000600004D010000D10800003606000000010000000800000006000024020000B80800002A060000000200000008000000060000FB0200009F0800001F060000000300000008000000060000D20300008708000016060000000400000008000000060000AA040000700800000E060000000500000008000000060000810500005908000007060000000600000008000000060000590600004308000001060000000700000008000000060000310700002E080000FC0500000008000000080000000600000808000019080000F8050000000900000008000000060000DF08000005080000F5050000000A00000008000000060000B6090000F1070000F2050000000B000000080000000600008D0A0000DE070000EF050000000C00000008000000060000630B0000CB070000ED050000000D00000008000000060000390C0000B9070000EA050000000E000000080000000600000E0D0000A7070000E8050000000F00000008000000060000E20D000096070000E5050000001000000008000000060000B50E000086070000E205000000000000000900000006000079010000EC090000360600000001000000090000000600004F020000D30900002906000000020000000900000006000026030000B90900001F060000000300000009000000060000FD030000A109000016060000000400000009000000060000D5040000890900000E060000000500000009000000060000AC0500007209000007060000000600000009000000060000840600005C090000010600000007000000090000000600005B07000046090000FD0500000008000000090000000600003208000030090000F90500000009000000090000000600000A0900001C090000F5050000000A00000009000000060000E009000008090000F3050000000B00000009000000060000B70A0000F4080000F0050000000C000000090000000600008D0B0000E1080000EE050000000D00000009000000060000620C0000CE080000EC050000000E00000009000000060000370D0000BC080000E9050000000F000000090000000600000B0E0000AB080000E7050000001000000009000000060000DE0E00009A080000E405000000000000000A000000060000A5010000080B00003606000000010000000A0000000600007B020000EE0A00002A06000000020000000A00000006000052030000D40A00001F06000000030000000A00000006000028040000BC0A00001606000000040000000A00000006000000050000A30A00000E06000000050000000A000000060000D70500008C0A00000806000000060000000A000000060000AE060000750A00000206000000070000000A000000060000860700005E0A0000FE05000000080000000A0000000600005D080000490A0000FA05000000090000000A00000006000034090000340A0000F7050000000A0000000A0000000600000B0A00001F0A0000F4050000000B0000000A000000060000E10A00000B0A0000F2050000000C0000000A000000060000B70B0000F7090000EF050000000D0000000A0000000600008C0C0000E4090000ED050000000E0000000A000000060000610D0000D2090000EB050000000F0000000A000000060000340E0000C0090000E905000000100000000A000000060000070F0000AE090000E605000000000000000B000000060000D1010000250C00003606000000010000000B000000060000A70200000B0C00002A06000000020000000B0000000600007D030000F10B00001F06000000030000000B00000006000054040000D70B00001606000000040000000B0000000600002B050000BF0B00000F06000000050000000B00000006000002060000A70B00000806000000060000000B000000060000D90600008F0B00000306000000070000000B000000060000B1070000780B0000FF05000000080000000B00000006000088080000620B0000FB05000000090000000B0000000600005E0900004D0B0000F8050000000A0000000B000000060000350A0000380B0000F6050000000B0000000B0000000600000B0B0000230B0000F3050000000C0000000B000000060000E10B00000F0B0000F1050000000D0000000B000000060000B60C0000FC0A0000EF050000000E0000000B0000000600008A0D0000E90A0000ED050000000F0000000B0000000600005E0E0000D60A0000EB05000000100000000B000000060000310F0000C40A0000E805000000000000000C000000060000FD010000440D00003606000000010000000C000000060000D3020000290D00002A06000000020000000C000000060000A90300000E0D00002006000000030000000C00000006000080040000F50C00001706000000040000000C00000006000056050000DC0C00001006000000050000000C0000000600002D060000C30C00000A06000000060000000C00000006000005070000AB0C00000406000000070000000C000000060000DC070000940C00000006000000080000000C000000060000B20800007D0C0000FD05000000090000000C00000006000089090000670C0000FA050000000A0000000C000000060000600A0000520C0000F7050000000B0000000C000000060000350B00003D0C0000F5050000000C0000000C0000000600000B0C0000280C0000F3050000000D0000000C000000060000E00C0000150C0000F2050000000E0000000C000000060000B40D0000010C0000F0050000000F0000000C000000060000880E0000EE0B0000EE05000000100000000C0000000600005A0F0000DC0B0000EB05000000000000000D00000006000029020000650E00003706000000010000000D000000060000FE020000490E00002B06000000020000000D000000060000D50300002E0E00002106000000030000000D000000060000AB040000140E00001806000000040000000D00000006000082050000FB0D00001106000000050000000D00000006000059060000E20D00000B06000000060000000D00000006000030070000CA0D00000606000000070000000D00000006000007080000B20D00000106000000080000000D000000060000DD0800009B0D0000FE05000000090000000D000000060000B4090000840D0000FB050000000A0000000D0000000600008A0A00006E0D0000F9050000000B0000000D000000060000600B0000590D0000F7050000000C0000000D000000060000350C0000440D0000F6050000000D0000000D0000000600000A0D0000300D0000F4050000000E0000000D000000060000DE0D00001C0D0000F2050000000F0000000D000000060000B10E0000090D0000F005000000100000000D000000060000840F0000F60C0000EE05000000000000000E00000006000055020000880F00003706000000010000000E0000000600002A0300006C0F00002B06000000020000000E00000006000000040000510F00002106000000030000000E000000060000D7040000370F00001906000000040000000E000000060000AD0500001D0F00001206000000050000000E00000006000084060000030F00000C06000000060000000E0000000600005B070000EA0E00000706000000070000000E00000006000031080000D20E00000306000000080000000E00000006000008090000BB0E00000006000000090000000E000000060000DE090000A40E0000FD050000000A0000000E000000060000B40A00008D0E0000FB050000000B0000000E0000000600008A0B0000780E0000F9050000000C0000000E0000000600005F0C0000620E0000F8050000000D0000000E000000060000340D00004D0E0000F6050000000E0000000E000000060000080E0000390E0000F5050000000F0000000E000000060000DB0E0000250E0000F305000000100000000E000000060000AD0F0000120E0000F005000000000000000F00000006000080020000FF0F00003806000000010000000F00000006000056030000FF0F00002C06000000020000000F0000000600002C040000FF0F00002206000000030000000F00000006000002050000FF0F00001A06000000040000000F000000060000D8050000FF0F00001306000000050000000F000000060000AF060000FF0F00000D06000000060000000F00000006000086070000FF0F00000806000000070000000F0000000600005C080000F60F00000406000000080000000F00000006000033090000DE0F00000106000000090000000F000000060000090A0000C70F0000FF050000000A0000000F000000060000DF0A0000B00F0000FD050000000B0000000F000000060000B40B0000990F0000FB050000000C0000000F000000060000890C0000840F0000FA050000000D0000000F0000000600005E0D00006E0F0000F8050000000E0000000F000000060000310E00005A0F0000F7050000000F0000000F000000060000040F0000450F0000F505000000100000000F000000060000D70F0000320F0000F3050000000000000010000000060000AC020000FF0F00003806000000010000001000000006000081030000FF0F00002C06000000020000001000000006000057040000FF0F0000230600000003000000100000000600002D050000FF0F00001B06000000040000001000000006000003060000FF0F000014060000000500000010000000060000DA060000FF0F00000E060000000600000010000000060000B0070000FF0F00000906000000070000001000000006000087080000FF0F0000060600000008000000100000000600005D090000FF0F000003060000000900000010000000060000330A0000FF0F000000060000000A00000010000000060000090B0000FF0F0000FF050000000B00000010000000060000DE0B0000FF0F0000FD050000000C00000010000000060000B30C0000FF0F0000FC050000000D00000010000000060000870D0000FF0F0000FB050000000E000000100000000600005B0E0000FF0F0000F9050000000F000000100000000600002E0F0000FF0F0000F8050000001000000010000000060000FF0F0000FF0F0000F6050000000000000000000000070000060000000000000058070000000100000000000000070000DE000000000000004A070000000200000000000000070000B6010000000000003E0700000003000000000000000700008E020000000000003307000000040000000000000007000067030000000000002A07000000050000000000000007000040040000000000002207000000060000000000000007000018050000000000001B070000000700000000000000070000F10500000000000015070000000800000000000000070000CA060000000000000F070000000900000000000000070000A2070000000000000A070000000A000000000000000700007A0800000000000006070000000B00000000000000070000520900000000000002070000000C00000000000000070000290A000000000000FE060000000D00000000000000070000000B000000000000FB060000000E00000000000000070000D60B000000000000F7060000000F00000000000000070000AB0C000000000000F30600000010000000000000000700007F0D000000000000EE0600000000000000010000000700002C000000FD0000005207000000010000000100000007000003010000E700000044070000000200000001000000070000DB010000D200000038070000000300000001000000070000B4020000BD0000002E0700000004000000010000000700008C030000A90000002507000000050000000100000007000065040000950000001D0700000006000000010000000700003D0500008200000016070000000700000001000000070000160600007000000010070000000800000001000000070000EE0600005E0000000A070000000900000001000000070000C70700004D00000006070000000A000000010000000700009F0800003D00000002070000000B00000001000000070000760900002D000000FE060000000C000000010000000700004D0A00001D000000FA060000000D00000001000000070000240B00000F000000F7060000000E00000001000000070000F90B000000000000F3060000000F00000001000000070000CF0C000000000000EF060000001000000001000000070000A30D000000000000EB06000000000000000200000007000053000000210200004D0700000001000000020000000700002A0100000A0200004007000000020000000200000007000002020000F501000034070000000300000002000000070000DA020000DF01000029070000000400000002000000070000B2030000CB010000200700000005000000020000000700008B040000B70100001807000000060000000200000007000063050000A3010000110700000007000000020000000700003C060000910100000C070000000800000002000000070000140700007F01000006070000000900000002000000070000EC0700006D01000002070000000A00000002000000070000C40800005C010000FE060000000B000000020000000700009B0900004C010000FA060000000C00000002000000070000720A00003C010000F7060000000D00000002000000070000490B00002C010000F3060000000E000000020000000700001E0C00001E010000F0060000000F00000002000000070000F30C00000F010000EC060000001000000002000000070000C70D000001010000E80600000000000000030000000700007B0000004203000049070000000100000003000000070000520100002B0300003B0700000002000000030000000700002A020000150300003007000000030000000300000007000001030000FF02000025070000000400000003000000070000DA030000EA0200001C070000000500000003000000070000B2040000D5020000150700000006000000030000000700008A050000C20200000E07000000070000000300000007000063060000AF020000080700000008000000030000000700003B0700009C02000003070000000900000003000000070000130800008A020000FF060000000A00000003000000070000EA08000079020000FB060000000B00000003000000070000C109000068020000F8060000000C00000003000000070000980A000058020000F4060000000D000000030000000700006E0B000048020000F1060000000E00000003000000070000440C000038020000EE060000000F00000003000000070000190D00002A020000EA060000001000000003000000070000ED0D00001B020000E6060000000000000004000000070000A300000061040000450700000001000000040000000700007A010000490400003807000000020000000400000007000052020000320400002C0700000003000000040000000700002A0300001C0400002207000000040000000400000007000002040000070400001A070000000500000004000000070000DA040000F203000012070000000600000004000000070000B2050000DE0300000C0700000007000000040000000700008A060000CA0300000607000000080000000400000007000062070000B7030000010700000009000000040000000700003A080000A5030000FD060000000A000000040000000700001109000093030000F9060000000B00000004000000070000E809000082030000F6060000000C00000004000000070000BF0A000071030000F3060000000D00000004000000070000950B000061030000EF060000000E000000040000000700006A0C000051030000EC060000000F000000040000000700003F0D000042030000E9060000001000000004000000070000130E000033030000E5060000000000000005000000070000CD0000007D05000043070000000100000005000000070000A401000065050000350700000002000000050000000700007B0200004E0500002A0700000003000000050000000700005303000038050000200700000004000000050000000700002A0400002205000017070000000500000005000000070000020500000D05000010070000000600000005000000070000DA050000F80400000A070000000700000005000000070000B2060000E4040000040700000008000000050000000700008A070000D1040000FF06000000090000000500000007000062080000BE040000FB060000000A0000000500000007000039090000AB040000F8060000000B00000005000000070000100A00009A040000F5060000000C00000005000000070000E70A000089040000F2060000000D00000005000000070000BC0B000078040000EF060000000E00000005000000070000920C000068040000EC060000000F00000005000000070000660D000058040000E80600000010000000050000000700003A0E000049040000E5060000000000000006000000070000F70000009906000040070000000100000006000000070000CE0100008106000033070000000200000006000000070000A502000069060000280700000003000000060000000700007C030000520600001E070000000400000006000000070000540400003C060000160700000005000000060000000700002C050000260600000F070000000600000006000000070000040600001106000008070000000700000006000000070000DB060000FD05000003070000000800000006000000070000B3070000E9050000FF0600000009000000060000000700008B080000D5050000FB060000000A0000000600000007000062090000C3050000F7060000000B00000006000000070000390A0000B1050000F4060000000C000000060000000700000F0B00009F050000F1060000000D00000006000000070000E50B00008E050000EE060000000E00000006000000070000BA0C00007D050000EB060000000F000000060000000700008E0D00006D050000E8060000001000000006000000070000610E00005E050000E506000000000000000700000007000021010000B40700003F070000000100000007000000070000F80100009B07000032070000000200000007000000070000CF0200008307000027070000000300000007000000070000A60300006C0700001D0700000004000000070000000700007E0400005507000015070000000500000007000000070000560500003F0700000E0700000006000000070000000700002D0600002907000008070000000700000007000000070000050700001407000002070000000800000007000000070000DC07000000070000FE060000000900000007000000070000B4080000EC060000FA060000000A000000070000000700008B090000D9060000F7060000000B00000007000000070000610A0000C7060000F4060000000C00000007000000070000380B0000B5060000F1060000000D000000070000000700000D0C0000A3060000EF060000000E00000007000000070000E20C000092060000EC060000000F00000007000000070000B60D000082060000E90600000010000000070000000700008A0E000071060000E50600000000000000080000000700004C010000CE0800003E07000000010000000800000007000023020000B508000031070000000200000008000000070000FA0200009D08000026070000000300000008000000070000D1030000850800001C070000000400000008000000070000A80400006E0800001407000000050000000800000007000080050000570800000D0700000006000000080000000700005706000041080000070700000007000000080000000700002F0700002C080000020700000008000000080000000700000608000017080000FE060000000900000008000000070000DD08000003080000FB060000000A00000008000000070000B4090000EF070000F7060000000B000000080000000700008B0A0000DC070000F5060000000C00000008000000070000610B0000CA070000F2060000000D00000008000000070000360C0000B8070000EF060000000E000000080000000700000B0D0000A7070000ED060000000F00000008000000070000DF0D000096070000EA060000001000000008000000070000B20E000085070000E706000000000000000900000007000078010000E90900003D0700000001000000090000000700004E020000CF0900003007000000020000000900000007000025030000B609000025070000000300000009000000070000FC0300009E0900001C070000000400000009000000070000D30400008709000014070000000500000009000000070000AA050000700900000D070000000600000009000000070000820600005909000007070000000700000009000000070000590700004409000003070000000800000009000000070000300800002E090000FF060000000900000009000000070000080900001A090000FB060000000A00000009000000070000DE09000006090000F8060000000B00000009000000070000B50A0000F2080000F6060000000C000000090000000700008A0B0000DF080000F3060000000D00000009000000070000600C0000CD080000F1060000000E00000009000000070000340D0000BB080000EE060000000F00000009000000070000080E0000AA080000EB060000001000000009000000070000DB0E000099080000E806000000000000000A000000070000A4010000040B00003C07000000010000000A0000000700007A020000EA0A00003007000000020000000A00000007000050030000D10A00002507000000030000000A00000007000027040000B80A00001C07000000040000000A000000070000FE040000A00A00001407000000050000000A000000070000D5050000890A00000E07000000060000000A000000070000AD060000720A00000807000000070000000A000000070000840700005C0A00000307000000080000000A0000000700005B080000460A0000FF06000000090000000A00000007000032090000310A0000FC060000000A0000000A000000070000080A00001D0A0000F9060000000B0000000A000000070000DF0A0000090A0000F7060000000C0000000A000000070000B40B0000F6090000F4060000000D0000000A000000070000890C0000E3090000F2060000000E0000000A0000000700005E0D0000D1090000F0060000000F0000000A000000070000310E0000BF090000ED06000000100000000A000000070000040F0000AD090000EA06000000000000000B000000070000CF010000210C00003C07000000010000000B000000070000A5020000070C00003007000000020000000B0000000700007C030000ED0B00002507000000030000000B00000007000053040000D40B00001C07000000040000000B00000007000029050000BB0B00001507000000050000000B00000007000001060000A30B00000E07000000060000000B000000070000D80600008C0B00000907000000070000000B000000070000AF070000750B00000407000000080000000B000000070000860800005F0B00000007000000090000000B0000000700005C0900004A0B0000FD060000000A0000000B000000070000330A0000350B0000FB060000000B0000000B000000070000090B0000210B0000F8060000000C0000000B000000070000DE0B00000D0B0000F6060000000D0000000B000000070000B30C0000FA0A0000F4060000000E0000000B000000070000870D0000E70A0000F2060000000F0000000B0000000700005B0E0000D50A0000EF06000000100000000B0000000700002E0F0000C30A0000ED06000000000000000C000000070000FB0100003F0D00003C07000000010000000C000000070000D1020000240D00003007000000020000000C000000070000A80300000A0D00002607000000030000000C0000000700007E040000F10C00001D07000000040000000C00000007000055050000D80C00001507000000050000000C0000000700002C060000BF0C00000F07000000060000000C00000007000003070000A80C00000A07000000070000000C000000070000DA070000910C00000507000000080000000C000000070000B00800007A0C00000207000000090000000C00000007000087090000640C0000FF060000000A0000000C0000000700005D0A00004F0C0000FC060000000B0000000C000000070000330B00003A0C0000FA060000000C0000000C000000070000080C0000260C0000F8060000000D0000000C000000070000DD0C0000130C0000F6060000000E0000000C000000070000B10D0000FF0B0000F4060000000F0000000C000000070000850E0000ED0B0000F206000000100000000C000000070000570F0000DA0B0000EF06000000000000000D00000007000027020000600E00003C07000000010000000D000000070000FD020000440E00003007000000020000000D000000070000D30300002A0E00002607000000030000000D000000070000AA040000100E00001D07000000040000000D00000007000080050000F60D00001607000000050000000D00000007000057060000DE0D00001007000000060000000D0000000700002E070000C60D00000B07000000070000000D00000007000005080000AE0D00000607000000080000000D000000070000DB080000970D00000307000000090000000D000000070000B2090000810D000000070000000A0000000D000000070000880A00006B0D0000FE060000000B0000000D0000000700005D0B0000560D0000FC060000000C0000000D000000070000330C0000410D0000FA060000000D0000000D000000070000070D00002D0D0000F8060000000E0000000D000000070000DB0D00001A0D0000F6060000000F0000000D000000070000AE0E0000070D0000F406000000100000000D000000070000810F0000F40C0000F106000000000000000E00000007000053020000830F00003D07000000010000000E00000007000029030000670F00003107000000020000000E000000070000FF0300004C0F00002707000000030000000E000000070000D5040000320F00001E07000000040000000E000000070000AB050000180F00001707000000050000000E00000007000082060000FF0E00001107000000060000000E00000007000059070000E60E00000C07000000070000000E0000000700002F080000CE0E00000807000000080000000E00000007000006090000B70E00000407000000090000000E000000070000DC090000A00E000002070000000A0000000E000000070000B20A00008A0E0000FF060000000B0000000E000000070000880B0000740E0000FD060000000C0000000E0000000700005D0C00005F0E0000FC060000000D0000000E000000070000310D00004B0E0000FA060000000E0000000E000000070000050E0000370E0000F8060000000F0000000E000000070000D80E0000230E0000F606000000100000000E000000070000AA0F0000100E0000F406000000000000000F0000000700007F020000FF0F00003D07000000010000000F00000007000054030000FF0F00003107000000020000000F0000000700002A040000FF0F00002707000000030000000F00000007000000050000FF0F00001F07000000040000000F000000070000D7050000FF0F00001807000000050000000F000000070000AD060000FF0F00001207000000060000000F00000007000084070000FF0F00000D07000000070000000F0000000700005A080000F20F00000907000000080000000F00000007000030090000DA0F00000607000000090000000F000000070000060A0000C30F000003070000000A0000000F000000070000DC0A0000AC0F000001070000000B0000000F000000070000B20B0000960F0000FF060000000C0000000F000000070000860C0000800F0000FE060000000D0000000F0000000700005B0D00006B0F0000FC060000000E0000000F0000000700002E0E0000570F0000FB060000000F0000000F000000070000010F0000430F0000F906000000100000000F000000070000D30F0000300F0000F7060000000000000010000000070000AB020000FF0F00003D07000000010000001000000007000080030000FF0F00003107000000020000001000000007000055040000FF0F0000270700000003000000100000000700002B050000FF0F00001F07000000040000001000000007000001060000FF0F000018070000000500000010000000070000D8060000FF0F000012070000000600000010000000070000AE070000FF0F00000E07000000070000001000000007000084080000FF0F00000A0700000008000000100000000700005A090000FF0F000007070000000900000010000000070000300A0000FF0F000004070000000A00000010000000070000060B0000FF0F000002070000000B00000010000000070000DB0B0000FF0F000001070000000C00000010000000070000B00C0000FF0F0000FF060000000D00000010000000070000840D0000FF0F0000FE060000000E00000010000000070000580E0000FF0F0000FD060000000F000000100000000700002A0F0000FF0F0000FB060000001000000010000000070000FC0F0000FF0F0000F9060000000000000000000000080000060000000000000061080000000100000000000000080000DE0000000000000053080000000200000000000000080000B601000000000000470800000003000000000000000800008E020000000000003C0800000004000000000000000800006703000000000000320800000005000000000000000800003F040000000000002A080000000600000000000000080000180500000000000022080000000700000000000000080000F0050000000000001C080000000800000000000000080000C90600000000000016080000000900000000000000080000A10700000000000011080000000A0000000000000008000079080000000000000D080000000B00000000000000080000510900000000000009080000000C00000000000000080000280A00000000000005080000000D00000000000000080000FE0A00000000000001080000000E00000000000000080000D40B000000000000FD070000000F00000000000000080000A90C000000000000F80700000010000000000000000800007D0D000000000000F40700000000000000010000000800002C000000FE0000005B08000000010000000100000008000004010000E80000004D080000000200000001000000080000DB010000D300000041080000000300000001000000080000B3020000BE000000360800000004000000010000000800008C030000AA0000002C0800000005000000010000000800006404000096000000240800000006000000010000000800003D050000830000001D080000000700000001000000080000150600007100000017080000000800000001000000080000ED0600006000000011080000000900000001000000080000C60700004F0000000D080000000A000000010000000800009D0800003E00000008080000000B00000001000000080000750900002E00000004080000000C000000010000000800004C0A00001F00000000080000000D00000001000000080000220B000010000000FC070000000E00000001000000080000F80B000001000000F9070000000F00000001000000080000CD0C000000000000F4070000001000000001000000080000A10D000000000000F00700000000000000020000000800005300000021020000550800000001000000020000000800002A0100000B0200004808000000020000000200000008000002020000F50100003C080000000300000002000000080000DA020000E001000031080000000400000002000000080000B2030000CB010000280800000005000000020000000800008A040000B70100002008000000060000000200000008000063050000A4010000190800000007000000020000000800003B0600009101000013080000000800000002000000080000130700007F0100000D080000000900000002000000080000EB0700006E01000009080000000A00000002000000080000C30800005D01000004080000000B000000020000000800009A0900004D01000000080000000C00000002000000080000710A00003D010000FD070000000D00000002000000080000470B00002E010000F9070000000E000000020000000800001C0C00001F010000F5070000000F00000002000000080000F10C000010010000F1070000001000000002000000080000C50D000003010000ED0700000000000000030000000800007B0000004203000051080000000100000003000000080000520100002B0300004308000000020000000300000008000029020000140300003708000000030000000300000008000001030000FF0200002D080000000400000003000000080000D9030000EA02000024080000000500000003000000080000B1040000D60200001C08000000060000000300000008000089050000C20200001508000000070000000300000008000062060000AF0200000F0800000008000000030000000800003A0700009C0200000A080000000900000003000000080000110800008B02000005080000000A00000003000000080000E90800007902000001080000000B00000003000000080000C009000068020000FE070000000C00000003000000080000970A000058020000FA070000000D000000030000000800006D0B000049020000F7070000000E00000003000000080000420C000039020000F3070000000F00000003000000080000170D00002B020000EF070000001000000003000000080000EA0D00001C020000EB070000000000000004000000080000A3000000600400004D0800000001000000040000000800007A0100004804000040080000000200000004000000080000520200003204000034080000000300000004000000080000290300001C0400002A080000000400000004000000080000010400000604000021080000000500000004000000080000D9040000F203000019080000000600000004000000080000B1050000DE0300001208000000070000000400000008000089060000CA0300000C08000000080000000400000008000061070000B70300000708000000090000000400000008000039080000A503000003080000000A000000040000000800001009000093030000FF070000000B00000004000000080000E709000082030000FB070000000C00000004000000080000BD0A000071030000F8070000000D00000004000000080000930B000061030000F5070000000E00000004000000080000680C000052030000F1070000000F000000040000000800003D0D000042030000EE070000001000000004000000080000110E000034030000EA070000000000000005000000080000CD0000007C0500004A080000000100000005000000080000A4010000640500003D0800000002000000050000000800007B0200004D050000310800000003000000050000000800005203000037050000270800000004000000050000000800002A040000210500001E080000000500000005000000080000020500000C05000016080000000600000005000000080000DA050000F704000010080000000700000005000000080000B1060000E40400000A08000000080000000500000008000089070000D00400000508000000090000000500000008000061080000BE04000001080000000A0000000500000008000038090000AB040000FD070000000B000000050000000800000F0A00009A040000FA070000000C00000005000000080000E50A000089040000F7070000000D00000005000000080000BB0B000078040000F4070000000E00000005000000080000900C000068040000F0070000000F00000005000000080000640D000059040000ED070000001000000005000000080000370E000049040000E9070000000000000006000000080000F70000009706000047080000000100000006000000080000CD0100007F0600003A080000000200000006000000080000A4020000680600002F0800000003000000060000000800007C0300005106000025080000000400000006000000080000530400003B0600001C0800000005000000060000000800002B050000250600001508000000060000000600000008000003060000100600000E080000000700000006000000080000DA060000FC05000009080000000800000006000000080000B2070000E80500000408000000090000000600000008000089080000D505000000080000000A0000000600000008000060090000C2050000FD070000000B00000006000000080000370A0000B0050000F9070000000C000000060000000800000D0B00009F050000F6070000000D00000006000000080000E30B00008E050000F3070000000E00000006000000080000B80C00007D050000F0070000000F000000060000000800008C0D00006D050000ED0700000010000000060000000800005F0E00005E050000E907000000000000000700000008000021010000B207000046080000000100000007000000080000F80100009907000039080000000200000007000000080000CF020000810700002D080000000300000007000000080000A60300006A070000230800000004000000070000000800007D040000530700001B080000000500000007000000080000550500003D070000140800000006000000070000000800002C060000280700000D080000000700000007000000080000040700001307000008080000000800000007000000080000DB070000FF06000004080000000900000007000000080000B2080000EB06000000080000000A0000000700000008000089090000D8060000FC070000000B00000007000000080000600A0000C6060000F9070000000C00000007000000080000360B0000B4060000F6070000000D000000070000000800000B0C0000A3060000F3070000000E00000007000000080000E00C000092060000F0070000000F00000007000000080000B40D000081060000ED070000001000000007000000080000870E000072060000EA0700000000000000080000000800004C010000CC0800004408000000010000000800000008000023020000B308000037080000000200000008000000080000F90200009A0800002C080000000300000008000000080000D00300008308000022080000000400000008000000080000A80400006C0800001A0800000005000000080000000800007F0500005508000013080000000600000008000000080000560600003F0800000D0800000007000000080000000800002E0700002A08000008080000000800000008000000080000050800001608000003080000000900000008000000080000DC0800000208000000080000000A00000008000000080000B3090000EE070000FC070000000B00000008000000080000890A0000DB070000F9070000000C000000080000000800005F0B0000C9070000F7070000000D00000008000000080000340C0000B7070000F4070000000E00000008000000080000090D0000A6070000F1070000000F00000008000000080000DD0D000095070000EE070000001000000008000000080000B00E000085070000EB07000000000000000900000008000078010000E6090000430800000001000000090000000800004E020000CD0900003608000000020000000900000008000024030000B40900002B080000000300000009000000080000FB0300009C09000022080000000400000009000000080000D2040000840900001A080000000500000009000000080000A90500006D0900001308000000060000000900000008000081060000570900000D0800000007000000090000000800005807000042090000080800000008000000090000000800002F0800002D09000004080000000900000009000000080000060900001809000000080000000A00000009000000080000DD09000004090000FD070000000B00000009000000080000B30A0000F1080000FA070000000C00000009000000080000880B0000DE080000F7070000000D000000090000000800005E0C0000CC080000F5070000000E00000009000000080000320D0000BA080000F2070000000F00000009000000080000060E0000A9080000EF070000001000000009000000080000D90E000098080000EC07000000000000000A000000080000A3010000010B00004208000000010000000A00000008000079020000E70A00003608000000020000000A00000008000050030000CE0A00002B08000000030000000A00000008000026040000B50A00002208000000040000000A000000080000FD0400009E0A00001A08000000050000000A000000080000D4050000860A00001308000000060000000A000000080000AB060000700A00000D08000000070000000A000000080000830700005A0A00000808000000080000000A0000000800005A080000440A00000408000000090000000A000000080000300900002F0A000001080000000A0000000A000000080000070A00001B0A0000FE070000000B0000000A000000080000DD0A0000070A0000FB070000000C0000000A000000080000B20B0000F4090000F9070000000D0000000A000000080000870C0000E2090000F6070000000E0000000A0000000800005C0D0000D0090000F4070000000F0000000A0000000800002F0E0000BE090000F107000000100000000A000000080000020F0000AD090000EE07000000000000000B000000080000CF0100001D0C00004208000000010000000B000000080000A5020000030C00003508000000020000000B0000000800007B030000E90B00002B08000000030000000B00000008000052040000D00B00002208000000040000000B00000008000028050000B80B00001A08000000050000000B000000080000FF050000A00B00001308000000060000000B000000080000D6060000890B00000D08000000070000000B000000080000AD070000730B00000908000000080000000B000000080000840800005D0B00000508000000090000000B0000000800005B090000480B000002080000000A0000000B000000080000310A0000330B0000FF070000000B0000000B000000080000070B00001F0B0000FC070000000C0000000B000000080000DC0B00000B0B0000FA070000000D0000000B000000080000B10C0000F80A0000F8070000000E0000000B000000080000850D0000E60A0000F5070000000F0000000B000000080000590E0000D40A0000F307000000100000000B0000000800002B0F0000C20A0000F007000000000000000C000000080000FB0100003B0D00004208000000010000000C000000080000D1020000200D00003508000000020000000C000000080000A7030000060D00002B08000000030000000C0000000800007D040000ED0C00002208000000040000000C00000008000054050000D40C00001A08000000050000000C0000000800002B060000BC0C00001408000000060000000C00000008000001070000A50C00000E08000000070000000C000000080000D80700008E0C00000A08000000080000000C000000080000AF080000780C00000608000000090000000C00000008000085090000620C000003080000000A0000000C0000000800005B0A00004D0C000000080000000B0000000C000000080000310B0000380C0000FE070000000C0000000C000000080000060C0000240C0000FC070000000D0000000C000000080000DB0C0000110C0000FA070000000E0000000C000000080000AF0D0000FE0B0000F7070000000F0000000C000000080000820E0000EB0B0000F507000000100000000C000000080000550F0000D90B0000F207000000000000000D000000080000270200005B0E00004108000000010000000D000000080000FC020000400E00003508000000020000000D000000080000D2030000250E00002B08000000030000000D000000080000A90400000C0E00002208000000040000000D0000000800007F050000F20D00001B08000000050000000D00000008000056060000DA0D00001408000000060000000D0000000800002C070000C20D00000F08000000070000000D00000008000003080000AB0D00000A08000000080000000D000000080000D9080000940D00000708000000090000000D000000080000B00900007E0D000004080000000A0000000D000000080000860A0000690D000001080000000B0000000D0000000800005B0B0000540D0000FF070000000C0000000D000000080000300C00003F0D0000FD070000000D0000000D000000080000050D00002B0D0000FB070000000E0000000D000000080000D90D0000180D0000F9070000000F0000000D000000080000AC0E0000050D0000F707000000100000000D0000000800007E0F0000F30C0000F407000000000000000E000000080000530200007E0F00004108000000010000000E00000008000028030000620F00003508000000020000000E000000080000FE030000470F00002B08000000030000000E000000080000D40400002D0F00002208000000040000000E000000080000AA050000130F00001B08000000050000000E00000008000081060000FB0E00001508000000060000000E00000008000057070000E20E00001008000000070000000E0000000800002E080000CB0E00000B08000000080000000E00000008000004090000B40E00000808000000090000000E000000080000DA0900009D0E000005080000000A0000000E000000080000B00A0000870E000003080000000B0000000E000000080000850B0000720E000001080000000C0000000E0000000800005A0C00005D0E0000FF070000000D0000000E0000000800002F0D0000490E0000FD070000000E0000000E000000080000030E0000350E0000FB070000000F0000000E000000080000D50E0000210E0000F907000000100000000E000000080000A80F00000F0E0000F707000000000000000F0000000800007E020000FF0F00004108000000010000000F00000008000053030000FF0F00003508000000020000000F00000008000029040000FF0F00002B08000000030000000F000000080000FF040000FF0F00002308000000040000000F000000080000D5050000FF0F00001B08000000050000000F000000080000AC060000FF0F00001508000000060000000F00000008000082070000FF0F00001008000000070000000F00000008000058080000ED0F00000C08000000080000000F0000000800002F090000D60F00000908000000090000000F000000080000040A0000BF0F000006080000000A0000000F000000080000DA0A0000A90F000004080000000B0000000F000000080000AF0B0000930F000002080000000C0000000F000000080000840C00007E0F000001080000000D0000000F000000080000580D0000690F0000FF070000000E0000000F0000000800002C0E0000550F0000FD070000000F0000000F000000080000FF0E0000410F0000FB07000000100000000F000000080000D10F00002E0F0000F9070000000000000010000000080000AA020000FF0F0000410800000001000000100000000800007F030000FF0F00003508000000020000001000000008000054040000FF0F00002B0800000003000000100000000800002A050000FF0F00002308000000040000001000000008000000060000FF0F00001C080000000500000010000000080000D6060000FF0F000016080000000600000010000000080000AC070000FF0F00001108000000070000001000000008000083080000FF0F00000D08000000080000001000000008000059090000FF0F00000A0800000009000000100000000800002E0A0000FF0F000008080000000A00000010000000080000040B0000FF0F000005080000000B00000010000000080000D90B0000FF0F000004080000000C00000010000000080000AE0C0000FF0F000002080000000D00000010000000080000820D0000FF0F000001080000000E00000010000000080000550E0000FF0F0000FF070000000F00000010000000080000280F0000FF0F0000FE070000001000000010000000080000FA0F0000FF0F0000FB070000000000000000000000090000080000000000000069090000000100000000000000090000DF000000000000005B090000000200000000000000090000B7010000000000004E0900000003000000000000000900008F0200000000000043090000000400000000000000090000670300000000000039090000000500000000000000090000400400000000000031090000000600000000000000090000180500000000000029090000000700000000000000090000F00500000000000023090000000800000000000000090000C9060000000000001D090000000900000000000000090000A10700000000000018090000000A00000000000000090000790800000000000013090000000B0000000000000009000050090000000000000F090000000C00000000000000090000270A0000000000000A090000000D00000000000000090000FD0A00000000000006090000000E00000000000000090000D30B00000000000002090000000F00000000000000090000A80C000000000000FD0800000010000000000000000900007C0D000000000000F90800000000000000010000000900002D000000FE0000006309000000010000000100000009000005010000E800000055090000000200000001000000090000DC010000D300000048090000000300000001000000090000B4020000BE0000003D0900000004000000010000000900008C030000AA0000003409000000050000000100000009000065040000970000002B0900000006000000010000000900003D050000840000002409000000070000000100000009000015060000720000001D090000000800000001000000090000ED0600006000000018090000000900000001000000090000C50700004F00000013090000000A000000010000000900009D0800003F0000000E090000000B00000001000000090000740900002F0000000A090000000C000000010000000900004B0A00002000000006090000000D00000001000000090000210B00001100000002090000000E00000001000000090000F70B000003000000FE080000000F00000001000000090000CB0C000000000000F90800000010000000010000000900009F0D000000000000F508000000000000000200000009000054000000210200005D0900000001000000020000000900002B0100000B0200004F09000000020000000200000009000003020000F501000043090000000300000002000000090000DA020000E001000038090000000400000002000000090000B2030000CB0100002E0900000005000000020000000900008B040000B70100002609000000060000000200000009000063050000A40100001F0900000007000000020000000900003B0600009201000019090000000800000002000000090000130700008001000013090000000900000002000000090000EB0700006E0100000E090000000A00000002000000090000C20800005D0100000A090000000B00000002000000090000990900004D01000006090000000C00000002000000090000700A00003D01000002090000000D00000002000000090000460B00002E010000FE080000000E000000020000000900001B0C000020010000FA080000000F00000002000000090000F00C000011010000F6080000001000000002000000090000C40D000004010000F10800000000000000030000000900007C0000004103000058090000000100000003000000090000530100002A0300004A0900000002000000030000000900002A020000140300003E09000000030000000300000009000002030000FE02000034090000000400000003000000090000DA030000EA0200002A090000000500000003000000090000B2040000D5020000220900000006000000030000000900008A050000C20200001B09000000070000000300000009000062060000AF02000015090000000800000003000000090000390700009C02000010090000000900000003000000090000110800008B0200000B090000000A00000003000000090000E80800007902000007090000000B00000003000000090000BF0900006902000003090000000C00000003000000090000960A000059020000FF080000000D000000030000000900006C0B000049020000FB080000000E00000003000000090000410C00003A020000F8080000000F00000003000000090000150D00002B020000F4080000001000000003000000090000E90D00001D020000EF080000000000000004000000090000A40000005F040000540900000001000000040000000900007B010000470400004609000000020000000400000009000052020000310400003A0900000003000000040000000900002A0300001B04000030090000000400000004000000090000010400000604000027090000000500000004000000090000D9040000F10300001F090000000600000004000000090000B1050000DD0300001809000000070000000400000009000089060000CA0300001209000000080000000400000009000061070000B70300000D09000000090000000400000009000038080000A503000008090000000A000000040000000900000F0900009303000004090000000B00000004000000090000E60900008203000000090000000C00000004000000090000BD0A000071030000FD080000000D00000004000000090000920B000061030000F9080000000E00000004000000090000670C000052030000F6080000000F000000040000000900003C0D000043030000F20800000010000000040000000900000F0E000034030000EE080000000000000005000000090000CE0000007B05000051090000000100000005000000090000A401000063050000430900000002000000050000000900007B0200004C0500003709000000030000000500000009000053030000360500002D0900000004000000050000000900002A0400002005000024090000000500000005000000090000020500000B0500001C090000000600000005000000090000DA050000F704000016090000000700000005000000090000B1060000E30400001009000000080000000500000009000089070000D00400000B09000000090000000500000009000060080000BD04000006090000000A0000000500000009000037090000AB04000002090000000B000000050000000900000E0A000099040000FF080000000C00000005000000090000E40A000088040000FB080000000D00000005000000090000BA0B000078040000F8080000000E000000050000000900008E0C000068040000F5080000000F00000005000000090000630D000059040000F1080000001000000005000000090000360E00004A040000ED080000000000000006000000090000F7000000950600004E090000000100000006000000090000CE0100007D06000040090000000200000006000000090000A502000066060000350900000003000000060000000900007C0300004F0600002B0900000004000000060000000900005304000039060000220900000005000000060000000900002B050000240600001A090000000600000006000000090000030600000F06000014090000000700000006000000090000DA060000FB0500000E090000000800000006000000090000B1070000E70500000909000000090000000600000009000089080000D405000005090000000A0000000600000009000060090000C205000001090000000B00000006000000090000360A0000B0050000FE080000000C000000060000000900000C0B00009E050000FB080000000D00000006000000090000E20B00008D050000F7080000000E00000006000000090000B60C00007D050000F4080000000F000000060000000900008A0D00006D050000F10800000010000000060000000900005E0E00005E050000ED08000000000000000700000009000022010000AF0700004C090000000100000007000000090000F8010000970700003E090000000200000007000000090000CF0200007F07000033090000000300000007000000090000A603000068070000290900000004000000070000000900007D0400005107000020090000000500000007000000090000550500003B070000190900000006000000070000000900002C060000260700001209000000070000000700000009000003070000120700000D090000000800000007000000090000DB070000FE06000008090000000900000007000000090000B2080000EA06000004090000000A0000000700000009000089090000D706000001090000000B000000070000000900005F0A0000C5060000FD080000000C00000007000000090000350B0000B3060000FA080000000D000000070000000900000A0C0000A2060000F7080000000E00000007000000090000DF0C000091060000F4080000000F00000007000000090000B30D000081060000F1080000001000000007000000090000860E000071060000ED0800000000000000080000000900004D010000C90800004A09000000010000000800000009000023020000B00800003D090000000200000008000000090000FA0200009808000031090000000300000008000000090000D00300008008000028090000000400000008000000090000A8040000690800001F0900000005000000080000000900007F0500005308000018090000000600000008000000090000560600003D080000120900000007000000080000000900002D070000280800000C090000000800000008000000090000040800001408000008090000000900000008000000090000DB0800000008000004090000000A00000008000000090000B2090000ED07000000090000000B00000008000000090000880A0000DA070000FD080000000C000000080000000900005E0B0000C8070000FA080000000D00000008000000090000330C0000B6070000F8080000000E00000008000000090000070D0000A5070000F5080000000F00000008000000090000DB0D000095070000F1080000001000000008000000090000AE0E000084070000EE08000000000000000900000009000078010000E3090000480900000001000000090000000900004E020000C90900003C09000000020000000900000009000024030000B109000030090000000300000009000000090000FB0300009909000027090000000400000009000000090000D2040000820900001E090000000500000009000000090000A90500006B09000017090000000600000009000000090000800600005509000011090000000700000009000000090000580700003F0900000C0900000008000000090000000900002F0800002B09000008090000000900000009000000090000050900001609000004090000000A00000009000000090000DC0900000309000001090000000B00000009000000090000B20A0000F0080000FE080000000C00000009000000090000870B0000DD080000FB080000000D000000090000000900005C0C0000CB080000F8080000000E00000009000000090000310D0000B9080000F6080000000F00000009000000090000040E0000A8080000F3080000001000000009000000090000D70E000098080000EF08000000000000000A000000090000A4010000FD0A00004709000000010000000A00000009000079020000E30A00003B09000000020000000A00000009000050030000CA0A00003009000000030000000A00000009000026040000B20A00002609000000040000000A000000090000FD0400009A0A00001E09000000050000000A000000090000D4050000830A00001709000000060000000A000000090000AB0600006D0A00001109000000070000000A00000009000082070000570A00000C09000000080000000A00000009000059080000420A00000809000000090000000A0000000900002F0900002D0A000004090000000A0000000A000000090000060A0000190A000001090000000B0000000A000000090000DC0A0000060A0000FF080000000C0000000A000000090000B10B0000F3090000FC080000000D0000000A000000090000860C0000E0090000F9080000000E0000000A0000000900005A0D0000CE090000F7080000000F0000000A0000000900002E0E0000BD090000F408000000100000000A000000090000000F0000AC090000F108000000000000000B000000090000CF010000190C00004709000000010000000B000000090000A5020000FF0B00003A09000000020000000B0000000900007B030000E50B00002F09000000030000000B00000009000052040000CD0B00002609000000040000000B00000009000028050000B40B00001E09000000050000000B000000090000FF0500009D0B00001709000000060000000B000000090000D6060000860B00001109000000070000000B000000090000AD070000700B00000D09000000080000000B000000090000830800005A0B00000909000000090000000B0000000900005A090000450B000005090000000A0000000B000000090000300A0000310B000002090000000B0000000B000000090000060B00001D0B000000090000000C0000000B000000090000DB0B0000090B0000FD080000000D0000000B000000090000B00C0000F70A0000FB080000000E0000000B000000090000840D0000E40A0000F8080000000F0000000B000000090000570E0000D20A0000F608000000100000000B0000000900002A0F0000C10A0000F308000000000000000C000000090000FB010000360D00004609000000010000000C000000090000D10200001C0D00003A09000000020000000C000000090000A7030000020D00002F09000000030000000C0000000900007D040000E90C00002609000000040000000C00000009000054050000D00C00001E09000000050000000C0000000900002A060000B80C00001709000000060000000C00000009000001070000A10C00001209000000070000000C000000090000D80700008A0C00000D09000000080000000C000000090000AE080000740C00000909000000090000000C000000090000840900005F0C000006090000000A0000000C0000000900005A0A00004A0C000003090000000B0000000C000000090000300B0000360C000001090000000C0000000C000000090000050C0000220C0000FF080000000D0000000C000000090000DA0C00000F0C0000FC080000000E0000000C000000090000AE0D0000FC0B0000FA080000000F0000000C000000090000810E0000EA0B0000F708000000100000000C000000090000530F0000D80B0000F508000000000000000D00000009000027020000560E00004609000000010000000D000000090000FC0200003B0E00003909000000020000000D000000090000D2030000210E00002F09000000030000000D000000090000A8040000070E00002609000000040000000D0000000900007F050000EE0D00001E09000000050000000D00000009000055060000D60D00001809000000060000000D0000000900002C070000BE0D00001209000000070000000D00000009000002080000A70D00000E09000000080000000D000000090000D9080000910D00000A09000000090000000D000000090000AF0900007B0D000007090000000A0000000D000000090000850A0000660D000004090000000B0000000D0000000900005A0B0000510D000002090000000C0000000D0000000900002F0C00003D0D000000090000000D0000000D000000090000040D0000290D0000FE080000000E0000000D000000090000D70D0000160D0000FC080000000F0000000D000000090000AA0E0000030D0000F908000000100000000D0000000900007C0F0000F10C0000F708000000000000000E00000009000053020000780F00004509000000010000000E000000090000280300005D0F00003909000000020000000E000000090000FE030000420F00002F09000000030000000E000000090000D4040000280F00002609000000040000000E000000090000AA0500000F0F00001E09000000050000000E00000009000080060000F60E00001809000000060000000E00000009000057070000DE0E00001309000000070000000E0000000900002D080000C70E00000F09000000080000000E00000009000003090000B00E00000B09000000090000000E000000090000D9090000990E000008090000000A0000000E000000090000AF0A0000840E000006090000000B0000000E000000090000840B00006F0E000003090000000C0000000E000000090000590C00005A0E000001090000000D0000000E0000000900002D0D0000460E000000090000000E0000000E000000090000010E0000320E0000FE080000000F0000000E000000090000D40E00001F0E0000FB08000000100000000E000000090000A60F00000D0E0000F908000000000000000F0000000900007E020000FF0F00004509000000010000000F00000009000053030000FF0F00003909000000020000000F00000009000029040000FF0F00002F09000000030000000F000000090000FF040000FF0F00002609000000040000000F000000090000D5050000FF0F00001F09000000050000000F000000090000AB060000FF0F00001809000000060000000F00000009000081070000FF0F00001309000000070000000F00000009000057080000E90F00000F09000000080000000F0000000900002E090000D20F00000C09000000090000000F000000090000030A0000BB0F000009090000000A0000000F000000090000D90A0000A50F000007090000000B0000000F000000090000AE0B00008F0F000005090000000C0000000F000000090000830C00007A0F000003090000000D0000000F000000090000570D0000660F000001090000000E0000000F0000000900002A0E0000520F0000FF080000000F0000000F000000090000FD0E00003E0F0000FD08000000100000000F000000090000CF0F00002B0F0000FB080000000000000010000000090000A9020000FF0F0000440900000001000000100000000900007E030000FF0F00003809000000020000001000000009000054040000FF0F00002E0900000003000000100000000900002A050000FF0F000026090000000400000010000000090000FF050000FF0F00001F090000000500000010000000090000D6060000FF0F000019090000000600000010000000090000AC070000FF0F00001409000000070000001000000009000082080000FF0F00001009000000080000001000000009000058090000FF0F00000C0900000009000000100000000900002D0A0000FF0F00000A090000000A00000010000000090000030B0000FF0F000008090000000B00000010000000090000D80B0000FF0F000006090000000C00000010000000090000AC0C0000FF0F000004090000000D00000010000000090000800D0000FF0F000003090000000E00000010000000090000540E0000FF0F000001090000000F00000010000000090000260F0000FF0F0000FF080000001000000010000000090000F80F0000FF0F0000FD0800000000000000000000000A00000A00000000000000710A00000001000000000000000A0000E100000000000000620A00000002000000000000000A0000B901000000000000550A00000003000000000000000A000091020000000000004A0A00000004000000000000000A00006903000000000000400A00000005000000000000000A00004104000000000000370A00000006000000000000000A00001A05000000000000300A00000007000000000000000A0000F205000000000000290A00000008000000000000000A0000CA06000000000000230A00000009000000000000000A0000A2070000000000001D0A0000000A000000000000000A00007908000000000000180A0000000B000000000000000A00005109000000000000140A0000000C000000000000000A0000270A0000000000000F0A0000000D000000000000000A0000FE0A0000000000000B0A0000000E000000000000000A0000D30B000000000000060A0000000F000000000000000A0000A80C000000000000020A00000010000000000000000A00007C0D000000000000FD0900000000000000010000000A000030000000FD0000006A0A00000001000000010000000A000007010000E80000005C0A00000002000000010000000A0000DE010000D20000004F0A00000003000000010000000A0000B6020000BE000000440A00000004000000010000000A00008E030000AA0000003A0A00000005000000010000000A00006604000096000000310A00000006000000010000000A00003E050000840000002A0A00000007000000010000000A00001606000071000000230A00000008000000010000000A0000EE060000600000001D0A00000009000000010000000A0000C60700004F000000180A0000000A000000010000000A00009E0800003F000000130A0000000B000000010000000A0000750900002F0000000F0A0000000C000000010000000A00004B0A00001F0000000A0A0000000D000000010000000A0000210B000011000000060A0000000E000000010000000A0000F70B000002000000020A0000000F000000010000000A0000CB0C000000000000FD0900000010000000010000000A00009F0D000000000000F80900000000000000020000000A00005600000020020000640A00000001000000020000000A00002D01000009020000560A00000002000000020000000A000005020000F4010000490A00000003000000020000000A0000DC020000DF0100003E0A00000004000000020000000A0000B4030000CA010000340A00000005000000020000000A00008C040000B70100002C0A00000006000000020000000A000064050000A3010000250A00000007000000020000000A00003C060000910100001E0A00000008000000020000000A0000140700007F010000180A00000009000000020000000A0000EC0700006E010000130A0000000A000000020000000A0000C30800005D0100000F0A0000000B000000020000000A00009A0900004D0100000A0A0000000C000000020000000A0000700A00003D010000060A0000000D000000020000000A0000460B00002E010000020A0000000E000000020000000A00001B0C00001F010000FE090000000F000000020000000A0000F00C000011010000FA0900000010000000020000000A0000C30D000003010000F50900000000000000030000000A00007E0000003F0300005F0A00000001000000030000000A00005501000028030000510A00000002000000030000000A00002C02000012030000440A00000003000000030000000A000003030000FD020000390A00000004000000030000000A0000DB030000E8020000300A00000005000000030000000A0000B3040000D4020000280A00000006000000030000000A00008B050000C1020000200A00000007000000030000000A000063060000AE0200001A0A00000008000000030000000A00003A0700009B020000150A00000009000000030000000A0000120800008A020000100A0000000A000000030000000A0000E9080000790200000B0A0000000B000000030000000A0000C009000068020000070A0000000C000000030000000A0000960A000058020000030A0000000D000000030000000A00006C0B000048020000FF090000000E000000030000000A0000410C000039020000FB090000000F000000030000000A0000150D00002B020000F70900000010000000030000000A0000E90D00001D020000F30900000000000000040000000A0000A60000005D0400005A0A00000001000000040000000A00007D010000450400004C0A00000002000000040000000A0000540200002F040000400A00000003000000040000000A00002B03000019040000360A00000004000000040000000A000003040000040400002C0A00000005000000040000000A0000DB040000EF030000240A00000006000000040000000A0000B2050000DB0300001D0A00000007000000040000000A00008A060000C8030000170A00000008000000040000000A000062070000B5030000120A00000009000000040000000A000039080000A30300000D0A0000000A000000040000000A00001009000092030000080A0000000B000000040000000A0000E709000081030000050A0000000C000000040000000A0000BD0A000070030000010A0000000D000000040000000A0000920B000060030000FD090000000E000000040000000A0000670C000051030000F9090000000F000000040000000A00003C0D000042030000F50900000010000000040000000A00000F0E000034030000F10900000000000000050000000A0000D000000078050000560A00000001000000050000000A0000A601000060050000490A00000002000000050000000A00007D0200004A0500003D0A00000003000000050000000A00005403000033050000320A00000004000000050000000A00002C0400001E050000290A00000005000000050000000A00000305000009050000210A00000006000000050000000A0000DB050000F50400001A0A00000007000000050000000A0000B2060000E1040000140A00000008000000050000000A00008A070000CE0400000F0A00000009000000050000000A000061080000BB0400000B0A0000000A000000050000000A000038090000A9040000060A0000000B000000050000000A00000E0A000098040000030A0000000C000000050000000A0000E40A000087040000FF090000000D000000050000000A0000BA0B000077040000FC090000000E000000050000000A00008E0C000067040000F8090000000F000000050000000A0000630D000058040000F40900000010000000050000000A0000360E000049040000F00900000000000000060000000A0000F900000092060000530A00000001000000060000000A0000D00100007A060000460A00000002000000060000000A0000A6020000630600003A0A00000003000000060000000A00007D0300004C060000300A00000004000000060000000A00005504000036060000270A00000005000000060000000A00002C050000210600001F0A00000006000000060000000A0000040600000C060000180A00000007000000060000000A0000DB060000F8050000120A00000008000000060000000A0000B2070000E50500000D0A00000009000000060000000A000089080000D2050000090A0000000A000000060000000A000060090000C0050000050A0000000B000000060000000A0000360A0000AE050000010A0000000C000000060000000A00000C0B00009D050000FE090000000D000000060000000A0000E20B00008C050000FB090000000E000000060000000A0000B60C00007C050000F7090000000F000000060000000A00008A0D00006C050000F40900000010000000060000000A00005D0E00005D050000F00900000000000000070000000A000024010000AC070000510A00000001000000070000000A0000FA01000093070000440A00000002000000070000000A0000D00200007C070000380A00000003000000070000000A0000A7030000650700002E0A00000004000000070000000A00007F0400004E070000250A00000005000000070000000A000056050000390700001D0A00000006000000070000000A00002D06000024070000170A00000007000000070000000A0000040700000F070000110A00000008000000070000000A0000DB070000FB0600000C0A00000009000000070000000A0000B2080000E8060000080A0000000A000000070000000A000089090000D5060000040A0000000B000000070000000A00005F0A0000C3060000010A0000000C000000070000000A0000350B0000B1060000FE090000000D000000070000000A00000A0C0000A0060000FA090000000E000000070000000A0000DF0C000090060000F7090000000F000000070000000A0000B20D000080060000F40900000010000000070000000A0000850E000070060000F00900000000000000080000000A00004F010000C50800004F0A00000001000000080000000A000025020000AC080000420A00000002000000080000000A0000FB02000094080000360A00000003000000080000000A0000D20300007D0800002C0A00000004000000080000000A0000A904000066080000240A00000005000000080000000A000080050000500800001C0A00000006000000080000000A0000570600003A080000160A00000007000000080000000A00002E07000026080000100A00000008000000080000000A000005080000110800000C0A00000009000000080000000A0000DC080000FE070000070A0000000A000000080000000A0000B2090000EA070000040A0000000B000000080000000A0000880A0000D8070000010A0000000C000000080000000A00005E0B0000C6070000FE090000000D000000080000000A0000330C0000B4070000FB090000000E000000080000000A0000070D0000A3070000F7090000000F000000080000000A0000DB0D000093070000F40900000010000000080000000A0000AE0E000083070000F00900000000000000090000000A00007A010000DE0900004D0A00000001000000090000000A000050020000C5090000400A00000002000000090000000A000026030000AD090000350A00000003000000090000000A0000FC030000950900002B0A00000004000000090000000A0000D30400007E090000230A00000005000000090000000A0000AA050000670900001B0A00000006000000090000000A00008106000051090000150A00000007000000090000000A0000580700003C090000100A00000008000000090000000A00002F080000270900000B0A00000009000000090000000A00000609000013090000070A0000000A000000090000000A0000DC09000000090000040A0000000B000000090000000A0000B20A0000ED080000010A0000000C000000090000000A0000870B0000DA080000FE090000000D000000090000000A00005C0C0000C9080000FB090000000E000000090000000A0000300D0000B7080000F8090000000F000000090000000A0000040E0000A6080000F50900000010000000090000000A0000D70E000096080000F109000000000000000A0000000A0000A5010000F80A00004C0A000000010000000A0000000A00007B020000DF0A00003F0A000000020000000A0000000A000051030000C60A0000340A000000030000000A0000000A000028040000AE0A00002A0A000000040000000A0000000A0000FE040000960A0000220A000000050000000A0000000A0000D50500007F0A00001B0A000000060000000A0000000A0000AC060000690A0000150A000000070000000A0000000A000083070000530A0000100A000000080000000A0000000A0000590800003E0A00000B0A000000090000000A0000000A0000300900002A0A0000080A0000000A0000000A0000000A0000060A0000160A0000040A0000000B0000000A0000000A0000DC0A0000030A0000010A0000000C0000000A0000000A0000B10B0000F0090000FF090000000D0000000A0000000A0000860C0000DE090000FC090000000E0000000A0000000A00005A0D0000CC090000F9090000000F0000000A0000000A00002D0E0000BA090000F609000000100000000A0000000A0000000F0000AA090000F309000000000000000B0000000A0000D1010000140C00004B0A000000010000000B0000000A0000A6020000FA0B00003E0A000000020000000B0000000A00007C030000E00B0000330A000000030000000B0000000A000053040000C80B00002A0A000000040000000B0000000A000029050000B00B0000210A000000050000000B0000000A000000060000990B00001B0A000000060000000B0000000A0000D7060000820B0000150A000000070000000B0000000A0000AD0700006C0B0000100A000000080000000B0000000A000084080000570B00000C0A000000090000000B0000000A00005A090000420B0000080A0000000A0000000B0000000A0000300A00002D0B0000050A0000000B0000000B0000000A0000060B00001A0B0000020A0000000C0000000B0000000A0000DB0B0000060B0000000A0000000D0000000B0000000A0000B00C0000F40A0000FD090000000E0000000B0000000A0000840D0000E20A0000FA090000000F0000000B0000000A0000570E0000D00A0000F809000000100000000B0000000A0000290F0000BF0A0000F409000000000000000C0000000A0000FC010000310D00004A0A000000010000000C0000000A0000D2020000160D00003D0A000000020000000C0000000A0000A8030000FD0C0000330A000000030000000C0000000A00007E040000E40C0000290A000000040000000C0000000A000054050000CB0C0000210A000000050000000C0000000A00002B060000B40C00001B0A000000060000000C0000000A0000020700009D0C0000150A000000070000000C0000000A0000D8070000860C0000100A000000080000000C0000000A0000AE080000700C00000C0A000000090000000C0000000A0000850900005B0C0000090A0000000A0000000C0000000A00005B0A0000460C0000060A0000000B0000000C0000000A0000300B0000320C0000030A0000000C0000000C0000000A0000050C00001F0C0000010A0000000D0000000C0000000A0000D90C00000C0C0000FE090000000E0000000C0000000A0000AD0D0000F90B0000FC090000000F0000000C0000000A0000800E0000E70B0000F909000000100000000C0000000A0000520F0000D50B0000F609000000000000000D0000000A000028020000500E0000490A000000010000000D0000000A0000FE020000350E00003D0A000000020000000D0000000A0000D30300001B0E0000320A000000030000000D0000000A0000A9040000020E0000290A000000040000000D0000000A000080050000E90D0000210A000000050000000D0000000A000056060000D10D00001B0A000000060000000D0000000A00002C070000B90D0000150A000000070000000D0000000A000003080000A20D0000100A000000080000000D0000000A0000D90800008C0D00000D0A000000090000000D0000000A0000AF090000770D0000090A0000000A0000000D0000000A0000850A0000620D0000070A0000000B0000000D0000000A00005A0B00004D0D0000040A0000000C0000000D0000000A00002F0C0000390D0000020A0000000D0000000D0000000A0000030D0000260D0000000A0000000E0000000D0000000A0000D70D0000130D0000FE090000000F0000000D0000000A0000AA0E0000000D0000FB09000000100000000D0000000A00007C0F0000EE0C0000F809000000000000000E0000000A000054020000710F0000480A000000010000000E0000000A000029030000560F00003C0A000000020000000E0000000A0000FF0300003C0F0000320A000000030000000E0000000A0000D4040000220F0000290A000000040000000E0000000A0000AB050000090F0000210A000000050000000E0000000A000081060000F10E00001B0A000000060000000E0000000A000057070000D90E0000150A000000070000000E0000000A00002D080000C20E0000110A000000080000000E0000000A000004090000AB0E00000D0A000000090000000E0000000A0000D9090000950E00000A0A0000000A0000000E0000000A0000AF0A00007F0E0000080A0000000B0000000E0000000A0000840B00006A0E0000050A0000000C0000000E0000000A0000590C0000560E0000030A0000000D0000000E0000000A00002D0D0000420E0000010A0000000E0000000E0000000A0000010E00002F0E0000FF090000000F0000000E0000000A0000D30E00001C0E0000FD09000000100000000E0000000A0000A50F00000A0E0000FA09000000000000000F0000000A00007F020000FF0F0000470A000000010000000F0000000A000054030000FF0F00003C0A000000020000000F0000000A00002A040000FF0F0000310A000000030000000F0000000A000000050000FF0F0000280A000000040000000F0000000A0000D5050000FF0F0000210A000000050000000F0000000A0000AC060000FF0F00001B0A000000060000000F0000000A000082070000FB0F0000160A000000070000000F0000000A000058080000E40F0000110A000000080000000F0000000A00002E090000CD0F00000E0A000000090000000F0000000A0000040A0000B60F00000B0A0000000A0000000F0000000A0000D90A0000A00F0000080A0000000B0000000F0000000A0000AE0B00008B0F0000060A0000000C0000000F0000000A0000830C0000760F0000040A0000000D0000000F0000000A0000570D0000620F0000030A0000000E0000000F0000000A00002A0E00004E0F0000010A0000000F0000000F0000000A0000FD0E00003B0F0000FF09000000100000000F0000000A0000CE0F0000280F0000FC0900000000000000100000000A0000AA020000FF0F0000470A00000001000000100000000A00007F030000FF0F00003B0A00000002000000100000000A000055040000FF0F0000310A00000003000000100000000A00002A050000FF0F0000280A00000004000000100000000A000000060000FF0F0000210A00000005000000100000000A0000D6060000FF0F00001B0A00000006000000100000000A0000AC070000FF0F0000160A00000007000000100000000A000082080000FF0F0000120A00000008000000100000000A000058090000FF0F00000E0A00000009000000100000000A00002D0A0000FF0F00000B0A0000000A000000100000000A0000030B0000FF0F0000090A0000000B000000100000000A0000D80B0000FF0F0000070A0000000C000000100000000A0000AC0C0000FF0F0000060A0000000D000000100000000A0000800D0000FF0F0000040A0000000E000000100000000A0000530E0000FF0F0000020A0000000F000000100000000A0000260F0000FF0F0000000A00000010000000100000000A0000F70F0000FF0F0000FE0900000000000000000000000B00000E00000000000000780B00000001000000000000000B0000E500000000000000690B00000002000000000000000B0000BC010000000000005C0B00000003000000000000000B00009402000000000000500B00000004000000000000000B00006C03000000000000460B00000005000000000000000B000044040000000000003D0B00000006000000000000000B00001C05000000000000350B00000007000000000000000B0000F5050000000000002E0B00000008000000000000000B0000CD06000000000000280B00000009000000000000000B0000A407000000000000220B0000000A000000000000000B00007C080000000000001D0B0000000B000000000000000B00005309000000000000180B0000000C000000000000000B0000290A000000000000130B0000000D000000000000000B0000FF0A0000000000000F0B0000000E000000000000000B0000D50B0000000000000A0B0000000F000000000000000B0000A90C000000000000050B00000010000000000000000B00007D0D000000000000000B00000000000000010000000B000034000000FB000000700B00000001000000010000000B00000A010000E5000000620B00000002000000010000000B0000E2010000D0000000550B00000003000000010000000B0000B9020000BB000000490B00000004000000010000000B000091030000A70000003F0B00000005000000010000000B00006904000094000000370B00000006000000010000000B000041050000810000002F0B00000007000000010000000B0000190600006F000000280B00000008000000010000000B0000F10600005E000000220B00000009000000010000000B0000C90700004D0000001C0B0000000A000000010000000B0000A00800003D000000170B0000000B000000010000000B0000770900002D000000130B0000000C000000010000000B00004D0A00001E0000000E0B0000000D000000010000000B0000230B00000F0000000A0B0000000E000000010000000B0000F80B000001000000050B0000000F000000010000000B0000CD0C000000000000010B00000010000000010000000B0000A00D000000000000FC0A00000000000000020000000B00005A0000001D0200006A0B00000001000000020000000B000031010000060200005C0B00000002000000020000000B000008020000F10100004F0B00000003000000020000000B0000E0020000DC010000440B00000004000000020000000B0000B7030000C80100003A0B00000005000000020000000B00008F040000B4010000310B00000006000000020000000B000067050000A10100002A0B00000007000000020000000B00003F0600008E010000230B00000008000000020000000B0000160700007D0100001D0B00000009000000020000000B0000EE0700006B010000180B0000000A000000020000000B0000C50800005B010000130B0000000B000000020000000B00009C0900004A0100000E0B0000000C000000020000000B0000720A00003B0100000A0B0000000D000000020000000B0000480B00002C010000060B0000000E000000020000000B00001D0C00001D010000020B0000000F000000020000000B0000F10C00000F010000FD0A00000010000000020000000B0000C50D000001010000F80A00000000000000030000000B0000820000003C030000640B00000001000000030000000B00005801000025030000560B00000002000000030000000B00002F0200000F0300004A0B00000003000000030000000B000007030000FA0200003F0B00000004000000030000000B0000DE030000E5020000350B00000005000000030000000B0000B6040000D10200002D0B00000006000000030000000B00008E050000BE020000250B00000007000000030000000B000065060000AB0200001F0B00000008000000030000000B00003D07000099020000190B00000009000000030000000B00001408000087020000140B0000000A000000030000000B0000EB080000760200000F0B0000000B000000030000000B0000C2090000650200000B0B0000000C000000030000000B0000980A000055020000070B0000000D000000030000000B00006E0B000046020000030B0000000E000000030000000B0000420C000037020000FF0A0000000F000000030000000B0000170D000028020000FA0A00000010000000030000000B0000EA0D00001A020000F50A00000000000000040000000B0000AA00000059040000600B00000001000000040000000B00008001000042040000520B00000002000000040000000B0000570200002B040000450B00000003000000040000000B00002F030000150400003B0B00000004000000040000000B00000604000000040000310B00000005000000040000000B0000DD040000EC030000290B00000006000000040000000B0000B5050000D8030000210B00000007000000040000000B00008D060000C50300001B0B00000008000000040000000B000064070000B2030000160B00000009000000040000000B00003B080000A0030000110B0000000A000000040000000B0000120900008F0300000C0B0000000B000000040000000B0000E90900007E030000080B0000000C000000040000000B0000BF0A00006E030000040B0000000D000000040000000B0000940B00005E030000000B0000000E000000040000000B0000690C00004E030000FC0A0000000F000000040000000B00003D0D000040030000F80A00000010000000040000000B0000100E000031030000F30A00000000000000050000000B0000D3000000740500005C0B00000001000000050000000B0000A90100005C0500004E0B00000002000000050000000B00008002000045050000420B00000003000000050000000B0000570300002F050000370B00000004000000050000000B00002E0400001A0500002E0B00000005000000050000000B00000605000005050000260B00000006000000050000000B0000DD050000F10400001F0B00000007000000050000000B0000B5060000DD040000180B00000008000000050000000B00008C070000CA040000130B00000009000000050000000B000063080000B80400000E0B0000000A000000050000000B00003A090000A60400000A0B0000000B000000050000000B0000100A000095040000060B0000000C000000050000000B0000E60A000084040000020B0000000D000000050000000B0000BB0B000074040000FF0A0000000E000000050000000B0000900C000064040000FB0A0000000F000000050000000B0000640D000055040000F70A00000010000000050000000B0000370E000046040000F20A00000000000000060000000B0000FD0000008D060000580B00000001000000060000000B0000D3010000760600004B0B00000002000000060000000B0000AA0200005E0600003F0B00000003000000060000000B00008003000048060000340B00000004000000060000000B000058040000320600002B0B00000005000000060000000B00002F0500001D060000230B00000006000000060000000B000006060000080600001C0B00000007000000060000000B0000DD060000F4050000160B00000008000000060000000B0000B5070000E1050000110B00000009000000060000000B00008B080000CE0500000C0B0000000A000000060000000B000062090000BC050000080B0000000B000000060000000B0000380A0000AA050000050B0000000C000000060000000B00000E0B000099050000010B0000000D000000060000000B0000E30B000089050000FD0A0000000E000000060000000B0000B80C000079050000FA0A0000000F000000060000000B00008B0D000069050000F60A00000010000000060000000B00005E0E00005A050000F20A00000000000000070000000B000027010000A6070000550B00000001000000070000000B0000FD0100008E070000480B00000002000000070000000B0000D3020000770700003C0B00000003000000070000000B0000AA03000060070000320B00000004000000070000000B0000810400004A070000290B00000005000000070000000B00005805000034070000210B00000006000000070000000B0000300600001F0700001A0B00000007000000070000000B0000070700000B070000150B00000008000000070000000B0000DE070000F7060000100B00000009000000070000000B0000B4080000E40600000B0B0000000A000000070000000B00008B090000D1060000070B0000000B000000070000000B0000610A0000BF060000040B0000000C000000070000000B0000370B0000AE060000000B0000000D000000070000000B00000C0C00009D060000FD0A0000000E000000070000000B0000E00C00008C060000F90A0000000F000000070000000B0000B40D00007C060000F60A00000010000000070000000B0000860E00006D060000F20A00000000000000080000000B000052010000BF080000530B00000001000000080000000B000028020000A7080000460B00000002000000080000000B0000FE0200008F0800003A0B00000003000000080000000B0000D503000077080000300B00000004000000080000000B0000AB04000061080000270B00000005000000080000000B0000820500004B080000200B00000006000000080000000B00005906000036080000190B00000007000000080000000B00003007000021080000130B00000008000000080000000B0000070800000D0800000F0B00000009000000080000000B0000DE080000F90700000A0B0000000A000000080000000B0000B4090000E6070000070B0000000B000000080000000B00008A0A0000D4070000030B0000000C000000080000000B0000600B0000C2070000000B0000000D000000080000000B0000340C0000B1070000FD0A0000000E000000080000000B0000090D0000A0070000FA0A0000000F000000080000000B0000DC0D00008F070000F60A00000010000000080000000B0000AF0E00007F070000F20A00000000000000090000000B00007D010000D8090000510B00000001000000090000000B000053020000BF090000440B00000002000000090000000B000029030000A7090000390B00000003000000090000000B0000FF0300008F0900002F0B00000004000000090000000B0000D604000078090000260B00000005000000090000000B0000AD050000620900001F0B00000006000000090000000B0000840600004C090000180B00000007000000090000000B00005A07000037090000130B00000008000000090000000B000031080000230900000E0B00000009000000090000000B0000080900000F0900000A0B0000000A000000090000000B0000DE090000FB080000060B0000000B000000090000000B0000B40A0000E9080000030B0000000C000000090000000B0000890B0000D6080000000B0000000D000000090000000B00005E0C0000C5080000FD0A0000000E000000090000000B0000320D0000B3080000FA0A0000000F000000090000000B0000050E0000A3080000F70A00000010000000090000000B0000D80E000092080000F30A000000000000000A0000000B0000A8010000F20A00004F0B000000010000000A0000000B00007E020000D80A0000430B000000020000000A0000000B000054030000C00A0000370B000000030000000A0000000B00002A040000A80A00002D0B000000040000000A0000000B000001050000900A0000250B000000050000000A0000000B0000D70500007A0A00001E0B000000060000000A0000000B0000AE060000640A0000180B000000070000000A0000000B0000850700004E0A0000120B000000080000000A0000000B00005B080000390A00000E0B000000090000000A0000000B000032090000250A00000A0B0000000A0000000A0000000B0000080A0000110A0000070B0000000B0000000A0000000B0000DD0A0000FE090000030B0000000C0000000A0000000B0000B30B0000EB090000010B0000000D0000000A0000000B0000870C0000D9090000FE0A0000000E0000000A0000000B00005B0D0000C8090000FB0A0000000F0000000A0000000B00002E0E0000B6090000F80A000000100000000A0000000B0000010F0000A6090000F40A000000000000000B0000000B0000D40100000D0C00004E0B000000010000000B0000000B0000A9020000F30B0000410B000000020000000B0000000B00007F030000DA0B0000360B000000030000000B0000000B000055040000C10B00002D0B000000040000000B0000000B00002C050000AA0B0000240B000000050000000B0000000B000002060000930B00001D0B000000060000000B0000000B0000D90600007C0B0000170B000000070000000B0000000B0000AF070000660B0000120B000000080000000B0000000B000086080000510B00000E0B000000090000000B0000000B00005C0900003C0B00000A0B0000000A0000000B0000000B0000320A0000280B0000070B0000000B0000000B0000000B0000070B0000150B0000040B0000000C0000000B0000000B0000DC0B0000020B0000010B0000000D0000000B0000000B0000B10C0000EF0A0000FF0A0000000E0000000B0000000B0000850D0000DD0A0000FC0A0000000F0000000B0000000B0000580E0000CC0A0000F90A000000100000000B0000000B00002A0F0000BB0A0000F60A000000000000000C0000000B0000FF010000290D00004D0B000000010000000C0000000B0000D50200000F0D0000400B000000020000000C0000000B0000AA030000F50C0000350B000000030000000C0000000B000080040000DD0C00002C0B000000040000000C0000000B000057050000C50C0000240B000000050000000C0000000B00002D060000AD0C00001D0B000000060000000C0000000B000004070000960C0000170B000000070000000C0000000B0000DA070000800C0000120B000000080000000C0000000B0000B00800006A0C00000E0B000000090000000C0000000B000086090000550C00000A0B0000000A0000000C0000000B00005C0A0000410C0000070B0000000B0000000C0000000B0000320B00002D0C0000050B0000000C0000000C0000000B0000060C0000190C0000020B0000000D0000000C0000000B0000DB0C0000070C0000000B0000000E0000000C0000000B0000AE0D0000F40B0000FD0A0000000F0000000C0000000B0000810E0000E20B0000FA0A000000100000000C0000000B0000530F0000D10B0000F70A000000000000000D0000000B00002B020000480E00004C0B000000010000000D0000000B0000000300002D0E00003F0B000000020000000D0000000B0000D6030000130E0000350B000000030000000D0000000B0000AC040000FA0D00002B0B000000040000000D0000000B000082050000E20D0000230B000000050000000D0000000B000058060000CA0D00001D0B000000060000000D0000000B00002E070000B30D0000170B000000070000000D0000000B0000050800009C0D0000120B000000080000000D0000000B0000DB080000860D00000E0B000000090000000D0000000B0000B1090000710D00000B0B0000000A0000000D0000000B0000860A00005C0D0000080B0000000B0000000D0000000B00005C0B0000470D0000060B0000000C0000000D0000000B0000300C0000340D0000030B0000000D0000000D0000000B0000050D0000200D0000010B0000000E0000000D0000000B0000D80D00000E0D0000FF0A0000000F0000000D0000000B0000AB0E0000FB0C0000FC0A000000100000000D0000000B00007D0F0000E90C0000F90A000000000000000E0000000B000057020000690F00004B0B000000010000000E0000000B00002C0300004E0F00003F0B000000020000000E0000000B000001040000340F0000340B000000030000000E0000000B0000D70400001A0F00002B0B000000040000000E0000000B0000AD050000020F0000230B000000050000000E0000000B000083060000E90E00001D0B000000060000000E0000000B000059070000D20E0000170B000000070000000E0000000B00002F080000BB0E0000120B000000080000000E0000000B000005090000A40E00000F0B000000090000000E0000000B0000DB0900008E0E00000C0B0000000A0000000E0000000B0000B10A0000790E0000090B0000000B0000000E0000000B0000860B0000640E0000060B0000000C0000000E0000000B00005A0C0000500E0000040B0000000D0000000E0000000B00002E0D00003D0E0000020B0000000E0000000E0000000B0000020E00002A0E0000000B0000000F0000000E0000000B0000D40E0000170E0000FE0A000000100000000E0000000B0000A60F0000050E0000FB0A000000000000000F0000000B000082020000FF0F00004A0B000000010000000F0000000B000057030000FF0F00003E0B000000020000000F0000000B00002C040000FF0F0000330B000000030000000F0000000B000002050000FF0F00002A0B000000040000000F0000000B0000D8050000FF0F0000230B000000050000000F0000000B0000AE060000FF0F00001C0B000000060000000F0000000B000084070000F40F0000170B000000070000000F0000000B00005A080000DC0F0000130B000000080000000F0000000B000030090000C60F00000F0B000000090000000F0000000B0000050A0000B00F00000C0B0000000A0000000F0000000B0000DB0A00009A0F0000090B0000000B0000000F0000000B0000AF0B0000850F0000070B0000000C0000000F0000000B0000840C0000700F0000050B0000000D0000000F0000000B0000580D00005C0F0000030B0000000E0000000F0000000B00002B0E0000490F0000010B0000000F0000000F0000000B0000FE0E0000360F0000FF0A000000100000000F0000000B0000CF0F0000230F0000FC0A00000000000000100000000B0000AD020000FF0F0000480B00000001000000100000000B000082030000FF0F00003D0B00000002000000100000000B000057040000FF0F0000320B00000003000000100000000B00002C050000FF0F00002A0B00000004000000100000000B000002060000FF0F0000220B00000005000000100000000B0000D8060000FF0F00001C0B00000006000000100000000B0000AE070000FF0F0000170B00000007000000100000000B000084080000FF0F0000130B00000008000000100000000B000059090000FF0F00000F0B00000009000000100000000B00002F0A0000FF0F00000C0B0000000A000000100000000B0000040B0000FF0F00000A0B0000000B000000100000000B0000D90B0000FF0F0000080B0000000C000000100000000B0000AD0C0000FF0F0000060B0000000D000000100000000B0000810D0000FF0F0000040B0000000E000000100000000B0000540E0000FF0F0000030B0000000F000000100000000B0000270F0000FF0F0000010B00000010000000100000000B0000F80F0000FF0F0000FE0A00000000000000000000000C000014000000000000007E0C00000001000000000000000C0000EB000000000000006F0C00000002000000000000000C0000C201000000000000610C00000003000000000000000C00009902000000000000560C00000004000000000000000C000071030000000000004B0C00000005000000000000000C00004904000000000000420C00000006000000000000000C000021050000000000003A0C00000007000000000000000C0000F905000000000000330C00000008000000000000000C0000D1060000000000002C0C00000009000000000000000C0000A907000000000000260C0000000A000000000000000C00008008000000000000210C0000000B000000000000000C000057090000000000001C0C0000000C000000000000000C00002D0A000000000000170C0000000D000000000000000C0000030B000000000000120C0000000E000000000000000C0000D80B0000000000000D0C0000000F000000000000000C0000AD0C000000000000080C00000010000000000000000C0000800D000000000000030C00000000000000010000000C000039000000F6000000760C00000001000000010000000C000010010000E0000000670C00000002000000010000000C0000E7010000CB0000005A0C00000003000000010000000C0000BE020000B60000004F0C00000004000000010000000C000096030000A2000000440C00000005000000010000000C00006E0400008F0000003B0C00000006000000010000000C0000460500007D000000330C00000007000000010000000C00001E0600006B0000002C0C00000008000000010000000C0000F506000059000000260C00000009000000010000000C0000CD07000048000000200C0000000A000000010000000C0000A4080000380000001B0C0000000B000000010000000C00007B09000028000000160C0000000C000000010000000C0000510A000019000000120C0000000D000000010000000C0000270B00000B0000000D0C0000000E000000010000000C0000FC0B000000000000080C0000000F000000010000000C0000D00C000000000000030C00000010000000010000000C0000A40D000000000000FE0B00000000000000020000000C000060000000170200006F0C00000001000000020000000C00003601000001020000610C00000002000000020000000C00000D020000EB010000540C00000003000000020000000C0000E5020000D7010000490C00000004000000020000000C0000BC030000C20100003F0C00000005000000020000000C000094040000AF010000360C00000006000000020000000C00006B0500009C0100002E0C00000007000000020000000C00004306000089010000270C00000008000000020000000C00001B07000078010000210C00000009000000020000000C0000F2070000660100001B0C0000000A000000020000000C0000C908000056010000160C0000000B000000020000000C0000A009000046010000120C0000000C000000020000000C0000760A0000360100000D0C0000000D000000020000000C00004B0B000027010000090C0000000E000000020000000C0000200C000019010000040C0000000F000000020000000C0000F40C00000B010000000C00000010000000020000000C0000C80D0000FD000000FA0B00000000000000030000000C000087000000360300006A0C00000001000000030000000C00005E0100001F0300005B0C00000002000000030000000C000034020000090300004F0C00000003000000030000000C00000C030000F4020000430C00000004000000030000000C0000E3030000DF020000390C00000005000000030000000C0000BB040000CC020000310C00000006000000030000000C000092050000B8020000290C00000007000000030000000C00006A060000A5020000220C00000008000000030000000C000041070000930200001D0C00000009000000030000000C00001808000082020000170C0000000A000000030000000C0000EF08000071020000120C0000000B000000030000000C0000C6090000600200000E0C0000000C000000030000000C00009C0A0000500200000A0C0000000D000000030000000C0000710B000041020000050C0000000E000000030000000C0000460C000032020000010C0000000F000000030000000C00001A0D000024020000FC0B00000010000000030000000C0000ED0D000016020000F80B00000000000000040000000C0000AF00000052040000650C00000001000000040000000C0000860100003B040000560C00000002000000040000000C00005C020000250400004A0C00000003000000040000000C0000330300000F0400003F0C00000004000000040000000C00000B040000FA030000350C00000005000000040000000C0000E2040000E60300002D0C00000006000000040000000C0000BA050000D2030000250C00000007000000040000000C000091060000BF0300001F0C00000008000000040000000C000068070000AD030000190C00000009000000040000000C00003F0800009B030000140C0000000A000000040000000C000016090000890300000F0C0000000B000000040000000C0000EC090000790300000B0C0000000C000000040000000C0000C20A000068030000070C0000000D000000040000000C0000970B000059030000030C0000000E000000040000000C00006C0C000049030000FF0B0000000F000000040000000C0000400D00003B030000FA0B00000010000000040000000C0000130E00002C030000F50B00000000000000050000000C0000D80000006D050000600C00000001000000050000000C0000AE01000056050000520C00000002000000050000000C0000850200003F050000460C00000003000000050000000C00005C030000290500003B0C00000004000000050000000C00003304000014050000320C00000005000000050000000C00000A050000FF040000290C00000006000000050000000C0000E2050000EB040000220C00000007000000050000000C0000B9060000D70400001C0C00000008000000050000000C000090070000C4040000160C00000009000000050000000C000067080000B2040000110C0000000A000000050000000C00003E090000A00400000D0C0000000B000000050000000C0000140A00008F040000090C0000000C000000050000000C0000EA0A00007F040000050C0000000D000000050000000C0000BF0B00006E040000010C0000000E000000050000000C0000930C00005F040000FD0B0000000F000000050000000C0000670D000050040000F90B00000010000000050000000C00003A0E000041040000F40B00000000000000060000000C000002010000860600005D0C00000001000000060000000C0000D80100006E0600004F0C00000002000000060000000C0000AE02000057060000430C00000003000000060000000C00008503000041060000380C00000004000000060000000C00005C0400002B0600002F0C00000005000000060000000C00003305000016060000270C00000006000000060000000C00000A060000020600001F0C00000007000000060000000C0000E2060000EE050000190C00000008000000060000000C0000B9070000DB050000140C00000009000000060000000C00008F080000C80500000F0C0000000A000000060000000C000066090000B60500000B0C0000000B000000060000000C00003C0A0000A4050000070C0000000C000000060000000C0000110B000093050000030C0000000D000000060000000C0000E60B000083050000FF0B0000000E000000060000000C0000BB0C000073050000FC0B0000000F000000060000000C00008E0D000064050000F80B00000010000000060000000C0000610E000055050000F30B00000000000000070000000C00002C0100009F070000590C00000001000000070000000C000002020000870700004C0C00000002000000070000000C0000D80200006F070000400C00000003000000070000000C0000AF03000059070000350C00000004000000070000000C000086040000420700002C0C00000005000000070000000C00005D0500002D070000240C00000006000000070000000C000034060000180700001D0C00000007000000070000000C00000B07000004070000170C00000008000000070000000C0000E2070000F0060000120C00000009000000070000000C0000B8080000DD0600000E0C0000000A000000070000000C00008F090000CB0600000A0C0000000B000000070000000C0000650A0000B9060000060C0000000C000000070000000C00003A0B0000A8060000020C0000000D000000070000000C00000F0C000097060000FF0B0000000E000000070000000C0000E30C000086060000FB0B0000000F000000070000000C0000B70D000077060000F70B00000010000000070000000C0000890E000067060000F30B00000000000000080000000C000057010000B7080000570C00000001000000080000000C00002C0200009F080000490C00000002000000080000000C000003030000870800003E0C00000003000000080000000C0000D903000070080000330C00000004000000080000000C0000B0040000590800002A0C00000005000000080000000C00008705000043080000230C00000006000000080000000C00005E0600002E0800001C0C00000007000000080000000C0000340700001A080000160C00000008000000080000000C00000B08000006080000110C00000009000000080000000C0000E2080000F20700000D0C0000000A000000080000000C0000B8090000E0070000090C0000000B000000080000000C00008E0A0000CD070000050C0000000C000000080000000C0000630B0000BC070000020C0000000D000000080000000C0000380C0000AA070000FE0B0000000E000000080000000C00000C0D00009A070000FB0B0000000F000000080000000C0000DF0D000089070000F70B00000010000000080000000C0000B20E00007A070000F30B00000000000000090000000C000082010000CF090000540C00000001000000090000000C000057020000B7090000470C00000002000000090000000C00002D0300009F0900003C0C00000003000000090000000C00000404000087090000320C00000004000000090000000C0000DA04000070090000290C00000005000000090000000C0000B10500005A090000210C00000006000000090000000C000088060000450900001B0C00000007000000090000000C00005E07000030090000150C00000008000000090000000C0000350800001B090000100C00000009000000090000000C00000B090000080900000C0C0000000A000000090000000C0000E1090000F4080000080C0000000B000000090000000C0000B70A0000E2080000050C0000000C000000090000000C00008C0B0000D0080000020C0000000D000000090000000C0000610C0000BE080000FF0B0000000E000000090000000C0000350D0000AD080000FB0B0000000F000000090000000C0000080E00009C080000F80B00000010000000090000000C0000DA0E00008C080000F40B000000000000000A0000000C0000AD010000E90A0000530C000000010000000A0000000C000082020000CF0A0000450C000000020000000A0000000C000058030000B70A00003A0C000000030000000A0000000C00002F0400009F0A0000300C000000040000000A0000000C000005050000880A0000280C000000050000000A0000000C0000DC050000710A0000200C000000060000000A0000000C0000B20600005C0A00001A0C000000070000000A0000000C000089070000460A0000140C000000080000000A0000000C00005F080000310A0000100C000000090000000A0000000C0000350900001D0A00000C0C0000000A0000000A0000000C00000B0A00000A0A0000080C0000000B0000000A0000000C0000E10A0000F7090000050C0000000C0000000A0000000C0000B60B0000E4090000020C0000000D0000000A0000000C00008A0C0000D2090000FF0B0000000E0000000A0000000C00005E0D0000C1090000FC0B0000000F0000000A0000000C0000310E0000B0090000F90B000000100000000A0000000C0000030F0000A0090000F50B000000000000000B0000000C0000D8010000030C0000510C000000010000000B0000000C0000AE020000E90B0000440C000000020000000B0000000C000084030000D10B0000390C000000030000000B0000000C00005A040000B80B00002F0C000000040000000B0000000C000030050000A10B0000270C000000050000000B0000000C0000060600008A0B00001F0C000000060000000B0000000C0000DD060000740B0000190C000000070000000B0000000C0000B30700005E0B0000140C000000080000000B0000000C00008A080000490B00000F0C000000090000000B0000000C000060090000340B00000C0C0000000A0000000B0000000C0000350A0000200B0000080C0000000B0000000B0000000C00000B0B00000D0B0000050C0000000C0000000B0000000C0000E00B0000FA0A0000020C0000000D0000000B0000000C0000B40C0000E80A0000000C0000000E0000000B0000000C0000880D0000D60A0000FD0B0000000F0000000B0000000C00005B0E0000C50A0000FA0B000000100000000B0000000C00002D0F0000B40A0000F60B000000000000000C0000000C0000040200001F0D00004F0C000000010000000C0000000C0000D9020000050D0000430C000000020000000C0000000C0000AF030000EC0C0000380C000000030000000C0000000C000085040000D30C00002E0C000000040000000C0000000C00005B050000BB0C0000260C000000050000000C0000000C000031060000A40C00001F0C000000060000000C0000000C0000080700008D0C0000190C000000070000000C0000000C0000DE070000770C0000140C000000080000000C0000000C0000B4080000620C00000F0C000000090000000C0000000C00008A0900004D0C00000C0C0000000A0000000C0000000C0000600A0000390C0000090C0000000B0000000C0000000C0000350B0000250C0000060C0000000C0000000C0000000C00000A0C0000120C0000030C0000000D0000000C0000000C0000DE0C0000FF0B0000010C0000000E0000000C0000000C0000B10D0000ED0B0000FE0B0000000F0000000C0000000C0000840E0000DB0B0000FB0B000000100000000C0000000C0000560F0000CA0B0000F80B000000000000000D0000000C0000300200003D0E00004E0C000000010000000D0000000C000005030000230E0000410C000000020000000D0000000C0000DA030000090E0000370C000000030000000D0000000C0000B0040000F00D00002D0C000000040000000D0000000C000086050000D80D0000250C000000050000000D0000000C00005C060000C00D00001E0C000000060000000D0000000C000032070000A90D0000180C000000070000000D0000000C000008080000930D0000140C000000080000000D0000000C0000DE0800007D0D0000100C000000090000000D0000000C0000B4090000680D00000C0C0000000A0000000D0000000C00008A0A0000530D0000090C0000000B0000000D0000000C00005F0B00003F0D0000060C0000000C0000000D0000000C0000340C00002C0D0000040C0000000D0000000D0000000C0000080D0000190D0000010C0000000E0000000D0000000C0000DB0D0000060D0000FF0B0000000F0000000D0000000C0000AE0E0000F40C0000FC0B000000100000000D0000000C00007F0F0000E20C0000F90B000000000000000E0000000C00005B0200005E0F00004D0C000000010000000E0000000C000030030000430F0000400C000000020000000E0000000C000005040000290F0000360C000000030000000E0000000C0000DB040000100F00002C0C000000040000000E0000000C0000B1050000F80E0000240C000000050000000E0000000C000087060000E00E00001E0C000000060000000E0000000C00005D070000C80E0000180C000000070000000E0000000C000033080000B10E0000140C000000080000000E0000000C0000090900009B0E0000100C000000090000000E0000000C0000DF090000860E00000C0C0000000A0000000E0000000C0000B40A0000710E0000090C0000000B0000000E0000000C0000890B00005C0E0000070C0000000C0000000E0000000C00005D0C0000480E0000050C0000000D0000000E0000000C0000310D0000350E0000030C0000000E0000000E0000000C0000050E0000220E0000000C0000000F0000000E0000000C0000D70E00000F0E0000FE0B000000100000000E0000000C0000A90F0000FD0D0000FB0B000000000000000F0000000C000086020000FF0F00004B0C000000010000000F0000000C00005B030000FF0F00003F0C000000020000000F0000000C000030040000FF0F0000350C000000030000000F0000000C000006050000FF0F00002B0C000000040000000F0000000C0000DC050000FF0F0000240C000000050000000F0000000C0000B1060000FF0F00001D0C000000060000000F0000000C000087070000EA0F0000180C000000070000000F0000000C00005D080000D30F0000130C000000080000000F0000000C000033090000BC0F0000100C000000090000000F0000000C0000090A0000A60F00000D0C0000000A0000000F0000000C0000DE0A0000910F00000A0C0000000B0000000F0000000C0000B30B00007C0F0000080C0000000C0000000F0000000C0000870C0000680F0000060C0000000D0000000F0000000C00005B0D0000540F0000030C0000000E0000000F0000000C00002E0E0000410F0000010C0000000F0000000F0000000C0000000F00002E0F0000FF0B000000100000000F0000000C0000D20F00001C0F0000FC0B00000000000000100000000C0000B1020000FF0F00004A0C00000001000000100000000C000086030000FF0F00003E0C00000002000000100000000C00005B040000FF0F0000330C00000003000000100000000C000030050000FF0F00002B0C00000004000000100000000C000006060000FF0F0000230C00000005000000100000000C0000DC060000FF0F00001D0C00000006000000100000000C0000B2070000FF0F0000170C00000007000000100000000C000087080000FF0F0000130C00000008000000100000000C00005D090000FF0F0000100C00000009000000100000000C0000320A0000FF0F00000D0C0000000A000000100000000C0000070B0000FF0F00000A0C0000000B000000100000000C0000DC0B0000FF0F0000080C0000000C000000100000000C0000B00C0000FF0F0000060C0000000D000000100000000C0000840D0000FF0F0000040C0000000E000000100000000C0000570E0000FF0F0000020C0000000F000000100000000C0000290F0000FF0F0000000C00000010000000100000000C0000FB0F0000FF0F0000FE0B00000000000000000000000D00001B00000000000000830D00000001000000000000000D0000F200000000000000740D00000002000000000000000D0000C901000000000000670D00000003000000000000000D0000A1020000000000005B0D00000004000000000000000D00007803000000000000500D00000005000000000000000D00005004000000000000470D00000006000000000000000D000028050000000000003E0D00000007000000000000000D00000006000000000000370D00000008000000000000000D0000D706000000000000300D00000009000000000000000D0000AF070000000000002A0D0000000A000000000000000D00008608000000000000240D0000000B000000000000000D00005D090000000000001F0D0000000C000000000000000D0000330A0000000000001A0D0000000D000000000000000D0000090B000000000000150D0000000E000000000000000D0000DE0B000000000000100D0000000F000000000000000D0000B20C0000000000000B0D00000010000000000000000D0000850D000000000000050D00000000000000010000000D000041000000EE0000007B0D00000001000000010000000D000017010000D80000006C0D00000002000000010000000D0000EE010000C30000005F0D00000003000000010000000D0000C6020000AE000000530D00000004000000010000000D00009D0300009B000000490D00000005000000010000000D00007504000087000000400D00000006000000010000000D00004D05000075000000370D00000007000000010000000D00002406000063000000300D00000008000000010000000D0000FC060000510000002A0D00000009000000010000000D0000D307000041000000240D0000000A000000010000000D0000AA080000310000001E0D0000000B000000010000000D00008109000021000000190D0000000C000000010000000D0000570A000012000000140D0000000D000000010000000D00002C0B000003000000100D0000000E000000010000000D0000010C0000000000000B0D0000000F000000010000000D0000D50C000000000000060D00000010000000010000000D0000A90D000000000000000D00000000000000020000000D0000670000000F020000740D00000001000000020000000D00003E010000F8010000660D00000002000000020000000D000015020000E3010000590D00000003000000020000000D0000EC020000CE0100004D0D00000004000000020000000D0000C3030000BA010000430D00000005000000020000000D00009B040000A60100003A0D00000006000000020000000D00007205000094010000320D00000007000000020000000D00004A060000810100002B0D00000008000000020000000D00002107000070010000240D00000009000000020000000D0000F80700005E0100001F0D0000000A000000020000000D0000CF0800004E010000190D0000000B000000020000000D0000A60900003E010000140D0000000C000000020000000D00007C0A00002E010000100D0000000D000000020000000D0000510B00001F0100000B0D0000000E000000020000000D0000260C000011010000060D0000000F000000020000000D0000FA0C000003010000010D00000010000000020000000D0000CD0D0000F6000000FC0C00000000000000030000000D00008F0000002D0300006E0D00000001000000030000000D00006501000016030000600D00000002000000030000000D00003C02000000030000530D00000003000000030000000D000013030000EB020000470D00000004000000030000000D0000EA030000D70200003D0D00000005000000030000000D0000C1040000C3020000340D00000006000000030000000D000099050000B00200002D0D00000007000000030000000D0000700600009D020000260D00000008000000030000000D0000470700008B020000200D00000009000000030000000D00001E080000790200001A0D0000000A000000030000000D0000F508000069020000150D0000000B000000030000000D0000CB09000058020000100D0000000C000000030000000D0000A10A0000480200000C0D0000000D000000030000000D0000770B000039020000080D0000000E000000030000000D00004B0C00002A020000030D0000000F000000030000000D00001F0D00001C020000FE0C00000010000000030000000D0000F20D00000E020000F90C00000000000000040000000D0000B700000049040000690D00000001000000040000000D00008D010000320400005B0D00000002000000040000000D0000640200001C0400004E0D00000003000000040000000D00003A03000006040000430D00000004000000040000000D000012040000F1030000390D00000005000000040000000D0000E9040000DD030000300D00000006000000040000000D0000C0050000C9030000280D00000007000000040000000D000097060000B6030000220D00000008000000040000000D00006E070000A40300001C0D00000009000000040000000D00004508000092030000170D0000000A000000040000000D00001C09000081030000120D0000000B000000040000000D0000F2090000700300000D0D0000000C000000040000000D0000C80A000060030000090D0000000D000000040000000D00009D0B000050030000050D0000000E000000040000000D0000710C000041030000000D0000000F000000040000000D0000450D000033030000FC0C00000010000000040000000D0000180E000024030000F70C00000000000000050000000D0000E000000063050000640D00000001000000050000000D0000B60100004C050000560D00000002000000050000000D00008C020000350500004A0D00000003000000050000000D0000630300001F0500003F0D00000004000000050000000D00003A0400000A050000350D00000005000000050000000D000011050000F50400002C0D00000006000000050000000D0000E8050000E1040000250D00000007000000050000000D0000BF060000CE0400001E0D00000008000000050000000D000096070000BB040000190D00000009000000050000000D00006D080000A9040000140D0000000A000000050000000D000043090000970400000F0D0000000B000000050000000D00001A0A0000860400000B0D0000000C000000050000000D0000EF0A000076040000070D0000000D000000050000000D0000C40B000066040000030D0000000E000000050000000D0000980C000056040000FE0C0000000F000000050000000D00006C0D000047040000FA0C00000010000000050000000D00003F0E000039040000F50C00000000000000060000000D0000090100007C060000600D00000001000000060000000D0000DF01000064060000520D00000002000000060000000D0000B50200004D060000460D00000003000000060000000D00008C030000370600003B0D00000004000000060000000D00006304000021060000320D00000005000000060000000D00003A0500000C060000290D00000006000000060000000D000011060000F8050000220D00000007000000060000000D0000E8060000E40500001C0D00000008000000060000000D0000BF070000D1050000160D00000009000000060000000D000095080000BF050000110D0000000A000000060000000D00006C090000AD0500000D0D0000000B000000060000000D0000420A00009B050000090D0000000C000000060000000D0000170B00008B050000050D0000000D000000060000000D0000EC0B00007A050000010D0000000E000000060000000D0000C00C00006A050000FD0C0000000F000000060000000D0000940D00005B050000F90C00000010000000060000000D0000660E00004C050000F40C00000000000000070000000D000033010000940700005D0D00000001000000070000000D0000090200007C0700004F0D00000002000000070000000D0000DF02000065070000430D00000003000000070000000D0000B60300004E070000380D00000004000000070000000D00008C040000380700002F0D00000005000000070000000D00006305000023070000270D00000006000000070000000D00003A0600000E070000200D00000007000000070000000D000011070000FA0600001A0D00000008000000070000000D0000E8070000E7060000140D00000009000000070000000D0000BE080000D4060000100D0000000A000000070000000D000094090000C10600000B0D0000000B000000070000000D00006A0A0000B0060000070D0000000C000000070000000D0000400B00009E060000040D0000000D000000070000000D0000140C00008E060000000D0000000E000000070000000D0000E80C00007D060000FC0C0000000F000000070000000D0000BC0D00006E060000F80C00000010000000070000000D00008E0E00005E060000F40C00000000000000080000000D00005E010000AC0800005A0D00000001000000080000000D000033020000930800004C0D00000002000000080000000D0000090300007C080000400D00000003000000080000000D0000E003000065080000360D00000004000000080000000D0000B60400004F0800002D0D00000005000000080000000D00008D05000039080000250D00000006000000080000000D000064060000240800001E0D00000007000000080000000D00003B0700000F080000180D00000008000000080000000D000011080000FC070000130D00000009000000080000000D0000E8080000E80700000E0D0000000A000000080000000D0000BE090000D60700000A0D0000000B000000080000000D0000930A0000C4070000060D0000000C000000080000000D0000680B0000B2070000030D0000000D000000080000000D00003D0C0000A1070000FF0C0000000E000000080000000D0000110D000090070000FC0C0000000F000000080000000D0000E40D000080070000F80C00000010000000080000000D0000B70E000071070000F40C00000000000000090000000D000089010000C4090000570D00000001000000090000000D00005E020000AB0900004A0D00000002000000090000000D000034030000930900003E0D00000003000000090000000D00000A0400007C090000340D00000004000000090000000D0000E1040000650900002B0D00000005000000090000000D0000B70500004F090000230D00000006000000090000000D00008E0600003A0900001D0D00000007000000090000000D00006507000025090000170D00000008000000090000000D00003B08000011090000120D00000009000000090000000D000011090000FD0800000D0D0000000A000000090000000D0000E7090000EA0800000A0D0000000B000000090000000D0000BD0A0000D8080000060D0000000C000000090000000D0000920B0000C6080000030D0000000D000000090000000D0000660C0000B4080000FF0C0000000E000000090000000D00003A0D0000A3080000FC0C0000000F000000090000000D00000D0E000093080000F80C00000010000000090000000D0000DF0E000083080000F40C000000000000000A0000000D0000B4010000DC0A0000550D000000010000000A0000000D000089020000C30A0000480D000000020000000A0000000D00005F030000AB0A00003C0D000000030000000A0000000D000035040000930A0000320D000000040000000A0000000D00000B0500007C0A0000290D000000050000000A0000000D0000E2050000660A0000220D000000060000000A0000000D0000B8060000500A00001B0D000000070000000A0000000D00008F0700003B0A0000160D000000080000000A0000000D000065080000270A0000110D000000090000000A0000000D00003B090000130A00000D0D0000000A0000000A0000000D0000110A0000FF090000090D0000000B0000000A0000000D0000E60A0000EC090000060D0000000C0000000A0000000D0000BB0B0000DA090000030D0000000D0000000A0000000D0000900C0000C8090000000D0000000E0000000A0000000D0000630D0000B7090000FC0C0000000F0000000A0000000D0000360E0000A6090000F90C000000100000000A0000000D0000080F000096090000F50C000000000000000B0000000D0000DF010000F60B0000530D000000010000000B0000000D0000B4020000DD0B0000460D000000020000000B0000000D00008A030000C40B00003B0D000000030000000B0000000D000060040000AC0B0000310D000000040000000B0000000D000036050000950B0000280D000000050000000B0000000D00000D0600007E0B0000210D000000060000000B0000000D0000E3060000680B00001B0D000000070000000B0000000D0000B9070000530B0000150D000000080000000B0000000D00008F0800003E0B0000110D000000090000000B0000000D000065090000290B00000D0D0000000A0000000B0000000D00003B0A0000160B0000090D0000000B0000000B0000000D0000100B0000020B0000060D0000000C0000000B0000000D0000E50B0000F00A0000030D0000000D0000000B0000000D0000B90C0000DE0A0000000D0000000E0000000B0000000D00008D0D0000CC0A0000FD0C0000000F0000000B0000000D0000600E0000BB0A0000FA0C000000100000000B0000000D0000320F0000AA0A0000F60C000000000000000C0000000D00000B020000120D0000510D000000010000000C0000000D0000E0020000F80C0000440D000000020000000C0000000D0000B5030000DF0C0000390D000000030000000C0000000D00008B040000C70C00002F0D000000040000000C0000000D000061050000AF0C0000270D000000050000000C0000000D000037060000980C0000200D000000060000000C0000000D00000E070000820C00001A0D000000070000000C0000000D0000E40700006C0C0000150D000000080000000C0000000D0000BA080000560C0000100D000000090000000C0000000D000090090000420C00000C0D0000000A0000000C0000000D0000650A00002E0C0000090D0000000B0000000C0000000D00003A0B00001A0C0000060D0000000C0000000C0000000D00000F0C0000070C0000030D0000000D0000000C0000000D0000E30C0000F50B0000010D0000000E0000000C0000000D0000B60D0000E30B0000FE0C0000000F0000000C0000000D0000890E0000D10B0000FB0C000000100000000C0000000D00005B0F0000C00B0000F70C000000000000000D0000000D000036020000300E0000500D000000010000000D0000000D00000B030000160E0000430D000000020000000D0000000D0000E1030000FC0D0000380D000000030000000D0000000D0000B6040000E30D00002E0D000000040000000D0000000D00008C050000CB0D0000260D000000050000000D0000000D000062060000B40D00001F0D000000060000000D0000000D0000380700009D0D0000190D000000070000000D0000000D00000E080000870D0000140D000000080000000D0000000D0000E4080000710D0000100D000000090000000D0000000D0000BA0900005C0D00000C0D0000000A0000000D0000000D00008F0A0000480D0000090D0000000B0000000D0000000D0000640B0000340D0000070D0000000C0000000D0000000D0000390C0000210D0000040D0000000D0000000D0000000D00000D0D00000E0D0000010D0000000E0000000D0000000D0000E00D0000FC0C0000FF0C0000000F0000000D0000000D0000B30E0000EA0C0000FC0C000000100000000D0000000D0000840F0000D80C0000F90C000000000000000E0000000D000062020000500F00004E0D000000010000000E0000000D000036030000360F0000410D000000020000000E0000000D00000C0400001C0F0000370D000000030000000E0000000D0000E1040000030F00002D0D000000040000000E0000000D0000B7050000EA0E0000250D000000050000000E0000000D00008D060000D30E00001E0D000000060000000E0000000D000063070000BB0E0000190D000000070000000E0000000D000039080000A50E0000140D000000080000000E0000000D00000F0900008F0E0000100D000000090000000E0000000D0000E40900007A0E00000D0D0000000A0000000E0000000D0000B90A0000650E00000A0D0000000B0000000E0000000D00008E0B0000510E0000070D0000000C0000000E0000000D0000630C00003D0E0000050D0000000D0000000E0000000D0000360D00002A0E0000020D0000000E0000000E0000000D0000090E0000170E0000000D0000000F0000000E0000000D0000DC0E0000050E0000FD0C000000100000000E0000000D0000AD0F0000F30D0000FA0C000000000000000F0000000D00008D020000FF0F00004C0D000000010000000F0000000D000061030000FF0F0000400D000000020000000F0000000D000037040000FF0F0000350D000000030000000F0000000D00000C050000FF0F00002C0D000000040000000F0000000D0000E2050000FF0F0000240D000000050000000F0000000D0000B7060000F40F00001E0D000000060000000F0000000D00008D070000DD0F0000180D000000070000000F0000000D000063080000C60F0000140D000000080000000F0000000D000039090000B00F0000100D000000090000000F0000000D00000E0A00009A0F00000D0D0000000A0000000F0000000D0000E30A0000850F00000A0D0000000B0000000F0000000D0000B80B0000700F0000070D0000000C0000000F0000000D00008C0C00005C0F0000050D0000000D0000000F0000000D0000600D0000490F0000030D0000000E0000000F0000000D0000330E0000360F0000010D0000000F0000000F0000000D0000050F0000230F0000FE0C000000100000000F0000000D0000D60F0000110F0000FB0C00000000000000100000000D0000B8020000FF0F00004A0D00000001000000100000000D00008C030000FF0F00003E0D00000002000000100000000D000061040000FF0F0000340D00000003000000100000000D000037050000FF0F00002B0D00000004000000100000000D00000C060000FF0F0000230D00000005000000100000000D0000E2060000FF0F00001D0D00000006000000100000000D0000B7070000FF0F0000180D00000007000000100000000D00008D080000FF0F0000130D00000008000000100000000D000062090000FF0F00000F0D00000009000000100000000D0000380A0000FF0F00000C0D0000000A000000100000000D00000D0B0000FF0F00000A0D0000000B000000100000000D0000E10B0000FF0F0000080D0000000C000000100000000D0000B50C0000FF0F0000060D0000000D000000100000000D0000890D0000FF0F0000040D0000000E000000100000000D00005C0E0000FF0F0000020D0000000F000000100000000D00002E0F0000FF0F0000FF0C00000010000000100000000D0000FF0F0000FF0F0000FD0C00000000000000000000000E00002600000000000000880E00000001000000000000000E0000FC00000000000000790E00000002000000000000000E0000D3010000000000006B0E00000003000000000000000E0000AA020000000000005F0E00000004000000000000000E00008203000000000000540E00000005000000000000000E00005A040000000000004A0E00000006000000000000000E00003105000000000000420E00000007000000000000000E000009060000000000003A0E00000008000000000000000E0000E006000000000000330E00000009000000000000000E0000B8070000000000002D0E0000000A000000000000000E00008F08000000000000270E0000000B000000000000000E00006509000000000000220E0000000C000000000000000E00003B0A0000000000001D0E0000000D000000000000000E0000110B000000000000170E0000000E000000000000000E0000E60B000000000000120E0000000F000000000000000E0000BA0C0000000000000C0E00000010000000000000000E00008D0D000000000000060E00000000000000010000000E00004B000000E2000000800E00000001000000010000000E000021010000CC000000710E00000002000000010000000E0000F8010000B7000000630E00000003000000010000000E0000CF020000A2000000570E00000004000000010000000E0000A70300008F0000004D0E00000005000000010000000E00007E0400007C000000430E00000006000000010000000E000056050000690000003B0E00000007000000010000000E00002D06000057000000330E00000008000000010000000E000005070000460000002D0E00000009000000010000000E0000DC07000035000000270E0000000A000000010000000E0000B308000025000000210E0000000B000000010000000E000089090000150000001C0E0000000C000000010000000E00005F0A000006000000170E0000000D000000010000000E0000340B000000000000120E0000000E000000010000000E0000090C0000000000000D0E0000000F000000010000000E0000DD0C000000000000070E00000010000000010000000E0000B00D000000000000010E00000000000000020000000E00007100000002020000790E00000001000000020000000E000048010000EC0100006A0E00000002000000020000000E00001E020000D70100005D0E00000003000000020000000E0000F5020000C2010000510E00000004000000020000000E0000CD030000AE010000460E00000005000000020000000E0000A40400009A0100003D0E00000006000000020000000E00007B05000087010000350E00000007000000020000000E000053060000750100002E0E00000008000000020000000E00002A07000064010000270E00000009000000020000000E00000108000053010000210E0000000A000000020000000E0000D8080000420100001C0E0000000B000000020000000E0000AE09000032010000170E0000000C000000020000000E0000840A000023010000120E0000000D000000020000000E0000590B0000140100000D0E0000000E000000020000000E00002E0C000006010000080E0000000F000000020000000E0000010D0000F8000000030E00000010000000020000000E0000D50D0000EA000000FD0D00000000000000030000000E00009900000020030000720E00000001000000030000000E00006F01000009030000640E00000002000000030000000E000045020000F4020000570E00000003000000030000000E00001C030000DF0200004B0E00000004000000030000000E0000F3030000CA020000410E00000005000000030000000E0000CA040000B6020000380E00000006000000030000000E0000A2050000A3020000300E00000007000000030000000E00007906000091020000290E00000008000000030000000E0000500700007F020000220E00000009000000030000000E0000270800006D0200001D0E0000000A000000030000000E0000FE0800005C020000170E0000000B000000030000000E0000D40900004C020000120E0000000C000000030000000E0000A90A00003C0200000E0E0000000D000000030000000E00007F0B00002D020000090E0000000E000000030000000E0000530C00001E020000040E0000000F000000030000000E0000270D000010020000FF0D00000010000000030000000E0000FA0D000002020000FA0D00000000000000040000000E0000C10000003B0400006D0E00000001000000040000000E000097010000250400005E0E00000002000000040000000E00006D0200000E040000510E00000003000000040000000E000044030000F9030000460E00000004000000040000000E00001B040000E40300003C0E00000005000000040000000E0000F2040000D0030000330E00000006000000040000000E0000C9050000BD0300002B0E00000007000000040000000E0000A0060000AA030000240E00000008000000040000000E000077070000970300001E0E00000009000000040000000E00004E08000086030000190E0000000A000000040000000E00002409000074030000140E0000000B000000040000000E0000FA090000640300000F0E0000000C000000040000000E0000D00A0000540300000A0E0000000D000000040000000E0000A50B000044030000060E0000000E000000040000000E0000790C000035030000020E0000000F000000040000000E00004D0D000027030000FD0D00000010000000040000000E0000200E000018030000F80D00000000000000050000000E0000E900000055050000680E00000001000000050000000E0000BF0100003E050000590E00000002000000050000000E000096020000270500004D0E00000003000000050000000E00006C03000012050000420E00000004000000050000000E000043040000FD040000380E00000005000000050000000E00001A050000E80400002F0E00000006000000050000000E0000F1050000D4040000270E00000007000000050000000E0000C8060000C1040000210E00000008000000050000000E00009F070000AE0400001B0E00000009000000050000000E0000750800009C040000150E0000000A000000050000000E00004C0900008B040000110E0000000B000000050000000E0000220A00007A0400000C0E0000000C000000050000000E0000F70A000069040000080E0000000D000000050000000E0000CC0B000059040000040E0000000E000000050000000E0000A00C00004A040000FF0D0000000F000000050000000E0000740D00003B040000FB0D00000010000000050000000E0000460E00002D040000F60D00000000000000060000000E0000130100006D060000630E00000001000000060000000E0000E901000056060000550E00000002000000060000000E0000BF0200003F060000490E00000003000000060000000E000095030000290600003E0E00000004000000060000000E00006C04000014060000340E00000005000000060000000E000043050000FF0500002C0E00000006000000060000000E00001A060000EB050000240E00000007000000060000000E0000F1060000D70500001E0E00000008000000060000000E0000C7070000C4050000180E00000009000000060000000E00009E080000B2050000130E0000000A000000060000000E000074090000A00500000E0E0000000B000000060000000E00004A0A00008E0500000A0E0000000C000000060000000E00001F0B00007E050000060E0000000D000000060000000E0000F40B00006D050000020E0000000E000000060000000E0000C80C00005E050000FE0D0000000F000000060000000E00009B0D00004E050000F90D00000010000000060000000E00006E0E000040050000F50D00000000000000070000000E00003D01000085070000600E00000001000000070000000E0000120200006D070000520E00000002000000070000000E0000E902000056070000450E00000003000000070000000E0000BF030000400700003B0E00000004000000070000000E0000950400002A070000310E00000005000000070000000E00006C05000015070000290E00000006000000070000000E00004306000000070000220E00000007000000070000000E00001A070000EC0600001B0E00000008000000070000000E0000F0070000D9060000160E00000009000000070000000E0000C7080000C6060000110E0000000A000000070000000E00009D090000B40600000D0E0000000B000000070000000E0000720A0000A2060000080E0000000C000000070000000E0000470B000091060000050E0000000D000000070000000E00001C0C000081060000010E0000000E000000070000000E0000F00C000071060000FD0D0000000F000000070000000E0000C30D000061060000F90D00000010000000070000000E0000960E000052060000F40D00000000000000080000000E0000670100009C0800005C0E00000001000000080000000E00003D020000840800004F0E00000002000000080000000E0000130300006D080000430E00000003000000080000000E0000E903000056080000380E00000004000000080000000E0000BF040000400800002F0E00000005000000080000000E0000960500002A080000270E00000006000000080000000E00006D06000016080000200E00000007000000080000000E00004307000001080000190E00000008000000080000000E00001A080000EE070000140E00000009000000080000000E0000F0080000DA0700000F0E0000000A000000080000000E0000C6090000C80700000B0E0000000B000000080000000E00009B0A0000B6070000070E0000000C000000080000000E0000700B0000A5070000040E0000000D000000080000000E0000450C000094070000000E0000000E000000080000000E0000190D000083070000FC0D0000000F000000080000000E0000EC0D000073070000F80D00000010000000080000000E0000BE0E000064070000F40D00000000000000090000000E000092010000B40900005A0E00000001000000090000000E0000670200009C0900004C0E00000002000000090000000E00003D03000084090000400E00000003000000090000000E0000130400006D090000360E00000004000000090000000E0000EA040000560900002D0E00000005000000090000000E0000C005000040090000250E00000006000000090000000E0000970600002B0900001E0E00000007000000090000000E00006D07000016090000180E00000008000000090000000E00004308000002090000130E00000009000000090000000E000019090000EF0800000E0E0000000A000000090000000E0000EF090000DC0800000A0E0000000B000000090000000E0000C50A0000CA080000070E0000000C000000090000000E00009A0B0000B8080000030E0000000D000000090000000E00006E0C0000A7080000000E0000000E000000090000000E0000420D000096080000FC0D0000000F000000090000000E0000150E000086080000F80D00000010000000090000000E0000E70E000076080000F40D000000000000000A0000000E0000BD010000CC0A0000570E000000010000000A0000000E000092020000B30A00004A0E000000020000000A0000000E0000680300009B0A00003E0E000000030000000A0000000E00003E040000840A0000340E000000040000000A0000000E0000140500006D0A00002B0E000000050000000A0000000E0000EB050000570A0000230E000000060000000A0000000E0000C1060000410A00001C0E000000070000000A0000000E0000970700002C0A0000170E000000080000000A0000000E00006D080000180A0000120E000000090000000A0000000E000043090000040A00000E0E0000000A0000000A0000000E0000190A0000F10900000A0E0000000B0000000A0000000E0000EE0A0000DE090000060E0000000C0000000A0000000E0000C30B0000CC090000030E0000000D0000000A0000000E0000970C0000BB090000000E0000000E0000000A0000000E00006B0D0000A9090000FC0D0000000F0000000A0000000E00003E0E000099090000F90D000000100000000A0000000E0000100F000089090000F50D000000000000000B0000000E0000E9010000E60B0000550E000000010000000B0000000E0000BE020000CD0B0000480E000000020000000B0000000E000093030000B40B00003C0E000000030000000B0000000E0000690400009C0B0000320E000000040000000B0000000E00003F050000850B0000290E000000050000000B0000000E0000150600006F0B0000220E000000060000000B0000000E0000EB060000590B00001B0E000000070000000B0000000E0000C2070000430B0000160E000000080000000B0000000E0000980800002F0B0000110E000000090000000B0000000E00006E0900001B0B00000D0E0000000A0000000B0000000E0000430A0000070B0000090E0000000B0000000B0000000E0000180B0000F40A0000060E0000000C0000000B0000000E0000ED0B0000E20A0000030E0000000D0000000B0000000E0000C10C0000D00A0000000E0000000E0000000B0000000E0000940D0000BE0A0000FD0D0000000F0000000B0000000E0000670E0000AD0A0000F90D000000100000000B0000000E0000390F00009D0A0000F60D000000000000000C0000000E000014020000010D0000530E000000010000000C0000000E0000E9020000E70C0000460E000000020000000C0000000E0000BE030000CF0C00003A0E000000030000000C0000000E000094040000B60C0000300E000000040000000C0000000E00006A0500009F0C0000280E000000050000000C0000000E000040060000880C0000210E000000060000000C0000000E000016070000720C00001A0E000000070000000C0000000E0000EC0700005C0C0000150E000000080000000C0000000E0000C2080000470C0000110E000000090000000C0000000E000098090000330C00000D0E0000000A0000000C0000000E00006D0A00001F0C0000090E0000000B0000000C0000000E0000420B00000B0C0000060E0000000C0000000C0000000E0000170C0000F90B0000030E0000000D0000000C0000000E0000EB0C0000E60B0000000E0000000E0000000C0000000E0000BE0D0000D50B0000FD0D0000000F0000000C0000000E0000900E0000C30B0000FA0D000000100000000C0000000E0000620F0000B20B0000F70D000000000000000D0000000E00003F0200001E0E0000510E000000010000000D0000000E000014030000040E0000440E000000020000000D0000000E0000E9030000EB0D0000390E000000030000000D0000000E0000BF040000D30D00002F0E000000040000000D0000000E000095050000BB0D0000270E000000050000000D0000000E00006B060000A40D0000200E000000060000000D0000000E0000410700008D0D00001A0E000000070000000D0000000E000017080000770D0000140E000000080000000D0000000E0000EC080000620D0000100E000000090000000D0000000E0000C20900004D0D00000C0E0000000A0000000D0000000E0000970A0000390D0000090E0000000B0000000D0000000E00006C0B0000250D0000060E0000000C0000000D0000000E0000400C0000120D0000040E0000000D0000000D0000000E0000140D0000FF0C0000010E0000000E0000000D0000000E0000E70D0000ED0C0000FE0D0000000F0000000D0000000E0000BA0E0000DB0C0000FB0D000000100000000D0000000E00008B0F0000CA0C0000F80D000000000000000E0000000E00006B0200003E0F00004F0E000000010000000E0000000E00003F030000240F0000420E000000020000000E0000000E0000140400000A0F0000370E000000030000000E0000000E0000EA040000F20E00002E0E000000040000000E0000000E0000BF050000D90E0000260E000000050000000E0000000E000095060000C20E00001F0E000000060000000E0000000E00006B070000AB0E0000190E000000070000000E0000000E000041080000950E0000140E000000080000000E0000000E0000170900007F0E0000100E000000090000000E0000000E0000EC0900006A0E00000C0E0000000A0000000E0000000E0000C10A0000550E0000090E0000000B0000000E0000000E0000960B0000410E0000060E0000000C0000000E0000000E00006A0C00002E0E0000040E0000000D0000000E0000000E00003E0D00001B0E0000010E0000000E0000000E0000000E0000110E0000080E0000FF0D0000000F0000000E0000000E0000E30E0000F60D0000FC0D000000100000000E0000000E0000B50F0000E50D0000F90D000000000000000F0000000E000096020000FF0F00004D0E000000010000000F0000000E00006A030000FF0F0000400E000000020000000F0000000E00003F040000FF0F0000350E000000030000000F0000000E000015050000FF0F00002C0E000000040000000F0000000E0000EA050000FB0F0000240E000000050000000F0000000E0000C0060000E30F00001E0E000000060000000F0000000E000095070000CC0F0000180E000000070000000F0000000E00006B080000B50F0000130E000000080000000F0000000E0000410900009F0F00000F0E000000090000000F0000000E0000160A00008A0F00000C0E0000000A0000000F0000000E0000EB0A0000750F0000090E0000000B0000000F0000000E0000C00B0000610F0000070E0000000C0000000F0000000E0000940C00004D0F0000040E0000000D0000000F0000000E0000670D0000390F0000020E0000000E0000000F0000000E00003A0E0000270F0000000E0000000F0000000F0000000E00000C0F0000140F0000FD0D000000100000000F0000000E0000DE0F0000020F0000FA0D00000000000000100000000E0000C1020000FF0F00004A0E00000001000000100000000E000095030000FF0F00003E0E00000002000000100000000E00006A040000FF0F0000340E00000003000000100000000E00003F050000FF0F00002B0E00000004000000100000000E000014060000FF0F0000230E00000005000000100000000E0000EA060000FF0F00001C0E00000006000000100000000E0000BF070000FF0F0000170E00000007000000100000000E000095080000FF0F0000120E00000008000000100000000E00006A090000FF0F00000F0E00000009000000100000000E0000400A0000FF0F00000C0E0000000A000000100000000E0000140B0000FF0F0000090E0000000B000000100000000E0000E90B0000FF0F0000070E0000000C000000100000000E0000BD0C0000FF0F0000040E0000000D000000100000000E0000900D0000FF0F0000020E0000000E000000100000000E0000630E0000FF0F0000000E0000000F000000100000000E0000350F0000FF0F0000FE0D00000010000000100000000E0000FF0F0000FF0F0000FB0D00000000000000000000000F000033000000000000008D0F00000001000000000000000F000009010000000000007D0F00000002000000000000000F0000E0010000000000006F0F00000003000000000000000F0000B702000000000000630F00000004000000000000000F00008E03000000000000580F00000005000000000000000F000066040000000000004E0F00000006000000000000000F00003D05000000000000450F00000007000000000000000F000015060000000000003D0F00000008000000000000000F0000EC06000000000000360F00000009000000000000000F0000C307000000000000300F0000000A000000000000000F00009A080000000000002A0F0000000B000000000000000F00007009000000000000240F0000000C000000000000000F0000460A0000000000001E0F0000000D000000000000000F00001C0B000000000000190F0000000E000000000000000F0000F00B000000000000140F0000000F000000000000000F0000C40C0000000000000E0F00000010000000000000000F0000970D000000000000080F00000000000000010000000F000058000000D1000000840F00000001000000010000000F00002E010000BB000000750F00000002000000010000000F000005020000A6000000670F00000003000000010000000F0000DC020000920000005B0F00000004000000010000000F0000B30300007E000000500F00000005000000010000000F00008A0400006B000000470F00000006000000010000000F000062050000590000003E0F00000007000000010000000F00003906000047000000360F00000008000000010000000F000010070000360000002F0F00000009000000010000000F0000E707000025000000290F0000000A000000010000000F0000BE08000015000000230F0000000B000000010000000F000094090000050000001E0F0000000C000000010000000F00006A0A000000000000180F0000000D000000010000000F00003F0B000000000000130F0000000E000000010000000F0000140C0000000000000E0F0000000F000000010000000F0000E80C000000000000080F00000010000000010000000F0000BB0D000000000000020F00000000000000020000000F00007E000000F10100007D0F00000001000000020000000F000054010000DB0100006E0F00000002000000020000000F00002B020000C6010000600F00000003000000020000000F000002030000B1010000540F00000004000000020000000F0000D90300009D010000490F00000005000000020000000F0000B00400008A010000400F00000006000000020000000F00008705000077010000380F00000007000000020000000F00005E06000065010000300F00000008000000020000000F00003507000053010000290F00000009000000020000000F00000C08000042010000230F0000000A000000020000000F0000E3080000320100001E0F0000000B000000020000000F0000B909000022010000180F0000000C000000020000000F00008F0A000013010000130F0000000D000000020000000F0000640B0000040100000E0F0000000E000000020000000F0000380C0000F5000000090F0000000F000000020000000F00000C0D0000E8000000040F00000010000000020000000F0000DF0D0000DA000000FE0E00000000000000030000000F0000A50000000E030000760F00000001000000030000000F00007B010000F8020000670F00000002000000030000000F000052020000E20200005A0F00000003000000030000000F000028030000CD0200004E0F00000004000000030000000F0000FF030000B9020000440F00000005000000030000000F0000D6040000A50200003A0F00000006000000030000000F0000AE05000092020000320F00000007000000030000000F000085060000800200002B0F00000008000000030000000F00005C0700006E020000240F00000009000000030000000F0000320800005C0200001E0F0000000A000000030000000F0000090900004C020000190F0000000B000000030000000F0000DF0900003C020000140F0000000C000000030000000F0000B40A00002C0200000F0F0000000D000000030000000F0000890B00001D0200000A0F0000000E000000030000000F00005E0C00000E020000050F0000000F000000030000000F0000310D000000020000000F00000010000000030000000F0000040E0000F2010000FB0E00000000000000040000000F0000CD00000029040000700F00000001000000040000000F0000A301000013040000610F00000002000000040000000F000079020000FD030000540F00000003000000040000000F000050030000E7030000490F00000004000000040000000F000027040000D30300003E0F00000005000000040000000F0000FE040000BF030000350F00000006000000040000000F0000D5050000AB0300002D0F00000007000000040000000F0000AC06000098030000260F00000008000000040000000F00008307000086030000200F00000009000000040000000F000059080000750300001A0F0000000A000000040000000F00002F09000063030000150F0000000B000000040000000F0000050A000053030000100F0000000C000000040000000F0000DB0A0000430300000C0F0000000D000000040000000F0000B00B000033030000070F0000000E000000040000000F0000840C000025030000020F0000000F000000040000000F0000570D000016030000FD0E00000010000000040000000F00002A0E000008030000F80E00000000000000050000000F0000F6000000430500006B0F00000001000000050000000F0000CC0100002C0500005C0F00000002000000050000000F0000A2020000150500004F0F00000003000000050000000F00007803000000050000440F00000004000000050000000F00004F040000EB0400003A0F00000005000000050000000F000026050000D6040000310F00000006000000050000000F0000FD050000C2040000290F00000007000000050000000F0000D4060000AF040000220F00000008000000050000000F0000AA0700009D0400001C0F00000009000000050000000F0000810800008B040000170F0000000A000000050000000F00005709000079040000120F0000000B000000050000000F00002D0A0000690400000D0F0000000C000000050000000F0000020B000058040000090F0000000D000000050000000F0000D70B000048040000040F0000000E000000050000000F0000AB0C000039040000000F0000000F000000050000000F00007E0D00002A040000FB0E00000010000000050000000F0000510E00001C040000F60E00000000000000060000000F00001F0100005B060000660F00000001000000060000000F0000F501000043060000580F00000002000000060000000F0000CB0200002D0600004B0F00000003000000060000000F0000A103000017060000400F00000004000000060000000F00007804000001060000360F00000005000000060000000F00004F050000ED0500002E0F00000006000000060000000F000025060000D8050000260F00000007000000060000000F0000FC060000C50500001F0F00000008000000060000000F0000D3070000B2050000190F00000009000000060000000F0000A9080000A0050000140F0000000A000000060000000F00007F0900008E0500000F0F0000000B000000060000000F0000550A00007D0500000B0F0000000C000000060000000F00002A0B00006C050000070F0000000D000000060000000F0000FE0B00005C050000020F0000000E000000060000000F0000D20C00004D050000FE0E0000000F000000060000000F0000A50D00003D050000FA0E00000010000000060000000F0000780E00002F050000F50E00000000000000070000000F00004901000072070000620F00000001000000070000000F00001F0200005A070000540F00000002000000070000000F0000F502000043070000480F00000003000000070000000F0000CB0300002D0700003D0F00000004000000070000000F0000A104000017070000330F00000005000000070000000F000078050000020700002A0F00000006000000070000000F00004E060000EE060000230F00000007000000070000000F000025070000DA0600001D0F00000008000000070000000F0000FB070000C7060000170F00000009000000070000000F0000D2080000B4060000120F0000000A000000070000000F0000A8090000A20600000D0F0000000B000000070000000F00007D0A000091060000090F0000000C000000070000000F0000520B000080060000050F0000000D000000070000000F0000270C00006F060000010F0000000E000000070000000F0000FA0C00005F060000FD0E0000000F000000070000000F0000CD0D000050060000F90E00000010000000070000000F0000A00E000041060000F40E00000000000000080000000F000074010000890800005F0F00000001000000080000000F00004902000071080000510F00000002000000080000000F00001F03000059080000440F00000003000000080000000F0000F5030000430800003A0F00000004000000080000000F0000CB0400002D080000300F00000005000000080000000F0000A205000017080000280F00000006000000080000000F00007806000003080000210F00000007000000080000000F00004E070000EF0700001A0F00000008000000080000000F000025080000DB070000150F00000009000000080000000F0000FB080000C8070000100F0000000A000000080000000F0000D1090000B60700000C0F0000000B000000080000000F0000A60A0000A4070000080F0000000C000000080000000F00007B0B000093070000040F0000000D000000080000000F00004F0C000082070000000F0000000E000000080000000F0000230D000072070000FC0E0000000F000000080000000F0000F60D000062070000F80E00000010000000080000000F0000C80E000052070000F30E00000000000000090000000F00009E010000A00900005B0F00000001000000090000000F000074020000880900004E0F00000002000000090000000F00004903000070090000420F00000003000000090000000F00001F04000059090000370F00000004000000090000000F0000F5040000430900002E0F00000005000000090000000F0000CC0500002D090000260F00000006000000090000000F0000A2060000180900001F0F00000007000000090000000F00007807000003090000190F00000008000000090000000F00004E080000F0080000130F00000009000000090000000F000024090000DC0800000F0F0000000A000000090000000F0000FA090000CA0800000B0F0000000B000000090000000F0000CF0A0000B7080000070F0000000C000000090000000F0000A40B0000A6080000030F0000000D000000090000000F0000780C000095080000FF0E0000000E000000090000000F00004C0D000084080000FC0E0000000F000000090000000F00001F0E000074080000F80E00000010000000090000000F0000F10E000064080000F30E000000000000000A0000000F0000C9010000B80A0000580F000000010000000A0000000F00009E0200009F0A00004B0F000000020000000A0000000F000074030000870A00003F0F000000030000000A0000000F00004A040000700A0000350F000000040000000A0000000F000020050000590A00002C0F000000050000000A0000000F0000F6050000430A0000240F000000060000000A0000000F0000CC0600002E0A00001D0F000000070000000A0000000F0000A2070000190A0000170F000000080000000A0000000F000078080000050A0000120F000000090000000A0000000F00004E090000F10900000E0F0000000A0000000A0000000F0000240A0000DE0900000A0F0000000B0000000A0000000F0000F90A0000CC090000060F0000000C0000000A0000000F0000CE0B0000BA090000030F0000000D0000000A0000000F0000A20C0000A8090000FF0E0000000E0000000A0000000F0000750D000097090000FC0E0000000F0000000A0000000F0000480E000087090000F80E000000100000000A0000000F00001A0F000077090000F40E000000000000000B0000000F0000F4010000D10B0000560F000000010000000B0000000F0000C9020000B80B0000490F000000020000000B0000000F00009F0300009F0B00003D0F000000030000000B0000000F000075040000880B0000330F000000040000000B0000000F00004B050000710B00002A0F000000050000000B0000000F0000210600005A0B0000220F000000060000000B0000000F0000F7060000450B00001C0F000000070000000B0000000F0000CD070000300B0000160F000000080000000B0000000F0000A30800001B0B0000110F000000090000000B0000000F000078090000070B00000D0F0000000A0000000B0000000F00004E0A0000F40A0000090F0000000B0000000B0000000F0000230B0000E10A0000060F0000000C0000000B0000000F0000F70B0000CF0A0000020F0000000D0000000B0000000F0000CB0C0000BD0A0000FF0E0000000E0000000B0000000F00009F0D0000AC0A0000FC0E0000000F0000000B0000000F0000710E00009B0A0000F80E000000100000000B0000000F0000430F00008B0A0000F50E000000000000000C0000000F000020020000EB0C0000530F000000010000000C0000000F0000F5020000D20C0000460F000000020000000C0000000F0000CA030000B90C00003B0F000000030000000C0000000F00009F040000A10C0000310F000000040000000C0000000F0000750500008A0C0000280F000000050000000C0000000F00004B060000730C0000210F000000060000000C0000000F0000210700005D0C00001A0F000000070000000C0000000F0000F7070000480C0000150F000000080000000C0000000F0000CD080000330C0000100F000000090000000C0000000F0000A30900001F0C00000C0F0000000A0000000C0000000F0000780A00000B0C0000090F0000000B0000000C0000000F00004D0B0000F80B0000060F0000000C0000000C0000000F0000210C0000E50B0000020F0000000D0000000C0000000F0000F50C0000D30B0000FF0E0000000E0000000C0000000F0000C80D0000C20B0000FC0E0000000F0000000C0000000F00009B0E0000B10B0000F90E000000100000000C0000000F00006C0F0000A00B0000F50E000000000000000D0000000F00004B020000080E0000510F000000010000000D0000000F000020030000EF0D0000440F000000020000000D0000000F0000F5030000D60D0000390F000000030000000D0000000F0000CA040000BD0D00002F0F000000040000000D0000000F0000A0050000A60D0000270F000000050000000D0000000F0000760600008F0D0000200F000000060000000D0000000F00004C070000780D0000190F000000070000000D0000000F000022080000630D0000140F000000080000000D0000000F0000F70800004D0D0000100F000000090000000D0000000F0000CD090000390D00000C0F0000000A0000000D0000000F0000A20A0000250D0000080F0000000B0000000D0000000F0000770B0000110D0000050F0000000C0000000D0000000F00004B0C0000FE0C0000030F0000000D0000000D0000000F00001F0D0000EC0C0000000F0000000E0000000D0000000F0000F20D0000DA0C0000FD0E0000000F0000000D0000000F0000C40E0000C90C0000FA0E000000100000000D0000000F0000950F0000B80C0000F60E000000000000000E0000000F000076020000280F00004F0F000000010000000E0000000F00004B0300000E0F0000420F000000020000000E0000000F000020040000F40E0000370F000000030000000E0000000F0000F5040000DC0E00002E0F000000040000000E0000000F0000CB050000C40E0000250F000000050000000E0000000F0000A0060000AD0E00001E0F000000060000000E0000000F000076070000960E0000180F000000070000000E0000000F00004C080000800E0000130F000000080000000E0000000F0000210900006A0E00000F0F000000090000000E0000000F0000F7090000550E00000B0F0000000A0000000E0000000F0000CC0A0000410E0000080F0000000B0000000E0000000F0000A00B00002D0E0000050F0000000C0000000E0000000F0000750C00001A0E0000030F0000000D0000000E0000000F0000480D0000070E0000000F0000000E0000000E0000000F00001B0E0000F50D0000FD0E0000000F0000000E0000000F0000ED0E0000E30D0000FB0E000000100000000E0000000F0000BE0F0000D20D0000F70E000000000000000F0000000F0000A1020000FF0F00004C0F000000010000000F0000000F000076030000FF0F0000400F000000020000000F0000000F00004B040000FF0F0000350F000000030000000F0000000F000020050000FE0F00002C0F000000040000000F0000000F0000F5050000E50F0000240F000000050000000F0000000F0000CB060000CE0F00001D0F000000060000000F0000000F0000A0070000B70F0000170F000000070000000F0000000F000076080000A00F0000120F000000080000000F0000000F00004B0900008A0F00000E0F000000090000000F0000000F0000210A0000750F00000B0F0000000A0000000F0000000F0000F50A0000600F0000080F0000000B0000000F0000000F0000CA0B00004C0F0000050F0000000C0000000F0000000F00009E0C0000390F0000030F0000000D0000000F0000000F0000710D0000260F0000000F0000000E0000000F0000000F0000440E0000130F0000FE0E0000000F0000000F0000000F0000160F0000010F0000FB0E000000100000000F0000000F0000E70F0000EF0E0000F80E00000000000000100000000F0000CC020000FF0F00004A0F00000001000000100000000F0000A0030000FF0F00003E0F00000002000000100000000F000075040000FF0F0000330F00000003000000100000000F00004A050000FF0F00002A0F00000004000000100000000F000020060000FF0F0000220F00000005000000100000000F0000F5060000FF0F00001C0F00000006000000100000000F0000CA070000FF0F0000160F00000007000000100000000F0000A0080000FF0F0000110F00000008000000100000000F000075090000FF0F00000E0F00000009000000100000000F00004A0A0000FF0F00000A0F0000000A000000100000000F00001F0B0000FF0F0000080F0000000B000000100000000F0000F30B0000FF0F0000050F0000000C000000100000000F0000C70C0000FF0F0000030F0000000D000000100000000F00009B0D0000FF0F0000010F0000000E000000100000000F00006D0E0000FF0F0000FE0E0000000F000000100000000F00003F0F0000FF0F0000FC0E00000010000000100000000F0000FF0F0000FF0F0000F90E00000000000000000000001000004300000000000000FF0F00000001000000000000001000001901000000000000FF0F0000000200000000000000100000EF01000000000000FF0F0000000300000000000000100000C602000000000000FF0F00000004000000000000001000009E03000000000000FF0F00000005000000000000001000007504000000000000FF0F00000006000000000000001000004C05000000000000FF0F00000007000000000000001000002406000000000000FF0F0000000800000000000000100000FB06000000000000FF0F0000000900000000000000100000D207000000000000FF0F0000000A00000000000000100000A808000000000000FF0F0000000B000000000000001000007F09000000000000FF0F0000000C00000000000000100000540A000000000000FF0F0000000D000000000000001000002A0B000000000000FF0F0000000E00000000000000100000FE0B000000000000FF0F0000000F00000000000000100000D20C000000000000FF0F0000001000000000000000100000A50D000000000000FF0F000000000000000100000010000068000000BB000000FF0F00000001000000010000001000003E010000A6000000FF0F00000002000000010000001000001402000091000000FF0F0000000300000001000000100000EB0200007C000000FF0F0000000400000001000000100000C203000069000000FF0F00000005000000010000001000009904000056000000FF0F00000006000000010000001000007105000043000000FF0F00000007000000010000001000004806000032000000FF0F00000008000000010000001000001F07000020000000FF0F0000000900000001000000100000F607000010000000FF0F0000000A00000001000000100000CC08000000000000FF0F0000000B00000001000000100000A209000000000000FF0F0000000C00000001000000100000780A000000000000FF0F0000000D000000010000001000004D0B000000000000FF0F0000000E00000001000000100000220C000000000000FF0F0000000F00000001000000100000F50C000000000000FF0F0000001000000001000000100000C80D000000000000FF0F00000000000000020000001000008E000000DB010000FF0F000000010000000200000010000064010000C5010000FF0F00000002000000020000001000003A020000B0010000FF0F0000000300000002000000100000110300009B010000FF0F0000000400000002000000100000E803000087010000FF0F0000000500000002000000100000BF04000074010000FF0F00000006000000020000001000009605000061010000FF0F00000007000000020000001000006D0600004F010000FF0F0000000800000002000000100000440700003D010000FF0F00000009000000020000001000001B0800002C010000FF0F0000000A00000002000000100000F10800001C010000FF0F0000000B00000002000000100000C70900000C010000FF0F0000000C000000020000001000009D0A0000FD000000FF0F0000000D00000002000000100000720B0000EE000000FF0F0000000E00000002000000100000460C0000E0000000FF0F0000000F00000002000000100000190D0000D2000000FF0F0000001000000002000000100000EC0D0000C5000000FE0F0000000000000003000000100000B5000000F8020000FF0F00000001000000030000001000008B010000E1020000FF0F000000020000000300000010000061020000CC020000FF0F000000030000000300000010000038030000B7020000FF0F00000004000000030000001000000E040000A3020000FF0F0000000500000003000000100000E50400008F020000FF0F0000000600000003000000100000BC0500007C020000FF0F00000007000000030000001000009306000069020000FF0F00000008000000030000001000006A07000058020000FF0F00000009000000030000001000004108000046020000FF0F0000000A000000030000001000001709000036020000FF0F0000000B00000003000000100000ED09000026020000FF0F0000000C00000003000000100000C20A000016020000FF0F0000000D00000003000000100000970B000007020000FF0F0000000E000000030000001000006B0C0000F8010000FF0F0000000F000000030000001000003F0D0000EA010000FF0F0000001000000003000000100000110E0000DD010000FB0F0000000000000004000000100000DD00000012040000FF0F0000000100000004000000100000B3010000FC030000FF0F000000020000000400000010000089020000E6030000FF0F00000003000000040000001000005F030000D0030000FF0F000000040000000400000010000036040000BC030000FF0F00000005000000040000001000000D050000A8030000FF0F0000000600000004000000100000E305000095030000FF0F0000000700000004000000100000BA06000082030000FF0F00000008000000040000001000009107000070030000FF0F0000000900000004000000100000670800005E030000FF0F0000000A000000040000001000003E0900004D030000FF0F0000000B00000004000000100000130A00003D030000FF0F0000000C00000004000000100000E90A00002D030000FF0F0000000D00000004000000100000BD0B00001E030000FF0F0000000E00000004000000100000910C00000F030000FF0F0000000F00000004000000100000650D000000030000FD0F0000001000000004000000100000370E0000F2020000F80F0000000000000005000000100000050100002B050000FF0F0000000100000005000000100000DB01000014050000FF0F0000000200000005000000100000B1020000FE040000FF0F000000030000000500000010000087030000E8040000FF0F00000004000000050000001000005E040000D3040000FF0F000000050000000500000010000035050000BF040000FF0F00000006000000050000001000000B060000AB040000FF0F0000000700000005000000100000E206000098040000FF0F0000000800000005000000100000B907000086040000FF0F00000009000000050000001000008F08000074040000FF0F0000000A000000050000001000006509000063040000FF0F0000000B000000050000001000003B0A000052040000FF0F0000000C00000005000000100000100B000042040000FF0F0000000D00000005000000100000E40B000032040000FF0F0000000E00000005000000100000B80C000023040000FF0F0000000F000000050000001000008B0D000014040000FB0F00000010000000050000001000005E0E000006040000F60F00000000000000060000001000002F01000043060000FF0F0000000100000006000000100000040200002B060000FF0F0000000200000006000000100000DA02000015060000FF0F0000000300000006000000100000B0030000FF050000FF0F000000040000000600000010000087040000EA050000FF0F00000005000000060000001000005D050000D5050000FF0F000000060000000600000010000034060000C1050000FF0F00000007000000060000001000000A070000AE050000FF0F0000000800000006000000100000E10700009B050000FF0F0000000900000006000000100000B708000089050000FF0F0000000A000000060000001000008D09000077050000FF0F0000000B00000006000000100000630A000066050000FF0F0000000C00000006000000100000380B000056050000FF0F0000000D000000060000001000000C0C000046050000FF0F0000000E00000006000000100000E00C000036050000FE0F0000000F00000006000000100000B30D000027050000F90F0000001000000006000000100000850E000019050000F40F00000000000000070000001000005901000059070000FF0F00000001000000070000001000002E02000042070000FF0F0000000200000007000000100000040300002B070000FF0F0000000300000007000000100000DA03000015070000FF0F0000000400000007000000100000B0040000FF060000FF0F000000050000000700000010000086050000EA060000FF0F00000006000000070000001000005D060000D6060000FF0F000000070000000700000010000033070000C2060000FF0F00000008000000070000001000000A080000AF060000FF0F0000000900000007000000100000E00800009D060000FF0F0000000A00000007000000100000B60900008B060000FF0F0000000B000000070000001000008B0A000079060000FF0F0000000C00000007000000100000600B000069060000FF0F0000000D00000007000000100000340C000058060000FF0F0000000E00000007000000100000080D000049060000FC0F0000000F00000007000000100000DB0D000039060000F80F0000001000000007000000100000AD0E00002A060000F30F00000000000000080000001000008301000070080000FF0F00000001000000080000001000005802000058080000FF0F00000002000000080000001000002E03000041080000FF0F0000000300000008000000100000040400002A080000FF0F0000000400000008000000100000DA04000014080000FF0F0000000500000008000000100000B0050000FF070000FF0F000000060000000800000010000087060000EB070000FF0F00000007000000080000001000005D070000D7070000FF0F000000080000000800000010000033080000C3070000FF0F000000090000000800000010000009090000B0070000FF0F0000000A00000008000000100000DF0900009E070000FF0F0000000B00000008000000100000B40A00008C070000FF0F0000000C00000008000000100000890B00007B070000FF0F0000000D000000080000001000005D0C00006B070000FF0F0000000E00000008000000100000300D00005B070000FC0F0000000F00000008000000100000030E00004B070000F70F0000001000000008000000100000D50E00003C070000F30F0000000000000009000000100000AD01000086090000FF0F0000000100000009000000100000830200006E090000FF0F00000002000000090000001000005803000057090000FF0F00000003000000090000001000002E04000040090000FF0F0000000400000009000000100000040500002A090000FF0F0000000500000009000000100000DA05000014090000FF0F0000000600000009000000100000B0060000FF080000FF0F000000070000000900000010000087070000EB080000FF0F00000008000000090000001000005D080000D7080000FF0F000000090000000900000010000032090000C4080000FF0F0000000A00000009000000100000080A0000B2080000FF0F0000000B00000009000000100000DD0A0000A0080000FF0F0000000C00000009000000100000B20B00008E080000FF0F0000000D00000009000000100000860C00007D080000FF0F0000000E00000009000000100000590D00006D080000FB0F0000000F000000090000001000002C0E00005D080000F70F0000001000000009000000100000FE0E00004D080000F20F000000000000000A000000100000D80100009E0A0000FF0F000000010000000A000000100000AD020000850A0000FF0F000000020000000A000000100000830300006D0A0000FF0F000000030000000A00000010000058040000560A0000FF0F000000040000000A0000001000002E050000400A0000FF0F000000050000000A000000100000040600002A0A0000FF0F000000060000000A000000100000DB060000150A0000FF0F000000070000000A000000100000B1070000000A0000FF0F000000080000000A00000010000087080000EC090000FF0F000000090000000A0000001000005C090000D9090000FF0F0000000A0000000A000000100000320A0000C6090000FF0F0000000B0000000A000000100000070B0000B4090000FF0F0000000C0000000A000000100000DB0B0000A2090000FF0F0000000D0000000A000000100000AF0C000091090000FE0F0000000E0000000A000000100000830D000080090000FB0F0000000F0000000A000000100000550E000070090000F70F000000100000000A000000100000270F000060090000F30F000000000000000B00000010000004020000B60B0000FF0F000000010000000B000000100000D80200009E0B0000FF0F000000020000000B000000100000AE030000850B0000FF0F000000030000000B000000100000830400006E0B0000FF0F000000040000000B00000010000059050000570B0000FF0F000000050000000B0000001000002F060000410B0000FF0F000000060000000B000000100000050700002B0B0000FF0F000000070000000B000000100000DB070000170B0000FF0F000000080000000B000000100000B1080000020B0000FF0F000000090000000B00000010000086090000EE0A0000FF0F0000000A0000000B0000001000005C0A0000DB0A0000FF0F0000000B0000000B000000100000300B0000C90A0000FF0F0000000C0000000B000000100000050C0000B70A0000FF0F0000000D0000000B000000100000D90C0000A50A0000FE0F0000000E0000000B000000100000AC0D0000940A0000FB0F0000000F0000000B0000001000007E0E0000830A0000F70F000000100000000B000000100000500F0000730A0000F30F000000000000000C0000001000002F020000D10C0000FF0F000000010000000C00000010000003030000B70C0000FF0F000000020000000C000000100000D90300009F0C0000FF0F000000030000000C000000100000AE040000870C0000FF0F000000040000000C00000010000084050000700C0000FF0F000000050000000C0000001000005A0600005A0C0000FF0F000000060000000C0000001000002F070000440C0000FF0F000000070000000C000000100000050800002F0C0000FF0F000000080000000C000000100000DB0800001A0C0000FF0F000000090000000C000000100000B0090000060C0000FF0F0000000A0000000C000000100000860A0000F20B0000FF0F0000000B0000000C0000001000005A0B0000DF0B0000FF0F0000000C0000000C0000001000002F0C0000CD0B0000FF0F0000000D0000000C000000100000020D0000BB0B0000FE0F0000000E0000000C000000100000D50D0000AA0B0000FB0F0000000F0000000C000000100000A80E0000990B0000F80F000000100000000C000000100000790F0000880B0000F40F000000000000000D0000001000005A020000ED0D0000FF0F000000010000000D0000001000002F030000D40D0000FF0F000000020000000D00000010000004040000BB0D0000FF0F000000030000000D000000100000D9040000A30D0000FF0F000000040000000D000000100000AE0500008B0D0000FF0F000000050000000D00000010000084060000740D0000FF0F000000060000000D0000001000005A0700005E0D0000FF0F000000070000000D00000010000030080000490D0000FF0F000000080000000D00000010000005090000340D0000FF0F000000090000000D000000100000DA0900001F0D0000FF0F0000000A0000000D000000100000AF0A00000C0D0000FF0F0000000B0000000D000000100000840B0000F80C0000FF0F0000000C0000000D000000100000580C0000E60C0000FF0F0000000D0000000D0000001000002C0D0000D30C0000FE0F0000000E0000000D000000100000FF0D0000C20C0000FB0F0000000F0000000D000000100000D10E0000B10C0000F80F000000100000000D000000100000A20F0000A00C0000F40F000000000000000E000000100000850200000C0F0000FF0F000000010000000E0000001000005A030000F20E0000FF0F000000020000000E0000001000002E040000D90E0000FF0F000000030000000E00000010000004050000C10E0000FF0F000000040000000E000000100000D9050000A90E0000FF0F000000050000000E000000100000AF060000920E0000FF0F000000060000000E000000100000840700007C0E0000FF0F000000070000000E0000001000005A080000660E0000FF0F000000080000000E0000001000002F090000500E0000FF0F000000090000000E000000100000040A00003C0E0000FF0F0000000A0000000E000000100000D90A0000280E0000FF0F0000000B0000000E000000100000AE0B0000140E0000FF0F0000000C0000000E000000100000820C0000010E0000FF0F0000000D0000000E000000100000550D0000EE0D0000FE0F0000000E0000000E000000100000280E0000DC0D0000FC0F0000000F0000000E000000100000FA0E0000CB0D0000F90F000000100000000E000000100000CB0F0000BA0D0000F50F000000000000000F000000100000B0020000FF0F0000FF0F000000010000000F00000010000084030000FF0F0000FF0F000000020000000F00000010000059040000FB0F0000FF0F000000030000000F0000001000002E050000E20F0000FF0F000000040000000F00000010000004060000CA0F0000FF0F000000050000000F000000100000D9060000B30F0000FF0F000000060000000F000000100000AE0700009C0F0000FF0F000000070000000F00000010000084080000860F0000FF0F000000080000000F00000010000059090000700F0000FF0F000000090000000F0000001000002E0A00005B0F0000FF0F0000000A0000000F000000100000030B0000470F0000FF0F0000000B0000000F000000100000D70B0000330F0000FF0F0000000C0000000F000000100000AB0C00001F0F0000FF0F0000000D0000000F0000001000007F0D00000D0F0000FF0F0000000E0000000F000000100000510E0000FA0E0000FC0F0000000F0000000F000000100000230F0000E80E0000F90F000000100000000F000000100000F40F0000D70E0000F60F0000000000000010000000100000DB020000FF0F0000FF0F0000000100000010000000100000AF030000FF0F0000FF0F000000020000001000000010000084040000FF0F0000FF0F000000030000001000000010000059050000FF0F0000FF0F00000004000000100000001000002E060000FF0F0000FF0F000000050000001000000010000003070000FF0F0000FF0F0000000600000010000000100000D8070000FF0F0000FF0F0000000700000010000000100000AE080000FF0F0000FF0F000000080000001000000010000083090000FF0F0000FF0F0000000900000010000000100000580A0000FF0F0000FF0F0000000A000000100000001000002C0B0000FF0F0000FF0F0000000B00000010000000100000010C0000FF0F0000FF0F0000000C00000010000000100000D50C0000FF0F0000FF0F0000000D00000010000000100000A80D0000FF0F0000FF0F0000000E000000100000001000007A0E0000FF0F0000FC0F0000000F000000100000001000004C0F0000FF0F0000FA0F0000001000000010000000100000FF0F0000F80F0000F70F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000650300000000000000000000000800000000000000000000CD0600000000000000000000000C00000000000000000000310A000000000000000000000010000000000000000000008B0D00000000000000000000000000000004000000000000A00000009704000000000000000400000004000000000000020400003A0400000000000000080000000400000000000067070000E803000000000000000C00000004000000000000C80A00009F03000000000000001000000004000000000000200E00005F030000000000000000000000080000000000004B0100001109000000000000000400000008000000000000AB040000AC080000000000000008000000080000000000000D0800005208000000000000000C000000080000000000006B0B00000008000000000000001000000008000000000000C00E0000B70700000000000000000000000C000000000000FD0100008F0D00000000000000040000000C0000000000005A050000210D00000000000000080000000C000000000000B8080000BE0C000000000000000C0000000C000000000000140C0000650C00000000000000100000000C000000000000660F0000130C000000000000000000000010000000000000AE020000FF0F00000700000000040000001000000000000008060000FF0F00000000000000080000001000000000000064090000FF0F000000000000000C00000010000000000000BD0C0000FF0F000000000000001000000010000000000000FF0F0000FF0F00000000000000000000000000000004000007000000000000003804000000040000000000000004000069030000000000000D040000000800000000000000040000CE06000000000000F4030000000C000000000000000400002F0A000000000000E6030000001000000000000000040000880D000000000000D8030000000000000004000000040000A50000006804000029040000000400000004000000040000050400000D0400000004000000080000000400000004000067070000BC030000E9030000000C00000004000000040000C60A000075030000DD0300000010000000040000000400001C0E000036030000D20300000000000000080000000400004F010000DB08000025040000000400000008000000040000AD04000078080000FE0300000008000000080000000400000C08000020080000E9030000000C00000008000000040000680B0000D1070000DF030000001000000008000000040000BB0E00008B070000D603000000000000000C000000040000FF010000510D00002704000000040000000C0000000400005A050000E70C00000204000000080000000C000000040000B7080000870C0000F0030000000C0000000C000000040000100C0000310C0000E803000000100000000C000000040000610F0000E30B0000E0030000000000000010000000040000AF020000FF0F00002B04000000040000001000000004000007060000FF0F00000804000000080000001000000004000062090000FF0F0000F8030000000C00000010000000040000B90C0000FF0F0000F2030000001000000010000000040000FF0F0000FF0F0000ED030000000000000000000000080000060000000000000061080000000400000000000000080000670300000000000032080000000800000000000000080000C90600000000000016080000000C00000000000000080000280A000000000000050800000010000000000000000800007D0D000000000000F4070000000000000004000000080000A3000000600400004D08000000040000000400000008000001040000060400002108000000080000000400000008000061070000B703000007080000000C00000004000000080000BD0A000071030000F8070000001000000004000000080000110E000034030000EA0700000000000000080000000800004C010000CC08000044080000000400000008000000080000A80400006C0800001A080000000800000008000000080000050800001608000003080000000C000000080000000800005F0B0000C9070000F7070000001000000008000000080000B00E000085070000EB07000000000000000C000000080000FB0100003B0D00004208000000040000000C00000008000054050000D40C00001A08000000080000000C000000080000AF080000780C000006080000000C0000000C000000080000060C0000240C0000FC07000000100000000C000000080000550F0000D90B0000F2070000000000000010000000080000AA020000FF0F00004108000000040000001000000008000000060000FF0F00001C08000000080000001000000008000059090000FF0F00000A080000000C00000010000000080000AE0C0000FF0F000002080000001000000010000000080000FA0F0000FF0F0000FB0700000000000000000000000C000014000000000000007E0C00000004000000000000000C000071030000000000004B0C00000008000000000000000C0000D1060000000000002C0C0000000C000000000000000C00002D0A000000000000170C00000010000000000000000C0000800D000000000000030C00000000000000040000000C0000AF00000052040000650C00000004000000040000000C00000B040000FA030000350C00000008000000040000000C000068070000AD030000190C0000000C000000040000000C0000C20A000068030000070C00000010000000040000000C0000130E00002C030000F50B00000000000000080000000C000057010000B7080000570C00000004000000080000000C0000B0040000590800002A0C00000008000000080000000C00000B08000006080000110C0000000C000000080000000C0000630B0000BC070000020C00000010000000080000000C0000B20E00007A070000F30B000000000000000C0000000C0000040200001F0D00004F0C000000040000000C0000000C00005B050000BB0C0000260C000000080000000C0000000C0000B4080000620C00000F0C0000000C0000000C0000000C00000A0C0000120C0000030C000000100000000C0000000C0000560F0000CA0B0000F80B00000000000000100000000C0000B1020000FF0F00004A0C00000004000000100000000C000006060000FF0F0000230C00000008000000100000000C00005D090000FF0F0000100C0000000C000000100000000C0000B00C0000FF0F0000060C00000010000000100000000C0000FB0F0000FF0F0000FE0B00000000000000000000001000004300000000000000FF0F00000004000000000000001000009E03000000000000FF0F0000000800000000000000100000FB06000000000000FF0F0000000C00000000000000100000540A000000000000FF0F0000001000000000000000100000A50D000000000000FF0F0000000000000004000000100000DD00000012040000FF0F000000040000000400000010000036040000BC030000FF0F00000008000000040000001000009107000070030000FF0F0000000C00000004000000100000E90A00002D030000FF0F0000001000000004000000100000370E0000F2020000F80F00000000000000080000001000008301000070080000FF0F0000000400000008000000100000DA04000014080000FF0F000000080000000800000010000033080000C3070000FF0F0000000C00000008000000100000890B00007B070000FF0F0000001000000008000000100000D50E00003C070000F30F000000000000000C0000001000002F020000D10C0000FF0F000000040000000C00000010000084050000700C0000FF0F000000080000000C000000100000DB0800001A0C0000FF0F0000000C0000000C0000001000002F0C0000CD0B0000FF0F000000100000000C000000100000790F0000880B0000F40F0000000000000010000000100000DB020000FF0F0000FF0F00000004000000100000001000002E060000FF0F0000FF0F000000080000001000000010000083090000FF0F0000FF0F0000000C00000010000000100000D50C0000FF0F0000FF0F0000001000000010000000100000FF0F0000F80F0000F70F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000500000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000000B0000002F0000003D0000004A000000530000005B000000640000006C00000071000000770000007C00000083000000880000008F00000094000000990000009E000000A2000000A5000000AA000000AD000000B1000000B3000000B7000000BA000000BD000000C0000000C4000000C8000000CC000000CE000000D1000000D4000000D8000000DA000000DC000000E0000000E2000000E4000000E7000000EA000000ED000000EF000000F1000000F3000000F5000000F8000000FA000000FB000000FE000000020100000301000006010000090100000B0100000D01000010010000110100001501000017010000190100001B0100001D0100001F01000021010000240100002501000027010000290100002B0100002D0100002F01000031010000330100003501000038010000390100003B0100003D0100003E0100004001000041010000430100004501000046010000490100004A0100004C0100004E0100004F010000500100005201000053010000550100005701000058010000590100005B0100005C0100005E010000600100006001000062010000640100006501000066010000680100006A0100006B0100006D0100006E010000700100007101000072010000740100007501000077010000780100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000083010000840100008601000088010000890100008A0100008B0100008C0100008E0100008F01000090010000910100009201000094010000950100009601000097010000980100009A0100009B0100009D0100009E010000A0010000A1010000A2010000A3010000A5010000A6010000A7010000A7010000A9010000AA010000AB010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BB010000BB010000BC010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C9010000C9010000CC010000CD010000CD010000CE010000CF010000D1010000D2010000D3010000D3010000D5010000D6010000D7010000D7010000D8010000D9010000DB010000DD010000DE010000DF010000DF010000E1010000E1010000E2010000E3010000E5010000E6010000E7010000E9010000EA010000EB010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F1010000F3010000F4010000F6010000F7010000F8010000F8010000F9010000FB010000FC010000FD010000FD010000FE0100000002000000020000010200000202000003020000030200000402000005020000060200000802000008020000090200000A0200000B0200000C0200000C0200000D0200000E0200000F020000100200001102000011020000130200001402000015020000150200001602000018020000190200001A0200001B0200001D0200001E0200001E0200001F02000020020000210200002102000023020000240200002402000025020000260200002602000027020000280200002A0200002A0200002B0200002C0200002D0200002E0200002E0200002F0200003002000031020000320200003202000033020000340200003602000037020000380200003802000039020000390200003B0200003C0200003C0200003D0200003E0200004002000040020000420200004302000043020000440200004502000045020000470200004702000048020000490200004A0200004B0200004B0200004C0200004D0200004D0200004E0200004F020000510200005102000051020000520200005502000055020000560200005602000057020000590200005A0200005B0200005B0200005C0200005D0200005E0200005E0200005F02000060020000610200006102000062020000630200006402000065020000650200006602000068020000690200006A0200006A0200006B0200006C0200006C0200006D0200006F02000070020000700200007002000071020000720200007302000074020000750200007502000076020000770200007802000078020000790200007A0200007B0200007D0200007E0200007E0200007F02000080020000800200008102000081020000820200008302000083020000840200008502000085020000870200008802000088020000880200008A0200008A0200008B0200008B0200008C0200008D0200008D0200008E0200008F020000900200009002000091020000920200009202000093020000930200009402000095020000950200009702000097020000980200009802000099020000990200009B0200009B0200009B0200009C0200009D0200009D0200009E0200009E0200009F0200009F020000A1020000A2020000A2020000A3020000A4020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000A9020000AA020000AB020000AB020000AC020000AC020000AD020000AE020000AE020000AF020000B0020000B1020000B1020000B2020000B3020000B3020000B4020000B4020000B6020000B6020000B8020000B8020000B9020000BB020000BB020000BB020000BC020000BD020000BD020000BD020000BE020000C0020000C0020000C0020000C1020000C1020000C3020000C4020000C5020000C5020000C6020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CC020000CD020000CD020000CD020000CE020000CF020000CF020000D1020000D2020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D7020000D7020000D8020000D8020000D9020000DA020000DA020000DB020000DB020000DC020000DD020000DE020000DF020000DF020000E0020000E0020000E2020000E2020000E4020000E4020000E5020000E6020000E6020000E7020000E7020000E8020000E9020000E9020000EA020000EA020000EB020000EC020000EC020000EE020000EF020000EF020000F0020000F0020000F1020000F2020000F3020000F4020000F4020000F5020000F5020000F7020000F8020000F8020000F9020000F9020000F9020000FB020000FC020000FD020000FD020000FE020000FE02000000030000010300000103000002030000030300000303000004030000040300000503000006030000060300000603000007030000070300000803000009030000090300000A0300000B0300000B0300000B0300000D0300000E0300000E0300000E0300000F0300000F03000010030000110300001103000012030000120300001303000013030000140300001403000015030000150300001703000017030000180300001803000019030000190300001A0300001A0300001B0300001C0300001C0300001C0300001D0300001E0300001E0300001F0300002003000021030000210300002203000022030000230300002303000024030000250300002503000027030000270300002803000028030000290300002A0300002A0300002A0300002B0300002B0300002D0300002E0300002E0300002F0300002F0300002F0300003003000031030000320300003203000032030000340300003403000035030000360300003603000037030000380300003803000038030000390300003B0300003B0300003C0300003C0300003C0300003D0300003E0300003F030000400300004003000041030000410300004103000042030000420300004303000043030000450300004503000046030000460300004603000047030000480300004803000049030000490300004A0300004A0300004A0300004B0300004B0300004C0300004C0300004E0300004F0300004F030000500300005003000051030000510300005203000052030000520300005203000053030000530300005403000055030000550300005603000056030000570300005703000057030000580300005803000059030000590300005A0300005A0300005C0300005C0300005D0300005E0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000620300006403000065030000650300006603000066030000660300006703000067030000680300006903000069030000690300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006F0300006F0300006F0300007003000070030000720300007303000073030000740300007403000075030000750300007603000076030000770300007703000078030000790300007A0300007A0300007B0300007C0300007C0300007C0300007D0300007D0300007F030000800300008003000080030000800300008103000082030000820300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008A0300008B0300008B0300008B0300008C0300008D0300008D0300008E0300008F0300008F0300009003000090030000900300009103000091030000920300009203000093030000940300009403000095030000960300009603000096030000970300009703000097030000980300009A0300009A0300009B0300009B0300009C0300009C0300009C0300009D0300009D0300009E0300009E030000A0030000A0030000A1030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A6030000A6030000A6030000A6030000A7030000A7030000A9030000AA030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AD030000AE030000AF030000AF030000B0030000B0030000B1030000B2030000B2030000B2030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B6030000B7030000B7030000B8030000B9030000B9030000BA030000BA030000BA030000BB030000BB030000BC030000BD030000BD030000BE030000BE030000BF030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C3030000C4030000C4030000C5030000C5030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CB030000CD030000CD030000CE030000CE030000CE030000CF030000CF030000D0030000D2030000D2030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D7030000D7030000D8030000D8030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DD030000DD030000DF030000DF030000DF030000DF030000E1030000E1030000E1030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E6030000E6030000E8030000E9030000E9030000E9030000E9030000EA030000EB030000EC030000EC030000ED030000ED030000ED030000EE030000EE030000EF030000F1030000F1030000F2030000F2030000F2030000F2030000F3030000F3030000F4030000F4030000F6030000F6030000F7030000F7030000F8030000F8030000F9030000FA030000FA030000FA030000FB030000FB030000FB030000FC030000FC030000FD030000FD030000FE030000FE030000FF030000FF03000000000000040000002B00000039000000450000004E000000540000005C000000640000006A00000070000000750000007B0000008000000085000000890000008E00000093000000970000009A0000009F000000A2000000A6000000A8000000AC000000AF000000B2000000B5000000B8000000BA000000BD000000BF000000C3000000C6000000C9000000CC000000CE000000D1000000D4000000D6000000D8000000DC000000DE000000E0000000E2000000E4000000E6000000E9000000EB000000EC000000EE000000F1000000F2000000F5000000F7000000F9000000FB000000FE000000FF000000020100000401000006010000080100000B0100000D0100000F01000012010000130100001501000017010000190100001B0100001D0100001F010000200100002101000023010000240100002601000027010000280100002B0100002C0100002F0100003101000032010000340100003501000037010000390100003A0100003B0100003D0100003E010000400100004201000043010000440100004601000047010000490100004B0100004B0100004D010000500100005101000052010000530100005501000055010000560100005701000058010000590100005A0100005C0100005E0100005F0100006001000062010000630100006401000065010000660100006701000068010000690100006C0100006D0100006F0100007001000071010000720100007301000074010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000810100008201000084010000850100008701000088010000890100008A0100008B0100008C0100008D0100008D0100008E0100008F01000090010000920100009301000094010000950100009601000097010000980100009A0100009B0100009C0100009D0100009F0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AD010000AD010000AF010000B0010000B0010000B1010000B2010000B3010000B4010000B5010000B5010000B7010000B9010000BA010000BA010000BB010000BD010000BE010000BF010000C0010000C1010000C1010000C2010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CA010000CB010000CC010000CD010000CF010000D0010000D2010000D2010000D3010000D4010000D5010000D6010000D7010000D7010000D8010000DA010000DB010000DC010000DC010000DD010000DF010000DF010000E0010000E1010000E2010000E2010000E3010000E4010000E5010000E7010000E7010000E8010000E9010000EA010000EB010000EB010000EC010000ED010000EE010000EF010000F0010000F0010000F2010000F3010000F4010000F4010000F5010000F6010000F6010000F7010000F8010000F9010000FA010000FA010000FB010000FC010000FD010000FD010000FF0100000002000000020000010200000202000002020000030200000402000005020000050200000702000008020000090200000A0200000A0200000B0200000C0200000D0200000E0200000E0200000F02000010020000110200001202000013020000130200001402000014020000160200001702000017020000190200001A0200001B0200001B0200001C0200001D0200001D0200001E0200001F0200001F0200002102000021020000220200002302000024020000260200002602000027020000280200002802000029020000290200002A0200002A0200002A0200002B0200002D0200002D0200002E0200002E0200002F020000300200003102000032020000320200003302000034020000350200003502000036020000370200003802000038020000390200003B0200003C0200003D0200003D0200003E0200003F020000400200004102000041020000420200004302000043020000440200004502000046020000460200004602000048020000490200004A0200004B0200004C0200004C0200004D0200004E0200004F0200004F02000050020000510200005202000053020000540200005402000055020000560200005602000057020000570200005802000059020000590200005A0200005B0200005B0200005C0200005D0200005D0200005D0200005E0200005E0200005E0200005E0200006002000061020000610200006202000063020000640200006402000065020000660200006602000067020000670200006802000069020000690200006B0200006B0200006C0200006C0200006D0200006D0200006F0200006F0200006F020000700200007202000072020000730200007302000074020000740200007502000076020000760200007702000079020000790200007A0200007A0200007B0200007C0200007D0200007D0200007E0200007E0200007F020000800200008002000081020000810200008202000083020000830200008402000085020000860200008602000087020000880200008802000089020000890200008B0200008B0200008C0200008C0200008D0200008E0200008E0200008E0200008F0200009102000091020000910200009102000092020000920200009202000093020000930200009402000095020000960200009602000097020000970200009802000098020000990200009A0200009A0200009B0200009C0200009D0200009E0200009E0200009E0200009F020000A0020000A0020000A1020000A2020000A2020000A3020000A3020000A4020000A4020000A5020000A5020000A7020000A7020000A8020000A8020000A9020000AA020000AA020000AB020000AB020000AC020000AD020000AE020000AF020000AF020000B0020000B0020000B2020000B2020000B3020000B3020000B4020000B5020000B5020000B6020000B6020000B7020000B8020000B8020000B9020000B9020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BE020000BF020000C0020000C1020000C2020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C6020000C6020000C7020000C7020000C8020000C8020000C9020000C9020000CA020000CB020000CB020000CC020000CD020000CD020000CE020000CE020000CF020000D0020000D0020000D0020000D1020000D1020000D2020000D3020000D3020000D5020000D6020000D6020000D6020000D7020000D8020000D8020000D8020000D9020000D9020000DA020000DC020000DC020000DD020000DD020000DE020000DE020000DF020000DF020000E0020000E0020000E2020000E2020000E3020000E3020000E4020000E4020000E5020000E5020000E6020000E7020000E7020000E7020000E8020000E9020000E9020000EA020000EB020000ED020000ED020000EE020000EE020000EF020000EF020000F0020000F1020000F1020000F3020000F3020000F4020000F4020000F5020000F6020000F6020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FA020000FB020000FD020000FE020000FE020000FE020000FF020000FF020000FF02000000030000000300000103000002030000020300000203000003030000040300000403000005030000050300000503000006030000070300000803000009030000090300000A0300000A0300000A0300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000E0300000F0300001003000010030000120300001203000013030000130300001303000014030000140300001503000015030000160300001703000017030000180300001803000019030000190300001A0300001A0300001A0300001A0300001B0300001B0300001C0300001E0300001E0300001F0300001F0300002003000020030000200300002103000021030000220300002203000023030000230300002403000024030000250300002603000026030000260300002703000027030000280300002803000029030000290300002B0300002B0300002B0300002C0300002D0300002D0300002E0300002E0300002E0300003003000030030000310300003203000032030000320300003303000033030000330300003303000034030000340300003503000036030000360300003603000037030000370300003803000039030000390300003A0300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003F03000040030000400300004103000042030000420300004203000043030000430300004403000045030000450300004503000045030000460300004703000047030000480300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004E0300004F0300004F0300004F03000050030000510300005103000052030000530300005303000054030000540300005403000055030000550300005603000056030000570300005803000058030000590300005A0300005A0300005A0300005B0300005B0300005B0300005C0300005D0300005D0300005E0300005E0300005F0300005F0300005F030000600300006003000061030000610300006303000063030000640300006403000064030000650300006503000066030000660300006603000066030000670300006703000067030000670300006803000068030000690300006A0300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006D0300006E0300006F0300006F030000700300007003000071030000720300007203000072030000730300007403000074030000750300007503000076030000760300007603000077030000770300007803000079030000790300007A0300007A0300007A0300007B0300007B0300007C0300007D0300007D0300007E0300007E0300007F03000080030000810300008103000082030000820300008303000083030000830300008403000084030000850300008503000086030000870300008703000088030000880300008903000089030000890300008A0300008A0300008A0300008C0300008C0300008D0300008D0300008D0300008E0300008E0300008F0300009003000090030000910300009103000092030000920300009203000093030000930300009403000094030000950300009503000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009A0300009A0300009B0300009B0300009B0300009B0300009C0300009C0300009C0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A1030000A2030000A3030000A3030000A3030000A3030000A4030000A5030000A6030000A6030000A7030000A7030000A7030000A8030000A8030000A9030000AA030000AA030000AB030000AB030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B2030000B2030000B2030000B3030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B703000000000000000000002800000039000000450000004F0000005800000060000000680000006F000000740000007900000080000000850000008B00000090000000950000009A0000009E000000A1000000A6000000AA000000AE000000B0000000B3000000B6000000BA000000BD000000C0000000C4000000C7000000CA000000CE000000D0000000D4000000D7000000D9000000DD000000DF000000E1000000E3000000E6000000E9000000EB000000ED000000EF000000F2000000F4000000F6000000F8000000FB000000FD000000FF000000020100000401000007010000090100000C0100000E01000011010000130100001501000017010000190100001B0100001D0100002001000021010000230100002501000027010000290100002B0100002E0100002F0100003201000034010000350100003701000038010000390100003C0100003D0100003F0100004101000042010000440100004501000047010000490100004A0100004C0100004E0100004F0100005101000053010000540100005501000057010000580100005A0100005C0100005C0100005E01000060010000600100006201000063010000650100006601000068010000690100006A0100006C0100006D0100006F01000071010000720100007301000075010000760100007701000078010000790100007A0100007B0100007C0100007E0100007E010000800100008101000083010000850100008601000087010000890100008A0100008B0100008C0100008D0100008E0100008F010000910100009201000093010000950100009601000098010000990100009A0100009C0100009D0100009E0100009E0100009F010000A0010000A1010000A3010000A4010000A5010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AF010000AF010000B0010000B1010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BC010000BD010000BE010000BF010000C0010000C0010000C2010000C3010000C5010000C6010000C6010000C7010000C9010000CA010000CB010000CC010000CC010000CD010000CF010000D0010000D0010000D1010000D2010000D4010000D6010000D7010000D8010000D8010000DA010000DA010000DB010000DC010000DD010000DE010000DF010000E1010000E2010000E4010000E4010000E5010000E6010000E7010000E8010000E9010000EB010000EB010000EC010000ED010000EE010000EF010000F0010000F0010000F1010000F3010000F4010000F5010000F5010000F6010000F9010000F9010000FA010000FB010000FC010000FC010000FD010000FE010000FE01000000020000000200000102000002020000030200000402000004020000050200000602000007020000090200000A0200000A0200000C0200000D0200000E0200000E0200000F02000011020000110200001202000013020000140200001502000015020000160200001702000018020000190200001A0200001C0200001C0200001D0200001E0200001F0200002002000021020000220200002202000024020000240200002502000026020000260200002702000028020000290200002A0200002A0200002B0200002C0200002D0200002E0200003002000030020000320200003202000034020000340200003402000036020000370200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003E0200003F02000040020000410200004302000043020000440200004502000045020000460200004702000049020000490200004A0200004B0200004C0200004D0200004E0200004E0200004F0200005002000051020000520200005202000053020000550200005602000056020000570200005802000059020000590200005A0200005C0200005C0200005D0200005D0200005E0200005F0200006002000061020000620200006202000063020000630200006402000065020000660200006702000067020000690200006A0200006B0200006C0200006C0200006D0200006D0200006E0200006F0200007002000071020000720200007302000074020000750200007502000076020000770200007702000079020000790200007A0200007B0200007C0200007D0200007E0200007E0200007F0200008002000080020000810200008202000083020000840200008402000085020000860200008602000087020000870200008802000088020000890200008A0200008A0200008B0200008B0200008C0200008D0200008D0200008F0200008F02000090020000900200009102000091020000930200009302000093020000930200009502000095020000960200009602000097020000970200009802000099020000990200009A0200009B0200009C0200009D0200009D0200009D0200009E0200009F0200009F020000A0020000A0020000A1020000A2020000A2020000A3020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AA020000AB020000AB020000AD020000AD020000AE020000AE020000AF020000B0020000B0020000B0020000B1020000B2020000B2020000B2020000B3020000B5020000B5020000B5020000B6020000B6020000B7020000B8020000B9020000B9020000BA020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BF020000C0020000C1020000C1020000C1020000C2020000C3020000C3020000C4020000C6020000C6020000C7020000C7020000C8020000C8020000C9020000C9020000CA020000CB020000CC020000CC020000CD020000CE020000CE020000CF020000CF020000D0020000D2020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D6020000D6020000D7020000D8020000D8020000D9020000D9020000DB020000DC020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E2020000E2020000E3020000E3020000E3020000E4020000E5020000E6020000E6020000E7020000E7020000E9020000EA020000EA020000EB020000EC020000EC020000EE020000EF020000F0020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F4020000F5020000F5020000F5020000F7020000F8020000F8020000F8020000F9020000F9020000FA020000FB020000FB020000FD020000FE020000FE020000FE02000000030000010300000103000001030000020300000303000003030000050300000503000006030000060300000703000007030000080300000803000009030000090300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000F03000010030000100300001003000011030000120300001203000013030000140300001503000015030000160300001603000017030000170300001803000019030000190300001A0300001A0300001B0300001B0300001C0300001D0300001D0300001D0300001F0300001F030000200300002103000021030000220300002203000023030000230300002503000025030000250300002503000027030000270300002803000029030000290300002A0300002B0300002B0300002B0300002C0300002D0300002D0300002F0300002F0300002F03000030030000310300003203000033030000330300003403000034030000340300003503000035030000360300003603000038030000380300003903000039030000390300003A0300003B0300003B0300003D0300003D0300003E0300003E0300003E030000400300004003000041030000410300004203000043030000430300004403000044030000450300004503000046030000460300004603000046030000470300004703000048030000490300004A0300004A0300004A0300004B0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000052030000520300005203000053030000530300005403000054030000540300005503000056030000560300005603000057030000580300005803000059030000590300005A0300005B0300005B0300005C0300005C0300005C0300005C0300005E0300005E0300005F0300005F03000060030000600300006103000062030000620300006203000063030000630300006403000065030000650300006603000066030000670300006703000068030000680300006903000069030000690300006A0300006B0300006B0300006C0300006D0300006D0300006D0300006E0300006E0300006F03000070030000710300007103000071030000720300007303000073030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007D0300007E0300007F0300007F030000800300008103000081030000820300008203000082030000840300008403000085030000850300008603000086030000860300008703000088030000880300008803000089030000890300008A0300008A0300008C0300008C0300008D0300008D0300008E0300008E0300008E0300008F0300008F030000900300009003000092030000920300009303000093030000930300009403000094030000950300009503000096030000960300009803000098030000980300009803000099030000990300009A0300009B0300009B0300009B0300009D0300009D0300009E0300009E0300009F0300009F0300009F030000A0030000A1030000A1030000A2030000A2030000A3030000A4030000A4030000A4030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A8030000A9030000A9030000A9030000AA030000AA030000AB030000AB030000AB030000AC030000AC030000AD030000AE030000AE030000AF030000AF030000B0030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B8030000B8030000B9030000B9030000BA030000BB030000BB030000BC030000BC030000BC030000BE030000BE030000BF030000BF030000BF030000C0030000C0030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CC030000CC030000CC030000CD030000CE030000CF030000CF030000CF030000D0030000D0030000D0030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D5030000D6030000D7030000D7030000D7030000D8030000D9030000DA030000DB030000DB030000DC030000DC030000DC030000DD030000DD030000DE030000DF030000DF030000E0030000E1030000E1030000E1030000E2030000E2030000E3030000E3030000E5030000E5030000E6030000E6030000E7030000E7030000E8030000E9030000E9030000E9030000EA030000EA030000EA030000EB030000EB030000ED030000ED030000EE030000EE030000EF030000EF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000005000000050000000500000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ <Feature FeatureType="28" Disable="false" DataSize="8192">3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D227574662D38223F3E3C6864725F6C69622076657273696F6E3D22322E30223E3C5144434D5F76657273696F6E3E362E31303C2F5144434D5F76657273696F6E3E3C70616E656C5F636F6C6F725F6D6F64653E44434950333C2F70616E656C5F636F6C6F725F6D6F64653E3C70616E656C5F6D61785F6C756D696E616E63653E3432332E3736333039323034313031363C2F70616E656C5F6D61785F6C756D696E616E63653E3C70616E656C5F6D696E5F6C756D696E616E63653E302E34313035323937303239303138343C2F70616E656C5F6D696E5F6C756D696E616E63653E3C6E6F6D696E616C5F7065616B5F6C756D696E616E63653E313530303C2F6E6F6D696E616C5F7065616B5F6C756D696E616E63653E3C5344525F7065616B5F6C756D696E616E63653E3430303C2F5344525F7065616B5F6C756D696E616E63653E3C6F75747075745F67616D6D615F73706163653E3C73706163653E3270323C2F73706163653E3C76616C3E322E323C2F76616C3E3C2F6F75747075745F67616D6D615F73706163653E3C70616E656C5F7063633E3C723E3C633E303C2F633E3C723E313C2F723E3C673E303C2F673E3C623E303C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F723E3C673E3C633E303C2F633E3C723E303C2F723E3C673E313C2F673E3C623E303C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F673E3C623E3C633E303C2F633E3C723E303C2F723E3C673E303C2F673E3C623E313C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F623E3C2F70616E656C5F7063633E3C746F6E655F6D61703E3C706F696E74733E3C783E303C2F783E3C793E303C2F793E3C783E36323C2F783E3C793E383C2F793E3C783E3132333C2F783E3C793E33313C2F793E3C783E3138353C2F783E3C793E37353C2F793E3C783E3235343C2F783E3C793E3133313C2F793E3C783E3330383C2F783E3C793E3138343C2F793E3C783E3338363C2F783E3C793E3238323C2F793E3C783E3435313C2F783E3C793E3338373C2F793E3C783E3438323C2F783E3C793E3434373C2F793E3C783E3531333C2F783E3C793E3531343C2F793E3C783E3534343C2F783E3C793E3539303C2F793E3C783E3537353C2F783E3C793E3637353C2F793E3C783E3630363C2F783E3C793E3737303C2F793E3C783E3633373C2F783E3C793E3837373C2F793E3C783E3636383C2F783E3C793E3931363C2F793E3C783E3830303C2F783E3C793E3938313C2F793E3C783E3932333C2F783E3C793E313032333C2F793E3C2F706F696E74733E3C2F746F6E655F6D61703E3C73616D706C696E675F677269643E3C7265643E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F7265643E3C677265656E3E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F677265656E3E3C626C75653E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F626C75653E3C2F73616D706C696E675F677269643E3C647370705F73616D706C696E675F677269643E3C747970653E637573746F6D3C2F747970653E3C73697A653E31373C2F73697A653E3C2F647370705F73616D706C696E675F677269643E3C2F6864725F6C69623E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ </Mode>
+ <Mode ModeID="2" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="P3" NumOfFeatures="14" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="dcip3" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000D00000000000000000000000000200000000000000000000A00100000000000000000000000300000000000000000000710200000000000000000000000400000000000000000000410300000000000000000000000500000000000000000000110400000000000000000000000600000000000000000000E20400000000000000000000000700000000000000000000B20500000000000000000000000800000000000000000000830600000000000000000000000900000000000000000000530700000000000000000000000A00000000000000000000230800000000000000000000000B00000000000000000000F40800000000000000000000000C00000000000000000000C40900000000000000000000000D00000000000000000000950A00000000000000000000000E00000000000000000000650B00000000000000000000000F00000000000000000000350C00000000000000000000001000000000000000000000060D00000000000000000000000000000001000000000000290000001A01000000000000000100000001000000000000FA0000000501000000000000000200000001000000000000CA010000F0000000000000000003000000010000000000009B020000DA000000000000000004000000010000000000006C030000C5000000000000000005000000010000000000003C040000B0000000000000000006000000010000000000000D0500009B00000000000000000700000001000000000000DE0500008500000000000000000800000001000000000000AE06000070000000000000000009000000010000000000007F0700005B00000000000000000A00000001000000000000500800004500000000000000000B00000001000000000000200900003000000000000000000C00000001000000000000F10900001B00000000000000000D00000001000000000000C20A00000600000000000000000E00000001000000000000930B00000000000000000000000F00000001000000000000630C00000000000000000000001000000001000000000000340D00000000000000000000000000000002000000000000530000003902000000000000000100000002000000000000240100002302000000000000000200000002000000000000F40100000E02000000000000000300000002000000000000C5020000F80100000000000000040000000200000000000096030000E20100000000000000050000000200000000000067040000CD0100000000000000060000000200000000000038050000B70100000000000000070000000200000000000009060000A101000000000000000800000002000000000000DA0600008C01000000000000000900000002000000000000AB0700007601000000000000000A000000020000000000007C0800006001000000000000000B000000020000000000004D0900004B01000000000000000C000000020000000000001E0A00003501000000000000000D00000002000000000000EF0A00001F01000000000000000E00000002000000000000C00B00000A01000000000000000F00000002000000000000910C0000F400000000000000001000000002000000000000620D0000DF000000000000000000000000030000000000007C00000058030000010000000001000000030000000000004D01000042030000000000000002000000030000000000001F0200002C03000000000000000300000003000000000000F00200001603000000000000000400000003000000000000C1030000000300000000000000050000000300000000000092040000EA0200000000000000060000000300000000000064050000D40200000000000000070000000300000000000035060000BD0200000000000000080000000300000000000006070000A702000000000000000900000003000000000000D70700009102000000000000000A00000003000000000000A90800007B02000000000000000B000000030000000000007A0900006502000000000000000C000000030000000000004B0A00004F02000000000000000D000000030000000000001C0B00003902000000000000000E00000003000000000000EE0B00002302000000000000000F00000003000000000000BF0C00000D02000000000000001000000003000000000000900D0000F701000000000000000000000004000000000000A600000076040000020000000001000000040000000000007701000060040000000000000002000000040000000000004902000049040000000000000003000000040000000000001A0300003304000000000000000400000004000000000000EC0300001D04000000000000000500000004000000000000BD04000006040000000000000006000000040000000000008F050000F00300000000000000070000000400000000000060060000DA0300000000000000080000000400000000000032070000C30300000000000000090000000400000000000003080000AD03000000000000000A00000004000000000000D50800009603000000000000000B00000004000000000000A60900008003000000000000000C00000004000000000000780A00006A03000000000000000D000000040000000000004A0B00005303000000000000000E000000040000000000001B0C00003D03000000000000000F00000004000000000000ED0C00002703000000000000001000000004000000000000BE0D00001003000000000000000000000005000000000000CF0000009505000003000000000100000005000000000000A10100007E05000000000000000200000005000000000000730200006705000000000000000300000005000000000000450300005105000000000000000400000005000000000000160400003A05000000000000000500000005000000000000E80400002305000000000000000600000005000000000000BA0500000C050000000000000007000000050000000000008C060000F6040000000000000008000000050000000000005E070000DF040000000000000009000000050000000000002F080000C804000000000000000A0000000500000000000001090000B204000000000000000B00000005000000000000D30900009B04000000000000000C00000005000000000000A50A00008404000000000000000D00000005000000000000770B00006D04000000000000000E00000005000000000000490C00005704000000000000000F000000050000000000001A0D00004004000000000000001000000005000000000000EC0D00002904000000000000000000000006000000000000F9000000B306000004000000000100000006000000000000CB0100009C060000000000000002000000060000000000009D02000085060000000000000003000000060000000000006F0300006E06000000000000000400000006000000000000410400005706000000000000000500000006000000000000130500004006000000000000000600000006000000000000E50500002906000000000000000700000006000000000000B7060000120600000000000000080000000600000000000089070000FB050000000000000009000000060000000000005C080000E405000000000000000A000000060000000000002E090000CD05000000000000000B00000006000000000000000A0000B505000000000000000C00000006000000000000D20A00009E05000000000000000D00000006000000000000A40B00008705000000000000000E00000006000000000000760C00007005000000000000000F00000006000000000000480D000059050000000000000010000000060000000000001A0E0000420500000000000000000000000700000000000022010000D207000005000000000100000007000000000000F4010000BB07000000000000000200000007000000000000C7020000A307000000000000000300000007000000000000990300008C070000000000000004000000070000000000006C04000074070000000000000005000000070000000000003E0500005D07000000000000000600000007000000000000100600004507000000000000000700000007000000000000E30600002E07000000000000000800000007000000000000B5070000160700000000000000090000000700000000000088080000FF06000000000000000A000000070000000000005A090000E806000000000000000B000000070000000000002C0A0000D006000000000000000C00000007000000000000FF0A0000B906000000000000000D00000007000000000000D10B0000A106000000000000000E00000007000000000000A40C00008A06000000000000000F00000007000000000000760D00007206000000000000001000000007000000000000480E00005B060000000000000000000000080000000000004C010000F1080000070000000001000000080000000000001E020000D908000001000000000200000008000000000000F1020000C108000000000000000300000008000000000000C4030000A908000000000000000400000008000000000000960400009108000000000000000500000008000000000000690500007A080000000000000006000000080000000000003C06000062080000000000000007000000080000000000000E0700004A08000000000000000800000008000000000000E10700003208000000000000000900000008000000000000B40800001A08000000000000000A00000008000000000000860900000308000000000000000B00000008000000000000590A0000EB07000000000000000C000000080000000000002C0B0000D307000000000000000D00000008000000000000FF0B0000BB07000000000000000E00000008000000000000D10C0000A307000000000000000F00000008000000000000A40D00008C07000000000000001000000008000000000000770E00007407000000000000000000000009000000000000750100000F0A00000800000000010000000900000000000048020000F7090000020000000002000000090000000000001B030000DF09000000000000000300000009000000000000EE030000C709000000000000000400000009000000000000C1040000AF09000000000000000500000009000000000000940500009609000000000000000600000009000000000000670600007E090000000000000007000000090000000000003A07000066090000000000000008000000090000000000000D0800004E09000000000000000900000009000000000000E00800003609000000000000000A00000009000000000000B30900001E09000000000000000B00000009000000000000860A00000509000000000000000C00000009000000000000590B0000ED08000000000000000D000000090000000000002C0C0000D508000000000000000E00000009000000000000FF0C0000BD08000000000000000F00000009000000000000D20D0000A508000000000000001000000009000000000000A50E00008D0800000000000000000000000A0000000000009F0100002E0B00000900000000010000000A00000000000072020000150B00000300000000020000000A00000000000045030000FD0A00000000000000030000000A00000000000018040000E40A00000000000000040000000A000000000000EC040000CC0A00000000000000050000000A000000000000BF050000B30A00000000000000060000000A000000000000920600009B0A00000000000000070000000A00000000000065070000820A00000000000000080000000A000000000000390800006A0A00000000000000090000000A0000000000000C090000510A000000000000000A0000000A000000000000DF090000390A000000000000000B0000000A000000000000B20A0000200A000000000000000C0000000A000000000000860B0000080A000000000000000D0000000A000000000000590C0000EF09000000000000000E0000000A0000000000002C0D0000D709000000000000000F0000000A000000000000000E0000BE0900000000000000100000000A000000000000D30E0000A50900000000000000000000000B000000000000C80100004C0C00000A00000000010000000B0000000000009C020000330C00000500000000020000000B0000000000006F0300001B0C00000000000000030000000B00000000000043040000020C00000000000000040000000B00000000000016050000E90B00000000000000050000000B000000000000EA050000D00B00000000000000060000000B000000000000BD060000B70B00000000000000070000000B000000000000910700009E0B00000000000000080000000B00000000000064080000850B00000000000000090000000B000000000000380900006C0B000000000000000A0000000B0000000000000C0A0000540B000000000000000B0000000B000000000000DF0A00003B0B000000000000000C0000000B000000000000B30B0000220B000000000000000D0000000B000000000000860C0000090B000000000000000E0000000B0000000000005A0D0000F00A000000000000000F0000000B0000000000002D0E0000D70A00000000000000100000000B000000000000010F0000BE0A00000000000000000000000C000000000000F20100006B0D00000B00000000010000000C000000000000C5020000520D00000600000000020000000C00000000000099030000380D00000100000000030000000C0000000000006D0400001F0D00000000000000040000000C00000000000041050000060D00000000000000050000000C00000000000015060000ED0C00000000000000060000000C000000000000E9060000D40C00000000000000070000000C000000000000BC070000BA0C00000000000000080000000C00000000000090080000A10C00000000000000090000000C00000000000064090000880C000000000000000A0000000C000000000000380A00006F0C000000000000000B0000000C0000000000000C0B0000550C000000000000000C0000000C000000000000E00B00003C0C000000000000000D0000000C000000000000B30C0000230C000000000000000E0000000C000000000000870D00000A0C000000000000000F0000000C0000000000005B0E0000F00B00000000000000100000000C0000000000002F0F0000D70B00000000000000000000000D0000000000001B0200008A0E00000C00000000010000000D000000000000EF020000700E00000700000000020000000D000000000000C3030000560E00000200000000030000000D000000000000970400003D0E00000000000000040000000D0000000000006C050000230E00000000000000050000000D000000000000400600000A0E00000000000000060000000D00000000000014070000F00D00000000000000070000000D000000000000E8070000D60D00000000000000080000000D000000000000BC080000BD0D00000000000000090000000D00000000000090090000A30D000000000000000A0000000D000000000000640A00008A0D000000000000000B0000000D000000000000380B0000700D000000000000000C0000000D0000000000000D0C0000560D000000000000000D0000000D000000000000E10C00003D0D000000000000000E0000000D000000000000B50D0000230D000000000000000F0000000D000000000000890E00000A0D00000000000000100000000D0000000000005D0F0000F00C00000000000000000000000E00000000000045020000A80F00000D00000000010000000E000000000000190300008E0F00000800000000020000000E000000000000ED030000740F00000400000000030000000E000000000000C20400005A0F00000000000000040000000E00000000000096050000400F00000000000000050000000E0000000000006B060000260F00000000000000060000000E0000000000003F0700000C0F00000000000000070000000E00000000000013080000F30E00000000000000080000000E000000000000E8080000D90E00000000000000090000000E000000000000BC090000BF0E000000000000000A0000000E000000000000910A0000A50E000000000000000B0000000E000000000000650B00008B0E000000000000000C0000000E0000000000003A0C0000710E000000000000000D0000000E0000000000000E0D0000570E000000000000000E0000000E000000000000E20D00003D0E000000000000000F0000000E000000000000B70E0000230E00000000000000100000000E0000000000008B0F0000090E00000000000000000000000F0000000000006E020000FF0F00000E00000000010000000F00000000000043030000FF0F00000A00000000020000000F00000000000017040000FF0F00000500000000030000000F000000000000EC040000FF0F00000100000000040000000F000000000000C1050000FF0F00000000000000050000000F00000000000096060000FF0F00000000000000060000000F0000000000006A070000FF0F00000000000000070000000F0000000000003F080000FF0F00000000000000080000000F00000000000014090000F40F00000000000000090000000F000000000000E8090000DA0F000000000000000A0000000F000000000000BD0A0000C00F000000000000000B0000000F000000000000920B0000A50F000000000000000C0000000F000000000000660C00008B0F000000000000000D0000000F0000000000003B0D0000710F000000000000000E0000000F000000000000100E0000560F000000000000000F0000000F000000000000E50E00003C0F00000000000000100000000F000000000000B90F0000220F00000000000000000000001000000000000098020000FF0F00000F0000000001000000100000000000006D030000FF0F00000B00000000020000001000000000000042040000FF0F00000700000000030000001000000000000017050000FF0F000002000000000400000010000000000000EC050000FF0F000000000000000500000010000000000000C1060000FF0F00000000000000060000001000000000000096070000FF0F0000000000000007000000100000000000006B080000FF0F0000000000000008000000100000000000003F090000FF0F000000000000000900000010000000000000140A0000FF0F000000000000000A00000010000000000000E90A0000FF0F000000000000000B00000010000000000000BE0B0000FF0F000000000000000C00000010000000000000930C0000FF0F000000000000000D00000010000000000000680D0000FF0F000000000000000E000000100000000000003D0E0000FF0F000000000000000F00000010000000000000120F0000FF0F000000000000001000000010000000000000E70F0000FF0F000000000000000000000000000000010000020000000000000001010000000100000000000000010000D200000000000000FA000000000200000000000000010000A301000000000000F30000000003000000000000000100007402000000000000EC0000000004000000000000000100004403000000000000E50000000005000000000000000100001504000000000000DE000000000600000000000000010000E604000000000000D7000000000700000000000000010000B605000000000000D00000000008000000000000000100008706000000000000C90000000009000000000000000100005807000000000000C2000000000A000000000000000100002808000000000000BB000000000B00000000000000010000F908000000000000B4000000000C00000000000000010000CA09000000000000AD000000000D000000000000000100009A0A000000000000A6000000000E000000000000000100006B0B0000000000009F000000000F000000000000000100003C0C000000000000980000000010000000000000000100000D0D000000000000910000000000000000010000000100002B0000001101000002010000000100000001000000010000000100000001000000010000000200000001000000010000CD010000E8000000F40000000003000000010000000100009E020000D3000000EE0000000004000000010000000100006F030000BE000000E700000000050000000100000001000040040000A9000000E00000000006000000010000000100001105000094000000D9000000000700000001000000010000E20500007F000000D2000000000800000001000000010000B30600006A000000CC0000000009000000010000000100008407000055000000C5000000000A000000010000000100005508000040000000BE000000000B00000001000000010000260900002B000000B7000000000C00000001000000010000F709000016000000B0000000000D00000001000000010000C70A000001000000AA000000000E00000001000000010000980B000000000000A3000000000F00000001000000010000690C0000000000009C0000000010000000010000000100003A0D00000000000095000000000000000002000000010000550000003002000003010000000100000002000000010000260100001B020000FD000000000200000002000000010000F701000005020000F6000000000300000002000000010000C8020000F0010000EF0000000004000000020000000100009A030000DB010000E90000000005000000020000000100006B040000C5010000E20000000006000000020000000100003C050000B0010000DB0000000007000000020000000100000D0600009B010000D5000000000800000002000000010000DE06000085010000CE000000000900000002000000010000B007000070010000C7000000000A00000002000000010000810800005B010000C1000000000B000000020000000100005209000045010000BA000000000C00000002000000010000230A000030010000B3000000000D00000002000000010000F40A00001B010000AD000000000E00000002000000010000C60B000006010000A6000000000F00000002000000010000970C0000F0000000A0000000001000000002000000010000680D0000DB000000990000000000000000030000000100007E0000004F030000050100000001000000030000000100005001000039030000FE0000000002000000030000000100002102000023030000F8000000000300000003000000010000F30200000E030000F1000000000400000003000000010000C4030000F8020000EB00000000050000000300000001000096040000E2020000E400000000060000000300000001000067050000CD020000DE00000000070000000300000001000039060000B7020000D70000000008000000030000000100000A070000A1020000D1000000000900000003000000010000DC0700008C020000CA000000000A00000003000000010000AD08000076020000C4000000000B000000030000000100007E09000060020000BD000000000C00000003000000010000500A00004A020000B7000000000D00000003000000010000210B000035020000B0000000000E00000003000000010000F30B00001F020000AA000000000F00000003000000010000C40C000009020000A3000000001000000003000000010000960D0000F40100009D000000000000000004000000010000A80000006D040000060100000001000000040000000100007A01000057040000FF0000000002000000040000000100004B02000041040000F90000000003000000040000000100001D0300002B040000F3000000000400000004000000010000EF03000015040000EC000000000500000004000000010000C1040000FF030000E600000000060000000400000001000092050000E9030000E000000000070000000400000001000064060000D3030000D900000000080000000400000001000036070000BD030000D300000000090000000400000001000007080000A7030000CD000000000A00000004000000010000D908000091030000C6000000000B00000004000000010000AB0900007B030000C0000000000C000000040000000100007D0A000065030000BA000000000D000000040000000100004E0B00004F030000B3000000000E00000004000000010000200C000039030000AD000000000F00000004000000010000F20C000023030000A7000000001000000004000000010000C40D00000D030000A0000000000000000005000000010000D10000008C05000007010000000100000005000000010000A30100007505000001010000000200000005000000010000750200005F050000FB0000000003000000050000000100004703000049050000F40000000004000000050000000100001904000032050000EE000000000500000005000000010000EB0400001C050000E8000000000600000005000000010000BD05000005050000E20000000007000000050000000100008F060000EF040000DC00000000080000000500000001000061070000D9040000D600000000090000000500000001000033080000C2040000CF000000000A0000000500000001000005090000AC040000C9000000000B00000005000000010000D709000095040000C3000000000C00000005000000010000A90A00007F040000BD000000000D000000050000000100007B0B000069040000B7000000000E000000050000000100004D0C000052040000B1000000000F000000050000000100001F0D00003C040000AA000000001000000005000000010000F10D000025040000A4000000000000000006000000010000FB000000AB06000008010000000100000006000000010000CD0100009406000002010000000200000006000000010000A00200007D060000FC0000000003000000060000000100007203000066060000F6000000000400000006000000010000440400004F060000F00000000005000000060000000100001605000039060000EA000000000600000006000000010000E905000022060000E4000000000700000006000000010000BB0600000B060000DE0000000008000000060000000100008D070000F4050000D80000000009000000060000000100005F080000DE050000D2000000000A0000000600000001000032090000C7050000CC000000000B00000006000000010000040A0000B0050000C6000000000C00000006000000010000D60A000099050000C0000000000D00000006000000010000A80B000083050000BA000000000E000000060000000100007B0C00006C050000B4000000000F000000060000000100004D0D000055050000AE0000000010000000060000000100001F0E00003E050000A800000000000000000700000001000025010000C90700000A010000000100000007000000010000F7010000B207000004010000000200000007000000010000CA0200009B070000FE0000000003000000070000000100009C03000084070000F80000000004000000070000000100006F0400006D070000F20000000005000000070000000100004105000056070000EC000000000600000007000000010000140600003E070000E6000000000700000007000000010000E606000027070000E1000000000800000007000000010000B907000010070000DB0000000009000000070000000100008B080000F9060000D5000000000A000000070000000100005E090000E2060000CF000000000B00000007000000010000300A0000CB060000C9000000000C00000007000000010000030B0000B4060000C3000000000D00000007000000010000D50B00009D060000BD000000000E00000007000000010000A80C000085060000B8000000000F000000070000000100007A0D00006E060000B20000000010000000070000000100004D0E000057060000AC0000000000000000080000000100004E010000E80800000B01000000010000000800000001000021020000D008000005010000000200000008000000010000F4020000B9080000FF000000000300000008000000010000C7030000A1080000FA000000000400000008000000010000990400008A080000F40000000005000000080000000100006C05000072080000EE0000000006000000080000000100003F0600005B080000E90000000007000000080000000100001207000043080000E3000000000800000008000000010000E40700002C080000DD000000000900000008000000010000B708000014080000D7000000000A000000080000000100008A090000FD070000D2000000000B000000080000000100005D0A0000E5070000CC000000000C00000008000000010000300B0000CE070000C6000000000D00000008000000010000020C0000B6070000C1000000000E00000008000000010000D50C00009F070000BB000000000F00000008000000010000A80D000087070000B50000000010000000080000000100007B0E000070070000B000000000000000000900000001000078010000060A00000C0100000001000000090000000100004B020000EF090000060100000002000000090000000100001E030000D709000001010000000300000009000000010000F1030000BF090000FB000000000400000009000000010000C4040000A7090000F6000000000500000009000000010000970500008F090000F00000000006000000090000000100006A06000077090000EB0000000007000000090000000100003D0700005F090000E50000000008000000090000000100001008000048090000E0000000000900000009000000010000E308000030090000DA000000000A00000009000000010000B609000018090000D5000000000B00000009000000010000890A000000090000CF000000000C000000090000000100005C0B0000E8080000CA000000000D000000090000000100002F0C0000D0080000C4000000000E00000009000000010000020D0000B9080000BE000000000F00000009000000010000D50D0000A1080000B9000000001000000009000000010000A80E000089080000B300000000000000000A000000010000A1010000250B00000D01000000010000000A000000010000750200000D0B00000801000000020000000A00000001000048030000F50A00000201000000030000000A0000000100001B040000DC0A0000FD00000000040000000A000000010000EF040000C40A0000F800000000050000000A000000010000C2050000AC0A0000F200000000060000000A00000001000095060000940A0000ED00000000070000000A000000010000680700007C0A0000E800000000080000000A0000000100003C080000630A0000E200000000090000000A0000000100000F0900004B0A0000DD000000000A0000000A000000010000E2090000330A0000D7000000000B0000000A000000010000B60A00001B0A0000D2000000000C0000000A000000010000890B0000030A0000CD000000000D0000000A0000000100005C0C0000EA090000C7000000000E0000000A000000010000300D0000D2090000C2000000000F0000000A000000010000030E0000BA090000BD00000000100000000A000000010000D60E0000A2090000B700000000000000000B000000010000CB010000440C00000E01000000010000000B0000000100009F0200002B0C00000901000000020000000B00000001000072030000120C00000401000000030000000B00000001000046040000FA0B0000FF00000000040000000B00000001000019050000E10B0000FA00000000050000000B000000010000ED050000C90B0000F400000000060000000B000000010000C0060000B00B0000EF00000000070000000B00000001000094070000980B0000EA00000000080000000B000000010000670800007F0B0000E500000000090000000B0000000100003B090000670B0000DF000000000A0000000B0000000100000F0A00004E0B0000DA000000000B0000000B000000010000E20A0000350B0000D5000000000C0000000B000000010000B60B00001D0B0000D0000000000D0000000B000000010000890C0000040B0000CB000000000E0000000B0000000100005D0D0000EC0A0000C5000000000F0000000B000000010000300E0000D30A0000C000000000100000000B000000010000040F0000BB0A0000BB00000000000000000C000000010000F5010000620D00001001000000010000000C000000010000C8020000490D00000B01000000020000000C0000000100009C030000300D00000601000000030000000C00000001000070040000170D00000101000000040000000C00000001000044050000FF0C0000FB00000000050000000C00000001000018060000E60C0000F600000000060000000C000000010000EB060000CD0C0000F100000000070000000C000000010000BF070000B40C0000EC00000000080000000C000000010000930800009B0C0000E700000000090000000C00000001000067090000820C0000E2000000000A0000000C0000000100003B0A0000690C0000DD000000000B0000000C0000000100000F0B0000500C0000D8000000000C0000000C000000010000E20B0000370C0000D3000000000D0000000C000000010000B60C00001E0C0000CE000000000E0000000C0000000100008A0D0000050C0000C9000000000F0000000C0000000100005E0E0000EC0B0000C400000000100000000C000000010000320F0000D30B0000BF00000000000000000D0000000100001E020000810E00001101000000010000000D000000010000F2020000680E00000C01000000020000000D000000010000C60300004E0E00000701000000030000000D0000000100009A040000350E00000201000000040000000D0000000100006E0500001C0E0000FD00000000050000000D00000001000043060000020E0000F800000000060000000D00000001000017070000E90D0000F400000000070000000D000000010000EB070000D00D0000EF00000000080000000D000000010000BF080000B70D0000EA00000000090000000D000000010000930900009D0D0000E5000000000A0000000D000000010000670A0000840D0000E0000000000B0000000D0000000100003B0B00006B0D0000DB000000000C0000000D0000000100000F0C0000510D0000D6000000000D0000000D000000010000E30C0000380D0000D1000000000E0000000D000000010000B70D00001F0D0000CC000000000F0000000D0000000100008B0E0000060D0000C700000000100000000D0000000100005F0F0000EC0C0000C300000000000000000E000000010000480200009F0F00001201000000010000000E0000000100001C030000860F00000D01000000020000000E000000010000F00300006C0F00000901000000030000000E000000010000C5040000530F00000401000000040000000E00000001000099050000390F0000FF00000000050000000E0000000100006D0600001F0F0000FA00000000060000000E00000001000042070000060F0000F600000000070000000E00000001000016080000EC0E0000F100000000080000000E000000010000EA080000D20E0000EC00000000090000000E000000010000BF090000B90E0000E8000000000A0000000E000000010000930A00009F0E0000E3000000000B0000000E000000010000670B0000850E0000DE000000000C0000000E0000000100003C0C00006C0E0000D9000000000D0000000E000000010000100D0000520E0000D5000000000E0000000E000000010000E40D0000380E0000D0000000000F0000000E000000010000B90E00001F0E0000CB00000000100000000E0000000100008D0F0000050E0000C600000000000000000F00000001000071020000FF0F00001301000000010000000F00000001000046030000FF0F00000F01000000020000000F0000000100001B040000FF0F00000A01000000030000000F000000010000EF040000FF0F00000601000000040000000F000000010000C4050000FF0F00000101000000050000000F00000001000098060000FF0F0000FD00000000060000000F0000000100006D070000FF0F0000F800000000070000000F00000001000042080000FF0F0000F300000000080000000F00000001000016090000EE0F0000EF00000000090000000F000000010000EB090000D40F0000EA000000000A0000000F000000010000BF0A0000BA0F0000E6000000000B0000000F000000010000940B0000A00F0000E1000000000C0000000F000000010000690C0000860F0000DC000000000D0000000F0000000100003D0D00006C0F0000D8000000000E0000000F000000010000120E0000520F0000D3000000000F0000000F000000010000E60E0000380F0000CF00000000100000000F000000010000BB0F00001E0F0000CA0000000000000000100000000100009B020000FF0F00001501000000010000001000000001000070030000FF0F00001001000000020000001000000001000045040000FF0F00000C01000000030000001000000001000019050000FF0F000007010000000400000010000000010000EE050000FF0F000003010000000500000010000000010000C3060000FF0F0000FF00000000060000001000000001000098070000FF0F0000FA0000000007000000100000000100006D080000FF0F0000F600000000080000001000000001000042090000FF0F0000F1000000000900000010000000010000170A0000FF0F0000ED000000000A00000010000000010000EC0A0000FF0F0000E8000000000B00000010000000010000C00B0000FF0F0000E4000000000C00000010000000010000950C0000FF0F0000E0000000000D000000100000000100006A0D0000FF0F0000DB000000000E000000100000000100003F0E0000FF0F0000D7000000000F00000010000000010000140F0000FF0F0000D2000000001000000010000000010000E90F0000FF0F0000CE000000000000000000000000020000040000000000000004020000000100000000000000020000D500000000000000FD010000000200000000000000020000A601000000000000F60100000003000000000000000200007702000000000000EF0100000004000000000000000200004803000000000000E90100000005000000000000000200001904000000000000E2010000000600000000000000020000E904000000000000DB010000000700000000000000020000BA05000000000000D40100000008000000000000000200008B06000000000000CD0100000009000000000000000200005C07000000000000C7010000000A000000000000000200002D08000000000000C0010000000B00000000000000020000FE08000000000000B9010000000C00000000000000020000CF09000000000000B2010000000D00000000000000020000A00A000000000000AB010000000E00000000000000020000710B000000000000A5010000000F00000000000000020000420C0000000000009E010000001000000000000000020000130D000000000000970100000000000000010000000200002D0000000801000005020000000100000001000000020000FE000000F4000000FE010000000200000001000000020000D0010000DF000000F8010000000300000001000000020000A1020000CB000000F101000000040000000100000002000072030000B6000000EB01000000050000000100000002000043040000A1000000E4010000000600000001000000020000150500008D000000DD010000000700000001000000020000E605000078000000D7010000000800000001000000020000B706000063000000D0010000000900000001000000020000880700004F000000C9010000000A00000001000000020000590800003A000000C3010000000B000000010000000200002B09000026000000BC010000000C00000001000000020000FC09000011000000B5010000000D00000001000000020000CD0A000000000000AF010000000E000000010000000200009E0B000000000000A8010000000F00000001000000020000700C000000000000A1010000001000000001000000020000410D0000000000009B010000000000000002000000020000570000002702000007020000000100000002000000020000280100001202000000020000000200000002000000020000000200000002000000020000000300000002000000020000CB020000E8010000F30100000004000000020000000200009D030000D3010000EC0100000005000000020000000200006E040000BE010000E601000000060000000200000002000040050000A9010000DF0100000007000000020000000200001106000094010000D9010000000800000002000000020000E30600007F010000D2010000000900000002000000020000B40700006A010000CC010000000A000000020000000200008508000055010000C5010000000B000000020000000200005709000040010000BF010000000C00000002000000020000280A00002B010000B8010000000D00000002000000020000FA0A000016010000B2010000000E00000002000000020000CB0B000001010000AB010000000F000000020000000200009D0C0000EC000000A50100000010000000020000000200006E0D0000D70000009E010000000000000003000000020000810000004603000008020000000100000003000000020000520100003003000002020000000200000003000000020000240200001B030000FB010000000300000003000000020000F602000006030000F5010000000400000003000000020000C7030000F0020000EE01000000050000000300000002000099040000DB020000E80100000006000000030000000200006B050000C6020000E20100000007000000030000000200003C060000B0020000DB0100000008000000030000000200000E0700009B020000D5010000000900000003000000020000E007000086020000CE010000000A00000003000000020000B108000070020000C8010000000B00000003000000020000830900005B020000C2010000000C00000003000000020000550A000045020000BB010000000D00000003000000020000260B000030020000B5010000000E00000003000000020000F80B00001B020000AF010000000F00000003000000020000CA0C000005020000A80100000010000000030000000200009C0D0000F0010000A2010000000000000004000000020000AA00000064040000090200000001000000040000000200007C0100004F040000030200000002000000040000000200004E02000039040000FD0100000003000000040000000200002003000023040000F7010000000400000004000000020000F20300000E040000F0010000000500000004000000020000C4040000F8030000EA01000000060000000400000002000096050000E2030000E401000000070000000400000002000068060000CC030000DE0100000008000000040000000200003A070000B7030000D70100000009000000040000000200000C080000A1030000D1010000000A00000004000000020000DD0800008B030000CB010000000B00000004000000020000AF09000075030000C5010000000C00000004000000020000810A000060030000BE010000000D00000004000000020000530B00004A030000B8010000000E00000004000000020000250C000034030000B2010000000F00000004000000020000F70C00001F030000AC010000001000000004000000020000C90D000009030000A5010000000000000005000000020000D4000000830500000B020000000100000005000000020000A60100006D050000050200000002000000050000000200007802000057050000FF0100000003000000050000000200004A03000041050000F80100000004000000050000000200001D0400002B050000F2010000000500000005000000020000EF04000015050000EC010000000600000005000000020000C1050000FF040000E601000000070000000500000002000093060000E8040000E001000000080000000500000002000065070000D2040000DA01000000090000000500000002000037080000BC040000D4010000000A0000000500000002000009090000A6040000CE010000000B00000005000000020000DC09000090040000C8010000000C00000005000000020000AE0A00007A040000C1010000000D00000005000000020000800B000064040000BB010000000E00000005000000020000520C00004E040000B5010000000F00000005000000020000240D000038040000AF010000001000000005000000020000F60D000022040000A9010000000000000006000000020000FE000000A20600000C020000000100000006000000020000D00100008B06000006020000000200000006000000020000A20200007506000000020000000300000006000000020000750300005E060000FA0100000004000000060000000200004704000048060000F40100000005000000060000000200001A05000031060000EE010000000600000006000000020000EC0500001B060000E8010000000700000006000000020000BE06000005060000E201000000080000000600000002000091070000EE050000DC01000000090000000600000002000063080000D8050000D6010000000A0000000600000002000035090000C1050000D0010000000B00000006000000020000080A0000AB050000CB010000000C00000006000000020000DA0A000094050000C5010000000D00000006000000020000AD0B00007E050000BF010000000E000000060000000200007F0C000067050000B9010000000F00000006000000020000510D000051050000B3010000001000000006000000020000240E00003B050000AD01000000000000000700000002000027010000C00700000E020000000100000007000000020000FA010000A907000008020000000200000007000000020000CC02000093070000020200000003000000070000000200009F0300007C070000FC0100000004000000070000000200007204000065070000F6010000000500000007000000020000440500004E070000F00100000006000000070000000200001706000037070000EB010000000700000007000000020000EA06000021070000E5010000000800000007000000020000BC0700000A070000DF0100000009000000070000000200008F080000F3060000D9010000000A0000000700000002000061090000DC060000D3010000000B00000007000000020000340A0000C5060000CD010000000C00000007000000020000070B0000AF060000C8010000000D00000007000000020000D90B000098060000C2010000000E00000007000000020000AC0C000081060000BC010000000F000000070000000200007F0D00006A060000B6010000001000000007000000020000510E000053060000B001000000000000000800000002000051010000DF0800000F02000000010000000800000002000024020000C808000009020000000200000008000000020000F7020000B108000004020000000300000008000000020000C903000099080000FE0100000004000000080000000200009C04000082080000F80100000005000000080000000200006F0500006B080000F30100000006000000080000000200004206000054080000ED010000000700000008000000020000150700003D080000E7010000000800000008000000020000E807000026080000E1010000000900000008000000020000BB0800000E080000DC010000000A000000080000000200008D090000F7070000D6010000000B00000008000000020000600A0000E0070000D0010000000C00000008000000020000330B0000C9070000CB010000000D00000008000000020000060C0000B2070000C5010000000E00000008000000020000D90C00009B070000BF010000000F00000008000000020000AC0D000083070000BA0100000010000000080000000200007F0E00006C070000B40100000000000000090000000200007B010000FE090000100200000001000000090000000200004E020000E60900000B02000000020000000900000002000021030000CF09000005020000000300000009000000020000F4030000B709000000020000000400000009000000020000C70400009F090000FA0100000005000000090000000200009A05000088090000F50100000006000000090000000200006D06000070090000EF0100000007000000090000000200004007000059090000EA0100000008000000090000000200001308000041090000E4010000000900000009000000020000E60800002A090000DE010000000A00000009000000020000B909000012090000D9010000000B000000090000000200008D0A0000FB080000D3010000000C00000009000000020000600B0000E3080000CE010000000D00000009000000020000330C0000CC080000C8010000000E00000009000000020000060D0000B4080000C3010000000F00000009000000020000D90D00009D080000BD010000001000000009000000020000AC0E000085080000B801000000000000000A000000020000A40100001C0B00001202000000010000000A00000002000078020000040B00000C02000000020000000A0000000200004B030000EC0A00000702000000030000000A0000000200001E040000D50A00000202000000040000000A000000020000F2040000BD0A0000FC01000000050000000A000000020000C5050000A50A0000F701000000060000000A000000020000980600008D0A0000F101000000070000000A0000000200006C070000750A0000EC01000000080000000A0000000200003F0800005D0A0000E601000000090000000A00000002000012090000450A0000E1010000000A0000000A000000020000E60900002D0A0000DC010000000B0000000A000000020000B90A0000150A0000D6010000000C0000000A0000000200008C0B0000FD090000D1010000000D0000000A0000000200005F0C0000E6090000CB010000000E0000000A000000020000330D0000CE090000C6010000000F0000000A000000020000060E0000B6090000C101000000100000000A000000020000D90E00009E090000BB01000000000000000B000000020000CE0100003B0C00001302000000010000000B000000020000A1020000230C00000E02000000020000000B000000020000750300000A0C00000902000000030000000B00000002000049040000F20B00000302000000040000000B0000000200001C050000DA0B0000FE01000000050000000B000000020000F0050000C20B0000F901000000060000000B000000020000C3060000A90B0000F401000000070000000B00000002000097070000910B0000EE01000000080000000B0000000200006A080000790B0000E901000000090000000B0000000200003E090000610B0000E4010000000A0000000B000000020000120A0000480B0000DE010000000B0000000B000000020000E50A0000300B0000D9010000000C0000000B000000020000B90B0000180B0000D4010000000D0000000B0000000200008C0C0000000B0000CF010000000E0000000B000000020000600D0000E70A0000C9010000000F0000000B000000020000330E0000CF0A0000C401000000100000000B000000020000070F0000B70A0000BF01000000000000000C000000020000F8010000590D00001502000000010000000C000000020000CB020000410D00000F02000000020000000C0000000200009F030000280D00000A02000000030000000C00000002000073040000100D00000502000000040000000C00000002000047050000F70C00000002000000050000000C0000000200001B060000DE0C0000FB01000000060000000C000000020000EE060000C60C0000F601000000070000000C000000020000C2070000AD0C0000F101000000080000000C00000002000096080000950C0000EB01000000090000000C0000000200006A0900007C0C0000E6010000000A0000000C0000000200003E0A0000630C0000E1010000000B0000000C000000020000110B00004B0C0000DC010000000C0000000C000000020000E50B0000320C0000D7010000000D0000000C000000020000B90C0000190C0000D2010000000E0000000C0000000200008D0D0000010C0000CD010000000F0000000C000000020000600E0000E80B0000C801000000100000000C000000020000340F0000D00B0000C201000000000000000D00000002000021020000780E00001602000000010000000D000000020000F50200005F0E00001102000000020000000D000000020000C9030000460E00000C02000000030000000D0000000200009D0400002D0E00000702000000040000000D00000002000071050000140E00000202000000050000000D00000002000045060000FB0D0000FD01000000060000000D00000002000019070000E20D0000F801000000070000000D000000020000ED070000C90D0000F301000000080000000D000000020000C1080000B00D0000EE01000000090000000D00000002000095090000970D0000E9010000000A0000000D0000000200006A0A00007E0D0000E4010000000B0000000D0000000200003E0B0000650D0000DF010000000C0000000D000000020000120C00004C0D0000DA010000000D0000000D000000020000E60C0000330D0000D5010000000E0000000D000000020000BA0D00001A0D0000D0010000000F0000000D0000000200008E0E0000010D0000CB01000000100000000D000000020000620F0000E80C0000C601000000000000000E0000000200004B020000970F00001702000000010000000E0000000200001F0300007D0F00001202000000020000000E000000020000F3030000640F00000E02000000030000000E000000020000C80400004B0F00000902000000040000000E0000000200009C050000310F00000402000000050000000E00000002000070060000180F0000FF01000000060000000E00000002000044070000FF0E0000FA01000000070000000E00000002000019080000E50E0000F501000000080000000E000000020000ED080000CC0E0000F101000000090000000E000000020000C1090000B30E0000EC010000000A0000000E000000020000960A0000990E0000E7010000000B0000000E0000000200006A0B0000800E0000E2010000000C0000000E0000000200003E0C0000670E0000DD010000000D0000000E000000020000120D00004D0E0000D8010000000E0000000E000000020000E70D0000340E0000D3010000000F0000000E000000020000BB0E00001B0E0000CF01000000100000000E0000000200008F0F0000010E0000CA01000000000000000F00000002000075020000FF0F00001902000000010000000F00000002000049030000FF0F00001402000000020000000F0000000200001E040000FF0F00000F02000000030000000F000000020000F2040000FF0F00000B02000000040000000F000000020000C7050000FF0F00000602000000050000000F0000000200009B060000FF0F00000102000000060000000F00000002000070070000FF0F0000FC01000000070000000F00000002000044080000FF0F0000F801000000080000000F00000002000019090000E80F0000F301000000090000000F000000020000ED090000CE0F0000EE010000000A0000000F000000020000C20A0000B40F0000EA010000000B0000000F000000020000960B00009B0F0000E5010000000C0000000F0000000200006B0C0000810F0000E0010000000D0000000F0000000200003F0D0000670F0000DB010000000E0000000F000000020000140E00004D0F0000D7010000000F0000000F000000020000E80E0000340F0000D201000000100000000F000000020000BD0F00001A0F0000CD0100000000000000100000000200009E020000FF0F00001A02000000010000001000000002000073030000FF0F00001602000000020000001000000002000048040000FF0F0000110200000003000000100000000200001C050000FF0F00000C020000000400000010000000020000F1050000FF0F000008020000000500000010000000020000C6060000FF0F0000030200000006000000100000000200009B070000FF0F0000FF0100000007000000100000000200006F080000FF0F0000FA01000000080000001000000002000044090000FF0F0000F6010000000900000010000000020000190A0000FF0F0000F1010000000A00000010000000020000EE0A0000FF0F0000EC010000000B00000010000000020000C20B0000FF0F0000E8010000000C00000010000000020000970C0000FF0F0000E3010000000D000000100000000200006C0D0000FF0F0000DF010000000E00000010000000020000400E0000FF0F0000DA010000000F00000010000000020000150F0000FF0F0000D6010000001000000010000000020000EA0F0000FF0F0000D1010000000000000000000000030000060000000000000007030000000100000000000000030000D70000000000000000030000000200000000000000030000A801000000000000F90200000003000000000000000300007902000000000000F30200000004000000000000000300004B03000000000000EC0200000005000000000000000300001C04000000000000E6020000000600000000000000030000ED04000000000000DF020000000700000000000000030000BF05000000000000D80200000008000000000000000300009006000000000000D20200000009000000000000000300006107000000000000CB020000000A000000000000000300003208000000000000C4020000000B000000000000000300000409000000000000BE020000000C00000000000000030000D509000000000000B7020000000D00000000000000030000A60A000000000000B0020000000E00000000000000030000780B000000000000AA020000000F00000000000000030000490C000000000000A30200000010000000000000000300001A0D0000000000009D0200000000000000010000000300002F000000000100000803000000010000000100000003000001010000EB00000002030000000200000001000000030000D2010000D7000000FB020000000300000001000000030000A4020000C3000000F502000000040000000100000003000075030000AE000000EE020000000500000001000000030000470400009A000000E80200000006000000010000000300001805000086000000E1020000000700000001000000030000EA05000071000000DB020000000800000001000000030000BB0600005D000000D40200000009000000010000000300008D07000049000000CE020000000A000000010000000300005E08000035000000C7020000000B000000010000000300003009000020000000C1020000000C00000001000000030000010A00000C000000BA020000000D00000001000000030000D30A000000000000B4020000000E00000001000000030000A40B000000000000AD020000000F00000001000000030000760C000000000000A7020000001000000001000000030000470D000000000000A0020000000000000002000000030000590000001E0200000A0300000001000000020000000300002B0100000A02000003030000000200000002000000030000FD010000F5010000FD020000000300000002000000030000CE020000E0010000F7020000000400000002000000030000A0030000CC010000F002000000050000000200000003000072040000B7010000EA02000000060000000200000003000043050000A2010000E3020000000700000002000000030000150600008E010000DD020000000800000002000000030000E706000079010000D7020000000900000002000000030000B807000064010000D0020000000A000000020000000300008A08000050010000CA020000000B000000020000000300005C0900003B010000C3020000000C000000020000000300002D0A000026010000BD020000000D00000002000000030000FF0A000012010000B7020000000E00000002000000030000D10B0000FD000000B0020000000F00000002000000030000A30C0000E8000000AA020000001000000002000000030000740D0000D4000000A3020000000000000003000000030000830000003D0300000B0300000001000000030000000300005501000028030000050300000002000000030000000300002702000013030000FF020000000300000003000000030000000300000003000000030000000400000003000000030000CA030000E9020000F20200000005000000030000000300009C040000D4020000EC0200000006000000030000000300006E050000BF020000E602000000070000000300000003000040060000AA020000DF0200000008000000030000000300001207000095020000D9020000000900000003000000030000E407000080020000D3020000000A00000003000000030000B60800006B020000CD020000000B000000030000000300008809000056020000C6020000000C000000030000000300005A0A000040020000C0020000000D000000030000000300002C0B00002B020000BA020000000E00000003000000030000FD0B000016020000B3020000000F00000003000000030000CF0C000001020000AD020000001000000003000000030000A10D0000EC010000A7020000000000000004000000030000AD0000005C0400000D0300000001000000040000000300007F0100004604000007030000000200000004000000030000510200003104000001030000000300000004000000030000230300001B040000FA020000000400000004000000030000F503000006040000F4020000000500000004000000030000C7040000F1030000EE02000000060000000400000003000099050000DB030000E80200000007000000040000000300006B060000C6030000E20200000008000000040000000300003D070000B0030000DC020000000900000004000000030000100800009B030000D6020000000A00000004000000030000E208000086030000CF020000000B00000004000000030000B409000070030000C9020000000C00000004000000030000860A00005B030000C3020000000D00000004000000030000580B000045030000BD020000000E000000040000000300002A0C000030030000B7020000000F00000004000000030000FC0C00001B030000B1020000001000000004000000030000CE0D000005030000AA020000000000000005000000030000D60000007A0500000E030000000100000005000000030000A901000064050000080300000002000000050000000300007B0200004F050000020300000003000000050000000300004D03000039050000FC0200000004000000050000000300002004000023050000F6020000000500000005000000030000F20400000D050000F0020000000600000005000000030000C4050000F8040000EA02000000070000000500000003000097060000E2040000E402000000080000000500000003000069070000CC040000DE0200000009000000050000000300003B080000B6040000D8020000000A000000050000000300000E090000A1040000D2020000000B00000005000000030000E00900008B040000CC020000000C00000005000000030000B20A000075040000C6020000000D00000005000000030000840B00005F040000C0020000000E00000005000000030000570C00004A040000BA020000000F00000005000000030000290D000034040000B4020000001000000005000000030000FB0D00001E040000AE020000000000000006000000030000000100009906000010030000000100000006000000030000D3010000830600000A030000000200000006000000030000A50200006D060000040300000003000000060000000300007803000056060000FE0200000004000000060000000300004A04000040060000F80200000005000000060000000300001D0500002A060000F2020000000600000006000000030000EF05000014060000ED020000000700000006000000030000C2060000FE050000E702000000080000000600000003000094070000E8050000E102000000090000000600000003000067080000D2050000DB020000000A0000000600000003000039090000BC050000D5020000000B000000060000000300000C0A0000A5050000CF020000000C00000006000000030000DE0A00008F050000C9020000000D00000006000000030000B10B000079050000C3020000000E00000006000000030000830C000063050000BD020000000F00000006000000030000560D00004D050000B7020000001000000006000000030000290E000037050000B10200000000000000070000000300002A010000B707000012030000000100000007000000030000FD010000A10700000C030000000200000007000000030000CF0200008B07000006030000000300000007000000030000A20300007407000000030000000400000007000000030000750400005E070000FA0200000005000000070000000300004805000047070000F50200000006000000070000000300001A06000031070000EF020000000700000007000000030000ED0600001A070000E9020000000800000007000000030000C007000004070000E302000000090000000700000003000092080000ED060000DD020000000A0000000700000003000065090000D7060000D8020000000B00000007000000030000380A0000C0060000D2020000000C000000070000000300000B0B0000AA060000CC020000000D00000007000000030000DD0B000093060000C6020000000E00000007000000030000B00C00007D060000C0020000000F00000007000000030000830D000066060000BB020000001000000007000000030000560E000050060000B502000000000000000800000003000054010000D60800001303000000010000000800000003000027020000BF0800000D030000000200000008000000030000F9020000A808000008030000000300000008000000030000CC03000092080000020300000004000000080000000300009F0400007B080000FC0200000005000000080000000300007205000064080000F7020000000600000008000000030000450600004D080000F10200000007000000080000000300001807000036080000EB020000000800000008000000030000EB0700001F080000E6020000000900000008000000030000BE08000008080000E0020000000A0000000800000003000091090000F2070000DA020000000B00000008000000030000640A0000DB070000D5020000000C00000008000000030000370B0000C4070000CF020000000D000000080000000300000A0C0000AD070000C9020000000E00000008000000030000DD0C000096070000C4020000000F00000008000000030000B00D00007F070000BE020000001000000008000000030000830E000068070000B80200000000000000090000000300007D010000F50900001503000000010000000900000003000050020000DE0900000F03000000020000000900000003000024030000C60900000A030000000300000009000000030000F7030000AF09000004030000000400000009000000030000CA04000098090000FE0200000005000000090000000300009D05000081090000F90200000006000000090000000300007006000069090000F30200000007000000090000000300004307000052090000EE020000000800000009000000030000170800003B090000E8020000000900000009000000030000EA08000024090000E3020000000A00000009000000030000BD0900000D090000DD020000000B00000009000000030000900A0000F5080000D8020000000C00000009000000030000630B0000DE080000D2020000000D00000009000000030000360C0000C7080000CC020000000E00000009000000030000090D0000B0080000C7020000000F00000009000000030000DD0D000099080000C1020000001000000009000000030000B00E000081080000BC02000000000000000A000000030000A7010000130B00001603000000010000000A0000000300007A020000FC0A00001103000000020000000A0000000300004E030000E40A00000B03000000030000000A00000003000021040000CD0A00000603000000040000000A000000030000F5040000B50A00000103000000050000000A000000030000C80500009E0A0000FB02000000060000000A0000000300009B060000860A0000F602000000070000000A0000000300006F0700006E0A0000F002000000080000000A00000003000042080000570A0000EB02000000090000000A000000030000150900003F0A0000E5020000000A0000000A000000030000E9090000280A0000E0020000000B0000000A000000030000BC0A0000100A0000DA020000000C0000000A0000000300008F0B0000F8090000D5020000000D0000000A000000030000630C0000E1090000D0020000000E0000000A000000030000360D0000C9090000CA020000000F0000000A000000030000090E0000B2090000C502000000100000000A000000030000DD0E00009A090000BF02000000000000000B000000030000D1010000320C00001803000000010000000B000000030000A40200001A0C00001203000000020000000B00000003000078030000020C00000D03000000030000000B0000000300004C040000EA0B00000803000000040000000B0000000300001F050000D20B00000303000000050000000B000000030000F3050000BA0B0000FD02000000060000000B000000030000C6060000A20B0000F802000000070000000B0000000300009A0700008A0B0000F302000000080000000B0000000300006D080000730B0000ED02000000090000000B000000030000410900005B0B0000E8020000000A0000000B000000030000140A0000430B0000E3020000000B0000000B000000030000E80A00002B0B0000DD020000000C0000000B000000030000BC0B0000130B0000D8020000000D0000000B0000000300008F0C0000FB0A0000D3020000000E0000000B000000030000630D0000E30A0000CD020000000F0000000B000000030000360E0000CB0A0000C802000000100000000B0000000300000A0F0000B30A0000C302000000000000000C000000030000FB010000510D00001903000000010000000C000000030000CE020000380D00001403000000020000000C000000030000A2030000200D00000F03000000030000000C00000003000076040000080D00000A03000000040000000C0000000300004A050000F00C00000503000000050000000C0000000300001D060000D70C0000FF02000000060000000C000000030000F1060000BF0C0000FA02000000070000000C000000030000C5070000A70C0000F502000000080000000C000000030000990800008E0C0000F002000000090000000C0000000300006D090000760C0000EB020000000A0000000C000000030000400A00005E0C0000E5020000000B0000000C000000030000140B0000450C0000E0020000000C0000000C000000030000E80B00002D0C0000DB020000000D0000000C000000030000BC0C0000150C0000D6020000000E0000000C0000000300008F0D0000FC0B0000D1020000000F0000000C000000030000630E0000E40B0000CB02000000100000000C000000030000370F0000CC0B0000C602000000000000000D000000030000240200006F0E00001B03000000010000000D000000030000F8020000570E00001603000000020000000D000000030000CC0300003E0E00001103000000030000000D000000030000A0040000250E00000C03000000040000000D000000030000740500000D0E00000703000000050000000D00000003000048060000F40D00000203000000060000000D0000000300001C070000DB0D0000FC02000000070000000D000000030000F0070000C30D0000F702000000080000000D000000030000C4080000AA0D0000F202000000090000000D00000003000098090000910D0000ED020000000A0000000D0000000300006C0A0000790D0000E8020000000B0000000D000000030000400B0000600D0000E3020000000C0000000D000000030000140C0000470D0000DE020000000D0000000D000000030000E80C00002F0D0000D9020000000E0000000D000000030000BC0D0000160D0000D4020000000F0000000D000000030000900E0000FD0C0000CF02000000100000000D000000030000640F0000E50C0000CA02000000000000000E0000000300004E0200008E0F00001C03000000010000000E00000003000022030000750F00001803000000020000000E000000030000F60300005C0F00001303000000030000000E000000030000CB040000430F00000E03000000040000000E0000000300009F0500002A0F00000903000000050000000E00000003000073060000110F00000403000000060000000E00000003000047070000F80E0000FF02000000070000000E0000000300001B080000DF0E0000FA02000000080000000E000000030000F0080000C60E0000F502000000090000000E000000030000C4090000AD0E0000F0020000000A0000000E000000030000980A0000940E0000EB020000000B0000000E0000000300006C0B00007B0E0000E6020000000C0000000E000000030000400C0000620E0000E1020000000D0000000E000000030000150D0000490E0000DC020000000E0000000E000000030000E90D00002F0E0000D7020000000F0000000E000000030000BD0E0000160E0000D202000000100000000E000000030000910F0000FD0D0000CD02000000000000000F00000003000078020000FF0F00001E03000000010000000F0000000300004C030000FF0F00001903000000020000000F00000003000021040000FF0F00001403000000030000000F000000030000F5040000FF0F00001003000000040000000F000000030000C9050000FF0F00000B03000000050000000F0000000300009E060000FF0F00000603000000060000000F00000003000072070000FF0F00000103000000070000000F00000003000047080000FB0F0000FC02000000080000000F0000000300001B090000E10F0000F702000000090000000F000000030000EF090000C80F0000F2020000000A0000000F000000030000C40A0000AF0F0000EE020000000B0000000F000000030000980B0000950F0000E9020000000C0000000F0000000300006D0C00007C0F0000E4020000000D0000000F000000030000410D0000620F0000DF020000000E0000000F000000030000150E0000490F0000DA020000000F0000000F000000030000EA0E0000300F0000D502000000100000000F000000030000BE0F0000160F0000D1020000000000000010000000030000A2020000FF0F00002003000000010000001000000003000076030000FF0F00001B0300000002000000100000000300004B040000FF0F0000160300000003000000100000000300001F050000FF0F000011030000000400000010000000030000F4050000FF0F00000D030000000500000010000000030000C9060000FF0F0000080300000006000000100000000300009D070000FF0F00000303000000070000001000000003000072080000FF0F0000FF02000000080000001000000003000046090000FF0F0000FA0200000009000000100000000300001B0A0000FF0F0000F5020000000A00000010000000030000F00A0000FF0F0000F0020000000B00000010000000030000C40B0000FF0F0000EC020000000C00000010000000030000990C0000FF0F0000E7020000000D000000100000000300006D0D0000FF0F0000E2020000000E00000010000000030000420E0000FF0F0000DD020000000F00000010000000030000170F0000FF0F0000D9020000001000000010000000030000EB0F0000FF0F0000D402000000000000000000000004000008000000000000000A040000000100000000000000040000D90000000000000003040000000200000000000000040000AB01000000000000FD0300000003000000000000000400007C02000000000000F60300000004000000000000000400004E03000000000000F00300000005000000000000000400002004000000000000E9030000000600000000000000040000F104000000000000E3030000000700000000000000040000C305000000000000DC0300000008000000000000000400009406000000000000D60300000009000000000000000400006607000000000000CF030000000A000000000000000400003708000000000000C9030000000B000000000000000400000909000000000000C3030000000C00000000000000040000DB09000000000000BC030000000D00000000000000040000AC0A000000000000B6030000000E000000000000000400007E0B000000000000AF030000000F000000000000000400004F0C000000000000A9030000001000000000000000040000210D000000000000A203000000000000000100000004000032000000F70000000B04000000010000000100000004000003010000E300000005040000000200000001000000040000D5010000CF000000FF030000000300000001000000040000A7020000BB000000F803000000040000000100000004000079030000A7000000F20300000005000000010000000400004A04000093000000EC0300000006000000010000000400001C0500007F000000E5030000000700000001000000040000EE0500006B000000DF030000000800000001000000040000C006000057000000D80300000009000000010000000400009107000043000000D2030000000A00000001000000040000630800002F000000CC030000000B00000001000000040000350900001B000000C5030000000C00000001000000040000070A000007000000BF030000000D00000001000000040000D80A000000000000B9030000000E00000001000000040000AA0B000000000000B2030000000F000000010000000400007C0C000000000000AC0300000010000000010000000400004E0D000000000000A50300000000000000020000000400005B000000150200000D0400000001000000020000000400002D0100000102000007040000000200000002000000040000FF010000ED01000001040000000300000002000000040000D1020000D8010000FA030000000400000002000000040000A3030000C4010000F403000000050000000200000004000075040000B0010000EE030000000600000002000000040000470500009B010000E70300000007000000020000000400001906000087010000E1030000000800000002000000040000EB06000073010000DB030000000900000002000000040000BD0700005E010000D5030000000A000000020000000400008F0800004A010000CE030000000B000000020000000400006109000036010000C8030000000C00000002000000040000330A000021010000C2030000000D00000002000000040000050B00000D010000BC030000000E00000002000000040000D60B0000F9000000B5030000000F00000002000000040000A80C0000E4000000AF0300000010000000020000000400007A0D0000D0000000A903000000000000000300000004000085000000340300000F040000000100000003000000040000570100001F03000009040000000200000003000000040000290200000B03000002040000000300000003000000040000FC020000F6020000FC030000000400000003000000040000CE030000E1020000F6030000000500000003000000040000A0040000CC020000F003000000060000000300000004000072050000B8020000EA03000000070000000300000004000044060000A3020000E4030000000800000003000000040000160700008E020000DD030000000900000003000000040000E80700007A020000D7030000000A00000003000000040000BA08000065020000D1030000000B000000030000000400008C09000050020000CB030000000C000000030000000400005F0A00003C020000C5030000000D00000003000000040000310B000027020000BF030000000E00000003000000040000030C000012020000B8030000000F00000003000000040000D50C0000FD010000B2030000001000000003000000040000A70D0000E9010000AC030000000000000004000000040000AF0000005304000011040000000100000004000000040000810100003E0400000A0400000002000000040000000400005402000028040000040400000003000000040000000400002603000013040000FE030000000400000004000000040000000400000004000000040000000500000004000000040000CA040000E9030000F20300000006000000040000000400009D050000D4030000EC0300000007000000040000000400006F060000BF030000E603000000080000000400000004000041070000AA030000E00300000009000000040000000400001408000095030000DA030000000A00000004000000040000E608000080030000D4030000000B00000004000000040000B80900006B030000CE030000000C000000040000000400008B0A000056030000C8030000000D000000040000000400005D0B000041030000C2030000000E000000040000000400002F0C00002C030000BC030000000F00000004000000040000010D000017030000B5030000001000000004000000040000D40D000002030000AF030000000000000005000000040000D90000007105000012040000000100000005000000040000AB0100005C0500000C0400000002000000050000000400007E0200004605000006040000000300000005000000040000500300003105000000040000000400000005000000040000230400001C050000FA030000000500000005000000040000F504000006050000F4030000000600000005000000040000C8050000F1040000EE0300000007000000050000000400009A060000DB040000E80300000008000000050000000400006D070000C6040000E20300000009000000050000000400003F080000B0040000DC030000000A00000005000000040000120900009B040000D7030000000B00000005000000040000E409000085040000D1030000000C00000005000000040000B70A000070040000CB030000000D00000005000000040000890B00005B040000C5030000000E000000050000000400005C0C000045040000BF030000000F000000050000000400002E0D000030040000B9030000001000000005000000040000000E00001A040000B3030000000000000006000000040000030100009006000014040000000100000006000000040000D50100007A0600000E040000000200000006000000040000A802000064060000080400000003000000060000000400007B0300004F060000020400000004000000060000000400004D04000039060000FC0300000005000000060000000400002005000023060000F7030000000600000006000000040000F30500000D060000F1030000000700000006000000040000C5060000F7050000EB03000000080000000600000004000098070000E2050000E50300000009000000060000000400006B080000CC050000DF030000000A000000060000000400003D090000B6050000D9030000000B00000006000000040000100A0000A0050000D3030000000C00000006000000040000E30A00008A050000CD030000000D00000006000000040000B50B000075050000C8030000000E00000006000000040000880C00005F050000C2030000000F000000060000000400005B0D000049050000BC0300000010000000060000000400002D0E000033050000B60300000000000000070000000400002C010000AF07000016040000000100000007000000040000FF0100009807000010040000000200000007000000040000D2020000820700000A040000000300000007000000040000A50300006C070000040400000004000000070000000400007804000056070000FF0300000005000000070000000400004B05000040070000F90300000006000000070000000400001E0600002A070000F3030000000700000007000000040000F006000013070000ED030000000800000007000000040000C3070000FD060000E703000000090000000700000004000096080000E7060000E2030000000A0000000700000004000069090000D1060000DC030000000B000000070000000400003C0A0000BB060000D6030000000C000000070000000400000F0B0000A5060000D0030000000D00000007000000040000E10B00008E060000CB030000000E00000007000000040000B40C000078060000C5030000000F00000007000000040000870D000062060000BF0300000010000000070000000400005A0E00004C060000B903000000000000000800000004000056010000CD0800001704000000010000000800000004000029020000B708000012040000000200000008000000040000FC020000A00800000C040000000300000008000000040000CF0300008A08000006040000000400000008000000040000A20400007308000001040000000500000008000000040000750500005D080000FB0300000006000000080000000400004806000046080000F50300000007000000080000000400001B07000030080000F0030000000800000008000000040000EE07000019080000EA030000000900000008000000040000C208000002080000E4030000000A0000000800000004000095090000EC070000DF030000000B00000008000000040000680A0000D5070000D9030000000C000000080000000400003B0B0000BF070000D3030000000D000000080000000400000E0C0000A8070000CE030000000E00000008000000040000E10C000092070000C8030000000F00000008000000040000B40D00007B070000C2030000001000000008000000040000870E000065070000BD03000000000000000900000004000080010000EC0900001904000000010000000900000004000053020000D50900001304000000020000000900000004000027030000BE0900000E040000000300000009000000040000FA030000A709000008040000000400000009000000040000CD0400009009000003040000000500000009000000040000A005000079090000FD0300000006000000090000000400007306000063090000F8030000000700000009000000040000470700004C090000F20300000008000000090000000400001A08000035090000EC030000000900000009000000040000ED0800001E090000E7030000000A00000009000000040000C009000007090000E1030000000B00000009000000040000930A0000F0080000DC030000000C00000009000000040000670B0000D9080000D6030000000D000000090000000400003A0C0000C2080000D1030000000E000000090000000400000D0D0000AB080000CB030000000F00000009000000040000E00D000094080000C6030000001000000009000000040000B30E00007E080000C003000000000000000A000000040000AA0100000B0B00001B04000000010000000A0000000400007D020000F30A00001504000000020000000A00000004000051030000DC0A00001004000000030000000A00000004000024040000C50A00000A04000000040000000A000000040000F7040000AE0A00000504000000050000000A000000040000CB050000960A0000FF03000000060000000A0000000400009E0600007F0A0000FA03000000070000000A00000004000072070000680A0000F403000000080000000A00000004000045080000500A0000EF03000000090000000A00000004000018090000390A0000EA030000000A0000000A000000040000EC090000220A0000E4030000000B0000000A000000040000BF0A00000B0A0000DF030000000C0000000A000000040000930B0000F3090000D9030000000D0000000A000000040000660C0000DC090000D4030000000E0000000A000000040000390D0000C5090000CE030000000F0000000A0000000400000D0E0000AE090000C903000000100000000A000000040000E00E000096090000C303000000000000000B000000040000D4010000290C00001C04000000010000000B000000040000A7020000120C00001704000000020000000B0000000400007B030000FA0B00001204000000030000000B0000000400004E040000E20B00000C04000000040000000B00000004000022050000CB0B00000704000000050000000B000000040000F6050000B30B00000204000000060000000B000000040000C90600009C0B0000FC03000000070000000B0000000400009D070000840B0000F703000000080000000B000000040000700800006C0B0000F203000000090000000B00000004000044090000550B0000EC030000000A0000000B000000040000170A00003D0B0000E7030000000B0000000B000000040000EB0A0000250B0000E1030000000C0000000B000000040000BF0B00000E0B0000DC030000000D0000000B000000040000920C0000F60A0000D7030000000E0000000B000000040000660D0000DE0A0000D1030000000F0000000B000000040000390E0000C70A0000CC03000000100000000B0000000400000D0F0000AF0A0000C703000000000000000C000000040000FE010000480D00001E04000000010000000C000000040000D1020000300D00001904000000020000000C000000040000A5030000180D00001404000000030000000C00000004000079040000000D00000E04000000040000000C0000000400004D050000E80C00000904000000050000000C00000004000020060000D00C00000404000000060000000C000000040000F4060000B80C0000FF03000000070000000C000000040000C8070000A00C0000F903000000080000000C0000000400009C080000880C0000F403000000090000000C0000000400006F090000700C0000EF030000000A0000000C000000040000430A0000580C0000E9030000000B0000000C000000040000170B0000400C0000E4030000000C0000000C000000040000EB0B0000280C0000DF030000000D0000000C000000040000BE0C0000100C0000DA030000000E0000000C000000040000920D0000F80B0000D4030000000F0000000C000000040000660E0000E00B0000CF03000000100000000C0000000400003A0F0000C80B0000CA03000000000000000D00000004000027020000670E00002004000000010000000D000000040000FB0200004E0E00001B04000000020000000D000000040000CF030000360E00001604000000030000000D000000040000A30400001E0E00001004000000040000000D00000004000077050000050E00000B04000000050000000D0000000400004B060000ED0D00000604000000060000000D0000000400001F070000D40D00000104000000070000000D000000040000F3070000BC0D0000FC03000000080000000D000000040000C7080000A40D0000F703000000090000000D0000000400009B0900008B0D0000F1030000000A0000000D0000000400006F0A0000730D0000EC030000000B0000000D000000040000430B00005B0D0000E7030000000C0000000D000000040000170C0000420D0000E2030000000D0000000D000000040000EB0C00002A0D0000DD030000000E0000000D000000040000BE0D0000110D0000D8030000000F0000000D000000040000920E0000F90C0000D203000000100000000D000000040000660F0000E10C0000CD03000000000000000E00000004000051020000850F00002204000000010000000E000000040000250300006D0F00001D04000000020000000E000000040000F9030000540F00001704000000030000000E000000040000CE0400003B0F00001204000000040000000E000000040000A2050000220F00000D04000000050000000E000000040000760600000A0F00000804000000060000000E0000000400004A070000F10E00000304000000070000000E0000000400001E080000D80E0000FE03000000080000000E000000040000F2080000BF0E0000F903000000090000000E000000040000C6090000A70E0000F4030000000A0000000E0000000400009A0A00008E0E0000EF030000000B0000000E0000000400006E0B0000750E0000EA030000000C0000000E000000040000430C00005C0E0000E5030000000D0000000E000000040000170D0000440E0000E0030000000E0000000E000000040000EB0D00002B0E0000DB030000000F0000000E000000040000BF0E0000120E0000D603000000100000000E000000040000930F0000F90D0000D003000000000000000F0000000400007B020000FF0F00002304000000010000000F0000000400004F030000FF0F00001E04000000020000000F00000004000024040000FF0F00001904000000030000000F000000040000F8040000FF0F00001404000000040000000F000000040000CC050000FF0F00000F04000000050000000F000000040000A1060000FF0F00000A04000000060000000F00000004000075070000FF0F00000604000000070000000F00000004000049080000F40F00000104000000080000000F0000000400001D090000DB0F0000FC03000000090000000F000000040000F2090000C20F0000F7030000000A0000000F000000040000C60A0000A90F0000F2030000000B0000000F0000000400009A0B0000900F0000ED030000000C0000000F0000000400006F0C0000770F0000E8030000000D0000000F000000040000430D00005E0F0000E3030000000E0000000F000000040000170E0000450F0000DE030000000F0000000F000000040000EB0E00002B0F0000D903000000100000000F000000040000C00F0000120F0000D4030000000000000010000000040000A5020000FF0F00002504000000010000001000000004000079030000FF0F0000200400000002000000100000000400004E040000FF0F00001B04000000030000001000000004000022050000FF0F000016040000000400000010000000040000F7050000FF0F000012040000000500000010000000040000CB060000FF0F00000D040000000600000010000000040000A0070000FF0F00000804000000070000001000000004000074080000FF0F00000304000000080000001000000004000049090000FF0F0000FE0300000009000000100000000400001D0A0000FF0F0000F9030000000A00000010000000040000F20A0000FF0F0000F4030000000B00000010000000040000C60B0000FF0F0000EF030000000C000000100000000400009B0C0000FF0F0000EB030000000D000000100000000400006F0D0000FF0F0000E6030000000E00000010000000040000440E0000FF0F0000E1030000000F00000010000000040000180F0000FF0F0000DC030000001000000010000000040000ED0F0000FF0F0000D70300000000000000000000000500000A000000000000000D050000000100000000000000050000DC0000000000000006050000000200000000000000050000AD01000000000000000500000003000000000000000500007F02000000000000FA0400000004000000000000000500005103000000000000F30400000005000000000000000500002304000000000000ED040000000600000000000000050000F504000000000000E7040000000700000000000000050000C705000000000000E00400000008000000000000000500009906000000000000DA0400000009000000000000000500006B07000000000000D4040000000A000000000000000500003C08000000000000CE040000000B000000000000000500000E09000000000000C7040000000C00000000000000050000E009000000000000C1040000000D00000000000000050000B20A000000000000BB040000000E00000000000000050000840B000000000000B4040000000F00000000000000050000560C000000000000AE040000001000000000000000050000280D000000000000A804000000000000000100000005000034000000EE0000000E05000000010000000100000005000006010000DA00000008050000000200000001000000050000D8010000C600000002050000000300000001000000050000AA020000B3000000FC0400000004000000010000000500007C0300009F000000F60400000005000000010000000500004E0400008B000000EF0400000006000000010000000500002005000078000000E9040000000700000001000000050000F205000064000000E3040000000800000001000000050000C406000051000000DD040000000900000001000000050000960700003D000000D6040000000A000000010000000500006808000029000000D0040000000B000000010000000500003A09000016000000CA040000000C000000010000000500000C0A000002000000C4040000000D00000001000000050000DE0A000000000000BE040000000E00000001000000050000B00B000000000000B7040000000F00000001000000050000820C000000000000B1040000001000000001000000050000540D000000000000AB0400000000000000020000000500005E0000000C0200001005000000010000000200000005000030010000F80100000A05000000020000000200000005000002020000E401000004050000000300000002000000050000D4020000D0010000FE040000000400000002000000050000A6030000BC010000F804000000050000000200000005000078040000A8010000F20400000006000000020000000500004B05000094010000EB0400000007000000020000000500001D06000080010000E5040000000800000002000000050000EF0600006C010000DF040000000900000002000000050000C107000058010000D9040000000A000000020000000500009308000044010000D3040000000B000000020000000500006509000030010000CD040000000C00000002000000050000380A00001C010000C7040000000D000000020000000500000A0B000008010000C0040000000E00000002000000050000DC0B0000F4000000BA040000000F00000002000000050000AE0C0000E0000000B4040000001000000002000000050000800D0000CC000000AE040000000000000003000000050000870000002B030000120500000001000000030000000500005A010000170300000C0500000002000000030000000500002C0200000203000006050000000300000003000000050000FE020000EE02000000050000000400000003000000050000D1030000DA020000FA040000000500000003000000050000A3040000C5020000F404000000060000000300000005000075050000B1020000EE040000000700000003000000050000480600009C020000E80400000008000000030000000500001A07000088020000E2040000000900000003000000050000EC07000074020000DC040000000A00000003000000050000BF0800005F020000D6040000000B00000003000000050000910900004B020000D0040000000C00000003000000050000630A000037020000C9040000000D00000003000000050000360B000022020000C3040000000E00000003000000050000080C00000E020000BD040000000F00000003000000050000DA0C0000F9010000B7040000001000000003000000050000AD0D0000E5010000B1040000000000000004000000050000B10000004A0400001405000000010000000400000005000084010000350400000E050000000200000004000000050000560200002004000008050000000300000004000000050000290300000C04000002050000000400000004000000050000FB030000F7030000FC040000000500000004000000050000CE040000E2030000F6040000000600000004000000050000A0050000CD030000F004000000070000000400000005000073060000B9030000EA04000000080000000400000005000045070000A4030000E4040000000900000004000000050000180800008F030000DE040000000A00000004000000050000EA0800007A030000D8040000000B00000004000000050000BD09000066030000D2040000000C000000040000000500008F0A000051030000CC040000000D00000004000000050000620B00003C030000C6040000000E00000004000000050000340C000027030000C0040000000F00000004000000050000070D000013030000BA040000001000000004000000050000D90D0000FE020000B4040000000000000005000000050000DB0000006805000016050000000100000005000000050000AE0100005305000010050000000200000005000000050000810200003E0500000A0500000003000000050000000500005303000029050000040500000004000000050000000500002604000014050000FE040000000500000005000000050000000500000005000000050000000600000005000000050000CB050000EA040000F30400000007000000050000000500009E060000D5040000ED04000000080000000500000005000070070000C0040000E704000000090000000500000005000043080000AA040000E1040000000A000000050000000500001609000095040000DB040000000B00000005000000050000E809000080040000D5040000000C00000005000000050000BB0A00006B040000CF040000000D000000050000000500008E0B000056040000C9040000000E00000005000000050000600C000041040000C3040000000F00000005000000050000330D00002C040000BD040000001000000005000000050000060E000017040000B8040000000000000006000000050000050100008706000018050000000100000006000000050000D80100007206000012050000000200000006000000050000AB0200005C0600000C0500000003000000060000000500007E0300004706000006050000000400000006000000050000500400003106000001050000000500000006000000050000230500001C060000FB040000000600000006000000050000F605000006060000F5040000000700000006000000050000C9060000F1050000EF0400000008000000060000000500009C070000DB050000E90400000009000000060000000500006E080000C6050000E3040000000A0000000600000005000041090000B0050000DE040000000B00000006000000050000140A00009B050000D8040000000C00000006000000050000E70A000085050000D2040000000D00000006000000050000BA0B000070050000CC040000000E000000060000000500008C0C00005A050000C6040000000F000000060000000500005F0D000045050000C0040000001000000006000000050000320E00002F050000BB0400000000000000070000000500002F010000A60700001A050000000100000007000000050000020200009007000014050000000200000007000000050000D50200007A0700000E050000000300000007000000050000A803000064070000080500000004000000070000000500007B0400004E070000030500000005000000070000000500004E05000039070000FD0400000006000000070000000500002106000023070000F7040000000700000007000000050000F40600000D070000F1040000000800000007000000050000C7070000F7060000EC0400000009000000070000000500009A080000E1060000E6040000000A000000070000000500006D090000CB060000E0040000000B00000007000000050000400A0000B5060000DB040000000C00000007000000050000130B0000A0060000D5040000000D00000007000000050000E50B00008A060000CF040000000E00000007000000050000B80C000074060000C9040000000F000000070000000500008B0D00005E060000C40400000010000000070000000500005E0E000048060000BE04000000000000000800000005000059010000C50800001C0500000001000000080000000500002C020000AE08000016050000000200000008000000050000FF0200009808000010050000000300000008000000050000D2030000820800000B050000000400000008000000050000A50400006C080000050500000005000000080000000500007805000055080000FF0400000006000000080000000500004C0600003F080000FA0400000007000000080000000500001F07000029080000F4040000000800000008000000050000F207000013080000EE040000000900000008000000050000C5080000FD070000E9040000000A0000000800000005000098090000E6070000E3040000000B000000080000000500006B0A0000D0070000DD040000000C000000080000000500003E0B0000BA070000D8040000000D00000008000000050000110C0000A4070000D2040000000E00000008000000050000E40C00008D070000CC040000000F00000008000000050000B80D000077070000C70400000010000000080000000500008B0E000061070000C104000000000000000900000005000083010000E30900001D05000000010000000900000005000056020000CD0900001805000000020000000900000005000029030000B609000012050000000300000009000000050000FD0300009F0900000D050000000400000009000000050000D00400008909000007050000000500000009000000050000A30500007209000002050000000600000009000000050000760600005C090000FC0400000007000000090000000500004A07000045090000F60400000008000000090000000500001D0800002E090000F1040000000900000009000000050000F008000018090000EB040000000A00000009000000050000C409000001090000E6040000000B00000009000000050000970A0000EB080000E0040000000C000000090000000500006A0B0000D4080000DA040000000D000000090000000500003D0C0000BE080000D5040000000E00000009000000050000110D0000A7080000CF040000000F00000009000000050000E40D000090080000CA040000001000000009000000050000B70E00007A080000C404000000000000000A000000050000AD010000020B00001F05000000010000000A00000005000080020000EB0A00001A05000000020000000A00000005000054030000D40A00001405000000030000000A00000005000027040000BD0A00000F05000000040000000A000000050000FA040000A60A00000905000000050000000A000000050000CE0500008F0A00000405000000060000000A000000050000A1060000780A0000FE04000000070000000A00000005000075070000610A0000F904000000080000000A000000050000480800004A0A0000F304000000090000000A0000000500001C090000330A0000EE040000000A0000000A000000050000EF0900001C0A0000E8040000000B0000000A000000050000C20A0000050A0000E3040000000C0000000A000000050000960B0000EE090000DD040000000D0000000A000000050000690C0000D7090000D8040000000E0000000A0000000500003D0D0000C0090000D2040000000F0000000A000000050000100E0000A9090000CD04000000100000000A000000050000E30E000093090000C704000000000000000B000000050000D7010000210C00002105000000010000000B000000050000AA020000090C00001C05000000020000000B0000000500007E030000F20B00001605000000030000000B00000005000051040000DB0B00001105000000040000000B00000005000025050000C30B00000B05000000050000000B000000050000F9050000AC0B00000605000000060000000B000000050000CC060000950B00000105000000070000000B000000050000A00700007D0B0000FB04000000080000000B00000005000073080000660B0000F604000000090000000B000000050000470900004F0B0000F0040000000A0000000B0000000500001A0A0000370B0000EB040000000B0000000B000000050000EE0A0000200B0000E6040000000C0000000B000000050000C20B0000090B0000E0040000000D0000000B000000050000950C0000F10A0000DB040000000E0000000B000000050000690D0000DA0A0000D5040000000F0000000B0000000500003C0E0000C30A0000D004000000100000000B000000050000100F0000AB0A0000CA04000000000000000C000000050000010200003F0D00002305000000010000000C000000050000D4020000280D00001E05000000020000000C000000050000A8030000100D00001805000000030000000C0000000500007C040000F80C00001305000000040000000C0000000500004F050000E00C00000E05000000050000000C00000005000023060000C90C00000805000000060000000C000000050000F7060000B10C00000305000000070000000C000000050000CB070000990C0000FE04000000080000000C0000000500009E080000820C0000F804000000090000000C000000050000720900006A0C0000F3040000000A0000000C000000050000460A0000520C0000EE040000000B0000000C0000000500001A0B00003B0C0000E8040000000C0000000C000000050000ED0B0000230C0000E3040000000D0000000C000000050000C10C00000B0C0000DE040000000E0000000C000000050000950D0000F30B0000D8040000000F0000000C000000050000690E0000DC0B0000D304000000100000000C0000000500003C0F0000C40B0000CE04000000000000000D0000000500002A0200005E0E00002505000000010000000D000000050000FE020000460E00002005000000020000000D000000050000D20300002E0E00001A05000000030000000D000000050000A6040000160E00001505000000040000000D0000000500007A050000FE0D00001005000000050000000D0000000500004E060000E60D00000B05000000060000000D00000005000022070000CE0D00000505000000070000000D000000050000F6070000B50D00000005000000080000000D000000050000CA0800009D0D0000FB04000000090000000D0000000500009D090000850D0000F6040000000A0000000D000000050000710A00006D0D0000F0040000000B0000000D000000050000450B0000550D0000EB040000000C0000000D000000050000190C00003D0D0000E6040000000D0000000D000000050000ED0C0000250D0000E0040000000E0000000D000000050000C10D00000D0D0000DB040000000F0000000D000000050000950E0000F50C0000D604000000100000000D000000050000690F0000DD0C0000D104000000000000000E000000050000540200007D0F00002705000000010000000E00000005000028030000640F00002205000000020000000E000000050000FC0300004C0F00001C05000000030000000E000000050000D0040000330F00001705000000040000000E000000050000A50500001B0F00001205000000050000000E00000005000079060000020F00000D05000000060000000E0000000500004D070000EA0E00000805000000070000000E00000005000021080000D20E00000205000000080000000E000000050000F5080000B90E0000FD04000000090000000E000000050000C9090000A10E0000F8040000000A0000000E0000000500009D0A0000880E0000F3040000000B0000000E000000050000710B0000700E0000EE040000000C0000000E000000050000450C0000570E0000E9040000000D0000000E000000050000190D00003F0E0000E3040000000E0000000E000000050000ED0D0000270E0000DE040000000F0000000E000000050000C10E00000E0E0000D904000000100000000E000000050000950F0000F60D0000D404000000000000000F0000000500007E020000FF0F00002905000000010000000F00000005000052030000FF0F00002405000000020000000F00000005000027040000FF0F00001E05000000030000000F000000050000FB040000FF0F00001905000000040000000F000000050000CF050000FF0F00001405000000050000000F000000050000A3060000FF0F00000F05000000060000000F00000005000077070000FF0F00000A05000000070000000F0000000500004C080000EE0F00000505000000080000000F00000005000020090000D50F00000005000000090000000F000000050000F4090000BC0F0000FB040000000A0000000F000000050000C80A0000A30F0000F6040000000B0000000F0000000500009C0B00008A0F0000F1040000000C0000000F000000050000710C0000720F0000EB040000000D0000000F000000050000450D0000590F0000E6040000000E0000000F000000050000190E0000400F0000E1040000000F0000000F000000050000ED0E0000270F0000DC04000000100000000F000000050000C10F00000E0F0000D7040000000000000010000000050000A8020000FF0F00002B0500000001000000100000000500007D030000FF0F00002505000000020000001000000005000051040000FF0F00002005000000030000001000000005000025050000FF0F00001B050000000400000010000000050000FA050000FF0F000016050000000500000010000000050000CE060000FF0F000011050000000600000010000000050000A2070000FF0F00000C05000000070000001000000005000077080000FF0F0000070500000008000000100000000500004B090000FF0F0000020500000009000000100000000500001F0A0000FF0F0000FD040000000A00000010000000050000F40A0000FF0F0000F8040000000B00000010000000050000C80B0000FF0F0000F3040000000C000000100000000500009C0C0000FF0F0000EE040000000D00000010000000050000710D0000FF0F0000E9040000000E00000010000000050000450E0000FF0F0000E4040000000F00000010000000050000190F0000FF0F0000DF040000001000000010000000050000EE0F0000FF0F0000DA0400000000000000000000000600000C0000000000000010060000000100000000000000060000DE0000000000000009060000000200000000000000060000B001000000000000030600000003000000000000000600008202000000000000FD0500000004000000000000000600005403000000000000F70500000005000000000000000600002704000000000000F1050000000600000000000000060000F904000000000000EB050000000700000000000000060000CB05000000000000E50500000008000000000000000600009D06000000000000DE0500000009000000000000000600006F07000000000000D8050000000A000000000000000600004108000000000000D2050000000B000000000000000600001409000000000000CC050000000C00000000000000060000E609000000000000C6050000000D00000000000000060000B80A000000000000C0050000000E000000000000000600008A0B000000000000BA050000000F000000000000000600005C0C000000000000B40500000010000000000000000600002E0D000000000000AD05000000000000000100000006000036000000E50000001206000000010000000100000006000008010000D10000000C060000000200000001000000060000DA010000BE00000005060000000300000001000000060000AD020000AB000000FF0500000004000000010000000600007F03000097000000F90500000005000000010000000600005104000084000000F30500000006000000010000000600002405000071000000ED050000000700000001000000060000F60500005E000000E7050000000800000001000000060000C80600004A000000E10500000009000000010000000600009A07000037000000DB050000000A000000010000000600006D08000024000000D5050000000B000000010000000600003F09000010000000CF050000000C00000001000000060000110A000000000000C9050000000D00000001000000060000E40A000000000000C3050000000E00000001000000060000B60B000000000000BD050000000F00000001000000060000880C000000000000B60500000010000000010000000600005A0D000000000000B005000000000000000200000006000060000000030200001406000000010000000200000006000032010000F00100000E06000000020000000200000006000005020000DC01000008060000000300000002000000060000D7020000C801000002060000000400000002000000060000A9030000B5010000FC0500000005000000020000000600007C040000A1010000F60500000006000000020000000600004E0500008D010000F0050000000700000002000000060000210600007A010000EA050000000800000002000000060000F306000066010000E3050000000900000002000000060000C607000052010000DD050000000A00000002000000060000980800003F010000D7050000000B000000020000000600006A0900002B010000D1050000000C000000020000000600003D0A000017010000CB050000000D000000020000000600000F0B000004010000C5050000000E00000002000000060000E20B0000F0000000BF050000000F00000002000000060000B40C0000DC000000B9050000001000000002000000060000860D0000C9000000B30500000000000000030000000600008A00000022030000160600000001000000030000000600005C0100000E030000100600000002000000030000000600002F020000FA0200000A06000000030000000300000006000001030000E602000004060000000400000003000000060000D4030000D2020000FE050000000500000003000000060000A6040000BE020000F805000000060000000300000006000079050000AA020000F20500000007000000030000000600004C06000096020000EC0500000008000000030000000600001E07000082020000E6050000000900000003000000060000F10700006E020000E0050000000A00000003000000060000C30800005A020000DA050000000B000000030000000600009609000046020000D4050000000C00000003000000060000680A000032020000CE050000000D000000030000000600003B0B00001E020000C8050000000E000000030000000600000D0C000009020000C2050000000F00000003000000060000E00C0000F5010000BC050000001000000003000000060000B30D0000E1010000B6050000000000000004000000060000B40000004104000018060000000100000004000000060000860100002C0400001206000000020000000400000006000059020000180400000C0600000003000000040000000600002C0300000404000006060000000400000004000000060000FE030000EF03000000060000000500000004000000060000D1040000DB030000FA050000000600000004000000060000A4050000C6030000F405000000070000000400000006000076060000B2030000EE050000000800000004000000060000490700009D030000E90500000009000000040000000600001C08000089030000E3050000000A00000004000000060000EE08000075030000DD050000000B00000004000000060000C109000060030000D7050000000C00000004000000060000940A00004C030000D1050000000D00000004000000060000670B000037030000CB050000000E00000004000000060000390C000023030000C5050000000F000000040000000600000C0D00000F030000BF050000001000000004000000060000DF0D0000FA020000B9050000000000000005000000060000DE000000600500001A060000000100000005000000060000B00100004B0500001406000000020000000500000006000083020000360500000E060000000300000005000000060000560300002105000008060000000400000005000000060000290400000C05000002060000000500000005000000060000FC040000F8040000FD050000000600000005000000060000CF050000E3040000F7050000000700000005000000060000A1060000CE040000F105000000080000000500000006000074070000B9040000EB05000000090000000500000006000047080000A4040000E5050000000A000000050000000600001A09000090040000DF050000000B00000005000000060000ED0900007B040000DA050000000C00000005000000060000BF0A000066040000D4050000000D00000005000000060000920B000051040000CE050000000E00000005000000060000650C00003C040000C8050000000F00000005000000060000380D000028040000C20500000010000000050000000600000B0E000013040000BC050000000000000006000000060000080100007E0600001C060000000100000006000000060000DB0100006906000016060000000200000006000000060000AE0200005406000010060000000300000006000000060000800300003F0600000A060000000400000006000000060000530400002A060000050600000005000000060000000600002605000014060000FF050000000600000006000000060000000600000006000000060000000700000006000000060000CC060000EA050000F30500000008000000060000000600009F070000D5050000EE05000000090000000600000006000072080000C0050000E8050000000A0000000600000006000045090000AB050000E2050000000B00000006000000060000180A000095050000DC050000000C00000006000000060000EB0A000080050000D6050000000D00000006000000060000BE0B00006B050000D1050000000E00000006000000060000910C000056050000CB050000000F00000006000000060000640D000041050000C5050000001000000006000000060000370E00002C050000BF050000000000000007000000060000320100009D0700001E060000000100000007000000060000050200008707000018060000000200000007000000060000D80200007207000012060000000300000007000000060000AB0300005C0700000D0600000004000000070000000600007E0400004707000007060000000500000007000000060000510500003107000001060000000600000007000000060000240600001C070000FB050000000700000007000000060000F706000006070000F6050000000800000007000000060000CA070000F1060000F00500000009000000070000000600009D080000DB060000EA050000000A0000000700000006000070090000C6060000E5050000000B00000007000000060000430A0000B0060000DF050000000C00000007000000060000160B00009B060000D9050000000D00000007000000060000EA0B000085060000D3050000000E00000007000000060000BD0C00006F060000CE050000000F00000007000000060000900D00005A060000C8050000001000000007000000060000630E000044060000C20500000000000000080000000600005C010000BC080000200600000001000000080000000600002F020000A60800001A060000000200000008000000060000020300009008000014060000000300000008000000060000D50300007A0800000F060000000400000008000000060000A804000064080000090600000005000000080000000600007C0500004E080000030600000006000000080000000600004F06000038080000FE0500000007000000080000000600002207000022080000F8050000000800000008000000060000F50700000C080000F3050000000900000008000000060000C8080000F7070000ED050000000A000000080000000600009C090000E1070000E7050000000B000000080000000600006F0A0000CB070000E2050000000C00000008000000060000420B0000B5070000DC050000000D00000008000000060000150C00009F070000D6050000000E00000008000000060000E80C000089070000D1050000000F00000008000000060000BC0D000073070000CB0500000010000000080000000600008F0E00005D070000C505000000000000000900000006000086010000DA0900002206000000010000000900000006000059020000C40900001C0600000002000000090000000600002C030000AE09000017060000000300000009000000060000000400009809000011060000000400000009000000060000D3040000810900000B060000000500000009000000060000A60500006B090000060600000006000000090000000600007A06000055090000000600000007000000090000000600004D0700003E090000FB0500000008000000090000000600002008000028090000F5050000000900000009000000060000F408000012090000EF050000000A00000009000000060000C7090000FC080000EA050000000B000000090000000600009A0A0000E5080000E4050000000C000000090000000600006D0B0000CF080000DF050000000D00000009000000060000410C0000B9080000D9050000000E00000009000000060000140D0000A3080000D3050000000F00000009000000060000E70D00008C080000CE050000001000000009000000060000BB0E000076080000C805000000000000000A000000060000B0010000F90A00002406000000010000000A00000006000083020000E20A00001E06000000020000000A00000006000056030000CC0A00001906000000030000000A0000000600002A040000B50A00001306000000040000000A000000060000FD0400009F0A00000E06000000050000000A000000060000D1050000880A00000806000000060000000A000000060000A4060000710A00000306000000070000000A000000060000780700005B0A0000FD05000000080000000A0000000600004B080000440A0000F805000000090000000A0000000600001F0900002D0A0000F2050000000A0000000A000000060000F2090000170A0000EC050000000B0000000A000000060000C60A0000000A0000E7050000000C0000000A000000060000990B0000E9090000E1050000000D0000000A0000000600006C0C0000D3090000DC050000000E0000000A000000060000400D0000BC090000D6050000000F0000000A000000060000130E0000A5090000D105000000100000000A000000060000E70E00008F090000CB05000000000000000B000000060000DA010000180C00002606000000010000000B000000060000AD020000010C00002006000000020000000B00000006000081030000EA0B00001B06000000030000000B00000006000054040000D30B00001506000000040000000B00000006000028050000BC0B00001006000000050000000B000000060000FB050000A50B00000A06000000060000000B000000060000CF0600008E0B00000506000000070000000B000000060000A3070000770B00000006000000080000000B00000006000076080000600B0000FA05000000090000000B0000000600004A090000490B0000F5050000000A0000000B0000000600001D0A0000320B0000EF050000000B0000000B000000060000F10A00001B0B0000EA050000000C0000000B000000060000C50B0000040B0000E4050000000D0000000B000000060000980C0000ED0A0000DF050000000E0000000B0000000600006C0D0000D60A0000D9050000000F0000000B0000000600003F0E0000BE0A0000D405000000100000000B000000060000130F0000A70A0000CE05000000000000000C00000006000004020000370D00002806000000010000000C000000060000D70200001F0D00002206000000020000000C000000060000AB030000080D00001D06000000030000000C0000000600007F040000F00C00001806000000040000000C00000006000052050000D90C00001206000000050000000C00000006000026060000C20C00000D06000000060000000C000000060000FA060000AA0C00000706000000070000000C000000060000CE070000930C00000206000000080000000C000000060000A10800007B0C0000FD05000000090000000C00000006000075090000640C0000F7050000000A0000000C000000060000490A00004D0C0000F2050000000B0000000C0000000600001C0B0000350C0000EC050000000C0000000C000000060000F00B00001E0C0000E7050000000D0000000C000000060000C40C0000060C0000E1050000000E0000000C000000060000980D0000EF0B0000DC050000000F0000000C0000000600006B0E0000D80B0000D705000000100000000C0000000600003F0F0000C00B0000D105000000000000000D0000000600002E020000550E00002A06000000010000000D000000060000010300003E0E00002506000000020000000D000000060000D5030000260E00001F06000000030000000D000000060000A90400000E0E00001A06000000040000000D0000000600007D050000F60D00001406000000050000000D00000006000051060000DE0D00000F06000000060000000D00000006000025070000C70D00000A06000000070000000D000000060000F8070000AF0D00000406000000080000000D000000060000CC080000970D0000FF05000000090000000D000000060000A00900007F0D0000FA050000000A0000000D000000060000740A0000680D0000F4050000000B0000000D000000060000480B0000500D0000EF050000000C0000000D0000000600001C0C0000380D0000EA050000000D0000000D000000060000EF0C0000200D0000E4050000000E0000000D000000060000C30D0000090D0000DF050000000F0000000D000000060000970E0000F10C0000DA05000000100000000D0000000600006B0F0000D90C0000D405000000000000000E00000006000058020000740F00002C06000000010000000E0000000600002B0300005C0F00002706000000020000000E000000060000FF030000440F00002106000000030000000E000000060000D30400002C0F00001C06000000040000000E000000060000A7050000130F00001706000000050000000E0000000600007B060000FB0E00001106000000060000000E0000000600004F070000E30E00000C06000000070000000E00000006000023080000CB0E00000706000000080000000E000000060000F7080000B30E00000206000000090000000E000000060000CB0900009B0E0000FC050000000A0000000E0000000600009F0A0000830E0000F7050000000B0000000E000000060000730B00006A0E0000F2050000000C0000000E000000060000470C0000520E0000EC050000000D0000000E0000000600001B0D00003A0E0000E7050000000E0000000E000000060000EF0D0000220E0000E2050000000F0000000E000000060000C30E00000A0E0000DD05000000100000000E000000060000970F0000F20D0000D705000000000000000F00000006000081020000FF0F00002E06000000010000000F00000006000056030000FF0F00002906000000020000000F0000000600002A040000FF0F00002306000000030000000F000000060000FE040000FF0F00001E06000000040000000F000000060000D2050000FF0F00001906000000050000000F000000060000A6060000FF0F00001406000000060000000F0000000600007A070000FF0F00000F06000000070000000F0000000600004E080000E70F00000906000000080000000F00000006000022090000CF0F00000406000000090000000F000000060000F6090000B60F0000FF050000000A0000000F000000060000CA0A00009E0F0000FA050000000B0000000F0000000600009F0B0000850F0000F4050000000C0000000F000000060000730C00006D0F0000EF050000000D0000000F000000060000470D0000540F0000EA050000000E0000000F0000000600001B0E00003C0F0000E5050000000F0000000F000000060000EF0E0000230F0000DF05000000100000000F000000060000C30F00000B0F0000DA050000000000000010000000060000AB020000FF0F00003006000000010000001000000006000080030000FF0F00002B06000000020000001000000006000054040000FF0F00002606000000030000001000000006000028050000FF0F000020060000000400000010000000060000FC050000FF0F00001B060000000500000010000000060000D1060000FF0F000016060000000600000010000000060000A5070000FF0F00001106000000070000001000000006000079080000FF0F00000C0600000008000000100000000600004D090000FF0F000007060000000900000010000000060000220A0000FF0F000001060000000A00000010000000060000F60A0000FF0F0000FC050000000B00000010000000060000CA0B0000FF0F0000F7050000000C000000100000000600009E0C0000FF0F0000F2050000000D00000010000000060000720D0000FF0F0000ED050000000E00000010000000060000470E0000FF0F0000E8050000000F000000100000000600001B0F0000FF0F0000E2050000001000000010000000060000EF0F0000FF0F0000DD0500000000000000000000000700000E0000000000000013070000000100000000000000070000E0000000000000000D070000000200000000000000070000B301000000000000070700000003000000000000000700008502000000000000010700000004000000000000000700005803000000000000FB0600000005000000000000000700002A04000000000000F5060000000600000000000000070000FD04000000000000EF060000000700000000000000070000CF05000000000000E9060000000800000000000000070000A106000000000000E30600000009000000000000000700007407000000000000DD060000000A000000000000000700004608000000000000D7060000000B000000000000000700001909000000000000D1060000000C00000000000000070000EB09000000000000CB060000000D00000000000000070000BE0A000000000000C5060000000E00000000000000070000900B000000000000BF060000000F00000000000000070000630C000000000000B9060000001000000000000000070000350D000000000000B306000000000000000100000007000038000000DC000000150700000001000000010000000700000A010000C90000000F070000000200000001000000070000DD010000B600000009070000000300000001000000070000B0020000A3000000030700000004000000010000000700008203000090000000FD060000000500000001000000070000550400007D000000F7060000000600000001000000070000270500006A000000F1060000000700000001000000070000FA05000057000000EB060000000800000001000000070000CC06000044000000E50600000009000000010000000700009F07000031000000DF060000000A00000001000000070000710800001E000000D9060000000B00000001000000070000440900000B000000D3060000000C00000001000000070000170A000000000000CE060000000D00000001000000070000E90A000000000000C8060000000E00000001000000070000BC0B000000000000C2060000000F000000010000000700008E0C000000000000BC060000001000000001000000070000610D000000000000B606000000000000000200000007000062000000FB0100001707000000010000000200000007000035010000E70100001107000000020000000200000007000007020000D40100000B070000000300000002000000070000DA020000C001000005070000000400000002000000070000AD030000AD010000FF0600000005000000020000000700007F0400009A010000F90600000006000000020000000700005205000086010000F40600000007000000020000000700002506000073010000EE060000000800000002000000070000F706000060010000E8060000000900000002000000070000CA0700004C010000E2060000000A000000020000000700009D08000039010000DC060000000B000000020000000700006F09000026010000D6060000000C00000002000000070000420A000012010000D0060000000D00000002000000070000150B0000FF000000CA060000000E00000002000000070000E70B0000EC000000C4060000000F00000002000000070000BA0C0000D8000000BF0600000010000000020000000700008D0D0000C5000000B90600000000000000030000000700008C00000019030000190700000001000000030000000700005F010000060300001307000000020000000300000007000032020000F20200000D07000000030000000300000007000004030000DE02000008070000000400000003000000070000D7030000CA02000002070000000500000003000000070000AA040000B7020000FC0600000006000000030000000700007D050000A3020000F60600000007000000030000000700004F0600008F020000F0060000000800000003000000070000220700007B020000EA060000000900000003000000070000F507000068020000E4060000000A00000003000000070000C808000054020000DF060000000B000000030000000700009A09000040020000D9060000000C000000030000000700006D0A00002D020000D3060000000D00000003000000070000400B000019020000CD060000000E00000003000000070000130C000005020000C7060000000F00000003000000070000E50C0000F1010000C1060000001000000003000000070000B80D0000DE010000BB060000000000000004000000070000B6000000380400001B0700000001000000040000000700008901000024040000150700000002000000040000000700005C02000010040000100700000003000000040000000700002F030000FC0300000A07000000040000000400000007000002040000E803000004070000000500000004000000070000D4040000D3030000FE060000000600000004000000070000A7050000BF030000F80600000007000000040000000700007A060000AB030000F30600000008000000040000000700004D07000097030000ED0600000009000000040000000700002008000083030000E7060000000A00000004000000070000F30800006F030000E1060000000B00000004000000070000C60900005B030000DB060000000C00000004000000070000980A000047030000D6060000000D000000040000000700006B0B000033030000D0060000000E000000040000000700003E0C00001F030000CA060000000F00000004000000070000110D00000B030000C4060000001000000004000000070000E40D0000F6020000BE060000000000000005000000070000E0000000570500001D070000000100000005000000070000B30100004205000018070000000200000005000000070000860200002E0500001207000000030000000500000007000059030000190500000C0700000004000000050000000700002C0400000505000006070000000500000005000000070000FF040000F004000001070000000600000005000000070000D2050000DC040000FB060000000700000005000000070000A5060000C7040000F506000000080000000500000007000078070000B3040000EF0600000009000000050000000700004B0800009E040000EA060000000A000000050000000700001E0900008A040000E4060000000B00000005000000070000F109000076040000DE060000000C00000005000000070000C40A000061040000D8060000000D00000005000000070000970B00004D040000D2060000000E000000050000000700006A0C000038040000CD060000000F000000050000000700003D0D000024040000C7060000001000000005000000070000100E00000F040000C10600000000000000060000000700000A0100007506000020070000000100000006000000070000DD010000610600001A070000000200000006000000070000B00200004C0600001407000000030000000600000007000083030000370600000E0700000004000000060000000700005604000022060000090700000005000000060000000700002A0500000D06000003070000000600000006000000070000FD050000F8050000FD060000000700000006000000070000D0060000E4050000F8060000000800000006000000070000A3070000CF050000F206000000090000000600000007000076080000BA050000EC060000000A0000000600000007000049090000A5050000E6060000000B000000060000000700001C0A000090050000E1060000000C00000006000000070000EF0A00007B050000DB060000000D00000006000000070000C20B000066050000D5060000000E00000006000000070000950C000052050000CF060000000F00000006000000070000680D00003D050000CA0600000010000000060000000700003B0E000028050000C4060000000000000007000000070000340100009407000022070000000100000007000000070000070200007F0700001C070000000200000007000000070000DB0200006A07000016070000000300000007000000070000AE0300005507000011070000000400000007000000070000810400003F0700000B070000000500000007000000070000540500002A07000005070000000600000007000000070000270600001507000000070000000700000007000000070000000700000007000000070000000800000007000000070000CE070000EA060000F4060000000900000007000000070000A1080000D5060000EF060000000A0000000700000007000074090000C0060000E9060000000B00000007000000070000470A0000AB060000E3060000000C000000070000000700001A0B000096060000DE060000000D00000007000000070000EE0B000080060000D8060000000E00000007000000070000C10C00006B060000D2060000000F00000007000000070000940D000056060000CC060000001000000007000000070000670E000041060000C70600000000000000080000000700005E010000B308000024070000000100000008000000070000320200009D0800001E070000000200000008000000070000050300008808000019070000000300000008000000070000D80300007208000013070000000400000008000000070000AB0400005D0800000D0700000005000000080000000700007F0500004708000008070000000600000008000000070000520600003108000002070000000700000008000000070000250700001C080000FC060000000800000008000000070000F907000006080000F7060000000900000008000000070000CC080000F1070000F1060000000A000000080000000700009F090000DB070000EC060000000B00000008000000070000720A0000C5070000E6060000000C00000008000000070000460B0000B0070000E0060000000D00000008000000070000190C00009A070000DB060000000E00000008000000070000EC0C000085070000D5060000000F00000008000000070000BF0D00006F070000CF060000001000000008000000070000930E000059070000CA06000000000000000900000007000088010000D2090000260700000001000000090000000700005C020000BC090000210700000002000000090000000700002F030000A60900001B070000000300000009000000070000020400009009000015070000000400000009000000070000D60400007A09000010070000000500000009000000070000A9050000640900000A0700000006000000090000000700007D0600004E090000050700000007000000090000000700005007000038090000FF0600000008000000090000000700002308000022090000F9060000000900000009000000070000F70800000C090000F4060000000A00000009000000070000CA090000F6080000EE060000000B000000090000000700009E0A0000E0080000E8060000000C00000009000000070000710B0000CA080000E3060000000D00000009000000070000440C0000B4080000DD060000000E00000009000000070000180D00009E080000D8060000000F00000009000000070000EB0D000088080000D2060000001000000009000000070000BE0E000072080000CC06000000000000000A000000070000B2010000F00A00002807000000010000000A00000007000086020000DA0A00002307000000020000000A00000007000059030000C40A00001D07000000030000000A0000000700002D040000AD0A00001807000000040000000A00000007000000050000970A00001207000000050000000A000000070000D4050000810A00000D07000000060000000A000000070000A70600006A0A00000707000000070000000A0000000700007B070000540A00000107000000080000000A0000000700004E0800003E0A0000FC06000000090000000A00000007000022090000270A0000F6060000000A0000000A000000070000F5090000110A0000F1060000000B0000000A000000070000C90A0000FB090000EB060000000C0000000A0000000700009C0B0000E4090000E6060000000D0000000A000000070000700C0000CE090000E0060000000E0000000A000000070000430D0000B8090000DA060000000F0000000A000000070000170E0000A1090000D506000000100000000A000000070000EA0E00008B090000CF06000000000000000B000000070000DC0100000F0C00002B07000000010000000B000000070000B0020000F80B00002507000000020000000B00000007000084030000E20B00001F07000000030000000B00000007000057040000CB0B00001A07000000040000000B0000000700002B050000B40B00001407000000050000000B000000070000FE0500009E0B00000F07000000060000000B000000070000D2060000870B00000907000000070000000B000000070000A6070000700B00000407000000080000000B00000007000079080000590B0000FE06000000090000000B0000000700004D090000430B0000F9060000000A0000000B000000070000200A00002C0B0000F3060000000B0000000B000000070000F40A0000150B0000EE060000000C0000000B000000070000C80B0000FF0A0000E8060000000D0000000B0000000700009B0C0000E80A0000E3060000000E0000000B0000000700006F0D0000D10A0000DD060000000F0000000B000000070000420E0000BA0A0000D806000000100000000B000000070000160F0000A40A0000D206000000000000000C000000070000070200002E0D00002D07000000010000000C000000070000DA020000170D00002707000000020000000C000000070000AE030000000D00002207000000030000000C00000007000082040000E90C00001C07000000040000000C00000007000055050000D10C00001707000000050000000C00000007000029060000BA0C00001107000000060000000C000000070000FD060000A30C00000C07000000070000000C000000070000D00700008C0C00000607000000080000000C000000070000A4080000750C00000107000000090000000C000000070000780900005E0C0000FB060000000A0000000C0000000700004B0A0000470C0000F6060000000B0000000C0000000700001F0B0000300C0000F0060000000C0000000C000000070000F30B0000190C0000EB060000000D0000000C000000070000C70C0000020C0000E5060000000E0000000C0000000700009A0D0000EB0B0000E0060000000F0000000C0000000700006E0E0000D30B0000DA06000000100000000C000000070000420F0000BC0B0000D506000000000000000D000000070000310200004D0E00002F07000000010000000D00000007000004030000350E00002907000000020000000D000000070000D80300001E0E00002407000000030000000D000000070000AC040000060E00001F07000000040000000D00000007000080050000EF0D00001907000000050000000D00000007000054060000D70D00001407000000060000000D00000007000027070000C00D00000E07000000070000000D000000070000FB070000A80D00000907000000080000000D000000070000CF080000910D00000307000000090000000D000000070000A3090000790D0000FE060000000A0000000D000000070000770A0000620D0000F8060000000B0000000D0000000700004A0B00004A0D0000F3060000000C0000000D0000000700001E0C0000330D0000EE060000000D0000000D000000070000F20C00001C0D0000E8060000000E0000000D000000070000C60D0000040D0000E3060000000F0000000D000000070000990E0000ED0C0000DD06000000100000000D0000000700006D0F0000D50C0000D806000000000000000E0000000700005B0200006B0F00003107000000010000000E0000000700002F030000530F00002C07000000020000000E000000070000020400003C0F00002607000000030000000E000000070000D6040000240F00002107000000040000000E000000070000AA0500000C0F00001B07000000050000000E0000000700007E060000F40E00001607000000060000000E00000007000052070000DC0E00001107000000070000000E00000007000026080000C40E00000B07000000080000000E000000070000FA080000AD0E00000607000000090000000E000000070000CE090000950E000000070000000A0000000E000000070000A20A00007D0E0000FB060000000B0000000E000000070000760B0000650E0000F6060000000C0000000E000000070000490C00004D0E0000F0060000000D0000000E0000000700001D0D0000350E0000EB060000000E0000000E000000070000F10D00001E0E0000E5060000000F0000000E000000070000C50E0000060E0000E006000000100000000E000000070000990F0000EE0D0000DB06000000000000000F00000007000085020000FF0F00003307000000010000000F00000007000059030000FF0F00002E07000000020000000F0000000700002D040000FF0F00002907000000030000000F00000007000001050000FF0F00002307000000040000000F000000070000D5050000FF0F00001E07000000050000000F000000070000A9060000FF0F00001807000000060000000F0000000700007D070000F90F00001307000000070000000F00000007000051080000E10F00000E07000000080000000F00000007000025090000C80F00000807000000090000000F000000070000F9090000B00F000003070000000A0000000F000000070000CD0A0000980F0000FE060000000B0000000F000000070000A10B0000800F0000F8060000000C0000000F000000070000750C0000670F0000F3060000000D0000000F000000070000490D00004F0F0000EE060000000E0000000F0000000700001D0E0000370F0000E8060000000F0000000F000000070000F10E00001F0F0000E306000000100000000F000000070000C50F0000070F0000DD060000000000000010000000070000AF020000FF0F00003507000000010000001000000007000083030000FF0F00003007000000020000001000000007000057040000FF0F00002B0700000003000000100000000700002B050000FF0F000025070000000400000010000000070000FF050000FF0F000020070000000500000010000000070000D3060000FF0F00001B070000000600000010000000070000A7070000FF0F0000150700000007000000100000000700007B080000FF0F00001007000000080000001000000007000050090000FF0F00000B070000000900000010000000070000240A0000FF0F000006070000000A00000010000000070000F80A0000FF0F000000070000000B00000010000000070000CC0B0000FF0F0000FB060000000C00000010000000070000A00C0000FF0F0000F6060000000D00000010000000070000740D0000FF0F0000F0060000000E00000010000000070000480E0000FF0F0000EB060000000F000000100000000700001C0F0000FF0F0000E6060000001000000010000000070000F00F0000FF0F0000E0060000000000000000000000080000100000000000000015080000000100000000000000080000E30000000000000010080000000200000000000000080000B5010000000000000A0800000003000000000000000800008802000000000000040800000004000000000000000800005B03000000000000FE0700000005000000000000000800002E04000000000000F80700000006000000000000000800000005000000000000F3070000000700000000000000080000D305000000000000ED070000000800000000000000080000A606000000000000E70700000009000000000000000800007907000000000000E1070000000A000000000000000800004B08000000000000DB070000000B000000000000000800001E09000000000000D6070000000C00000000000000080000F109000000000000D0070000000D00000000000000080000C40A000000000000CA070000000E00000000000000080000960B000000000000C4070000000F00000000000000080000690C000000000000BE0700000010000000000000000800003C0D000000000000B90700000000000000010000000800003A000000D3000000180800000001000000010000000800000D010000C000000012080000000200000001000000080000E0010000AE0000000C080000000300000001000000080000B20200009B000000060800000004000000010000000800008503000088000000010800000005000000010000000800005804000076000000FB0700000006000000010000000800002B05000063000000F5070000000700000001000000080000FE05000050000000EF070000000800000001000000080000D10600003E000000EA070000000900000001000000080000A30700002B000000E4070000000A000000010000000800007608000018000000DE070000000B000000010000000800004909000006000000D8070000000C000000010000000800001C0A000000000000D2070000000D00000001000000080000EF0A000000000000CD070000000E00000001000000080000C20B000000000000C7070000000F00000001000000080000940C000000000000C1070000001000000001000000080000670D000000000000BB07000000000000000200000008000064000000F20100001A08000000010000000200000008000037010000DF010000140800000002000000020000000800000A020000CC0100000F080000000300000002000000080000DD020000B901000009080000000400000002000000080000B0030000A6010000030800000005000000020000000800008304000092010000FD070000000600000002000000080000560500007F010000F8070000000700000002000000080000280600006C010000F2070000000800000002000000080000FB06000059010000EC070000000900000002000000080000CE07000046010000E6070000000A00000002000000080000A108000033010000E1070000000B000000020000000800007409000020010000DB070000000C00000002000000080000470A00000D010000D5070000000D000000020000000800001A0B0000FA000000CF070000000E00000002000000080000ED0B0000E7000000C9070000000F00000002000000080000C00C0000D4000000C4070000001000000002000000080000930D0000C1000000BE0700000000000000030000000800008E000000100300001C08000000010000000300000008000061010000FD0200001708000000020000000300000008000034020000EA0200001108000000030000000300000008000007030000D60200000B080000000400000003000000080000DA030000C302000006080000000500000003000000080000AD040000AF02000000080000000600000003000000080000800500009C020000FA0700000007000000030000000800005306000089020000F40700000008000000030000000800002607000075020000EF070000000900000003000000080000F907000062020000E9070000000A00000003000000080000CC0800004E020000E3070000000B000000030000000800009F0900003B020000DD070000000C00000003000000080000720A000028020000D8070000000D00000003000000080000450B000014020000D2070000000E00000003000000080000180C000001020000CC070000000F00000003000000080000EB0C0000ED010000C6070000001000000003000000080000BE0D0000DA010000C1070000000000000004000000080000B80000002F0400001F0800000001000000040000000800008B0100001B040000190800000002000000040000000800005F020000080400001308000000030000000400000008000032030000F40300000E08000000040000000400000008000005040000E003000008080000000500000004000000080000D8040000CC03000002080000000600000004000000080000AB050000B8030000FC0700000007000000040000000800007E060000A5030000F70700000008000000040000000800005107000091030000F1070000000900000004000000080000240800007D030000EB070000000A00000004000000080000F708000069030000E6070000000B00000004000000080000CA09000056030000E0070000000C000000040000000800009D0A000042030000DA070000000D00000004000000080000700B00002E030000D4070000000E00000004000000080000430C00001A030000CF070000000F00000004000000080000160D000007030000C9070000001000000004000000080000E90D0000F3020000C3070000000000000005000000080000E30000004E05000021080000000100000005000000080000B60100003A0500001B0800000002000000050000000800008902000026050000160800000003000000050000000800005C03000011050000100800000004000000050000000800002F040000FD0400000A08000000050000000500000008000002050000E904000005080000000600000005000000080000D5050000D5040000FF070000000700000005000000080000A8060000C1040000F90700000008000000050000000800007C070000AD040000F40700000009000000050000000800004F08000099040000EE070000000A000000050000000800002209000084040000E8070000000B00000005000000080000F509000070040000E2070000000C00000005000000080000C80A00005C040000DD070000000D000000050000000800009B0B000048040000D7070000000E000000050000000800006E0C000034040000D1070000000F00000005000000080000420D000020040000CC070000001000000005000000080000150E00000B040000C60700000000000000060000000800000D0100006D06000023080000000100000006000000080000E0010000580600001E080000000200000006000000080000B30200004406000018080000000300000006000000080000860300002F060000120800000004000000060000000800005A0400001A0600000D0800000005000000060000000800002D050000060600000708000000060000000600000008000000060000F105000001080000000700000006000000080000D3060000DD050000FC070000000800000006000000080000A6070000C8050000F60700000009000000060000000800007A080000B4050000F0070000000A000000060000000800004D0900009F050000EB070000000B00000006000000080000200A00008B050000E5070000000C00000006000000080000F30A000076050000DF070000000D00000006000000080000C60B000062050000DA070000000E000000060000000800009A0C00004D050000D4070000000F000000060000000800006D0D000039050000CE070000001000000006000000080000400E000024050000C9070000000000000007000000080000370100008B070000260800000001000000070000000800000A0200007607000020080000000200000007000000080000DD020000620700001B080000000300000007000000080000B10300004D0700001508000000040000000700000008000084040000380700000F08000000050000000700000008000057050000230700000A0800000006000000070000000800002B0600000E07000004080000000700000007000000080000FE060000F9060000FE070000000800000007000000080000D1070000E4060000F9070000000900000007000000080000A4080000CF060000F3070000000A0000000700000008000078090000BA060000ED070000000B000000070000000800004B0A0000A5060000E8070000000C000000070000000800001E0B000091060000E2070000000D00000007000000080000F20B00007C060000DC070000000E00000007000000080000C50C000067060000D7070000000F00000007000000080000980D000052060000D10700000010000000070000000800006B0E00003D060000CB07000000000000000800000008000061010000AA0800002808000000010000000800000008000034020000950800002308000000020000000800000008000008030000800800001D080000000300000008000000080000DB0300006A08000017080000000400000008000000080000AE040000550800001208000000050000000800000008000082050000400800000C080000000600000008000000080000550600002A08000006080000000700000008000000080000290700001508000001080000000800000008000000080000000800000008000000080000000900000008000000080000CF080000EB070000F5070000000A00000008000000080000A3090000D5070000F0070000000B00000008000000080000760A0000C0070000EA070000000C00000008000000080000490B0000AB070000E5070000000D000000080000000800001D0C000095070000DF070000000E00000008000000080000F00C000080070000D9070000000F00000008000000080000C30D00006B070000D4070000001000000008000000080000970E000056070000CE0700000000000000090000000800008B010000C90900002B0800000001000000090000000800005F020000B309000025080000000200000009000000080000320300009E0900001F08000000030000000900000008000005040000880900001A080000000400000009000000080000D90400007209000014080000000500000009000000080000AC0500005D0900000E080000000600000009000000080000800600004709000009080000000700000009000000080000530700003109000003080000000800000009000000080000270800001C090000FE070000000900000009000000080000FA08000006090000F8070000000A00000009000000080000CE090000F0080000F2070000000B00000009000000080000A10A0000DB080000ED070000000C00000009000000080000740B0000C5080000E7070000000D00000009000000080000480C0000AF080000E1070000000E000000090000000800001B0D00009A080000DC070000000F00000009000000080000EF0D000084080000D6070000001000000009000000080000C20E00006E080000D107000000000000000A000000080000B5010000E80A00002D08000000010000000A00000008000089020000D20A00002708000000020000000A0000000800005C030000BC0A00002208000000030000000A00000008000030040000A60A00001C08000000040000000A000000080000030500008F0A00001608000000050000000A000000080000D7050000790A00001108000000060000000A000000080000AA060000630A00000B08000000070000000A0000000800007E0700004D0A00000608000000080000000A00000008000051080000370A00000008000000090000000A00000008000025090000210A0000FA070000000A0000000A000000080000F80900000B0A0000F5070000000B0000000A000000080000CC0A0000F5090000EF070000000C0000000A0000000800009F0B0000DF090000EA070000000D0000000A000000080000730C0000C9090000E4070000000E0000000A000000080000460D0000B3090000DF070000000F0000000A0000000800001A0E00009D090000D907000000100000000A000000080000EE0E000087090000D307000000000000000B000000080000DF010000060C00002F08000000010000000B000000080000B3020000F00B00002A08000000020000000B00000008000087030000DA0B00002408000000030000000B0000000800005A040000C30B00001E08000000040000000B0000000800002E050000AD0B00001908000000050000000B00000008000001060000960B00001308000000060000000B000000080000D5060000800B00000E08000000070000000B000000080000A90700006A0B00000808000000080000000B0000000800007C080000530B00000308000000090000000B000000080000500900003D0B0000FD070000000A0000000B000000080000230A0000260B0000F7070000000B0000000B000000080000F70A0000100B0000F2070000000C0000000B000000080000CB0B0000F90A0000EC070000000D0000000B0000000800009E0C0000E30A0000E7070000000E0000000B000000080000720D0000CD0A0000E1070000000F0000000B000000080000450E0000B60A0000DC07000000100000000B000000080000190F0000A00A0000D607000000000000000C0000000800000A020000250D00003208000000010000000C000000080000DD0200000E0D00002C08000000020000000C000000080000B1030000F80C00002608000000030000000C00000008000085040000E10C00002108000000040000000C00000008000058050000CA0C00001B08000000050000000C0000000800002C060000B30C00001608000000060000000C000000080000000700009C0C00001008000000070000000C000000080000D3070000860C00000B08000000080000000C000000080000A70800006F0C00000508000000090000000C0000000800007B090000580C000000080000000A0000000C0000000800004E0A0000410C0000FA070000000B0000000C000000080000220B00002A0C0000F4070000000C0000000C000000080000F60B0000140C0000EF070000000D0000000C000000080000C90C0000FD0B0000E9070000000E0000000C0000000800009D0D0000E60B0000E4070000000F0000000C000000080000710E0000CF0B0000DE07000000100000000C000000080000440F0000B90B0000D907000000000000000D00000008000034020000440E00003408000000010000000D000000080000070300002D0E00002E08000000020000000D000000080000DB030000160E00002908000000030000000D000000080000AF040000FE0D00002308000000040000000D00000008000083050000E70D00001E08000000050000000D00000008000056060000D00D00001808000000060000000D0000000800002A070000B90D00001308000000070000000D000000080000FE070000A20D00000D08000000080000000D000000080000D20800008B0D00000808000000090000000D000000080000A5090000730D000002080000000A0000000D000000080000790A00005C0D0000FD070000000B0000000D0000000800004D0B0000450D0000F7070000000C0000000D000000080000210C00002E0D0000F1070000000D0000000D000000080000F40C0000170D0000EC070000000E0000000D000000080000C80D0000000D0000E6070000000F0000000D0000000800009C0E0000E80C0000E107000000100000000D000000080000700F0000D10C0000DB07000000000000000E0000000800005E020000630F00003608000000010000000E000000080000320300004B0F00003108000000020000000E00000008000005040000340F00002B08000000030000000E000000080000D90400001C0F00002608000000040000000E000000080000AD050000040F00002008000000050000000E00000008000081060000ED0E00001B08000000060000000E00000008000055070000D50E00001508000000070000000E00000008000029080000BE0E00001008000000080000000E000000080000FC080000A60E00000A08000000090000000E000000080000D00900008F0E000005080000000A0000000E000000080000A40A0000770E0000FF070000000B0000000E000000080000780B0000600E0000FA070000000C0000000E0000000800004C0C0000480E0000F4070000000D0000000E0000000800001F0D0000310E0000EF070000000E0000000E000000080000F30D0000190E0000E9070000000F0000000E000000080000C70E0000020E0000E407000000100000000E0000000800009B0F0000EA0D0000DE07000000000000000F00000008000088020000FF0F00003908000000010000000F0000000800005C030000FF0F00003308000000020000000F00000008000030040000FF0F00002E08000000030000000F00000008000004050000FF0F00002808000000040000000F000000080000D8050000FF0F00002308000000050000000F000000080000AB060000FF0F00001D08000000060000000F0000000800007F070000F20F00001808000000070000000F00000008000053080000DA0F00001208000000080000000F00000008000027090000C20F00000D08000000090000000F000000080000FB090000AA0F000007080000000A0000000F000000080000CF0A0000920F000002080000000B0000000F000000080000A30B00007A0F0000FC070000000C0000000F000000080000770C0000620F0000F7070000000D0000000F0000000800004B0D00004A0F0000F1070000000E0000000F0000000800001F0E0000330F0000EC070000000F0000000F000000080000F20E00001B0F0000E607000000100000000F000000080000C60F0000030F0000E1070000000000000010000000080000B2020000FF0F00003B08000000010000001000000008000086030000FF0F0000350800000002000000100000000800005A040000FF0F0000300800000003000000100000000800002E050000FF0F00002A08000000040000001000000008000002060000FF0F000025080000000500000010000000080000D6060000FF0F000020080000000600000010000000080000AA070000FF0F00001A0800000007000000100000000800007E080000FF0F00001508000000080000001000000008000052090000FF0F00000F080000000900000010000000080000260A0000FF0F00000A080000000A00000010000000080000FA0A0000FF0F000004080000000B00000010000000080000CE0B0000FF0F0000FF070000000C00000010000000080000A20C0000FF0F0000F9070000000D00000010000000080000760D0000FF0F0000F4070000000E000000100000000800004A0E0000FF0F0000EE070000000F000000100000000800001E0F0000FF0F0000E9070000001000000010000000080000F20F0000FF0F0000E3070000000000000000000000090000120000000000000018090000000100000000000000090000E50000000000000013090000000200000000000000090000B8010000000000000D0900000003000000000000000900008B02000000000000080900000004000000000000000900005E03000000000000020900000005000000000000000900003104000000000000FC0800000006000000000000000900000405000000000000F7080000000700000000000000090000D705000000000000F1080000000800000000000000090000AA06000000000000EB0800000009000000000000000900007D07000000000000E6080000000A000000000000000900005008000000000000E0080000000B000000000000000900002309000000000000DA080000000C00000000000000090000F609000000000000D5080000000D00000000000000090000CA0A000000000000CF080000000E000000000000000900009D0B000000000000C9080000000F00000000000000090000700C000000000000C4080000001000000000000000090000430D000000000000BE0800000000000000010000000900003C000000CA0000001B0900000001000000010000000900000F010000B800000015090000000200000001000000090000E2010000A500000010090000000300000001000000090000B5020000930000000A0900000004000000010000000900008803000081000000040900000005000000010000000900005C0400006E000000FF0800000006000000010000000900002F0500005C000000F9080000000700000001000000090000020600004A000000F3080000000800000001000000090000D506000037000000EE080000000900000001000000090000A807000025000000E8080000000A000000010000000900007B08000013000000E3080000000B000000010000000900004E09000000000000DD080000000C00000001000000090000210A000000000000D7080000000D00000001000000090000F40A000000000000D2080000000E00000001000000090000C80B000000000000CC080000000F000000010000000900009B0C000000000000C60800000010000000010000000900006E0D000000000000C108000000000000000200000009000066000000E90100001D09000000010000000200000009000039010000D6010000180900000002000000020000000900000D020000C301000012090000000300000002000000090000E0020000B10100000D090000000400000002000000090000B30300009E01000007090000000500000002000000090000860400008B010000010900000006000000020000000900005905000079010000FC0800000007000000020000000900002C06000066010000F60800000008000000020000000900000007000053010000F0080000000900000002000000090000D307000040010000EB080000000A00000002000000090000A60800002E010000E5080000000B00000002000000090000790900001B010000DF080000000C000000020000000900004C0A000008010000DA080000000D000000020000000900001F0B0000F6000000D4080000000E00000002000000090000F20B0000E3000000CF080000000F00000002000000090000C60C0000D0000000C9080000001000000002000000090000990D0000BE000000C308000000000000000300000009000091000000070300002009000000010000000300000009000064010000F40200001A09000000020000000300000009000037020000E1020000150900000003000000030000000900000A030000CE0200000F090000000400000003000000090000DD030000BB02000009090000000500000003000000090000B1040000A8020000040900000006000000030000000900008405000095020000FE0800000007000000030000000900005706000082020000F80800000008000000030000000900002A0700006F020000F3080000000900000003000000090000FD0700005C020000ED080000000A00000003000000090000D108000049020000E8080000000B00000003000000090000A409000036020000E2080000000C00000003000000090000770A000023020000DC080000000D000000030000000900004A0B000010020000D7080000000E000000030000000900001D0C0000FC010000D1080000000F00000003000000090000F10C0000E9010000CB080000001000000003000000090000C40D0000D6010000C6080000000000000004000000090000BB00000026040000220900000001000000040000000900008E010000130400001D09000000020000000400000009000061020000FF0300001709000000030000000400000009000035030000EC0300001109000000040000000400000009000008040000D80300000C090000000500000004000000090000DB040000C503000006090000000600000004000000090000AE050000B203000001090000000700000004000000090000820600009E030000FB080000000800000004000000090000550700008B030000F50800000009000000040000000900002808000077030000F0080000000A00000004000000090000FB08000064030000EA080000000B00000004000000090000CF09000050030000E4080000000C00000004000000090000A20A00003D030000DF080000000D00000004000000090000750B000029030000D9080000000E00000004000000090000480C000016030000D4080000000F000000040000000900001C0D000002030000CE080000001000000004000000090000EF0D0000EF020000C8080000000000000005000000090000E50000004505000025090000000100000005000000090000B8010000310500001F0900000002000000050000000900008C0200001D0500001A0900000003000000050000000900005F030000090500001409000000040000000500000009000032040000F60400000E09000000050000000500000009000005050000E204000009090000000600000005000000090000D9050000CE04000003090000000700000005000000090000AC060000BA040000FD0800000008000000050000000900007F070000A6040000F80800000009000000050000000900005308000093040000F2080000000A00000005000000090000260900007F040000ED080000000B00000005000000090000F90900006B040000E7080000000C00000005000000090000CD0A000057040000E1080000000D00000005000000090000A00B000043040000DC080000000E00000005000000090000730C00002F040000D6080000000F00000005000000090000460D00001C040000D00800000010000000050000000900001A0E000008040000CB0800000000000000060000000900000F0100006406000027090000000100000006000000090000E30100005006000022090000000200000006000000090000B60200003B0600001C0900000003000000060000000900008903000027060000160900000004000000060000000900005D040000130600001109000000050000000600000009000030050000FF0500000B09000000060000000600000009000003060000EB05000006090000000700000006000000090000D7060000D605000000090000000800000006000000090000AA070000C2050000FA0800000009000000060000000900007D080000AE050000F5080000000A00000006000000090000510900009A050000EF080000000B00000006000000090000240A000085050000E9080000000C00000006000000090000F70A000071050000E4080000000D00000006000000090000CB0B00005D050000DE080000000E000000060000000900009E0C000049050000D9080000000F00000006000000090000710D000035050000D3080000001000000006000000090000450E000020050000CD08000000000000000700000009000039010000830700002A0900000001000000070000000900000D0200006E07000024090000000200000007000000090000E0020000590700001F090000000300000007000000090000B403000045070000190900000004000000070000000900008704000030070000130900000005000000070000000900005A0500001C0700000E0900000006000000070000000900002E060000070700000809000000070000000700000009000001070000F206000002090000000800000007000000090000D5070000DE060000FD080000000900000007000000090000A8080000C9060000F7080000000A000000070000000900007B090000B5060000F2080000000B000000070000000900004F0A0000A0060000EC080000000C00000007000000090000220B00008C060000E6080000000D00000007000000090000F60B000077060000E1080000000E00000007000000090000C90C000062060000DB080000000F000000070000000900009C0D00004E060000D5080000001000000007000000090000700E000039060000D008000000000000000800000009000064010000A10800002C090000000100000008000000090000370200008C080000270900000002000000080000000900000B0300007708000021090000000300000008000000090000DE030000620800001B090000000400000008000000090000B10400004D0800001609000000050000000800000009000085050000380800001009000000060000000800000009000058060000240800000B0900000007000000080000000900002C0700000F08000005090000000800000008000000090000FF070000FA070000FF080000000900000008000000090000D3080000E5070000FA080000000A00000008000000090000A6090000D0070000F4080000000B000000080000000900007A0A0000BB070000EE080000000C000000080000000900004D0B0000A6070000E9080000000D00000008000000090000200C000091070000E3080000000E00000008000000090000F40C00007C070000DE080000000F00000008000000090000C70D000067070000D80800000010000000080000000900009B0E000052070000D20800000000000000090000000900008E010000C00900002F09000000010000000900000009000061020000AB0900002909000000020000000900000009000035030000950900002409000000030000000900000009000008040000800900001E090000000400000009000000090000DC0400006B09000018090000000500000009000000090000AF050000550900001309000000060000000900000009000083060000400900000D090000000700000009000000090000560700002B090000070900000008000000090000000900002A0800001509000002090000000900000009000000090000FF080000FF080000FF080000000A00000009000000090000D1090000EB080000F7080000000B00000009000000090000A40A0000D5080000F1080000000C00000009000000090000780B0000C0080000EB080000000D000000090000000900004B0C0000AB080000E6080000000E000000090000000900001F0D000095080000E0080000000F00000009000000090000F20D000080080000DA080000001000000009000000090000C60E00006B080000D508000000000000000A000000090000B8010000DF0A00003109000000010000000A0000000900008C020000C90A00002C09000000020000000A0000000900005F030000B30A00002609000000030000000A000000090000330400009E0A00002009000000040000000A00000009000006050000880A00001B09000000050000000A000000090000DA050000720A00001509000000060000000A000000090000AD0600005D0A00001009000000070000000A00000009000081070000470A00000A09000000080000000A00000009000054080000310A00000409000000090000000A000000090000280900001B0A0000FF080000000A0000000A000000090000FC090000060A0000F9080000000B0000000A000000090000CF0A0000F0090000F3080000000C0000000A000000090000A30B0000DA090000EE080000000D0000000A000000090000760C0000C4090000E8080000000E0000000A0000000900004A0D0000AF090000E3080000000F0000000A0000000900001D0E000099090000DD08000000100000000A000000090000F10E000083090000D708000000000000000B000000090000E2010000FE0B00003409000000010000000B000000090000B6020000E80B00002E09000000020000000B00000009000089030000D10B00002909000000030000000B0000000900005D040000BB0B00002309000000040000000B00000009000031050000A50B00001D09000000050000000B000000090000040600008F0B00001809000000060000000B000000090000D8060000790B00001209000000070000000B000000090000AB070000630B00000C09000000080000000B0000000900007F0800004D0B00000709000000090000000B00000009000053090000370B000001090000000A0000000B000000090000260A0000210B0000FC080000000B0000000B000000090000FA0A00000B0B0000F6080000000C0000000B000000090000CD0B0000F40A0000F0080000000D0000000B000000090000A10C0000DE0A0000EB080000000E0000000B000000090000750D0000C80A0000E5080000000F0000000B000000090000480E0000B20A0000DF08000000100000000B0000000900001C0F00009C0A0000DA08000000000000000C0000000900000D0200001C0D00003609000000010000000C000000090000E0020000060D00003109000000020000000C000000090000B4030000EF0C00002B09000000030000000C00000009000087040000D90C00002509000000040000000C0000000900005B050000C20C00002009000000050000000C0000000900002F060000AC0C00001A09000000060000000C00000009000002070000960C00001509000000070000000C000000090000D60700007F0C00000F09000000080000000C000000090000AA080000690C00000909000000090000000C0000000900007D090000520C000004090000000A0000000C000000090000510A00003C0C0000FE080000000B0000000C000000090000250B0000250C0000F8080000000C0000000C000000090000F80B00000F0C0000F3080000000D0000000C000000090000CC0C0000F80B0000ED080000000E0000000C000000090000A00D0000E20B0000E8080000000F0000000C000000090000730E0000CB0B0000E208000000100000000C000000090000470F0000B50B0000DC08000000000000000D000000090000370200003B0E00003909000000010000000D0000000900000A030000240E00003309000000020000000D000000090000DE0300000D0E00002E09000000030000000D000000090000B2040000F70D00002809000000040000000D00000009000086050000E00D00002209000000050000000D00000009000059060000C90D00001D09000000060000000D0000000900002D070000B20D00001709000000070000000D000000090000010800009B0D00001109000000080000000D000000090000D4080000840D00000C09000000090000000D000000090000A80900006D0D000006090000000A0000000D0000000900007C0A0000570D000001090000000B0000000D0000000900004F0B0000400D0000FB080000000C0000000D000000090000230C0000290D0000F5080000000D0000000D000000090000F70C0000120D0000F0080000000E0000000D000000090000CB0D0000FB0C0000EA080000000F0000000D0000000900009E0E0000E40C0000E508000000100000000D000000090000720F0000CD0C0000DF08000000000000000E000000090000610200005A0F00003B09000000010000000E00000009000035030000430F00003609000000020000000E000000090000080400002B0F00003009000000030000000E000000090000DC040000140F00002A09000000040000000E000000090000B0050000FD0E00002509000000050000000E00000009000084060000E60E00001F09000000060000000E00000009000057070000CF0E00001A09000000070000000E0000000900002B080000B70E00001409000000080000000E000000090000FF080000A00E00000E09000000090000000E000000090000D3090000890E000009090000000A0000000E000000090000A60A0000720E000003090000000B0000000E0000000900007A0B00005A0E0000FD080000000C0000000E0000000900004E0C0000430E0000F8080000000D0000000E000000090000220D00002C0E0000F2080000000E0000000E000000090000F50D0000150E0000ED080000000F0000000E000000090000C90E0000FD0D0000E708000000100000000E0000000900009D0F0000E60D0000E108000000000000000F0000000900008B020000FF0F00003E09000000010000000F0000000900005F030000FF0F00003809000000020000000F00000009000033040000FF0F00003309000000030000000F00000009000007050000FF0F00002D09000000040000000F000000090000DA050000FF0F00002709000000050000000F000000090000AE060000FF0F00002209000000060000000F00000009000082070000EB0F00001C09000000070000000F00000009000056080000D30F00001609000000080000000F0000000900002A090000BC0F00001109000000090000000F000000090000FD090000A40F00000B090000000A0000000F000000090000D10A00008D0F000006090000000B0000000F000000090000A50B0000750F000000090000000C0000000F000000090000790C00005D0F0000FA080000000D0000000F0000000900004D0D0000460F0000F5080000000E0000000F000000090000200E00002E0F0000EF080000000F0000000F000000090000F40E0000160F0000EA08000000100000000F000000090000C80F0000FF0E0000E4080000000000000010000000090000B5020000FF0F00004009000000010000001000000009000089030000FF0F00003B0900000002000000100000000900005D040000FF0F00003509000000030000001000000009000031050000FF0F00002F09000000040000001000000009000005060000FF0F00002A090000000500000010000000090000D9060000FF0F000024090000000600000010000000090000AC070000FF0F00001F09000000070000001000000009000080080000FF0F00001909000000080000001000000009000054090000FF0F000013090000000900000010000000090000280A0000FF0F00000E090000000A00000010000000090000FC0A0000FF0F000008090000000B00000010000000090000D00B0000FF0F000003090000000C00000010000000090000A40C0000FF0F0000FD080000000D00000010000000090000770D0000FF0F0000F7080000000E000000100000000900004B0E0000FF0F0000F2080000000F000000100000000900001F0F0000FF0F0000EC080000001000000010000000090000F30F0000FF0F0000E60800000000000000000000000A000014000000000000001B0A00000001000000000000000A0000E700000000000000160A00000002000000000000000A0000BB01000000000000100A00000003000000000000000A00008E020000000000000B0A00000004000000000000000A00006103000000000000050A00000005000000000000000A00003504000000000000000A00000006000000000000000A00000805000000000000FB0900000007000000000000000A0000DB05000000000000F50900000008000000000000000A0000AF06000000000000F00900000009000000000000000A00008207000000000000EA090000000A000000000000000A00005508000000000000E5090000000B000000000000000A00002909000000000000DF090000000C000000000000000A0000FC09000000000000DA090000000D000000000000000A0000CF0A000000000000D4090000000E000000000000000A0000A30B000000000000CF090000000F000000000000000A0000760C000000000000C90900000010000000000000000A0000490D000000000000C40900000000000000010000000A00003E000000C10000001E0A00000001000000010000000A000012010000AF000000190A00000002000000010000000A0000E50100009D000000130A00000003000000010000000A0000B80200008B0000000E0A00000004000000010000000A00008C03000079000000080A00000005000000010000000A00005F04000067000000030A00000006000000010000000A00003205000055000000FD0900000007000000010000000A00000606000043000000F80900000008000000010000000A0000D906000031000000F20900000009000000010000000A0000AD0700001F000000ED090000000A000000010000000A0000800800000D000000E7090000000B000000010000000A00005309000000000000E2090000000C000000010000000A0000270A000000000000DC090000000D000000010000000A0000FA0A000000000000D7090000000E000000010000000A0000CD0B000000000000D1090000000F000000010000000A0000A10C000000000000CC0900000010000000010000000A0000740D000000000000C60900000000000000020000000A000069000000E0010000210A00000001000000020000000A00003C010000CD0100001B0A00000002000000020000000A00000F020000BB010000160A00000003000000020000000A0000E3020000A9010000100A00000004000000020000000A0000B6030000960100000B0A00000005000000020000000A00008904000084010000050A00000006000000020000000A00005D05000072010000000A00000007000000020000000A0000300600005F010000FA0900000008000000020000000A0000040700004D010000F50900000009000000020000000A0000D70700003A010000EF090000000A000000020000000A0000AA08000028010000EA090000000B000000020000000A00007E09000016010000E4090000000C000000020000000A0000510A000003010000DF090000000D000000020000000A0000250B0000F1000000D9090000000E000000020000000A0000F80B0000DF000000D4090000000F000000020000000A0000CB0C0000CC000000CE0900000010000000020000000A00009F0D0000BA000000C90900000000000000030000000A000093000000FF020000230A00000001000000030000000A000066010000EC0200001E0A00000002000000030000000A00003A020000D9020000180A00000003000000030000000A00000D030000C6020000130A00000004000000030000000A0000E0030000B40200000D0A00000005000000030000000A0000B4040000A1020000080A00000006000000030000000A0000870500008E020000020A00000007000000030000000A00005B0600007B020000FD0900000008000000030000000A00002E07000069020000F70900000009000000030000000A00000208000056020000F2090000000A000000030000000A0000D508000043020000EC090000000B000000030000000A0000A809000030020000E7090000000C000000030000000A00007C0A00001E020000E1090000000D000000030000000A00004F0B00000B020000DB090000000E000000030000000A0000230C0000F8010000D6090000000F000000030000000A0000F60C0000E5010000D00900000010000000030000000A0000C90D0000D3010000CB0900000000000000040000000A0000BD0000001D040000260A00000001000000040000000A0000910100000A040000200A00000002000000040000000A000064020000F70300001B0A00000003000000040000000A000037030000E4030000150A00000004000000040000000A00000B040000D1030000100A00000005000000040000000A0000DE040000BE0300000A0A00000006000000040000000A0000B2050000AB030000050A00000007000000040000000A00008506000097030000FF0900000008000000040000000A00005907000084030000FA0900000009000000040000000A00002C08000071030000F4090000000A000000040000000A0000000900005E030000EF090000000B000000040000000A0000D30900004B030000E9090000000C000000040000000A0000A60A000038030000E3090000000D000000040000000A00007A0B000025030000DE090000000E000000040000000A00004D0C000012030000D8090000000F000000040000000A0000210D0000FE020000D30900000010000000040000000A0000F40D0000EB020000CD0900000000000000050000000A0000E70000003C050000290A00000001000000050000000A0000BB01000029050000230A00000002000000050000000A00008E020000150500001D0A00000003000000050000000A00006203000002050000180A00000004000000050000000A000035040000EE040000120A00000005000000050000000A000009050000DB0400000D0A00000006000000050000000A0000DC050000C7040000070A00000007000000050000000A0000B0060000B4040000020A00000008000000050000000A000083070000A0040000FC0900000009000000050000000A0000570800008D040000F7090000000A000000050000000A00002A09000079040000F1090000000B000000050000000A0000FE09000066040000EB090000000C000000050000000A0000D10A000052040000E6090000000D000000050000000A0000A40B00003F040000E0090000000E000000050000000A0000780C00002B040000DB090000000F000000050000000A00004B0D000018040000D50900000010000000050000000A00001F0E000004040000D00900000000000000060000000A0000120100005B0600002B0A00000001000000060000000A0000E501000047060000260A00000002000000060000000A0000B902000033060000200A00000003000000060000000A00008C0300001F0600001B0A00000004000000060000000A0000600400000B060000150A00000005000000060000000A000033050000F70500000F0A00000006000000060000000A000007060000E40500000A0A00000007000000060000000A0000DA060000D0050000040A00000008000000060000000A0000AE070000BC050000FF0900000009000000060000000A000081080000A8050000F9090000000A000000060000000A00005509000094050000F3090000000B000000060000000A0000280A000080050000EE090000000C000000060000000A0000FC0A00006C050000E8090000000D000000060000000A0000CF0B000058050000E3090000000E000000060000000A0000A30C000045050000DD090000000F000000060000000A0000760D000031050000D80900000010000000060000000A00004A0E00001D050000D20900000000000000070000000A00003C0100007A0700002E0A00000001000000070000000A00001002000065070000280A00000002000000070000000A0000E302000051070000230A00000003000000070000000A0000B70300003D0700001D0A00000004000000070000000A00008A04000029070000180A00000005000000070000000A00005E05000014070000120A00000006000000070000000A000031060000000700000C0A00000007000000070000000A000005070000EC060000070A00000008000000070000000A0000D8070000D8060000010A00000009000000070000000A0000AC080000C3060000FC090000000A000000070000000A00007F090000AF060000F6090000000B000000070000000A0000530A00009B060000F0090000000C000000070000000A0000260B000086060000EB090000000D000000070000000A0000FA0B000072060000E5090000000E000000070000000A0000CD0C00005E060000E0090000000F000000070000000A0000A10D00004A060000DA0900000010000000070000000A0000740E000035060000D40900000000000000080000000A00006601000098080000310A00000001000000080000000A00003A020000840800002B0A00000002000000080000000A00000D0300006F080000250A00000003000000080000000A0000E10300005B080000200A00000004000000080000000A0000B4040000460800001A0A00000005000000080000000A00008805000031080000140A00000006000000080000000A00005C0600001D0800000F0A00000007000000080000000A00002F07000008080000090A00000008000000080000000A000003080000F3070000040A00000009000000080000000A0000D6080000DF070000FE090000000A000000080000000A0000AA090000CA070000F8090000000B000000080000000A00007D0A0000B5070000F3090000000C000000080000000A0000510B0000A1070000ED090000000D000000080000000A0000240C00008C070000E8090000000E000000080000000A0000F80C000077070000E2090000000F000000080000000A0000CB0D000063070000DC0900000010000000080000000A00009F0E00004E070000D70900000000000000090000000A000091010000B7090000330A00000001000000090000000A000064020000A20900002E0A00000002000000090000000A0000380300008D090000280A00000003000000090000000A00000B04000078090000220A00000004000000090000000A0000DF040000630900001D0A00000005000000090000000A0000B20500004E090000170A00000006000000090000000A00008606000039090000110A00000007000000090000000A00005A070000240900000C0A00000008000000090000000A00002D0800000F090000060A00000009000000090000000A000001090000FA080000000A0000000A000000090000000A0000D4090000E5080000FB090000000B000000090000000A0000A80A0000D0080000F5090000000C000000090000000A00007B0B0000BB080000F0090000000D000000090000000A00004F0C0000A6080000EA090000000E000000090000000A0000220D000091080000E4090000000F000000090000000A0000F60D00007C080000DF0900000010000000090000000A0000CA0E000067080000D909000000000000000A0000000A0000BB010000D60A0000360A000000010000000A0000000A00008E020000C10A0000300A000000020000000A0000000A000062030000AB0A00002B0A000000030000000A0000000A000036040000960A0000250A000000040000000A0000000A000009050000800A00001F0A000000050000000A0000000A0000DD0500006B0A00001A0A000000060000000A0000000A0000B0060000560A0000140A000000070000000A0000000A000084070000400A00000E0A000000080000000A0000000A0000580800002B0A0000090A000000090000000A0000000A00002B090000150A0000030A0000000A0000000A0000000A0000FF090000FF090000FF090000000B0000000A0000000A0000D20A0000EB090000F8090000000C0000000A0000000A0000A60B0000D5090000F2090000000D0000000A0000000A0000790C0000C0090000EC090000000E0000000A0000000A00004D0D0000AA090000E7090000000F0000000A0000000A0000210E000095090000E109000000100000000A0000000A0000F40E000080090000DB09000000000000000B0000000A0000E5010000F50B0000390A000000010000000B0000000A0000B9020000DF0B0000330A000000020000000B0000000A00008C030000C90B00002D0A000000030000000B0000000A000060040000B30B0000280A000000040000000B0000000A0000340500009E0B0000220A000000050000000B0000000A000007060000880B00001C0A000000060000000B0000000A0000DB060000720B0000160A000000070000000B0000000A0000AE0700005C0B0000110A000000080000000B0000000A000082080000470B00000B0A000000090000000B0000000A000056090000310B0000050A0000000A0000000B0000000A0000290A00001B0B0000000A0000000B0000000B0000000A0000FD0A0000050B0000FA090000000C0000000B0000000A0000D00B0000EF0A0000F4090000000D0000000B0000000A0000A40C0000DA0A0000EF090000000E0000000B0000000A0000780D0000C40A0000E9090000000F0000000B0000000A00004B0E0000AE0A0000E309000000100000000B0000000A00001F0F0000980A0000DE09000000000000000C0000000A000010020000140D00003B0A000000010000000C0000000A0000E3020000FD0C0000350A000000020000000C0000000A0000B7030000E70C0000300A000000030000000C0000000A00008A040000D10C00002A0A000000040000000C0000000A00005E050000BB0C0000240A000000050000000C0000000A000032060000A50C00001F0A000000060000000C0000000A0000050700008F0C0000190A000000070000000C0000000A0000D9070000780C0000130A000000080000000C0000000A0000AD080000620C00000E0A000000090000000C0000000A0000800900004C0C0000080A0000000A0000000C0000000A0000540A0000360C0000020A0000000B0000000C0000000A0000270B0000200C0000FD090000000C0000000C0000000A0000FB0B00000A0C0000F7090000000D0000000C0000000A0000CF0C0000F30B0000F1090000000E0000000C0000000A0000A20D0000DD0B0000EB090000000F0000000C0000000A0000760E0000C70B0000E609000000100000000C0000000A00004A0F0000B10B0000E009000000000000000D0000000A00003A020000320E00003E0A000000010000000D0000000A00000D0300001C0E0000380A000000020000000D0000000A0000E1030000050E0000320A000000030000000D0000000A0000B5040000EF0D00002D0A000000040000000D0000000A000088050000D80D0000270A000000050000000D0000000A00005C060000C20D0000210A000000060000000D0000000A000030070000AB0D00001C0A000000070000000D0000000A000003080000950D0000160A000000080000000D0000000A0000D70800007E0D0000100A000000090000000D0000000A0000AB090000670D00000A0A0000000A0000000D0000000A00007E0A0000510D0000050A0000000B0000000D0000000A0000520B00003A0D0000FF090000000C0000000D0000000A0000260C0000240D0000F9090000000D0000000D0000000A0000F90C00000D0D0000F4090000000E0000000D0000000A0000CD0D0000F70C0000EE090000000F0000000D0000000A0000A10E0000E00C0000E809000000100000000D0000000A0000740F0000CA0C0000E209000000000000000E0000000A000064020000510F0000400A000000010000000E0000000A0000380300003A0F00003B0A000000020000000E0000000A00000B040000230F0000350A000000030000000E0000000A0000DF0400000C0F00002F0A000000040000000E0000000A0000B3050000F60E00002A0A000000050000000E0000000A000086060000DF0E0000240A000000060000000E0000000A00005A070000C80E00001E0A000000070000000E0000000A00002E080000B10E0000180A000000080000000E0000000A0000020900009A0E0000130A000000090000000E0000000A0000D5090000830E00000D0A0000000A0000000E0000000A0000A90A00006C0E0000070A0000000B0000000E0000000A00007D0B0000550E0000010A0000000C0000000E0000000A0000500C00003E0E0000FC090000000D0000000E0000000A0000240D0000270E0000F6090000000E0000000E0000000A0000F80D0000100E0000F0090000000F0000000E0000000A0000CB0E0000F90D0000EB09000000100000000E0000000A00009F0F0000E20D0000E509000000000000000F0000000A00008E020000FF0F0000430A000000010000000F0000000A000062030000FF0F00003D0A000000020000000F0000000A000036040000FF0F0000380A000000030000000F0000000A00000A050000FF0F0000320A000000040000000F0000000A0000DD050000FF0F00002C0A000000050000000F0000000A0000B1060000FB0F0000260A000000060000000F0000000A000085070000E40F0000210A000000070000000F0000000A000058080000CD0F00001B0A000000080000000F0000000A00002C090000B60F0000150A000000090000000F0000000A0000000A00009E0F00000F0A0000000A0000000F0000000A0000D30A0000870F00000A0A0000000B0000000F0000000A0000A70B0000700F0000040A0000000C0000000F0000000A00007B0C0000580F0000FE090000000D0000000F0000000A00004E0D0000410F0000F8090000000E0000000F0000000A0000220E00002A0F0000F3090000000F0000000F0000000A0000F60E0000120F0000ED09000000100000000F0000000A0000CA0F0000FB0E0000E70900000000000000100000000A0000B9020000FF0F0000460A00000001000000100000000A00008C030000FF0F0000400A00000002000000100000000A000060040000FF0F00003A0A00000003000000100000000A000034050000FF0F0000340A00000004000000100000000A000008060000FF0F00002F0A00000005000000100000000A0000DB060000FF0F0000290A00000006000000100000000A0000AF070000FF0F0000230A00000007000000100000000A000083080000FF0F00001D0A00000008000000100000000A000056090000FF0F0000180A00000009000000100000000A00002A0A0000FF0F0000120A0000000A000000100000000A0000FE0A0000FF0F00000C0A0000000B000000100000000A0000D20B0000FF0F0000060A0000000C000000100000000A0000A50C0000FF0F0000010A0000000D000000100000000A0000790D0000FF0F0000FB090000000E000000100000000A00004D0E0000FF0F0000F5090000000F000000100000000A0000210F0000FF0F0000EF0900000010000000100000000A0000F40F0000FF0F0000E90900000000000000000000000B000016000000000000001E0B00000001000000000000000B0000EA00000000000000190B00000002000000000000000B0000BD01000000000000140B00000003000000000000000B000091020000000000000E0B00000004000000000000000B00006503000000000000090B00000005000000000000000B00003804000000000000040B00000006000000000000000B00000C05000000000000FE0A00000007000000000000000B0000DF05000000000000F90A00000008000000000000000B0000B306000000000000F40A00000009000000000000000B00008707000000000000EF0A0000000A000000000000000B00005A08000000000000E90A0000000B000000000000000B00002E09000000000000E40A0000000C000000000000000B0000020A000000000000DF0A0000000D000000000000000B0000D50A000000000000D90A0000000E000000000000000B0000A90B000000000000D40A0000000F000000000000000B00007D0C000000000000CF0A00000010000000000000000B0000500D000000000000C90A00000000000000010000000B000040000000B8000000210B00000001000000010000000B000014010000A60000001C0B00000002000000010000000B0000E801000095000000160B00000003000000010000000B0000BB02000083000000110B00000004000000010000000B00008F030000710000000C0B00000005000000010000000B00006304000060000000060B00000006000000010000000B0000360500004E000000010B00000007000000010000000B00000A0600003C000000FC0A00000008000000010000000B0000DD0600002B000000F60A00000009000000010000000B0000B107000019000000F10A0000000A000000010000000B00008508000008000000EC0A0000000B000000010000000B00005809000000000000E60A0000000C000000010000000B00002C0A000000000000E10A0000000D000000010000000B0000000B000000000000DC0A0000000E000000010000000B0000D30B000000000000D60A0000000F000000010000000B0000A70C000000000000D10A00000010000000010000000B00007B0D000000000000CC0A00000000000000020000000B00006B000000D7010000240B00000001000000020000000B00003E010000C50100001F0B00000002000000020000000B000012020000B3010000190B00000003000000020000000B0000E6020000A1010000140B00000004000000020000000B0000B90300008F0100000E0B00000005000000020000000B00008D0400007D010000090B00000006000000020000000B0000610500006B010000040B00000007000000020000000B00003406000059010000FE0A00000008000000020000000B00000807000047010000F90A00000009000000020000000B0000DB07000035010000F30A0000000A000000020000000B0000AF08000023010000EE0A0000000B000000020000000B00008309000010010000E90A0000000C000000020000000B0000560A0000FE000000E30A0000000D000000020000000B00002A0B0000EC000000DE0A0000000E000000020000000B0000FE0B0000DA000000D90A0000000F000000020000000B0000D10C0000C8000000D30A00000010000000020000000B0000A50D0000B6000000CE0A00000000000000030000000B000095000000F6020000270B00000001000000030000000B000069010000E3020000210B00000002000000030000000B00003C020000D10200001C0B00000003000000030000000B000010030000BE020000160B00000004000000030000000B0000E4030000AC020000110B00000005000000030000000B0000B70400009A0200000C0B00000006000000030000000B00008B05000087020000060B00000007000000030000000B00005F06000075020000010B00000008000000030000000B00003207000062020000FB0A00000009000000030000000B00000608000050020000F60A0000000A000000030000000B0000D90800003D020000F10A0000000B000000030000000B0000AD0900002B020000EB0A0000000C000000030000000B0000810A000019020000E60A0000000D000000030000000B0000540B000006020000E00A0000000E000000030000000B0000280C0000F4010000DB0A0000000F000000030000000B0000FC0C0000E1010000D50A00000010000000030000000B0000CF0D0000CF010000D00A00000000000000040000000B0000BF000000140400002A0B00000001000000040000000B00009301000002040000240B00000002000000040000000B000067020000EF0300001F0B00000003000000040000000B00003A030000DC030000190B00000004000000040000000B00000E040000C9030000140B00000005000000040000000B0000E2040000B60300000E0B00000006000000040000000B0000B5050000A4030000090B00000007000000040000000B00008906000091030000030B00000008000000040000000B00005D0700007E030000FE0A00000009000000040000000B0000300800006B030000F80A0000000A000000040000000B00000409000058030000F30A0000000B000000040000000B0000D709000046030000EE0A0000000C000000040000000B0000AB0A000033030000E80A0000000D000000040000000B00007F0B000020030000E30A0000000E000000040000000B0000520C00000D030000DD0A0000000F000000040000000B0000260D0000FA020000D80A00000010000000040000000B0000FA0D0000E8020000D20A00000000000000050000000B0000EA000000330500002C0B00000001000000050000000B0000BD01000020050000270B00000002000000050000000B0000910200000D050000210B00000003000000050000000B000065030000FA0400001C0B00000004000000050000000B000038040000E7040000160B00000005000000050000000B00000C050000D3040000110B00000006000000050000000B0000E0050000C00400000B0B00000007000000050000000B0000B3060000AD040000060B00000008000000050000000B0000870700009A040000000B00000009000000050000000B00005B08000087040000FB0A0000000A000000050000000B00002E09000073040000F50A0000000B000000050000000B0000020A000060040000F00A0000000C000000050000000B0000D50A00004D040000EA0A0000000D000000050000000B0000A90B00003A040000E50A0000000E000000050000000B00007D0C000027040000DF0A0000000F000000050000000B0000500D000014040000DA0A00000010000000050000000B0000240E000000040000D40A00000000000000060000000B000014010000520600002F0B00000001000000060000000B0000E80100003E0600002A0B00000002000000060000000B0000BB0200002B060000240B00000003000000060000000B00008F030000170600001F0B00000004000000060000000B00006304000004060000190B00000005000000060000000B000036050000F0050000130B00000006000000060000000B00000A060000DD0500000E0B00000007000000060000000B0000DE060000C9050000080B00000008000000060000000B0000B1070000B6050000030B00000009000000060000000B000085080000A2050000FD0A0000000A000000060000000B0000580900008E050000F80A0000000B000000060000000B00002C0A00007B050000F20A0000000C000000060000000B0000000B000067050000ED0A0000000D000000060000000B0000D30B000054050000E70A0000000E000000060000000B0000A70C000040050000E20A0000000F000000060000000B00007B0D00002D050000DC0A00000010000000060000000B00004E0E000019050000D70A00000000000000070000000B00003F01000071070000320B00000001000000070000000B0000120200005D0700002C0B00000002000000070000000B0000E602000049070000270B00000003000000070000000B0000B903000035070000210B00000004000000070000000B00008D040000210700001C0B00000005000000070000000B0000610500000D070000160B00000006000000070000000B000034060000F9060000110B00000007000000070000000B000008070000E50600000B0B00000008000000070000000B0000DC070000D1060000050B00000009000000070000000B0000AF080000BD060000000B0000000A000000070000000B000083090000A9060000FA0A0000000B000000070000000B0000560A000095060000F50A0000000C000000070000000B00002A0B000081060000EF0A0000000D000000070000000B0000FE0B00006E060000EA0A0000000E000000070000000B0000D10C00005A060000E40A0000000F000000070000000B0000A50D000046060000DE0A00000010000000070000000B0000790E000032060000D90A00000000000000080000000B00006901000090080000350B00000001000000080000000B00003D0200007B0800002F0B00000002000000080000000B000010030000670800002A0B00000003000000080000000B0000E403000053080000240B00000004000000080000000B0000B70400003E0800001E0B00000005000000080000000B00008B0500002A080000190B00000006000000080000000B00005F06000016080000130B00000007000000080000000B000032070000010800000D0B00000008000000080000000B000006080000ED070000080B00000009000000080000000B0000DA080000D9070000020B0000000A000000080000000B0000AD090000C4070000FD0A0000000B000000080000000B0000810A0000B0070000F70A0000000C000000080000000B0000540B00009C070000F10A0000000D000000080000000B0000280C000087070000EC0A0000000E000000080000000B0000FC0C000073070000E60A0000000F000000080000000B0000CF0D00005F070000E10A00000010000000080000000B0000A30E00004A070000DB0A00000000000000090000000B000093010000AE090000380B00000001000000090000000B0000670200009A090000320B00000002000000090000000B00003B030000850900002C0B00000003000000090000000B00000E04000070090000270B00000004000000090000000B0000E20400005C090000210B00000005000000090000000B0000B5050000470900001B0B00000006000000090000000B00008906000032090000160B00000007000000090000000B00005D0700001D090000100B00000008000000090000000B000030080000090900000A0B00000009000000090000000B000004090000F4080000050B0000000A000000090000000B0000D8090000DF080000FF0A0000000B000000090000000B0000AB0A0000CB080000F90A0000000C000000090000000B00007F0B0000B6080000F40A0000000D000000090000000B0000520C0000A1080000EE0A0000000E000000090000000B0000260D00008C080000E80A0000000F000000090000000B0000FA0D000078080000E30A00000010000000090000000B0000CD0E000063080000DD0A000000000000000A0000000B0000BE010000CD0A00003A0B000000010000000A0000000B000091020000B80A0000350B000000020000000A0000000B000065030000A30A00002F0B000000030000000A0000000B0000390400008E0A0000290B000000040000000A0000000B00000C050000790A0000240B000000050000000A0000000B0000E0050000640A00001E0B000000060000000A0000000B0000B30600004F0A0000180B000000070000000A0000000B0000870700003A0A0000130B000000080000000A0000000B00005B080000250A00000D0B000000090000000A0000000B00002E0900000F0A0000070B0000000A0000000A0000000B0000020A0000FA090000020B0000000B0000000A0000000B0000D50A0000E5090000FC0A0000000C0000000A0000000B0000A90B0000D0090000F60A0000000D0000000A0000000B00007D0C0000BB090000F00A0000000E0000000A0000000B0000500D0000A6090000EB0A0000000F0000000A0000000B0000240E000091090000E50A000000100000000A0000000B0000F80E00007C090000DF0A000000000000000B0000000B0000E8010000EC0B00003D0B000000010000000B0000000B0000BC020000D70B0000370B000000020000000B0000000B00008F030000C10B0000320B000000030000000B0000000B000063040000AC0B00002C0B000000040000000B0000000B000037050000960B0000260B000000050000000B0000000B00000A060000810B0000210B000000060000000B0000000B0000DE0600006B0B00001B0B000000070000000B0000000B0000B1070000560B0000150B000000080000000B0000000B000085080000400B00000F0B000000090000000B0000000B0000590900002B0B00000A0B0000000A0000000B0000000B00002C0A0000150B0000040B0000000B0000000B0000000B0000FF0A0000FF0A0000FF0A0000000C0000000B0000000B0000D30B0000EA0A0000F80A0000000D0000000B0000000B0000A70C0000D50A0000F30A0000000E0000000B0000000B00007B0D0000BF0A0000ED0A0000000F0000000B0000000B00004E0E0000AA0A0000E70A000000100000000B0000000B0000220F0000940A0000E20A000000000000000C0000000B0000130200000B0D0000400B000000010000000C0000000B0000E6020000F50C00003A0B000000020000000C0000000B0000BA030000DF0C0000340B000000030000000C0000000B00008D040000C90C00002F0B000000040000000C0000000B000061050000B30C0000290B000000050000000C0000000B0000350600009E0C0000230B000000060000000C0000000B000008070000880C00001D0B000000070000000C0000000B0000DC070000720C0000180B000000080000000C0000000B0000AF0800005C0C0000120B000000090000000C0000000B000083090000460C00000C0B0000000A0000000C0000000B0000570A0000300C0000060B0000000B0000000C0000000B00002A0B00001A0C0000010B0000000C0000000C0000000B0000FE0B0000050C0000FB0A0000000D0000000C0000000B0000D10C0000EF0B0000F50A0000000E0000000C0000000B0000A50D0000D90B0000EF0A0000000F0000000C0000000B0000790E0000C30B0000EA0A000000100000000C0000000B00004C0F0000AD0B0000E40A000000000000000D0000000B00003D0200002A0E0000430B000000010000000D0000000B000010030000130E00003D0B000000020000000D0000000B0000E4030000FD0D0000370B000000030000000D0000000B0000B8040000E70D0000310B000000040000000D0000000B00008B050000D10D00002C0B000000050000000D0000000B00005F060000BA0D0000260B000000060000000D0000000B000033070000A40D0000200B000000070000000D0000000B0000060800008E0D00001A0B000000080000000D0000000B0000DA080000780D0000140B000000090000000D0000000B0000AD090000610D00000F0B0000000A0000000D0000000B0000810A00004B0D0000090B0000000B0000000D0000000B0000550B0000350D0000030B0000000C0000000D0000000B0000280C00001F0D0000FD0A0000000D0000000D0000000B0000FC0C0000080D0000F70A0000000E0000000D0000000B0000CF0D0000F20C0000F20A0000000F0000000D0000000B0000A30E0000DC0C0000EC0A000000100000000D0000000B0000770F0000C60C0000E60A000000000000000E0000000B000067020000490F0000460B000000010000000E0000000B00003B030000320F0000400B000000020000000E0000000B00000E0400001B0F00003A0B000000030000000E0000000B0000E2040000050F0000340B000000040000000E0000000B0000B6050000EE0E00002E0B000000050000000E0000000B000089060000D70E0000280B000000060000000E0000000B00005D070000C10E0000230B000000070000000E0000000B000030080000AA0E00001D0B000000080000000E0000000B000004090000930E0000170B000000090000000E0000000B0000D80900007D0E0000110B0000000A0000000E0000000B0000AB0A0000660E00000B0B0000000B0000000E0000000B00007F0B0000500E0000050B0000000C0000000E0000000B0000520C0000390E0000000B0000000D0000000E0000000B0000260D0000220E0000FA0A0000000E0000000E0000000B0000FA0D00000C0E0000F40A0000000F0000000E0000000B0000CD0E0000F50D0000EE0A000000100000000E0000000B0000A10F0000DE0D0000E80A000000000000000F0000000B000092020000FF0F0000480B000000010000000F0000000B000065030000FF0F0000430B000000020000000F0000000B000039040000FF0F00003D0B000000030000000F0000000B00000C050000FF0F0000370B000000040000000F0000000B0000E0050000FF0F0000310B000000050000000F0000000B0000B4060000F40F00002B0B000000060000000F0000000B000087070000DD0F0000250B000000070000000F0000000B00005B080000C60F00001F0B000000080000000F0000000B00002E090000AF0F0000190B000000090000000F0000000B0000020A0000980F0000140B0000000A0000000F0000000B0000D60A0000810F00000E0B0000000B0000000F0000000B0000A90B00006A0F0000080B0000000C0000000F0000000B00007D0C0000530F0000020B0000000D0000000F0000000B0000500D00003C0F0000FC0A0000000E0000000F0000000B0000240E0000250F0000F60A0000000F0000000F0000000B0000F80E00000E0F0000F00A000000100000000F0000000B0000CB0F0000F70E0000EA0A00000000000000100000000B0000BC020000FF0F00004B0B00000001000000100000000B000090030000FF0F0000450B00000002000000100000000B000063040000FF0F00003F0B00000003000000100000000B000037050000FF0F0000390B00000004000000100000000B00000A060000FF0F0000340B00000005000000100000000B0000DE060000FF0F00002E0B00000006000000100000000B0000B2070000FF0F0000280B00000007000000100000000B000085080000FF0F0000220B00000008000000100000000B000059090000FF0F00001C0B00000009000000100000000B00002C0A0000FF0F0000160B0000000A000000100000000B0000000B0000FF0F0000100B0000000B000000100000000B0000D40B0000FF0F00000A0B0000000C000000100000000B0000A70C0000FF0F0000040B0000000D000000100000000B00007B0D0000FF0F0000FE0A0000000E000000100000000B00004E0E0000FF0F0000F80A0000000F000000100000000B0000220F0000FF0F0000F20A00000010000000100000000B0000F60F0000FF0F0000ED0A00000000000000000000000C00001800000000000000210C00000001000000000000000C0000EC000000000000001C0C00000002000000000000000C0000C001000000000000170C00000003000000000000000C00009402000000000000120C00000004000000000000000C000068030000000000000D0C00000005000000000000000C00003C04000000000000080C00000006000000000000000C00001005000000000000020C00000007000000000000000C0000E405000000000000FD0B00000008000000000000000C0000B706000000000000F80B00000009000000000000000C00008B07000000000000F30B0000000A000000000000000C00005F08000000000000EE0B0000000B000000000000000C00003309000000000000E90B0000000C000000000000000C0000070A000000000000E40B0000000D000000000000000C0000DB0A000000000000DE0B0000000E000000000000000C0000AF0B000000000000D90B0000000F000000000000000C0000830C000000000000D40B00000010000000000000000C0000570D000000000000CF0B00000000000000010000000C000042000000AF000000240C00000001000000010000000C0000160100009E0000001F0C00000002000000010000000C0000EA0100008C0000001A0C00000003000000010000000C0000BE0200007B000000150C00000004000000010000000C0000920300006A0000000F0C00000005000000010000000C000066040000580000000A0C00000006000000010000000C00003A05000047000000050C00000007000000010000000C00000E06000036000000000C00000008000000010000000C0000E206000025000000FB0B00000009000000010000000C0000B607000013000000F50B0000000A000000010000000C00008A08000002000000F00B0000000B000000010000000C00005D09000000000000EB0B0000000C000000010000000C0000310A000000000000E60B0000000D000000010000000C0000050B000000000000E10B0000000E000000010000000C0000D90B000000000000DB0B0000000F000000010000000C0000AD0C000000000000D60B00000010000000010000000C0000810D000000000000D10B00000000000000020000000C00006D000000CE010000270C00000001000000020000000C000041010000BC010000220C00000002000000020000000C000015020000AA0100001D0C00000003000000020000000C0000E902000099010000170C00000004000000020000000C0000BC03000087010000120C00000005000000020000000C000090040000750100000D0C00000006000000020000000C00006405000064010000080C00000007000000020000000C00003806000052010000020C00000008000000020000000C00000C07000040010000FD0B00000009000000020000000C0000E00700002F010000F80B0000000A000000020000000C0000B40800001D010000F30B0000000B000000020000000C0000880900000B010000ED0B0000000C000000020000000C00005B0A0000F9000000E80B0000000D000000020000000C00002F0B0000E8000000E30B0000000E000000020000000C0000030C0000D6000000DE0B0000000F000000020000000C0000D70C0000C4000000D80B00000010000000020000000C0000AB0D0000B3000000D30B00000000000000030000000C000097000000ED0200002A0C00000001000000030000000C00006B010000DB020000250C00000002000000030000000C00003F020000C9020000200C00000003000000030000000C000013030000B60200001A0C00000004000000030000000C0000E7030000A4020000150C00000005000000030000000C0000BB04000092020000100C00000006000000030000000C00008E050000800200000A0C00000007000000030000000C0000620600006E020000050C00000008000000030000000C0000360700005C020000000C00000009000000030000000C00000A0800004A020000FA0B0000000A000000030000000C0000DE08000038020000F50B0000000B000000030000000C0000B209000026020000F00B0000000C000000030000000C0000860A000014020000EA0B0000000D000000030000000C0000590B000002020000E50B0000000E000000030000000C00002D0C0000EF010000E00B0000000F000000030000000C0000010D0000DD010000DA0B00000010000000030000000C0000D50D0000CB010000D50B00000000000000040000000C0000C20000000C0400002D0C00000001000000040000000C000096010000F9030000280C00000002000000040000000C000069020000E7030000220C00000003000000040000000C00003D030000D40300001D0C00000004000000040000000C000011040000C2030000180C00000005000000040000000C0000E5040000AF030000120C00000006000000040000000C0000B90500009D0300000D0C00000007000000040000000C00008D0600008A030000080C00000008000000040000000C00006007000078030000020C00000009000000040000000C00003408000065030000FD0B0000000A000000040000000C00000809000053030000F70B0000000B000000040000000C0000DC09000040030000F20B0000000C000000040000000C0000B00A00002E030000ED0B0000000D000000040000000C0000840B00001B030000E70B0000000E000000040000000C0000570C000009030000E20B0000000F000000040000000C00002B0D0000F6020000DD0B00000010000000040000000C0000FF0D0000E4020000D70B00000000000000050000000C0000EC0000002A050000300C00000001000000050000000C0000C0010000180500002B0C00000002000000050000000C00009402000005050000250C00000003000000050000000C000068030000F2040000200C00000004000000050000000C00003B040000DF0400001A0C00000005000000050000000C00000F050000CC040000150C00000006000000050000000C0000E3050000B9040000100C00000007000000050000000C0000B7060000A60400000A0C00000008000000050000000C00008B07000094040000050C00000009000000050000000C00005E08000081040000FF0B0000000A000000050000000C0000320900006E040000FA0B0000000B000000050000000C0000060A00005B040000F40B0000000C000000050000000C0000DA0A000048040000EF0B0000000D000000050000000C0000AE0B000035040000EA0B0000000E000000050000000C0000810C000022040000E40B0000000F000000050000000C0000550D00000F040000DF0B00000010000000050000000C0000290E0000FD030000D90B00000000000000060000000C00001701000049060000330C00000001000000060000000C0000EB010000360600002E0C00000002000000060000000C0000BE02000023060000280C00000003000000060000000C0000920300000F060000230C00000004000000060000000C000066040000FC0500001D0C00000005000000060000000C00003A050000E9050000180C00000006000000060000000C00000D060000D6050000120C00000007000000060000000C0000E1060000C20500000D0C00000008000000060000000C0000B5070000AF050000070C00000009000000060000000C0000890800009C050000020C0000000A000000060000000C00005C09000089050000FC0B0000000B000000060000000C0000300A000076050000F70B0000000C000000060000000C0000040B000062050000F10B0000000D000000060000000C0000D80B00004F050000EC0B0000000E000000060000000C0000AB0C00003C050000E60B0000000F000000060000000C00007F0D000029050000E10B00000010000000060000000C0000530E000015050000DB0B00000000000000070000000C00004101000068070000360C00000001000000070000000C00001502000054070000300C00000002000000070000000C0000E9020000410700002B0C00000003000000070000000C0000BC0300002D070000250C00000004000000070000000C0000900400001A070000200C00000005000000070000000C000064050000060700001A0C00000006000000070000000C000038060000F2060000150C00000007000000070000000C00000B070000DF0600000F0C00000008000000070000000C0000DF070000CB0600000A0C00000009000000070000000C0000B3080000B7060000040C0000000A000000070000000C000087090000A4060000FF0B0000000B000000070000000C00005A0A000090060000F90B0000000C000000070000000C00002E0B00007C060000F30B0000000D000000070000000C0000020C000069060000EE0B0000000E000000070000000C0000D50C000055060000E80B0000000F000000070000000C0000A90D000042060000E30B00000010000000070000000C00007D0E00002E060000DD0B00000000000000080000000C00006C01000087080000390C00000001000000080000000C00003F02000073080000330C00000002000000080000000C0000130300005F0800002E0C00000003000000080000000C0000E70300004B080000280C00000004000000080000000C0000BA04000037080000230C00000005000000080000000C00008E050000230800001D0C00000006000000080000000C0000620600000F080000170C00000007000000080000000C000036070000FB070000120C00000008000000080000000C000009080000E70700000C0C00000009000000080000000C0000DD080000D3070000070C0000000A000000080000000C0000B1090000BF070000010C0000000B000000080000000C0000840A0000AB070000FB0B0000000C000000080000000C0000580B000097070000F60B0000000D000000080000000C00002C0C000083070000F00B0000000E000000080000000C0000000D00006F070000EB0B0000000F000000080000000C0000D30D00005B070000E50B00000010000000080000000C0000A70E000047070000DF0B00000000000000090000000C000096010000A60900003C0C00000001000000090000000C00006A02000091090000360C00000002000000090000000C00003D0300007D090000310C00000003000000090000000C000011040000680900002B0C00000004000000090000000C0000E504000054090000250C00000005000000090000000C0000B805000040090000200C00000006000000090000000C00008C0600002B0900001A0C00000007000000090000000C00006007000017090000140C00000008000000090000000C000034080000020900000F0C00000009000000090000000C000007090000EE080000090C0000000A000000090000000C0000DB090000DA080000030C0000000B000000090000000C0000AF0A0000C5080000FE0B0000000C000000090000000C0000820B0000B1080000F80B0000000D000000090000000C0000560C00009C080000F20B0000000E000000090000000C00002A0D000088080000ED0B0000000F000000090000000C0000FD0D000074080000E70B00000010000000090000000C0000D10E00005F080000E10B000000000000000A0000000C0000C1010000C50A00003F0C000000010000000A0000000C000094020000B00A0000390C000000020000000A0000000C0000680300009B0A0000330C000000030000000A0000000C00003C040000860A00002E0C000000040000000A0000000C00000F050000710A0000280C000000050000000A0000000C0000E30500005D0A0000220C000000060000000A0000000C0000B6060000480A00001D0C000000070000000A0000000C00008A070000330A0000170C000000080000000A0000000C00005E0800001E0A0000110C000000090000000A0000000C000031090000090A00000B0C0000000A0000000A0000000C0000050A0000F5090000060C0000000B0000000A0000000C0000D90A0000E0090000000C0000000C0000000A0000000C0000AC0B0000CB090000FA0B0000000D0000000A0000000C0000800C0000B6090000F50B0000000E0000000A0000000C0000540D0000A1090000EF0B0000000F0000000A0000000C0000270E00008D090000E90B000000100000000A0000000C0000FB0E000078090000E30B000000000000000B0000000C0000EB010000E30B0000420C000000010000000B0000000C0000BF020000CE0B00003C0C000000020000000B0000000C000092030000B90B0000360C000000030000000B0000000C000066040000A40B0000310C000000040000000B0000000C00003A0500008F0B00002B0C000000050000000B0000000C00000D060000790B0000250C000000060000000B0000000C0000E1060000640B00001F0C000000070000000B0000000C0000B40700004F0B0000190C000000080000000B0000000C0000880800003A0B0000140C000000090000000B0000000C00005C090000250B00000E0C0000000A0000000B0000000C00002F0A0000100B0000080C0000000B0000000B0000000C0000030B0000FA0A0000020C0000000C0000000B0000000C0000D60B0000E50A0000FD0B0000000D0000000B0000000C0000AA0C0000D00A0000F70B0000000E0000000B0000000C00007E0D0000BB0A0000F10B0000000F0000000B0000000C0000510E0000A60A0000EB0B000000100000000B0000000C0000250F0000910A0000E50B000000000000000C0000000C000016020000020D0000450C000000010000000C0000000C0000E9020000ED0C00003F0C000000020000000C0000000C0000BD030000D70C0000390C000000030000000C0000000C000090040000C20C0000330C000000040000000C0000000C000064050000AC0C00002D0C000000050000000C0000000C000037060000960C0000280C000000060000000C0000000C00000B070000810C0000220C000000070000000C0000000C0000DF0700006B0C00001C0C000000080000000C0000000C0000B2080000560C0000160C000000090000000C0000000C000086090000400C0000100C0000000A0000000C0000000C0000590A00002B0C00000A0C0000000B0000000C0000000C00002D0B0000150C0000050C0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B0000000D0000000C0000000C0000D40C0000EA0B0000F90B0000000E0000000C0000000C0000A80D0000D40B0000F30B0000000F0000000C0000000C00007B0E0000BF0B0000ED0B000000100000000C0000000C00004F0F0000A90B0000E70B000000000000000D0000000C000040020000210E0000480C000000010000000D0000000C0000140300000B0E0000420C000000020000000D0000000C0000E7030000F50D00003C0C000000030000000D0000000C0000BB040000DF0D0000360C000000040000000D0000000C00008E050000C90D0000300C000000050000000D0000000C000062060000B30D00002A0C000000060000000D0000000C0000350700009D0D0000240C000000070000000D0000000C000009080000870D00001F0C000000080000000D0000000C0000DC080000710D0000190C000000090000000D0000000C0000B00900005C0D0000130C0000000A0000000D0000000C0000840A0000460D00000D0C0000000B0000000D0000000C0000570B0000300D0000070C0000000C0000000D0000000C00002B0C00001A0D0000010C0000000D0000000D0000000C0000FE0C0000040D0000FB0B0000000E0000000D0000000C0000D20D0000EE0C0000F50B0000000F0000000D0000000C0000A50E0000D80C0000EF0B000000100000000D0000000C0000790F0000C20C0000EA0B000000000000000E0000000C00006A020000400F00004B0C000000010000000E0000000C00003E0300002A0F0000450C000000020000000E0000000C000011040000130F00003F0C000000030000000E0000000C0000E5040000FD0E0000390C000000040000000E0000000C0000B9050000E70E0000330C000000050000000E0000000C00008C060000D00E00002D0C000000060000000E0000000C000060070000BA0E0000270C000000070000000E0000000C000033080000A40E0000210C000000080000000E0000000C0000070900008D0E00001B0C000000090000000E0000000C0000DA090000770E0000150C0000000A0000000E0000000C0000AE0A0000610E00000F0C0000000B0000000E0000000C0000810B00004A0E0000090C0000000C0000000E0000000C0000550C0000340E0000030C0000000D0000000E0000000C0000280D00001E0E0000FD0B0000000E0000000E0000000C0000FC0D0000070E0000F70B0000000F0000000E0000000C0000CF0E0000F10D0000F10B000000100000000E0000000C0000A30F0000DB0D0000EC0B000000000000000F0000000C000095020000FF0F00004E0C000000010000000F0000000C000068030000FF0F0000480C000000020000000F0000000C00003C040000FF0F0000420C000000030000000F0000000C00000F050000FF0F00003C0C000000040000000F0000000C0000E3050000FF0F0000360C000000050000000F0000000C0000B6060000ED0F0000300C000000060000000F0000000C00008A070000D60F00002A0C000000070000000F0000000C00005D080000C00F0000240C000000080000000F0000000C000031090000A90F00001E0C000000090000000F0000000C0000040A0000920F0000180C0000000A0000000F0000000C0000D80A00007C0F0000120C0000000B0000000F0000000C0000AB0B0000650F00000C0C0000000C0000000F0000000C00007F0C00004E0F0000060C0000000D0000000F0000000C0000520D0000370F0000000C0000000E0000000F0000000C0000260E0000210F0000FA0B0000000F0000000F0000000C0000F90E00000A0F0000F40B000000100000000F0000000C0000CD0F0000F30E0000EE0B00000000000000100000000C0000BF020000FF0F0000510C00000001000000100000000C000093030000FF0F00004B0C00000002000000100000000C000066040000FF0F0000450C00000003000000100000000C00003A050000FF0F00003E0C00000004000000100000000C00000D060000FF0F0000380C00000005000000100000000C0000E1060000FF0F0000320C00000006000000100000000C0000B4070000FF0F00002C0C00000007000000100000000C000088080000FF0F0000260C00000008000000100000000C00005B090000FF0F0000200C00000009000000100000000C00002F0A0000FF0F00001A0C0000000A000000100000000C0000020B0000FF0F0000140C0000000B000000100000000C0000D50B0000FF0F00000E0C0000000C000000100000000C0000A90C0000FF0F0000080C0000000D000000100000000C00007C0D0000FF0F0000020C0000000E000000100000000C0000500E0000FF0F0000FC0B0000000F000000100000000C0000230F0000FF0F0000F60B00000010000000100000000C0000F70F0000FF0F0000F00B00000000000000000000000D00001A00000000000000240D00000001000000000000000D0000EE000000000000001F0D00000002000000000000000D0000C2010000000000001A0D00000003000000000000000D00009702000000000000150D00000004000000000000000D00006B03000000000000100D00000005000000000000000D00003F040000000000000B0D00000006000000000000000D00001305000000000000060D00000007000000000000000D0000E805000000000000010D00000008000000000000000D0000BC06000000000000FC0C00000009000000000000000D00009007000000000000F70C0000000A000000000000000D00006408000000000000F20C0000000B000000000000000D00003909000000000000EE0C0000000C000000000000000D00000D0A000000000000E90C0000000D000000000000000D0000E10A000000000000E40C0000000E000000000000000D0000B50B000000000000DF0C0000000F000000000000000D00008A0C000000000000DA0C00000010000000000000000D00005E0D000000000000D50C00000000000000010000000D000045000000A6000000270D00000001000000010000000D00001901000095000000220D00000002000000010000000D0000ED010000840000001D0D00000003000000010000000D0000C102000073000000180D00000004000000010000000D00009503000062000000130D00000005000000010000000D000069040000510000000E0D00000006000000010000000D00003E05000040000000090D00000007000000010000000D0000120600002F000000040D00000008000000010000000D0000E60600001E000000FF0C00000009000000010000000D0000BA0700000D000000FA0C0000000A000000010000000D00008E08000000000000F50C0000000B000000010000000D00006309000000000000F00C0000000C000000010000000D0000370A000000000000EB0C0000000D000000010000000D00000B0B000000000000E60C0000000E000000010000000D0000DF0B000000000000E10C0000000F000000010000000D0000B30C000000000000DC0C00000010000000010000000D0000870D000000000000D70C00000000000000020000000D00006F000000C50100002A0D00000001000000020000000D000043010000B4010000250D00000002000000020000000D000017020000A2010000200D00000003000000020000000D0000EB020000910100001B0D00000004000000020000000D0000C00300007F010000160D00000005000000020000000D0000940400006E010000110D00000006000000020000000D0000680500005D0100000C0D00000007000000020000000D00003C0600004B010000070D00000008000000020000000D0000100700003A010000010D00000009000000020000000D0000E407000029010000FC0C0000000A000000020000000D0000B808000017010000F70C0000000B000000020000000D00008C09000006010000F20C0000000C000000020000000D0000610A0000F4000000ED0C0000000D000000020000000D0000350B0000E3000000E80C0000000E000000020000000D0000090C0000D2000000E30C0000000F000000020000000D0000DD0C0000C0000000DE0C00000010000000020000000D0000B10D0000AF000000D80C00000000000000030000000D00009A000000E40200002E0D00000001000000030000000D00006E010000D2020000280D00000002000000030000000D000042020000C0020000230D00000003000000030000000D000016030000AF0200001E0D00000004000000030000000D0000EA0300009D020000190D00000005000000030000000D0000BE0400008B020000140D00000006000000030000000D000092050000790200000E0D00000007000000030000000D00006606000067020000090D00000008000000030000000D00003A07000056020000040D00000009000000030000000D00000E08000044020000FF0C0000000A000000030000000D0000E208000032020000FA0C0000000B000000030000000D0000B609000020020000F40C0000000C000000030000000D00008A0A00000F020000EF0C0000000D000000030000000D00005F0B0000FD010000EA0C0000000E000000030000000D0000330C0000EB010000E50C0000000F000000030000000D0000070D0000D9010000DF0C00000010000000030000000D0000DB0D0000C8010000DA0C00000000000000040000000D0000C400000003040000310D00000001000000040000000D000098010000F10300002B0D00000002000000040000000D00006C020000DE030000260D00000003000000040000000D000040030000CC030000210D00000004000000040000000D000014040000BA0300001C0D00000005000000040000000D0000E8040000A8030000160D00000006000000040000000D0000BC05000096030000110D00000007000000040000000D000090060000840300000C0D00000008000000040000000D00006407000071030000060D00000009000000040000000D0000380800005F030000010D0000000A000000040000000D00000C0900004D030000FC0C0000000B000000040000000D0000E00900003B030000F70C0000000C000000040000000D0000B40A000029030000F10C0000000D000000040000000D0000880B000017030000EC0C0000000E000000040000000D00005C0C000005030000E70C0000000F000000040000000D0000300D0000F2020000E10C00000010000000040000000D0000040E0000E0020000DC0C00000000000000050000000D0000EF00000022050000340D00000001000000050000000D0000C30100000F0500002E0D00000002000000050000000D000097020000FC040000290D00000003000000050000000D00006B030000EA040000240D00000004000000050000000D00003F040000D70400001E0D00000005000000050000000D000012050000C5040000190D00000006000000050000000D0000E6050000B2040000140D00000007000000050000000D0000BA060000A00400000E0D00000008000000050000000D00008E0700008D040000090D00000009000000050000000D0000620800007B040000040D0000000A000000050000000D00003609000068040000FE0C0000000B000000050000000D00000A0A000056040000F90C0000000C000000050000000D0000DE0A000043040000F30C0000000D000000050000000D0000B20B000031040000EE0C0000000E000000050000000D0000860C00001E040000E90C0000000F000000050000000D00005A0D00000B040000E30C00000010000000050000000D00002E0E0000F9030000DE0C00000000000000060000000D00001901000040060000370D00000001000000060000000D0000ED0100002D060000320D00000002000000060000000D0000C10200001B0600002C0D00000003000000060000000D00009503000008060000270D00000004000000060000000D000069040000F5050000210D00000005000000060000000D00003D050000E20500001C0D00000006000000060000000D000011060000CF050000160D00000007000000060000000D0000E5060000BC050000110D00000008000000060000000D0000B8070000A90500000B0D00000009000000060000000D00008C08000096050000060D0000000A000000060000000D00006009000083050000010D0000000B000000060000000D0000340A000070050000FB0C0000000C000000060000000D0000080B00005D050000F60C0000000D000000060000000D0000DC0B00004A050000F00C0000000E000000060000000D0000B00C000037050000EB0C0000000F000000060000000D0000840D000024050000E50C00000010000000060000000D0000580E000012050000E00C00000000000000070000000D0000440100005F0700003A0D00000001000000070000000D0000180200004C070000350D00000002000000070000000D0000EB020000390700002F0D00000003000000070000000D0000BF030000250700002A0D00000004000000070000000D00009304000012070000240D00000005000000070000000D000067050000FF0600001E0D00000006000000070000000D00003B060000EB060000190D00000007000000070000000D00000F070000D8060000130D00000008000000070000000D0000E3070000C50600000E0D00000009000000070000000D0000B6080000B1060000080D0000000A000000070000000D00008A0900009E060000030D0000000B000000070000000D00005E0A00008B060000FD0C0000000C000000070000000D0000320B000077060000F80C0000000D000000070000000D0000060C000064060000F20C0000000E000000070000000D0000DA0C000051060000ED0C0000000F000000070000000D0000AD0D00003E060000E70C00000010000000070000000D0000810E00002A060000E20C00000000000000080000000D00006E0100007E0800003D0D00000001000000080000000D0000420200006A080000380D00000002000000080000000D00001603000057080000320D00000003000000080000000D0000EA030000430800002C0D00000004000000080000000D0000BD0400002F080000270D00000005000000080000000D0000910500001C080000210D00000006000000080000000D000065060000080800001C0D00000007000000080000000D000039070000F4070000160D00000008000000080000000D00000D080000E0070000100D00000009000000080000000D0000E0080000CD0700000B0D0000000A000000080000000D0000B4090000B9070000050D0000000B000000080000000D0000880A0000A5070000000D0000000C000000080000000D00005C0B000092070000FA0C0000000D000000080000000D0000300C00007E070000F40C0000000E000000080000000D0000030D00006A070000EF0C0000000F000000080000000D0000D70D000057070000E90C00000010000000080000000D0000AB0E000043070000E40C00000000000000090000000D0000990100009D090000400D00000001000000090000000D00006D020000890900003B0D00000002000000090000000D00004003000075090000350D00000003000000090000000D000014040000610900002F0D00000004000000090000000D0000E80400004D0900002A0D00000005000000090000000D0000BC05000038090000240D00000006000000090000000D00008F060000240900001E0D00000007000000090000000D00006307000010090000190D00000008000000090000000D000037080000FC080000130D00000009000000090000000D00000A090000E80800000D0D0000000A000000090000000D0000DE090000D4080000080D0000000B000000090000000D0000B20A0000C0080000020D0000000C000000090000000D0000860B0000AC080000FC0C0000000D000000090000000D0000590C000098080000F70C0000000E000000090000000D00002D0D000084080000F10C0000000F000000090000000D0000010E000070080000EB0C00000010000000090000000D0000D50E00005B080000E60C000000000000000A0000000D0000C3010000BC0A0000430D000000010000000A0000000D000097020000A70A00003E0D000000020000000A0000000D00006B030000930A0000380D000000030000000A0000000D00003E0400007E0A0000320D000000040000000A0000000D0000120500006A0A00002C0D000000050000000A0000000D0000E6050000550A0000270D000000060000000A0000000D0000B9060000410A0000210D000000070000000A0000000D00008D0700002C0A00001B0D000000080000000A0000000D000061080000180A0000150D000000090000000A0000000D000035090000030A0000100D0000000A0000000A0000000D0000080A0000EF0900000A0D0000000B0000000A0000000D0000DC0A0000DB090000040D0000000C0000000A0000000D0000B00B0000C6090000FE0C0000000D0000000A0000000D0000830C0000B2090000F90C0000000E0000000A0000000D0000570D00009D090000F30C0000000F0000000A0000000D00002B0E000089090000ED0C000000100000000A0000000D0000FE0E000074090000E70C000000000000000B0000000D0000EE010000DB0B0000470D000000010000000B0000000D0000C2020000C60B0000410D000000020000000B0000000D000095030000B10B00003B0D000000030000000B0000000D0000690400009C0B0000350D000000040000000B0000000D00003C050000870B00002F0D000000050000000B0000000D000010060000720B0000290D000000060000000B0000000D0000E40600005D0B0000240D000000070000000B0000000D0000B7070000490B00001E0D000000080000000B0000000D00008B080000340B0000180D000000090000000B0000000D00005F0900001F0B0000120D0000000A0000000B0000000D0000320A00000A0B00000C0D0000000B0000000B0000000D0000060B0000F50A0000060D0000000C0000000B0000000D0000D90B0000E00A0000010D0000000D0000000B0000000D0000AD0C0000CB0A0000FB0C0000000E0000000B0000000D0000810D0000B60A0000F50C0000000F0000000B0000000D0000540E0000A20A0000EF0C000000100000000B0000000D0000280F00008D0A0000E90C000000000000000C0000000D000018020000F90C00004A0D000000010000000C0000000D0000EC020000E40C0000440D000000020000000C0000000D0000C0030000CF0C00003E0D000000030000000C0000000D000093040000BA0C0000380D000000040000000C0000000D000067050000A40C0000320D000000050000000C0000000D00003A0600008F0C00002C0D000000060000000C0000000D00000E0700007A0C0000260D000000070000000C0000000D0000E1070000650C0000200D000000080000000C0000000D0000B50800004F0C00001A0D000000090000000C0000000D0000890900003A0C0000150D0000000A0000000C0000000D00005C0A0000250C00000F0D0000000B0000000C0000000D0000300B0000100C0000090D0000000C0000000C0000000D0000030C0000FA0B0000030D0000000D0000000C0000000D0000D70C0000E50B0000FD0C0000000E0000000C0000000D0000AA0D0000D00B0000F70C0000000F0000000C0000000D00007E0E0000BB0B0000F10C000000100000000C0000000D0000520F0000A50B0000EB0C000000000000000D0000000D000043020000180E00004D0D000000010000000D0000000D000017030000030E0000470D000000020000000D0000000D0000EA030000ED0D0000410D000000030000000D0000000D0000BE040000D70D00003B0D000000040000000D0000000D000091050000C20D0000350D000000050000000D0000000D000065060000AC0D00002F0D000000060000000D0000000D000038070000960D0000290D000000070000000D0000000D00000C080000810D0000230D000000080000000D0000000D0000DF0800006B0D00001D0D000000090000000D0000000D0000B3090000560D0000170D0000000A0000000D0000000D0000860A0000400D0000110D0000000B0000000D0000000D00005A0B00002A0D00000B0D0000000C0000000D0000000D00002D0C0000150D0000050D0000000D0000000D0000000D0000FF0C0000FF0C0000FF0C0000000E0000000D0000000D0000D40D0000E90C0000F90C0000000F0000000D0000000D0000A80E0000D40C0000F30C000000100000000D0000000D00007B0F0000BE0C0000ED0C000000000000000E0000000D00006E020000370F0000500D000000010000000E0000000D000041030000210F00004A0D000000020000000E0000000D0000140400000B0F0000440D000000030000000E0000000D0000E8040000F50E00003E0D000000040000000E0000000D0000BB050000DF0E0000380D000000050000000E0000000D00008F060000C90E0000320D000000060000000E0000000D000062070000B30E00002C0D000000070000000E0000000D0000360800009D0E0000250D000000080000000E0000000D000009090000870E00001F0D000000090000000E0000000D0000DD090000710E0000190D0000000A0000000E0000000D0000B00A00005B0E0000130D0000000B0000000E0000000D0000840B0000450E00000D0D0000000C0000000E0000000D0000570C00002F0E0000070D0000000D0000000E0000000D00002A0D0000190E0000010D0000000E0000000E0000000D0000FE0D0000030E0000FB0C0000000F0000000E0000000D0000D10E0000ED0D0000F50C000000100000000E0000000D0000A50F0000D70D0000EF0C000000000000000F0000000D000098020000FF0F0000530D000000010000000F0000000D00006C030000FF0F00004D0D000000020000000F0000000D00003F040000FF0F0000470D000000030000000F0000000D000012050000FF0F0000410D000000040000000F0000000D0000E6050000FC0F00003A0D000000050000000F0000000D0000B9060000E60F0000340D000000060000000F0000000D00008C070000D00F00002E0D000000070000000F0000000D000060080000B90F0000280D000000080000000F0000000D000033090000A30F0000220D000000090000000F0000000D0000070A00008C0F00001C0D0000000A0000000F0000000D0000DA0A0000760F0000160D0000000B0000000F0000000D0000AD0B00005F0F00000F0D0000000C0000000F0000000D0000810C0000490F0000090D0000000D0000000F0000000D0000540D0000330F0000030D0000000E0000000F0000000D0000280E00001C0F0000FD0C0000000F0000000F0000000D0000FB0E0000060F0000F70C000000100000000F0000000D0000CE0F0000EF0E0000F10C00000000000000100000000D0000C3020000FF0F0000560D00000001000000100000000D000096030000FF0F0000500D00000002000000100000000D000069040000FF0F00004A0D00000003000000100000000D00003D050000FF0F0000440D00000004000000100000000D000010060000FF0F00003D0D00000005000000100000000D0000E3060000FF0F0000370D00000006000000100000000D0000B7070000FF0F0000310D00000007000000100000000D00008A080000FF0F00002B0D00000008000000100000000D00005D090000FF0F0000240D00000009000000100000000D0000310A0000FF0F00001E0D0000000A000000100000000D0000040B0000FF0F0000180D0000000B000000100000000D0000D70B0000FF0F0000120D0000000C000000100000000D0000AB0C0000FF0F00000C0D0000000D000000100000000D00007E0D0000FF0F0000050D0000000E000000100000000D0000510E0000FF0F0000FF0C0000000F000000100000000D0000250F0000FF0F0000F90C00000010000000100000000D0000F80F0000FF0F0000F30C00000000000000000000000E00001C00000000000000270E00000001000000000000000E0000F100000000000000220E00000002000000000000000E0000C5010000000000001E0E00000003000000000000000E00009A02000000000000190E00000004000000000000000E00006E03000000000000140E00000005000000000000000E000043040000000000000F0E00000006000000000000000E000017050000000000000A0E00000007000000000000000E0000EC05000000000000060E00000008000000000000000E0000C006000000000000010E00000009000000000000000E00009507000000000000FC0D0000000A000000000000000E00006908000000000000F70D0000000B000000000000000E00003E09000000000000F20D0000000C000000000000000E0000120A000000000000ED0D0000000D000000000000000E0000E70A000000000000E90D0000000E000000000000000E0000BB0B000000000000E40D0000000F000000000000000E0000900C000000000000DF0D00000010000000000000000E0000650D000000000000DA0D00000000000000010000000E0000470000009D0000002A0E00000001000000010000000E00001B0100008D000000260E00000002000000010000000E0000F00100007C000000210E00000003000000010000000E0000C40200006B0000001C0E00000004000000010000000E0000980300005B000000170E00000005000000010000000E00006D0400004A000000120E00000006000000010000000E000041050000390000000D0E00000007000000010000000E00001606000029000000080E00000008000000010000000E0000EA06000018000000030E00000009000000010000000E0000BF07000007000000FE0D0000000A000000010000000E00009308000000000000F90D0000000B000000010000000E00006809000000000000F50D0000000C000000010000000E00003C0A000000000000F00D0000000D000000010000000E0000110B000000000000EB0D0000000E000000010000000E0000E50B000000000000E60D0000000F000000010000000E0000B90C000000000000E10D00000010000000010000000E00008E0D000000000000DC0D00000000000000020000000E000071000000BC0100002E0E00000001000000020000000E000046010000AB010000290E00000002000000020000000E00001A0200009A010000240E00000003000000020000000E0000EE020000890100001F0E00000004000000020000000E0000C3030000780100001A0E00000005000000020000000E00009704000067010000150E00000006000000020000000E00006B05000056010000100E00000007000000020000000E000040060000450100000B0E00000008000000020000000E00001407000034010000060E00000009000000020000000E0000E907000023010000010E0000000A000000020000000E0000BD08000012010000FC0D0000000B000000020000000E00009109000001010000F70D0000000C000000020000000E0000660A0000F0000000F20D0000000D000000020000000E00003A0B0000DE000000ED0D0000000E000000020000000E00000E0C0000CD000000E80D0000000F000000020000000E0000E30C0000BC000000E30D00000010000000020000000E0000B70D0000AB000000DE0D00000000000000030000000E00009C000000DB020000310E00000001000000030000000E000070010000C90200002C0E00000002000000030000000E000044020000B8020000270E00000003000000030000000E000019030000A7020000220E00000004000000030000000E0000ED030000950200001D0E00000005000000030000000E0000C104000084020000180E00000006000000030000000E00009605000072020000120E00000007000000030000000E00006A060000610200000D0E00000008000000030000000E00003E0700004F020000080E00000009000000030000000E0000120800003E020000030E0000000A000000030000000E0000E70800002D020000FE0D0000000B000000030000000E0000BB0900001B020000F90D0000000C000000030000000E00008F0A00000A020000F40D0000000D000000030000000E0000640B0000F8010000EF0D0000000E000000030000000E0000380C0000E7010000EA0D0000000F000000030000000E00000C0D0000D5010000E50D00000010000000030000000E0000E00D0000C4010000DF0D00000000000000040000000E0000C7000000FA030000340E00000001000000040000000E00009B010000E80300002F0E00000002000000040000000E00006F020000D60300002A0E00000003000000040000000E000043030000C4030000250E00000004000000040000000E000017040000B20300001F0E00000005000000040000000E0000EC040000A10300001A0E00000006000000040000000E0000C00500008F030000150E00000007000000040000000E0000940600007D030000100E00000008000000040000000E0000680700006B0300000B0E00000009000000040000000E00003C08000059030000060E0000000A000000040000000E00001109000048030000000E0000000B000000040000000E0000E509000036030000FB0D0000000C000000040000000E0000B90A000024030000F60D0000000D000000040000000E00008D0B000012030000F10D0000000E000000040000000E0000610C000000030000EC0D0000000F000000040000000E0000360D0000EE020000E60D00000010000000040000000E00000A0E0000DD020000E10D00000000000000050000000E0000F100000019050000380E00000001000000050000000E0000C501000006050000320E00000002000000050000000E000099020000F40400002D0E00000003000000050000000E00006E030000E2040000280E00000004000000050000000E000042040000D0040000220E00000005000000050000000E000016050000BE0400001D0E00000006000000050000000E0000EA050000AB040000180E00000007000000050000000E0000BE06000099040000130E00000008000000050000000E000092070000870400000D0E00000009000000050000000E00006608000075040000080E0000000A000000050000000E00003A09000063040000030E0000000B000000050000000E00000E0A000050040000FD0D0000000C000000050000000E0000E30A00003E040000F80D0000000D000000050000000E0000B70B00002C040000F30D0000000E000000050000000E00008B0C00001A040000ED0D0000000F000000050000000E00005F0D000007040000E80D00000010000000050000000E0000330E0000F5030000E30D00000000000000060000000E00001C010000380600003B0E00000001000000060000000E0000F001000025060000350E00000002000000060000000E0000C402000012060000300E00000003000000060000000E000098030000000600002B0E00000004000000060000000E00006C040000ED050000250E00000005000000060000000E000040050000DA050000200E00000006000000060000000E000014060000C80500001A0E00000007000000060000000E0000E8060000B5050000150E00000008000000060000000E0000BC070000A3050000100E00000009000000060000000E000090080000900500000A0E0000000A000000060000000E0000640900007D050000050E0000000B000000060000000E0000380A00006B050000000E0000000C000000060000000E00000C0B000058050000FA0D0000000D000000060000000E0000E00B000046050000F50D0000000E000000060000000E0000B40C000033050000EF0D0000000F000000060000000E0000880D000020050000EA0D00000010000000060000000E00005C0E00000E050000E50D00000000000000070000000E000046010000560700003E0E00000001000000070000000E00001A02000043070000390E00000002000000070000000E0000EE02000030070000330E00000003000000070000000E0000C20300001D0700002E0E00000004000000070000000E0000960400000A070000280E00000005000000070000000E00006A050000F7060000230E00000006000000070000000E00003E060000E40600001D0E00000007000000070000000E000012070000D1060000180E00000008000000070000000E0000E6070000BE060000120E00000009000000070000000E0000BA080000AB0600000D0E0000000A000000070000000E00008E09000098060000070E0000000B000000070000000E0000620A000085060000020E0000000C000000070000000E0000360B000072060000FC0D0000000D000000070000000E00000A0C00005F060000F70D0000000E000000070000000E0000DE0C00004C060000F10D0000000F000000070000000E0000B20D000039060000EC0D00000010000000070000000E0000860E000026060000E60D00000000000000080000000E00007101000075080000410E00000001000000080000000E000045020000620800003C0E00000002000000080000000E0000190300004E080000360E00000003000000080000000E0000ED0300003B080000310E00000004000000080000000E0000C1040000280800002B0E00000005000000080000000E00009405000014080000250E00000006000000080000000E00006806000001080000200E00000007000000080000000E00003C070000EE0700001A0E00000008000000080000000E000010080000DA070000150E00000009000000080000000E0000E4080000C70700000F0E0000000A000000080000000E0000B8090000B30700000A0E0000000B000000080000000E00008C0A0000A0070000040E0000000C000000080000000E00005F0B00008D070000FE0D0000000D000000080000000E0000330C000079070000F90D0000000E000000080000000E0000070D000066070000F30D0000000F000000080000000E0000DB0D000052070000EE0D00000010000000080000000E0000AF0E00003F070000E80D00000000000000090000000E00009C01000094090000450E00000001000000090000000E00006F020000800900003F0E00000002000000090000000E0000430300006D090000390E00000003000000090000000E00001704000059090000340E00000004000000090000000E0000EB040000450900002E0E00000005000000090000000E0000BF05000031090000280E00000006000000090000000E0000920600001D090000230E00000007000000090000000E0000660700000A0900001D0E00000008000000090000000E00003A080000F6080000170E00000009000000090000000E00000E090000E2080000120E0000000A000000090000000E0000E2090000CE0800000C0E0000000B000000090000000E0000B50A0000BB080000060E0000000C000000090000000E0000890B0000A7080000000E0000000D000000090000000E00005D0C000093080000FB0D0000000E000000090000000E0000310D00007F080000F50D0000000F000000090000000E0000040E00006B080000EF0D00000010000000090000000E0000D80E000058080000EA0D000000000000000A0000000E0000C6010000B30A0000480E000000010000000A0000000E00009A0200009F0A0000420E000000020000000A0000000E00006E0300008B0A00003C0E000000030000000A0000000E000041040000760A0000370E000000040000000A0000000E000015050000620A0000310E000000050000000A0000000E0000E90500004E0A00002B0E000000060000000A0000000E0000BD0600003A0A0000250E000000070000000A0000000E000090070000260A00001F0E000000080000000A0000000E000064080000120A00001A0E000000090000000A0000000E000038090000FD090000140E0000000A0000000A0000000E00000B0A0000E90900000E0E0000000B0000000A0000000E0000DF0A0000D5090000080E0000000C0000000A0000000E0000B30B0000C1090000030E0000000D0000000A0000000E0000860C0000AD090000FD0D0000000E0000000A0000000E00005A0D000099090000F70D0000000F0000000A0000000E00002E0E000084090000F10D000000100000000A0000000E0000020F000070090000EB0D000000000000000B0000000E0000F1010000D20B00004B0E000000010000000B0000000E0000C4020000BD0B0000450E000000020000000B0000000E000098030000A90B00003F0E000000030000000B0000000E00006C040000940B00003A0E000000040000000B0000000E00003F050000800B0000340E000000050000000B0000000E0000130600006B0B00002E0E000000060000000B0000000E0000E7060000570B0000280E000000070000000B0000000E0000BA070000420B0000220E000000080000000B0000000E00008E0800002D0B00001C0E000000090000000B0000000E000062090000190B0000160E0000000A0000000B0000000E0000350A0000040B0000100E0000000B0000000B0000000E0000090B0000F00A00000B0E0000000C0000000B0000000E0000DC0B0000DB0A0000050E0000000D0000000B0000000E0000B00C0000C70A0000FF0D0000000E0000000B0000000E0000840D0000B20A0000F90D0000000F0000000B0000000E0000570E00009D0A0000F30D000000100000000B0000000E00002B0F0000890A0000ED0D000000000000000C0000000E00001B020000F10C00004F0E000000010000000C0000000E0000EF020000DC0C0000490E000000020000000C0000000E0000C3030000C70C0000430E000000030000000C0000000E000096040000B20C00003D0E000000040000000C0000000E00006A0500009D0C0000370E000000050000000C0000000E00003D060000880C0000310E000000060000000C0000000E000011070000730C00002B0E000000070000000C0000000E0000E40700005E0C0000250E000000080000000C0000000E0000B8080000490C00001F0E000000090000000C0000000E00008B090000340C0000190E0000000A0000000C0000000E00005F0A00001F0C0000130E0000000B0000000C0000000E0000320B00000A0C00000D0E0000000C0000000C0000000E0000060C0000F50B0000070E0000000D0000000C0000000E0000DA0C0000E00B0000010E0000000E0000000C0000000E0000AD0D0000CB0B0000FB0D0000000F0000000C0000000E0000810E0000B70B0000F50D000000100000000C0000000E0000540F0000A20B0000EF0D000000000000000D0000000E000046020000100E0000520E000000010000000D0000000E00001A030000FA0D00004C0E000000020000000D0000000E0000ED030000E50D0000460E000000030000000D0000000E0000C0040000D00D0000400E000000040000000D0000000E000094050000BA0D0000390E000000050000000D0000000E000067060000A50D0000330E000000060000000D0000000E00003B070000900D00002D0E000000070000000D0000000E00000E0800007A0D0000270E000000080000000D0000000E0000E2080000650D0000210E000000090000000D0000000E0000B5090000500D00001B0E0000000A0000000D0000000E0000890A00003A0D0000150E0000000B0000000D0000000E00005C0B0000250D00000F0E0000000C0000000D0000000E0000300C0000100D0000090E0000000D0000000D0000000E0000030D0000FA0C0000030E0000000E0000000D0000000E0000D70D0000E50C0000FD0D0000000F0000000D0000000E0000AA0E0000D00C0000F70D000000100000000D0000000E00007D0F0000BA0C0000F10D000000000000000E0000000E0000710200002E0F0000550E000000010000000E0000000E000044030000190F00004F0E000000020000000E0000000E000017040000030F0000490E000000030000000E0000000E0000EB040000ED0E0000430E000000040000000E0000000E0000BE050000D80E00003C0E000000050000000E0000000E000092060000C20E0000360E000000060000000E0000000E000065070000AC0E0000300E000000070000000E0000000E000038080000960E00002A0E000000080000000E0000000E00000C090000810E0000240E000000090000000E0000000E0000DF0900006B0E00001E0E0000000A0000000E0000000E0000B30A0000550E0000170E0000000B0000000E0000000E0000860B00003F0E0000110E0000000C0000000E0000000E0000590C00002A0E00000B0E0000000D0000000E0000000E00002D0D0000140E0000050E0000000E0000000E0000000E0000FF0D0000FF0D0000FF0D0000000F0000000E0000000E0000D30E0000E90D0000F80D000000100000000E0000000E0000A70F0000D30D0000F20D000000000000000F0000000E00009B020000FF0F0000580E000000010000000F0000000E00006F030000FF0F0000520E000000020000000F0000000E000042040000FF0F00004C0E000000030000000F0000000E000015050000FF0F0000460E000000040000000F0000000E0000E9050000F50F00003F0E000000050000000F0000000E0000BC060000DF0F0000390E000000060000000F0000000E00008F070000C90F0000330E000000070000000F0000000E000062080000B30F00002C0E000000080000000F0000000E0000360900009C0F0000260E000000090000000F0000000E0000090A0000860F0000200E0000000A0000000F0000000E0000DC0A0000700F00001A0E0000000B0000000F0000000E0000B00B00005A0F0000130E0000000C0000000F0000000E0000830C0000440F00000D0E0000000D0000000F0000000E0000560D00002E0F0000070E0000000E0000000F0000000E00002A0E0000180F0000010E0000000F0000000F0000000E0000FD0E0000020F0000FA0D000000100000000F0000000E0000D00F0000EB0E0000F40D00000000000000100000000E0000C6020000FF0F00005C0E00000001000000100000000E000099030000FF0F0000550E00000002000000100000000E00006C040000FF0F00004F0E00000003000000100000000E000040050000FF0F0000490E00000004000000100000000E000013060000FF0F0000420E00000005000000100000000E0000E6060000FF0F00003C0E00000006000000100000000E0000B9070000FF0F0000350E00000007000000100000000E00008C080000FF0F00002F0E00000008000000100000000E000060090000FF0F0000290E00000009000000100000000E0000330A0000FF0F0000220E0000000A000000100000000E0000060B0000FF0F00001C0E0000000B000000100000000E0000D90B0000FF0F0000160E0000000C000000100000000E0000AD0C0000FF0F00000F0E0000000D000000100000000E0000800D0000FF0F0000090E0000000E000000100000000E0000530E0000FF0F0000020E0000000F000000100000000E0000260F0000FF0F0000FC0D00000010000000100000000E0000F90F0000FF0F0000F60D00000000000000000000000F00001E000000000000002A0F00000001000000000000000F0000F300000000000000250F00000002000000000000000F0000C801000000000000210F00000003000000000000000F00009D020000000000001C0F00000004000000000000000F00007103000000000000180F00000005000000000000000F00004604000000000000130F00000006000000000000000F00001B050000000000000E0F00000007000000000000000F0000F0050000000000000A0F00000008000000000000000F0000C506000000000000050F00000009000000000000000F00009A07000000000000000F0000000A000000000000000F00006E08000000000000FC0E0000000B000000000000000F00004309000000000000F70E0000000C000000000000000F0000180A000000000000F20E0000000D000000000000000F0000ED0A000000000000EE0E0000000E000000000000000F0000C20B000000000000E90E0000000F000000000000000F0000960C000000000000E50E00000010000000000000000F00006B0D000000000000E00E00000000000000010000000F000049000000940000002E0F00000001000000010000000F00001E01000084000000290F00000002000000010000000F0000F201000074000000240F00000003000000010000000F0000C7020000630000001F0F00000004000000010000000F00009C030000530000001B0F00000005000000010000000F00007004000043000000160F00000006000000010000000F00004505000032000000110F00000007000000010000000F00001A060000220000000C0F00000008000000010000000F0000EF06000012000000080F00000009000000010000000F0000C307000001000000030F0000000A000000010000000F00009808000000000000FE0E0000000B000000010000000F00006D09000000000000F90E0000000C000000010000000F0000410A000000000000F40E0000000D000000010000000F0000160B000000000000F00E0000000E000000010000000F0000EB0B000000000000EB0E0000000F000000010000000F0000C00C000000000000E60E00000010000000010000000F0000940D000000000000E10E00000000000000020000000F000073000000B3010000310F00000001000000020000000F000048010000A20100002C0F00000002000000020000000F00001D02000092010000270F00000003000000020000000F0000F102000081010000220F00000004000000020000000F0000C6030000700100001D0F00000005000000020000000F00009B04000060010000190F00000006000000020000000F00006F0500004F010000140F00000007000000020000000F0000440600003E0100000F0F00000008000000020000000F0000180700002D0100000A0F00000009000000020000000F0000ED0700001D010000050F0000000A000000020000000F0000C20800000C010000000F0000000B000000020000000F000096090000FB000000FB0E0000000C000000020000000F00006B0A0000EB000000F60E0000000D000000020000000F00003F0B0000DA000000F20E0000000E000000020000000F0000140C0000C9000000ED0E0000000F000000020000000F0000E90C0000B8000000E80E00000010000000020000000F0000BD0D0000A8000000E30E00000000000000030000000F00009E000000D2020000340F00000001000000030000000F000073010000C10200002F0F00000002000000030000000F000047020000B00200002A0F00000003000000030000000F00001C0300009F020000250F00000004000000030000000F0000F00300008E020000200F00000005000000030000000F0000C50400007C0200001B0F00000006000000030000000F0000990500006B020000160F00000007000000030000000F00006E0600005A020000110F00000008000000030000000F000042070000490200000C0F00000009000000030000000F00001708000038020000080F0000000A000000030000000F0000EB08000027020000030F0000000B000000030000000F0000C009000016020000FE0E0000000C000000030000000F0000940A000005020000F90E0000000D000000030000000F0000690B0000F4010000F40E0000000E000000030000000F00003D0C0000E3010000EF0E0000000F000000030000000F0000120D0000D1010000EA0E00000010000000030000000F0000E60D0000C0010000E50E00000000000000040000000F0000C9000000F1030000380F00000001000000040000000F00009D010000DF030000330F00000002000000040000000F000072020000CE0300002E0F00000003000000040000000F000046030000BC030000290F00000004000000040000000F00001A040000AB030000230F00000005000000040000000F0000EF040000990300001E0F00000006000000040000000F0000C305000088030000190F00000007000000040000000F00009806000076030000140F00000008000000040000000F00006C070000650300000F0F00000009000000040000000F000040080000530300000A0F0000000A000000040000000F00001509000042030000050F0000000B000000040000000F0000E909000030030000000F0000000C000000040000000F0000BE0A00001F030000FB0E0000000D000000040000000F0000920B00000D030000F50E0000000E000000040000000F0000660C0000FC020000F00E0000000F000000040000000F00003B0D0000EA020000EB0E00000010000000040000000F00000F0E0000D9020000E60E00000000000000050000000F0000F4000000100500003B0F00000001000000050000000F0000C8010000FE040000360F00000002000000050000000F00009C020000EC040000310F00000003000000050000000F000070030000DA0400002C0F00000004000000050000000F000045040000C8040000260F00000005000000050000000F000019050000B6040000210F00000006000000050000000F0000ED050000A40400001C0F00000007000000050000000F0000C206000093040000170F00000008000000050000000F00009607000081040000110F00000009000000050000000F00006A0800006F0400000C0F0000000A000000050000000F00003E0900005D040000070F0000000B000000050000000F0000130A00004B040000020F0000000C000000050000000F0000E70A000039040000FD0E0000000D000000050000000F0000BB0B000027040000F70E0000000E000000050000000F0000900C000015040000F20E0000000F000000050000000F0000640D000003040000ED0E00000010000000050000000F0000380E0000F2030000E80E00000000000000060000000F00001E0100002F0600003F0F00000001000000060000000F0000F20100001C060000390F00000002000000060000000F0000C70200000A060000340F00000003000000060000000F00009B030000F80500002F0F00000004000000060000000F00006F040000E6050000290F00000005000000060000000F000043050000D3050000240F00000006000000060000000F000017060000C10500001F0F00000007000000060000000F0000EC060000AF050000190F00000008000000060000000F0000C00700009C050000140F00000009000000060000000F0000940800008A0500000F0F0000000A000000060000000F00006809000078050000090F0000000B000000060000000F00003C0A000066050000040F0000000C000000060000000F0000100B000053050000FF0E0000000D000000060000000F0000E50B000041050000F90E0000000E000000060000000F0000B90C00002F050000F40E0000000F000000060000000F00008D0D00001C050000EF0E00000010000000060000000F0000610E00000A050000E90E00000000000000070000000F0000490100004E070000420F00000001000000070000000F00001D0200003B0700003D0F00000002000000070000000F0000F102000028070000370F00000003000000070000000F0000C503000016070000320F00000004000000070000000F000099040000030700002C0F00000005000000070000000F00006D050000F0060000270F00000006000000070000000F000041060000DD060000210F00000007000000070000000F000015070000CB0600001C0F00000008000000070000000F0000EA070000B8060000160F00000009000000070000000F0000BE080000A5060000110F0000000A000000070000000F000092090000930600000C0F0000000B000000070000000F0000660A000080060000060F0000000C000000070000000F00003A0B00006D060000010F0000000D000000070000000F00000E0C00005B060000FB0E0000000E000000070000000F0000E20C000048060000F60E0000000F000000070000000F0000B60D000035060000F00E00000010000000070000000F00008A0E000023060000EB0E00000000000000080000000F0000740100006C080000460F00000001000000080000000F00004802000059080000400F00000002000000080000000F00001C030000460800003A0F00000003000000080000000F0000F003000033080000350F00000004000000080000000F0000C4040000200800002F0F00000005000000080000000F0000970500000D0800002A0F00000006000000080000000F00006B060000FA070000240F00000007000000080000000F00003F070000E70700001F0F00000008000000080000000F000013080000D4070000190F00000009000000080000000F0000E7080000C1070000130F0000000A000000080000000F0000BB090000AE0700000E0F0000000B000000080000000F00008F0A00009B070000080F0000000C000000080000000F0000630B000088070000030F0000000D000000080000000F0000370C000075070000FD0E0000000E000000080000000F00000B0D000061070000F80E0000000F000000080000000F0000DF0D00004E070000F20E00000010000000080000000F0000B30E00003B070000EC0E00000000000000090000000F00009E0100008B090000490F00000001000000090000000F00007202000078090000430F00000002000000090000000F000046030000640900003E0F00000003000000090000000F00001A04000051090000380F00000004000000090000000F0000EE0400003D090000320F00000005000000090000000F0000C20500002A0900002D0F00000006000000090000000F00009506000017090000270F00000007000000090000000F00006907000003090000210F00000008000000090000000F00003D080000F00800001B0F00000009000000090000000F000011090000DC080000160F0000000A000000090000000F0000E5090000C9080000100F0000000B000000090000000F0000B90A0000B50800000A0F0000000C000000090000000F00008D0B0000A2080000050F0000000D000000090000000F0000600C00008E080000FF0E0000000E000000090000000F0000340D00007B080000F90E0000000F000000090000000F0000080E000067080000F40E00000010000000090000000F0000DC0E000054080000EE0E000000000000000A0000000F0000C9010000AA0A00004C0F000000010000000A0000000F00009D020000960A0000470F000000020000000A0000000F000071030000830A0000410F000000030000000A0000000F0000440400006F0A00003B0F000000040000000A0000000F0000180500005B0A0000350F000000050000000A0000000F0000EC050000470A00002F0F000000060000000A0000000F0000C0060000330A00002A0F000000070000000A0000000F0000930700001F0A0000240F000000080000000A0000000F0000670800000B0A00001E0F000000090000000A0000000F00003B090000F8090000180F0000000A0000000A0000000F00000E0A0000E4090000120F0000000B0000000A0000000F0000E20A0000D00900000D0F0000000C0000000A0000000F0000B60B0000BC090000070F0000000D0000000A0000000F00008A0C0000A8090000010F0000000E0000000A0000000F00005D0D000094090000FB0E0000000F0000000A0000000F0000310E000080090000F50E000000100000000A0000000F0000050F00006D090000EF0E000000000000000B0000000F0000F4010000C90B0000500F000000010000000B0000000F0000C7020000B50B00004A0F000000020000000B0000000F00009B030000A10B0000440F000000030000000B0000000F00006F0400008C0B00003E0F000000040000000B0000000F000042050000780B0000380F000000050000000B0000000F000016060000640B0000320F000000060000000B0000000F0000EA060000500B00002C0F000000070000000B0000000F0000BD0700003B0B0000260F000000080000000B0000000F000091080000270B0000200F000000090000000B0000000F000064090000130B00001B0F0000000A0000000B0000000F0000380A0000FF0A0000150F0000000B0000000B0000000F00000C0B0000EA0A00000F0F0000000C0000000B0000000F0000DF0B0000D60A0000090F0000000D0000000B0000000F0000B30C0000C20A0000030F0000000E0000000B0000000F0000870D0000AE0A0000FD0E0000000F0000000B0000000F00005A0E0000990A0000F70E000000100000000B0000000F00002E0F0000850A0000F10E000000000000000C0000000F00001E020000E80C0000530F000000010000000C0000000F0000F2020000D30C00004D0F000000020000000C0000000F0000C6030000BF0C0000470F000000030000000C0000000F000099040000AA0C0000410F000000040000000C0000000F00006D050000950C00003B0F000000050000000C0000000F000040060000810C0000350F000000060000000C0000000F0000140700006C0C00002F0F000000070000000C0000000F0000E7070000580C0000290F000000080000000C0000000F0000BB080000430C0000230F000000090000000C0000000F00008E0900002E0C00001D0F0000000A0000000C0000000F0000620A00001A0C0000170F0000000B0000000C0000000F0000350B0000050C0000110F0000000C0000000C0000000F0000090C0000F00B00000B0F0000000D0000000C0000000F0000DC0C0000DC0B0000050F0000000E0000000C0000000F0000B00D0000C70B0000FF0E0000000F0000000C0000000F0000830E0000B20B0000F90E000000100000000C0000000F0000570F00009E0B0000F30E000000000000000D0000000F000049020000070E0000570F000000010000000D0000000F00001D030000F20D0000510F000000020000000D0000000F0000F0030000DD0D00004A0F000000030000000D0000000F0000C3040000C80D0000440F000000040000000D0000000F000097050000B30D00003E0F000000050000000D0000000F00006A0600009E0D0000380F000000060000000D0000000F00003E070000890D0000320F000000070000000D0000000F000011080000740D00002C0F000000080000000D0000000F0000E40800005F0D0000250F000000090000000D0000000F0000B80900004A0D00001F0F0000000A0000000D0000000F00008B0A0000350D0000190F0000000B0000000D0000000F00005F0B0000200D0000130F0000000C0000000D0000000F0000320C00000A0D00000D0F0000000D0000000D0000000F0000060D0000F50C0000070F0000000E0000000D0000000F0000D90D0000E00C0000000F0000000F0000000D0000000F0000AC0E0000CB0C0000FA0E000000100000000D0000000F0000800F0000B60C0000F40E000000000000000E0000000F000074020000260F00005A0F000000010000000E0000000F000047030000100F0000540F000000020000000E0000000F00001A040000FB0E00004E0F000000030000000E0000000F0000EE040000E60E0000470F000000040000000E0000000F0000C1050000D00E0000410F000000050000000E0000000F000094060000BB0E00003B0F000000060000000E0000000F000068070000A50E0000350F000000070000000E0000000F00003B080000900E00002E0F000000080000000E0000000F00000E0900007A0E0000280F000000090000000E0000000F0000E2090000650E0000220F0000000A0000000E0000000F0000B50A00004F0E00001B0F0000000B0000000E0000000F0000880B00003A0E0000150F0000000C0000000E0000000F00005C0C0000250E00000F0F0000000D0000000E0000000F00002F0D00000F0E0000090F0000000E0000000E0000000F0000020E0000FA0D0000020F0000000F0000000E0000000F0000D50E0000E40D0000FC0E000000100000000E0000000F0000A90F0000CF0D0000F60E000000000000000F0000000F00009F020000FF0F00005E0F000000010000000F0000000F000072030000FF0F0000570F000000020000000F0000000F000045040000FF0F0000510F000000030000000F0000000F000018050000FF0F00004A0F000000040000000F0000000F0000EB050000ED0F0000440F000000050000000F0000000F0000BF060000D80F00003E0F000000060000000F0000000F000092070000C20F0000370F000000070000000F0000000F000065080000AC0F0000310F000000080000000F0000000F000038090000960F00002A0F000000090000000F0000000F00000B0A0000800F0000240F0000000A0000000F0000000F0000DF0A00006A0F00001E0F0000000B0000000F0000000F0000B20B0000550F0000170F0000000C0000000F0000000F0000850C00003F0F0000110F0000000D0000000F0000000F0000580D0000290F00000A0F0000000E0000000F0000000F00002B0E0000130F0000040F0000000F0000000F0000000F0000FF0E0000FF0E0000FF0E000000100000000F0000000F0000D20F0000E80E0000F70E00000000000000100000000F0000C9020000FF0F0000610F00000001000000100000000F00009C030000FF0F00005B0F00000002000000100000000F00006F040000FF0F0000540F00000003000000100000000F000043050000FF0F00004E0F00000004000000100000000F000016060000FF0F0000470F00000005000000100000000F0000E9060000FF0F0000400F00000006000000100000000F0000BC070000FF0F00003A0F00000007000000100000000F00008F080000FF0F0000330F00000008000000100000000F000062090000FF0F00002D0F00000009000000100000000F0000350A0000FF0F0000260F0000000A000000100000000F0000080B0000FF0F0000200F0000000B000000100000000F0000DB0B0000FF0F0000190F0000000C000000100000000F0000AE0C0000FF0F0000130F0000000D000000100000000F0000810D0000FF0F00000C0F0000000E000000100000000F0000550E0000FF0F0000060F0000000F000000100000000F0000280F0000FF0F0000FF0E00000010000000100000000F0000FB0F0000FF0F0000F90E00000000000000000000001000002000000000000000FF0F0000000100000000000000100000F500000000000000FF0F0000000200000000000000100000CA01000000000000FF0F0000000300000000000000100000A002000000000000FF0F00000004000000000000001000007503000000000000FF0F00000005000000000000001000004A04000000000000FF0F00000006000000000000001000001F05000000000000FF0F0000000700000000000000100000F405000000000000FF0F0000000800000000000000100000C906000000000000FF0F00000009000000000000001000009E07000000000000FF0F0000000A000000000000001000007308000000000000FF0F0000000B000000000000001000004809000000000000FC0F0000000C000000000000001000001E0A000000000000F70F0000000D00000000000000100000F30A000000000000F30F0000000E00000000000000100000C80B000000000000EE0F0000000F000000000000001000009D0C000000000000EA0F0000001000000000000000100000720D000000000000E50F00000000000000010000001000004B0000008B000000FF0F0000000100000001000000100000200100007B000000FF0F0000000200000001000000100000F50100006B000000FF0F0000000300000001000000100000CA0200005B000000FF0F00000004000000010000001000009F0300004B000000FF0F0000000500000001000000100000740400003B000000FF0F0000000600000001000000100000490500002B000000FF0F00000007000000010000001000001E0600001B000000FF0F0000000800000001000000100000F30600000B000000FF0F0000000900000001000000100000C807000000000000FF0F0000000A000000010000001000009D08000000000000FF0F0000000B000000010000001000007209000000000000FE0F0000000C00000001000000100000470A000000000000F90F0000000D000000010000001000001C0B000000000000F50F0000000E00000001000000100000F10B000000000000F00F0000000F00000001000000100000C60C000000000000EC0F00000010000000010000001000009B0D000000000000E70F000000000000000200000010000076000000AA010000FF0F00000001000000020000001000004B0100009A010000FF0F00000002000000020000001000001F02000089010000FF0F0000000300000002000000100000F402000079010000FF0F0000000400000002000000100000C903000069010000FF0F00000005000000020000001000009E04000058010000FF0F00000006000000020000001000007305000048010000FF0F00000007000000020000001000004806000038010000FF0F00000008000000020000001000001D07000027010000FF0F0000000900000002000000100000F107000017010000FF0F0000000A00000002000000100000C608000006010000FF0F0000000B000000020000001000009B090000F6000000FF0F0000000C00000002000000100000700A0000E6000000FB0F0000000D00000002000000100000450B0000D5000000F70F0000000E000000020000001000001A0C0000C5000000F20F0000000F00000002000000100000EE0C0000B4000000ED0F0000001000000002000000100000C30D0000A4000000E80F0000000000000003000000100000A0000000C9020000FF0F000000010000000300000010000075010000B8020000FF0F00000002000000030000001000004A020000A8020000FF0F00000003000000030000001000001F03000097020000FF0F0000000400000003000000100000F303000086020000FF0F0000000500000003000000100000C804000075020000FF0F00000006000000030000001000009D05000064020000FF0F00000007000000030000001000007106000054020000FF0F00000008000000030000001000004607000043020000FF0F00000009000000030000001000001B08000032020000FF0F0000000A00000003000000100000F008000021020000FF0F0000000B00000003000000100000C409000011020000FF0F0000000C00000003000000100000990A000000020000FD0F0000000D000000030000001000006E0B0000EF010000F80F0000000E00000003000000100000430C0000DE010000F30F0000000F00000003000000100000170D0000CD010000EF0F0000001000000003000000100000EC0D0000BD010000EA0F0000000000000004000000100000CB000000E8030000FF0F0000000100000004000000100000A0010000D7030000FF0F000000020000000400000010000074020000C6030000FF0F000000030000000400000010000049030000B4030000FF0F00000004000000040000001000001E040000A3030000FF0F0000000500000004000000100000F204000092030000FF0F0000000600000004000000100000C705000081030000FF0F00000007000000040000001000009B06000070030000FF0F0000000800000004000000100000700700005F030000FF0F0000000900000004000000100000440800004D030000FF0F0000000A00000004000000100000190900003C030000FF0F0000000B00000004000000100000EE0900002B030000FF0F0000000C00000004000000100000C20A00001A030000FF0F0000000D00000004000000100000970B000009030000FA0F0000000E000000040000001000006B0C0000F8020000F50F0000000F00000004000000100000400D0000E6020000F00F0000001000000004000000100000150E0000D5020000EB0F0000000000000005000000100000F600000007050000FF0F0000000100000005000000100000CA010000F5040000FF0F00000002000000050000001000009F020000E4040000FF0F000000030000000500000010000073030000D2040000FF0F000000040000000500000010000048040000C1040000FF0F00000005000000050000001000001C050000AF040000FF0F0000000600000005000000100000F10500009D040000FF0F0000000700000005000000100000C50600008C040000FF0F00000008000000050000001000009A0700007A040000FF0F00000009000000050000001000006E08000069040000FF0F0000000A000000050000001000004309000057040000FF0F0000000B00000005000000100000170A000046040000FF0F0000000C00000005000000100000EB0A000034040000FF0F0000000D00000005000000100000C00B000023040000FC0F0000000E00000005000000100000940C000011040000F70F0000000F00000005000000100000690D0000FF030000F20F00000010000000050000001000003D0E0000EE030000EC0F00000000000000060000001000002101000026060000FF0F0000000100000006000000100000F501000014060000FF0F0000000200000006000000100000C902000002060000FF0F00000003000000060000001000009E030000F0050000FF0F000000040000000600000010000072040000DE050000FF0F000000050000000600000010000046050000CC050000FF0F00000006000000060000001000001B060000BA050000FF0F0000000700000006000000100000EF060000A8050000FF0F0000000800000006000000100000C307000096050000FF0F00000009000000060000001000009808000084050000FF0F0000000A000000060000001000006C09000072050000FF0F0000000B00000006000000100000400A000060050000FF0F0000000C00000006000000100000150B00004E050000FF0F0000000D00000006000000100000E90B00003C050000FE0F0000000E00000006000000100000BD0C00002A050000F80F0000000F00000006000000100000910D000018050000F30F0000001000000006000000100000660E000006050000EE0F00000000000000070000001000004C01000045070000FF0F00000001000000070000001000002002000032070000FF0F0000000200000007000000100000F402000020070000FF0F0000000300000007000000100000C80300000E070000FF0F00000004000000070000001000009C040000FB060000FF0F000000050000000700000010000070050000E9060000FF0F000000060000000700000010000045060000D7060000FF0F000000070000000700000010000019070000C4060000FF0F0000000800000007000000100000ED070000B2060000FF0F0000000900000007000000100000C10800009F060000FF0F0000000A00000007000000100000950900008D060000FF0F0000000B000000070000001000006A0A00007B060000FF0F0000000C000000070000001000003E0B000068060000FF0F0000000D00000007000000100000120C000056060000FF0F0000000E00000007000000100000E60C000044060000FA0F0000000F00000007000000100000BA0D000031060000F50F00000010000000070000001000008E0E00001F060000EF0F00000000000000080000001000007601000064080000FF0F00000001000000080000001000004A02000051080000FF0F00000002000000080000001000001E0300003E080000FF0F0000000300000008000000100000F20300002B080000FF0F0000000400000008000000100000C704000019080000FF0F00000005000000080000001000009B05000006080000FF0F00000006000000080000001000006F060000F3070000FF0F000000070000000800000010000043070000E0070000FF0F000000080000000800000010000017080000CE070000FF0F0000000900000008000000100000EB080000BB070000FF0F0000000A00000008000000100000BF090000A8070000FF0F0000000B00000008000000100000930A000095070000FF0F0000000C00000008000000100000670B000083070000FF0F0000000D000000080000001000003B0C000070070000FF0F0000000E000000080000001000000F0D00005D070000FC0F0000000F00000008000000100000E30D00004A070000F60F0000001000000008000000100000B70E000038070000F10F0000000000000009000000100000A101000083090000FF0F0000000100000009000000100000750200006F090000FF0F0000000200000009000000100000490300005C090000FF0F00000003000000090000001000001D04000049090000FF0F0000000400000009000000100000F104000036090000FF0F0000000500000009000000100000C505000023090000FF0F00000006000000090000001000009906000010090000FF0F00000007000000090000001000006C070000FC080000FF0F000000080000000900000010000040080000E9080000FF0F000000090000000900000010000014090000D6080000FF0F0000000A00000009000000100000E8090000C3080000FF0F0000000B00000009000000100000BC0A0000B0080000FF0F0000000C00000009000000100000900B00009D080000FF0F0000000D00000009000000100000640C00008A080000FF0F0000000E00000009000000100000380D000076080000FD0F0000000F000000090000001000000C0E000063080000F80F0000001000000009000000100000E00E000050080000F20F000000000000000A000000100000CC010000A10A0000FF0F000000010000000A000000100000A00200008E0A0000FF0F000000020000000A000000100000730300007A0A0000FF0F000000030000000A00000010000047040000670A0000FF0F000000040000000A0000001000001B050000530A0000FF0F000000050000000A000000100000EF050000400A0000FF0F000000060000000A000000100000C30600002C0A0000FF0F000000070000000A00000010000096070000190A0000FF0F000000080000000A0000001000006A080000050A0000FF0F000000090000000A0000001000003E090000F2090000FF0F0000000A0000000A000000100000120A0000DE090000FF0F0000000B0000000A000000100000E50A0000CA090000FF0F0000000C0000000A000000100000B90B0000B7090000FF0F0000000D0000000A0000001000008D0C0000A3090000FF0F0000000E0000000A000000100000610D000090090000FF0F0000000F0000000A000000100000340E00007C090000F90F000000100000000A000000100000080F000069090000F30F000000000000000B000000100000F7010000C00B0000FF0F000000010000000B000000100000CA020000AC0B0000FF0F000000020000000B0000001000009E030000980B0000FF0F000000030000000B00000010000072040000850B0000FF0F000000040000000B00000010000045050000710B0000FF0F000000050000000B000000100000190600005D0B0000FF0F000000060000000B000000100000ED060000490B0000FF0F000000070000000B000000100000C0070000350B0000FF0F000000080000000B00000010000094080000210B0000FF0F000000090000000B000000100000670900000D0B0000FF0F0000000A0000000B0000001000003B0A0000F90A0000FF0F0000000B0000000B0000001000000F0B0000E50A0000FF0F0000000C0000000B000000100000E20B0000D10A0000FF0F0000000D0000000B000000100000B60C0000BD0A0000FF0F0000000E0000000B0000001000008A0D0000A90A0000FF0F0000000F0000000B0000001000005D0E0000950A0000FB0F000000100000000B000000100000310F0000810A0000F50F000000000000000C00000010000021020000DF0C0000FF0F000000010000000C000000100000F5020000CB0C0000FF0F000000020000000C000000100000C8030000B70C0000FF0F000000030000000C0000001000009C040000A20C0000FF0F000000040000000C0000001000006F0500008E0C0000FF0F000000050000000C000000100000430600007A0C0000FF0F000000060000000C00000010000016070000650C0000FF0F000000070000000C000000100000EA070000510C0000FF0F000000080000000C000000100000BD0800003D0C0000FF0F000000090000000C00000010000091090000280C0000FF0F0000000A0000000C000000100000640A0000140C0000FF0F0000000B0000000C000000100000380B0000000C0000FF0F0000000C0000000C0000001000000C0C0000EB0B0000FF0F0000000D0000000C000000100000DF0C0000D70B0000FF0F0000000E0000000C000000100000B30D0000C30B0000FF0F0000000F0000000C000000100000860E0000AE0B0000FC0F000000100000000C0000001000005A0F00009A0B0000F60F000000000000000D0000001000004C020000FE0D0000FF0F000000010000000D00000010000020030000E90D0000FF0F000000020000000D000000100000F3030000D50D0000FF0F000000030000000D000000100000C6040000C00D0000FF0F000000040000000D0000001000009A050000AB0D0000FF0F000000050000000D0000001000006D060000970D0000FF0F000000060000000D00000010000040070000820D0000FF0F000000070000000D000000100000140800006D0D0000FF0F000000080000000D000000100000E7080000580D0000FF0F000000090000000D000000100000BB090000440D0000FF0F0000000A0000000D0000001000008E0A00002F0D0000FF0F0000000B0000000D000000100000610B00001A0D0000FF0F0000000C0000000D000000100000350C0000050D0000FF0F0000000D0000000D000000100000080D0000F10C0000FF0F0000000E0000000D000000100000DB0D0000DC0C0000FF0F0000000F0000000D000000100000AF0E0000C70C0000FE0F000000100000000D000000100000820F0000B20C0000F80F000000000000000E000000100000770200001D0F0000FF0F000000010000000E0000001000004A030000080F0000FF0F000000020000000E0000001000001D040000F30E0000FF0F000000030000000E000000100000F1040000DE0E0000FF0F000000040000000E000000100000C4050000C90E0000FF0F000000050000000E00000010000097060000B30E0000FF0F000000060000000E0000001000006A0700009E0E0000FF0F000000070000000E0000001000003E080000890E0000FF0F000000080000000E00000010000011090000740E0000FF0F000000090000000E000000100000E40900005F0E0000FF0F0000000A0000000E000000100000B70A00004A0E0000FF0F0000000B0000000E0000001000008B0B0000350E0000FF0F0000000C0000000E0000001000005E0C0000200E0000FF0F0000000D0000000E000000100000310D00000A0E0000FF0F0000000E0000000E000000100000040E0000F50D0000FF0F0000000F0000000E000000100000D80E0000E00D0000FF0F000000100000000E000000100000AB0F0000CB0D0000F90F000000000000000F000000100000A2020000FF0F0000FF0F000000010000000F00000010000075030000FF0F0000FF0F000000020000000F00000010000048040000FF0F0000FF0F000000030000000F0000001000001B050000FB0F0000FF0F000000040000000F000000100000EE050000E60F0000FF0F000000050000000F000000100000C1060000D00F0000FF0F000000060000000F00000010000094070000BB0F0000FF0F000000070000000F00000010000067080000A50F0000FF0F000000080000000F0000001000003B090000900F0000FF0F000000090000000F0000001000000E0A00007A0F0000FF0F0000000A0000000F000000100000E10A0000650F0000FF0F0000000B0000000F000000100000B40B00004F0F0000FF0F0000000C0000000F000000100000870C00003A0F0000FF0F0000000D0000000F0000001000005A0D0000240F0000FF0F0000000E0000000F0000001000002D0E00000F0F0000FF0F0000000F0000000F000000100000000F0000F90E0000FF0F000000100000000F000000100000D30F0000E40E0000FA0F0000000000000010000000100000CD020000FF0F0000FF0F0000000100000010000000100000A0030000FF0F0000FF0F000000020000001000000010000073040000FF0F0000FF0F000000030000001000000010000045050000FF0F0000FF0F000000040000001000000010000018060000FF0F0000FF0F0000000500000010000000100000EB060000FF0F0000FF0F0000000600000010000000100000BE070000FF0F0000FF0F000000070000001000000010000091080000FF0F0000FF0F000000080000001000000010000064090000FF0F0000FF0F0000000900000010000000100000370A0000FF0F0000FF0F0000000A000000100000001000000A0B0000FF0F0000FF0F0000000B00000010000000100000DD0B0000FF0F0000FF0F0000000C00000010000000100000B00C0000FF0F0000FF0F0000000D00000010000000100000830D0000FF0F0000FF0F0000000E00000010000000100000560E0000FF0F0000FF0F0000000F00000010000000100000290F0000FF0F0000FF0F0000001000000010000000100000FF0F0000FF0F0000FF0F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000410300000000000000000000000800000000000000000000830600000000000000000000000C00000000000000000000C40900000000000000000000001000000000000000000000060D00000000000000000000000000000004000000000000A60000007604000002000000000400000004000000000000EC0300001D0400000000000000080000000400000000000032070000C303000000000000000C00000004000000000000780A00006A03000000000000001000000004000000000000BE0D000010030000000000000000000000080000000000004C010000F108000007000000000400000008000000000000960400009108000000000000000800000008000000000000E10700003208000000000000000C000000080000000000002C0B0000D307000000000000001000000008000000000000770E0000740700000000000000000000000C000000000000F20100006B0D00000B00000000040000000C00000000000041050000060D00000000000000080000000C00000000000090080000A10C000000000000000C0000000C000000000000E00B00003C0C00000000000000100000000C0000000000002F0F0000D70B00000000000000000000001000000000000098020000FF0F00000F000000000400000010000000000000EC050000FF0F0000000000000008000000100000000000003F090000FF0F000000000000000C00000010000000000000930C0000FF0F000000000000001000000010000000000000E70F0000FF0F00000000000000000000000000000004000008000000000000000A0400000004000000000000000400004E03000000000000F00300000008000000000000000400009406000000000000D6030000000C00000000000000040000DB09000000000000BC030000001000000000000000040000210D000000000000A2030000000000000004000000040000AF000000530400001104000000040000000400000004000000040000000400000004000000080000000400000004000041070000AA030000E0030000000C000000040000000400008B0A000056030000C8030000001000000004000000040000D40D000002030000AF03000000000000000800000004000056010000CD08000017040000000400000008000000040000A20400007308000001040000000800000008000000040000EE07000019080000EA030000000C000000080000000400003B0B0000BF070000D3030000001000000008000000040000870E000065070000BD03000000000000000C000000040000FE010000480D00001E04000000040000000C0000000400004D050000E80C00000904000000080000000C0000000400009C080000880C0000F4030000000C0000000C000000040000EB0B0000280C0000DF03000000100000000C0000000400003A0F0000C80B0000CA030000000000000010000000040000A5020000FF0F000025040000000400000010000000040000F7050000FF0F00001204000000080000001000000004000049090000FF0F0000FE030000000C000000100000000400009B0C0000FF0F0000EB030000001000000010000000040000ED0F0000FF0F0000D70300000000000000000000000800001000000000000000150800000004000000000000000800005B03000000000000FE070000000800000000000000080000A606000000000000E7070000000C00000000000000080000F109000000000000D00700000010000000000000000800003C0D000000000000B9070000000000000004000000080000B80000002F0400001F08000000040000000400000008000005040000E0030000080800000008000000040000000800005107000091030000F1070000000C000000040000000800009D0A000042030000DA070000001000000004000000080000E90D0000F3020000C307000000000000000800000008000061010000AA08000028080000000400000008000000080000AE0400005508000012080000000800000008000000080000000800000008000000080000000C00000008000000080000490B0000AB070000E5070000001000000008000000080000970E000056070000CE07000000000000000C0000000800000A020000250D00003208000000040000000C00000008000058050000CA0C00001B08000000080000000C000000080000A70800006F0C000005080000000C0000000C000000080000F60B0000140C0000EF07000000100000000C000000080000440F0000B90B0000D9070000000000000010000000080000B2020000FF0F00003B08000000040000001000000008000002060000FF0F00002508000000080000001000000008000052090000FF0F00000F080000000C00000010000000080000A20C0000FF0F0000F9070000001000000010000000080000F20F0000FF0F0000E30700000000000000000000000C00001800000000000000210C00000004000000000000000C000068030000000000000D0C00000008000000000000000C0000B706000000000000F80B0000000C000000000000000C0000070A000000000000E40B00000010000000000000000C0000570D000000000000CF0B00000000000000040000000C0000C20000000C0400002D0C00000004000000040000000C000011040000C2030000180C00000008000000040000000C00006007000078030000020C0000000C000000040000000C0000B00A00002E030000ED0B00000010000000040000000C0000FF0D0000E4020000D70B00000000000000080000000C00006C01000087080000390C00000004000000080000000C0000BA04000037080000230C00000008000000080000000C000009080000E70700000C0C0000000C000000080000000C0000580B000097070000F60B00000010000000080000000C0000A70E000047070000DF0B000000000000000C0000000C000016020000020D0000450C000000040000000C0000000C000064050000AC0C00002D0C000000080000000C0000000C0000B2080000560C0000160C0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B000000100000000C0000000C00004F0F0000A90B0000E70B00000000000000100000000C0000BF020000FF0F0000510C00000004000000100000000C00000D060000FF0F0000380C00000008000000100000000C00005B090000FF0F0000200C0000000C000000100000000C0000A90C0000FF0F0000080C00000010000000100000000C0000F70F0000FF0F0000F00B00000000000000000000001000002000000000000000FF0F00000004000000000000001000007503000000000000FF0F0000000800000000000000100000C906000000000000FF0F0000000C000000000000001000001E0A000000000000F70F0000001000000000000000100000720D000000000000E50F0000000000000004000000100000CB000000E8030000FF0F00000004000000040000001000001E040000A3030000FF0F0000000800000004000000100000700700005F030000FF0F0000000C00000004000000100000C20A00001A030000FF0F0000001000000004000000100000150E0000D5020000EB0F00000000000000080000001000007601000064080000FF0F0000000400000008000000100000C704000019080000FF0F000000080000000800000010000017080000CE070000FF0F0000000C00000008000000100000670B000083070000FF0F0000001000000008000000100000B70E000038070000F10F000000000000000C00000010000021020000DF0C0000FF0F000000040000000C0000001000006F0500008E0C0000FF0F000000080000000C000000100000BD0800003D0C0000FF0F0000000C0000000C0000001000000C0C0000EB0B0000FF0F000000100000000C0000001000005A0F00009A0B0000F60F0000000000000010000000100000CD020000FF0F0000FF0F000000040000001000000010000018060000FF0F0000FF0F000000080000001000000010000064090000FF0F0000FF0F0000000C00000010000000100000B00C0000FF0F0000FF0F0000001000000010000000100000FF0F0000FF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000500000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000002C0000003C00000048000000520000005B000000630000006A00000071000000770000007D00000082000000880000008D00000091000000960000009B0000009F000000A3000000A7000000AB000000AF000000B3000000B6000000BA000000BD000000C1000000C4000000C7000000CB000000CE000000D1000000D4000000D7000000DA000000DD000000DF000000E2000000E5000000E8000000EA000000ED000000F0000000F2000000F5000000F7000000FA000000FC000000FF000000010100000301000006010000080100000A0100000D0100000F010000110100001301000016010000180100001A0100001C0100001E01000020010000220100002401000026010000280100002A0100002C0100002E01000030010000320100003401000036010000380100003A0100003C0100003E0100003F01000041010000430100004501000047010000480100004A0100004C0100004E0100004F01000051010000530100005501000056010000580100005A0100005B0100005D0100005F0100006001000062010000640100006501000067010000680100006A0100006B0100006D0100006F010000700100007201000073010000750100007601000078010000790100007B0100007C0100007E0100007F010000810100008201000084010000850100008701000088010000890100008B0100008C0100008E0100008F010000910100009201000093010000950100009601000097010000990100009A0100009C0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A6010000A8010000A9010000AA010000AB010000AD010000AE010000AF010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BB010000BC010000BD010000BE010000C0010000C1010000C2010000C3010000C4010000C6010000C7010000C8010000C9010000CA010000CC010000CD010000CE010000CF010000D0010000D2010000D3010000D4010000D5010000D6010000D7010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003F02000040020000410200004202000043020000440200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004C0200004D0200004E0200004F0200005002000051020000520200005302000053020000540200005502000056020000570200005802000059020000590200005A0200005B0200005C0200005D0200005E0200005F0200005F02000060020000610200006202000063020000640200006502000065020000660200006702000068020000690200006A0200006A0200006B0200006C0200006D0200006E0200006F0200006F0200007002000071020000720200007302000073020000740200007502000076020000770200007802000078020000790200007A0200007B0200007C0200007C0200007D0200007E0200007F020000800200008002000081020000820200008302000084020000840200008502000086020000870200008702000088020000890200008A0200008B0200008B0200008C0200008D0200008E0200008F0200008F020000900200009102000092020000920200009302000094020000950200009502000096020000970200009802000099020000990200009A0200009B0200009C0200009C0200009D0200009E0200009F0200009F020000A0020000A1020000A2020000A2020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B5020000B6020000B6020000B7020000B8020000B8020000B9020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C4020000C5020000C5020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CC020000CC020000CD020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D3020000D3020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E1020000E2020000E2020000E3020000E4020000E4020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000EA020000EA020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000EF020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FB020000FB020000FC020000FD020000FD020000FE020000FE020000FF020000000300000003000001030000020300000203000003030000040300000403000005030000050300000603000007030000070300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F030000100300001003000011030000110300001203000013030000130300001403000015030000150300001603000016030000170300001803000018030000190300001A0300001A0300001B0300001B0300001C0300001D0300001D0300001E0300001E0300001F03000020030000200300002103000021030000220300002303000023030000240300002503000025030000260300002603000027030000280300002803000029030000290300002A0300002B0300002B0300002C0300002C0300002D0300002E0300002E0300002F0300002F03000030030000310300003103000032030000320300003303000034030000340300003503000035030000360300003603000037030000380300003803000039030000390300003A0300003B0300003B0300003C0300003C0300003D0300003E0300003E0300003F0300003F03000040030000400300004103000042030000420300004303000043030000440300004403000045030000460300004603000047030000470300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004D0300004D0300004E0300004E0300004F0300004F03000050030000510300005103000052030000520300005303000053030000540300005503000055030000560300005603000057030000570300005803000058030000590300005A0300005A0300005B0300005B0300005C0300005C0300005D0300005E0300005E0300005F0300005F0300006003000060030000610300006103000062030000630300006303000064030000640300006503000065030000660300006603000067030000670300006803000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000072030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F030000800300008003000081030000810300008203000083030000830300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F030000900300009003000091030000910300009203000092030000930300009303000094030000940300009503000095030000960300009603000097030000970300009803000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D6030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E6030000E7030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EE030000EF030000EF030000F0030000F0030000F1030000F1030000F2030000F2030000F3030000F3030000F4030000F4030000F4030000F5030000F5030000F6030000F6030000F7030000F7030000F8030000F8030000F9030000F9030000FA030000FA030000FA030000FB030000FB030000FC030000FC030000FD030000FD030000FE030000FE030000FF030000FF030000000000002800000037000000430000004C000000540000005B00000062000000680000006E00000073000000780000007D00000082000000860000008A0000008E00000092000000960000009A0000009E000000A1000000A5000000A8000000AB000000AE000000B2000000B5000000B8000000BB000000BE000000C0000000C3000000C6000000C9000000CB000000CE000000D0000000D3000000D6000000D8000000DA000000DD000000DF000000E2000000E4000000E6000000E8000000EB000000ED000000EF000000F1000000F3000000F5000000F8000000FA000000FC000000FE00000000010000020100000401000006010000080100000A0100000B0100000D0100000F01000011010000130100001501000017010000180100001A0100001C0100001E0100001F01000021010000230100002501000026010000280100002A0100002B0100002D0100002F0100003001000032010000330100003501000037010000380100003A0100003B0100003D0100003E010000400100004201000043010000450100004601000048010000490100004B0100004C0100004D0100004F010000500100005201000053010000550100005601000057010000590100005A0100005C0100005D0100005E01000060010000610100006301000064010000650100006701000068010000690100006B0100006C0100006D0100006E01000070010000710100007201000074010000750100007601000077010000790100007A0100007B0100007C0100007E0100007F01000080010000810100008301000084010000850100008601000087010000890100008A0100008B0100008C0100008D0100008F0100009001000091010000920100009301000094010000960100009701000098010000990100009A0100009B0100009C0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FC010000FD010000FE010000FF0100000002000001020000020200000302000003020000040200000502000006020000070200000802000009020000090200000A0200000B0200000C0200000D0200000E0200000E0200000F0200001002000011020000120200001302000013020000140200001502000016020000170200001802000018020000190200001A0200001B0200001C0200001D0200001D0200001E0200001F020000200200002102000021020000220200002302000024020000250200002502000026020000270200002802000029020000290200002A0200002B0200002C0200002D0200002D0200002E0200002F020000300200003102000031020000320200003302000034020000340200003502000036020000370200003802000038020000390200003A0200003B0200003B0200003C0200003D0200003E0200003E0200003F020000400200004102000041020000420200004302000044020000440200004502000046020000470200004702000048020000490200004A0200004A0200004B0200004C0200004D0200004D0200004E0200004F02000050020000500200005102000052020000520200005302000054020000550200005502000056020000570200005802000058020000590200005A0200005A0200005B0200005C0200005D0200005D0200005E0200005F0200005F02000060020000610200006202000062020000630200006402000064020000650200006602000066020000670200006802000069020000690200006A0200006B0200006B0200006C0200006D0200006D0200006E0200006F0200006F02000070020000710200007202000072020000730200007402000074020000750200007602000076020000770200007802000078020000790200007A0200007A0200007B0200007C0200007C0200007D0200007E0200007E0200007F0200008002000080020000810200008202000082020000830200008402000084020000850200008602000086020000870200008802000088020000890200008A0200008A0200008B0200008C0200008C0200008D0200008E0200008E0200008F0200008F0200009002000091020000910200009202000093020000930200009402000095020000950200009602000097020000970200009802000098020000990200009A0200009A0200009B0200009C0200009C0200009D0200009E0200009E0200009F0200009F020000A0020000A1020000A1020000A2020000A3020000A3020000A4020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000A9020000A9020000AA020000AB020000AB020000AC020000AD020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B1020000B2020000B3020000B3020000B4020000B4020000B5020000B6020000B6020000B7020000B7020000B8020000B9020000B9020000BA020000BA020000BB020000BC020000BC020000BD020000BD020000BE020000BF020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C6020000C7020000C8020000C8020000C9020000C9020000CA020000CA020000CB020000CC020000CC020000CD020000CD020000CE020000CF020000CF020000D0020000D0020000D1020000D1020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E4020000E5020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000E9020000EA020000EA020000EB020000EB020000EC020000ED020000ED020000EE020000EE020000EF020000EF020000F0020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F4020000F5020000F5020000F6020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FB020000FB020000FC020000FC020000FD020000FD020000FE020000FF020000FF020000000300000003000001030000010300000203000002030000030300000303000004030000040300000503000005030000060300000703000007030000080300000803000009030000090300000A0300000A0300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000F0300000F030000100300001103000011030000120300001203000013030000130300001403000014030000150300001503000016030000160300001703000017030000180300001803000019030000190300001A0300001A0300001B0300001B0300001C0300001C0300001D0300001D0300001E0300001E0300001F0300001F030000200300002003000021030000220300002203000023030000230300002403000024030000250300002503000026030000260300002703000027030000280300002803000029030000290300002A0300002A0300002B0300002B0300002C0300002C0300002D0300002D0300002E0300002E0300002F0300002F03000030030000300300003103000031030000320300003203000033030000330300003403000034030000350300003503000036030000360300003703000037030000380300003803000039030000390300003A0300003A0300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003E0300003F0300003F03000040030000400300004103000041030000420300004203000043030000430300004403000044030000450300004503000046030000460300004703000047030000480300004803000049030000490300004A0300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000050030000510300005103000052030000520300005303000053030000540300005403000054030000550300005503000056030000560300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005C0300005C0300005C0300005D0300005D0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000630300006303000063030000640300006403000065030000650300006603000066030000670300006703000068030000680300006903000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000072030000730300007303000073030000740300007403000075030000750300007603000076030000770300007703000078030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F03000080030000800300008003000081030000810300008203000082030000830300008303000084030000840300008403000085030000850300008603000086030000870300008703000088030000880300008803000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F0300008F03000090030000900300009103000091030000920300009203000092030000930300009303000094030000940300009503000095030000960300009603000096030000970300009703000098030000980300009903000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A5030000A6030000A6030000A7030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AD030000AE030000AE030000AF030000000000002B0000003B00000047000000510000005A00000062000000690000006F000000750000007B00000081000000860000008B0000009000000094000000990000009D000000A1000000A5000000A9000000AD000000B0000000B4000000B7000000BB000000BE000000C2000000C5000000C8000000CB000000CE000000D1000000D4000000D7000000DA000000DD000000DF000000E2000000E5000000E7000000EA000000ED000000EF000000F2000000F4000000F7000000F9000000FB000000FE00000000010000020100000501000007010000090100000C0100000E01000010010000120100001401000016010000180100001A0100001D0100001F01000021010000230100002501000027010000290100002A0100002C0100002E01000030010000320100003401000036010000380100003A0100003B0100003D0100003F0100004101000043010000440100004601000048010000490100004B0100004D0100004F0100005001000052010000540100005501000057010000590100005A0100005C0100005D0100005F0100006101000062010000640100006501000067010000680100006A0100006C0100006D0100006F010000700100007201000073010000750100007601000078010000790100007A0100007C0100007D0100007F010000800100008201000083010000850100008601000087010000890100008A0100008B0100008D0100008E01000090010000910100009201000094010000950100009601000098010000990100009A0100009C0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A6010000A7010000A9010000AA010000AB010000AC010000AE010000AF010000B0010000B1010000B3010000B4010000B5010000B6010000B8010000B9010000BA010000BB010000BC010000BE010000BF010000C0010000C1010000C2010000C4010000C5010000C6010000C7010000C8010000C9010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F02000010020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F02000020020000210200002202000023020000240200002502000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F02000030020000310200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003F0200004002000041020000420200004202000043020000440200004502000046020000470200004802000048020000490200004A0200004B0200004C0200004D0200004E0200004F0200004F0200005002000051020000520200005302000054020000540200005502000056020000570200005802000059020000590200005A0200005B0200005C0200005D0200005E0200005E0200005F0200006002000061020000620200006302000063020000640200006502000066020000670200006802000068020000690200006A0200006B0200006C0200006C0200006D0200006E0200006F020000700200007002000071020000720200007302000074020000740200007502000076020000770200007802000078020000790200007A0200007B0200007B0200007C0200007D0200007E0200007F0200007F020000800200008102000082020000820200008302000084020000850200008602000086020000870200008802000089020000890200008A0200008B0200008C0200008C0200008D0200008E0200008F0200008F020000900200009102000092020000920200009302000094020000950200009502000096020000970200009802000098020000990200009A0200009B0200009B0200009C0200009D0200009E0200009E0200009F020000A0020000A1020000A1020000A2020000A3020000A3020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B5020000B5020000B6020000B7020000B7020000B8020000B9020000BA020000BA020000BB020000BC020000BC020000BD020000BE020000BE020000BF020000C0020000C1020000C1020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CB020000CC020000CD020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D2020000D3020000D4020000D4020000D5020000D6020000D6020000D7020000D8020000D8020000D9020000DA020000DA020000DB020000DC020000DC020000DD020000DE020000DE020000DF020000DF020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E5020000E5020000E6020000E7020000E7020000E8020000E9020000E9020000EA020000EB020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000F0020000F0020000F1020000F2020000F2020000F3020000F4020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FB020000FC020000FC020000FD020000FE020000FE020000FF02000000030000000300000103000001030000020300000303000003030000040300000403000005030000060300000603000007030000080300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F03000010030000100300001103000011030000120300001303000013030000140300001403000015030000160300001603000017030000170300001803000019030000190300001A0300001A0300001B0300001C0300001C0300001D0300001D0300001E0300001F0300001F03000020030000200300002103000022030000220300002303000023030000240300002403000025030000260300002603000027030000270300002803000029030000290300002A0300002A0300002B0300002C0300002C0300002D0300002D0300002E0300002E0300002F0300003003000030030000310300003103000032030000330300003303000034030000340300003503000035030000360300003703000037030000380300003803000039030000390300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003F0300003F0300004003000040030000410300004103000042030000420300004303000044030000440300004503000045030000460300004603000047030000480300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000050030000510300005203000052030000530300005303000054030000540300005503000055030000560300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005C0300005D0300005D0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000630300006403000064030000650300006503000066030000660300006703000067030000680300006803000069030000690300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000073030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007C0300007D0300007E0300007E0300007F0300007F03000080030000800300008103000081030000820300008203000083030000830300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F030000900300009103000091030000920300009203000093030000930300009403000094030000950300009503000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000B9030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CC030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E5030000E6030000E6030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EA030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EF030000EF030000EF030000F0030000F0030000F1030000F1030000F2030000F2030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000005000000050000000500000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="3" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="sRGB" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" ColorGamut="srgb" DynamicRange="sdr" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ </Disp_Modes>
+ <Luts NumLuts="1">
+ <Lut Type="0" NumPackets="41">ECFFFFFF0000803F936F163FDA1AB13DEDFFFFFF0000803F87501D3FB9530A3EEEFFFFFF0000803FAAEE213FD1912C3EEFFFFFFF0000803F8CBC283F8C82603EF0FFFFFF0000803F473C2D3FD1E9813EF1FFFFFF0000803F5C02343FFE0E9D3EF2FFFFFF0000803F6E6E383FE04DAF3EF3FFFFFF0000803F31093F3F3C16CB3EF4FFFFFF0000803F3960433F73BDDD3EF5FFFFFF0000803F91D5493F6519FA3EF6FFFFFF0000803F840E4E3F957E063FF7FFFFFF0000803F1B62543FCEDF143FF8FFFFFF0000803F828C583F90871E3FF9FFFFFF0000803FF2B65E3F1A182D3FFAFFFFFF0000803FE7C4623FABCE363FFBFFFFFF0000803FD7BE683F8E5A453FFCFFFFFF0000803F41B66C3FD6194F3FFDFFFFFF0000803F1E8A723F8AAC5D3FFEFFFFFF0000803F516B763F6475673FFFFFFFFF0000803F8A227C3FB41E763F000000000000803F0000803F0000803F01000000836B723F6189773F0000803F02000000BF0C6A3F484E723F0000803F03000000CD945E3F191E6B3F0000803F04000000B988573FEFAB663F0000803F0500000084D44D3F5E81603F0000803F0600000045D9473FEBAA5C3F0000803F07000000CA883F3F2651573F0000803F080000005C593A3FADFB533F0000803F09000000802D333F05514F3F0000803F0A00000083C02E3FC3624C3F0000803F0B0000005986283FE04C483F0000803F0C0000008C9D243F18B3453F0000803F0D000000431C1F3F8909423F0000803F0E000000ABB21B3FE4C03F3F0000803F0F0000003DD4163FC07A3C3F0000803F1000000009C0133FE4683A3F0000803F110000008A740F3FF27B373F0000803F1200000039B80C3FCB9D353F0000803F130000005DDE083FBAF9323F0000803F140000009467063F3448313F0000803F</Lut>
+ </Luts>
+</Calib_Data>
diff --git a/config/qdcm_calib_data_default.xml b/config/qdcm_calib_data_default.xml
new file mode 100644
index 0000000..a99197c
--- /dev/null
+++ b/config/qdcm_calib_data_default.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" ?>
+<!--
+Copyright (c) 2019, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+-->
+<Calib_Data>
+ <Disp_Modes NumModes="4" DefaultMode="0">
+ <Mode ModeID="0" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="native" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="native">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="1" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="HDR" NumOfFeatures="15" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="hdr" ColorGamut="dcip3" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000D90000000000000000000000000200000000000000000000B201000000000000000000000003000000000000000000008C02000000000000000000000004000000000000000000006503000000000000000000000005000000000000000000003F0400000000000000000000000600000000000000000000190500000000000000000000000700000000000000000000F30500000000000000000000000800000000000000000000CD0600000000000000000000000900000000000000000000A60700000000000000000000000A000000000000000000007F0800000000000000000000000B00000000000000000000580900000000000000000000000C00000000000000000000310A00000000000000000000000D00000000000000000000080B00000000000000000000000E00000000000000000000DF0B00000000000000000000000F00000000000000000000B60C000000000000000000000010000000000000000000008B0D00000000000000000000000000000001000000000000270000002A01000000000000000100000001000000000000FF0000001301000000000000000200000001000000000000D8010000FE00000000000000000300000001000000000000B2020000E8000000000000000004000000010000000000008B030000D40000000000000000050000000100000000000065040000C0000000000000000006000000010000000000003F050000AD00000000000000000700000001000000000000180600009A00000000000000000800000001000000000000F20600008800000000000000000900000001000000000000CB0700007700000000000000000A00000001000000000000A40800006600000000000000000B000000010000000000007D0900005500000000000000000C00000001000000000000550A00004500000000000000000D000000010000000000002D0B00003600000000000000000E00000001000000000000030C00002700000000000000000F00000001000000000000DA0C00001900000000000000001000000001000000000000AF0D00000B000000000000000000000000020000000000004E0000005102000000000000000100000002000000000000270100003A02000000000000000200000002000000000000FF0100002302000000000000000300000002000000000000D90200000E02000000000000000400000002000000000000B2030000F9010000000000000005000000020000000000008B040000E40100000000000000060000000200000000000065050000D0010000000000000007000000020000000000003E060000BD0100000000000000080000000200000000000018070000AB01000000000000000900000002000000000000F10700009901000000000000000A00000002000000000000CA0800008701000000000000000B00000002000000000000A20900007601000000000000000C000000020000000000007A0A00006601000000000000000D00000002000000000000520B00005601000000000000000E00000002000000000000290C00004701000000000000000F00000002000000000000FF0C00003801000000000000001000000002000000000000D40D00002A010000000000000000000000030000000000007700000075030000000000000001000000030000000000004F0100005D03000000000000000200000003000000000000270200004603000000000000000300000003000000000000000300003003000000000000000400000003000000000000DA0300001A03000000000000000500000003000000000000B304000006030000000000000006000000030000000000008C050000F10200000000000000070000000300000000000066060000DE020000000000000008000000030000000000003F070000CA0200000000000000090000000300000000000018080000B802000000000000000A00000003000000000000F1080000A602000000000000000B00000003000000000000C90900009402000000000000000C00000003000000000000A10A00008402000000000000000D00000003000000000000780B00007302000000000000000E000000030000000000004F0C00006302000000000000000F00000003000000000000240D00005402000000000000001000000003000000000000F90D00004502000000000000000000000004000000000000A00000009704000000000000000100000004000000000000780100007E04000000000000000200000004000000000000500200006704000000000000000300000004000000000000290300005004000000000000000400000004000000000000020400003A04000000000000000500000004000000000000DB0400002504000000000000000600000004000000000000B505000010040000000000000007000000040000000000008E060000FC0300000000000000080000000400000000000067070000E80300000000000000090000000400000000000040080000D503000000000000000A0000000400000000000018090000C203000000000000000B00000004000000000000F0090000B003000000000000000C00000004000000000000C80A00009F03000000000000000D000000040000000000009F0B00008E03000000000000000E00000004000000000000750C00007E03000000000000000F000000040000000000004B0D00006E03000000000000001000000004000000000000200E00005F03000000000000000000000005000000000000CA000000B705000000000000000100000005000000000000A20100009E050000000000000002000000050000000000007A0200008605000000000000000300000005000000000000530300006F050000000000000004000000050000000000002C0400005805000000000000000500000005000000000000040500004205000000000000000600000005000000000000DE0500002D05000000000000000700000005000000000000B706000018050000000000000008000000050000000000008F070000040500000000000000090000000500000000000068080000F004000000000000000A0000000500000000000040090000DD04000000000000000B00000005000000000000180A0000CB04000000000000000C00000005000000000000F00A0000B904000000000000000D00000005000000000000C70B0000A704000000000000000E000000050000000000009D0C00009604000000000000000F00000005000000000000720D00008604000000000000001000000005000000000000470E00007604000000000000000000000006000000000000F4000000D506000000000000000100000006000000000000CC010000BC06000000000000000200000006000000000000A4020000A4060000000000000003000000060000000000007D0300008C060000000000000004000000060000000000005504000075060000000000000005000000060000000000002E0500005E06000000000000000600000006000000000000070600004806000000000000000700000006000000000000E00600003306000000000000000800000006000000000000B90700001E06000000000000000900000006000000000000910800000A06000000000000000A0000000600000000000069090000F705000000000000000B00000006000000000000410A0000E405000000000000000C00000006000000000000180B0000D105000000000000000D00000006000000000000EF0B0000BF05000000000000000E00000006000000000000C50C0000AE05000000000000000F000000060000000000009A0D00009D050000000000000010000000060000000000006F0E00008C0500000000000000000000000700000000000020010000F307000000000000000100000007000000000000F7010000DA07000000000000000200000007000000000000CF020000C107000000000000000300000007000000000000A7030000A807000000000000000400000007000000000000800400009107000000000000000500000007000000000000590500007A070000000000000006000000070000000000003106000063070000000000000007000000070000000000000A0700004D07000000000000000800000007000000000000E20700003807000000000000000900000007000000000000BB0800002307000000000000000A00000007000000000000930900000F07000000000000000B000000070000000000006A0A0000FC06000000000000000C00000007000000000000410B0000E906000000000000000D00000007000000000000180C0000D606000000000000000E00000007000000000000EE0C0000C406000000000000000F00000007000000000000C30D0000B306000000000000001000000007000000000000970E0000A2060000000000000000000000080000000000004B010000110900000000000000010000000800000000000023020000F708000000000000000200000008000000000000FA020000DD08000000000000000300000008000000000000D3030000C408000000000000000400000008000000000000AB040000AC080000000000000005000000080000000000008305000095080000000000000006000000080000000000005C0600007E080000000000000007000000080000000000003407000067080000000000000008000000080000000000000D0800005208000000000000000900000008000000000000E50800003C08000000000000000A00000008000000000000BD0900002808000000000000000B00000008000000000000940A00001408000000000000000C000000080000000000006B0B00000008000000000000000D00000008000000000000410C0000ED07000000000000000E00000008000000000000170D0000DB07000000000000000F00000008000000000000EC0D0000C907000000000000001000000008000000000000C00E0000B707000000000000000000000009000000000000770100002F0A0000000000000001000000090000000000004F020000140A00000000000000020000000900000000000026030000FA09000000000000000300000009000000000000FE030000E109000000000000000400000009000000000000D6040000C809000000000000000500000009000000000000AF050000B0090000000000000006000000090000000000008706000098090000000000000007000000090000000000005F0700008209000000000000000800000009000000000000370800006B090000000000000009000000090000000000000F0900005609000000000000000A00000009000000000000E70900004009000000000000000B00000009000000000000BE0A00002C09000000000000000C00000009000000000000950B00001809000000000000000D000000090000000000006B0C00000409000000000000000E00000009000000000000400D0000F108000000000000000F00000009000000000000150E0000DF08000000000000001000000009000000000000E90E0000CD0800000000000000000000000A000000000000A40100004D0B00000000000000010000000A0000000000007B020000320B00000000000000020000000A00000000000052030000180B00000000000000030000000A0000000000002A040000FE0A00000000000000040000000A00000000000002050000E40A00000000000000050000000A000000000000DA050000CC0A00000000000000060000000A000000000000B2060000B40A00000000000000070000000A0000000000008A0700009C0A00000000000000080000000A00000000000062080000860A00000000000000090000000A0000000000003A0900006F0A000000000000000A0000000A000000000000110A00005A0A000000000000000B0000000A000000000000E80A0000450A000000000000000C0000000A000000000000BF0B0000300A000000000000000D0000000A000000000000950C00001C0A000000000000000E0000000A0000000000006A0D0000090A000000000000000F0000000A0000000000003F0E0000F60900000000000000100000000A000000000000130F0000E30900000000000000000000000B000000000000D00100006D0C00000000000000010000000B000000000000A7020000510C00000000000000020000000B0000000000007E030000360C00000000000000030000000B000000000000560400001C0C00000000000000040000000B0000000000002E050000020C00000000000000050000000B00000000000006060000E90B00000000000000060000000B000000000000DE060000D00B00000000000000070000000B000000000000B5070000B90B00000000000000080000000B0000000000008D080000A10B00000000000000090000000B000000000000650900008A0B000000000000000A0000000B0000000000003C0A0000740B000000000000000B0000000B000000000000130B00005F0B000000000000000C0000000B000000000000E90B00004A0B000000000000000D0000000B000000000000BF0C0000350B000000000000000E0000000B000000000000940D0000210B000000000000000F0000000B000000000000690E00000D0B00000000000000100000000B0000000000003C0F0000FA0A00000000000000000000000C000000000000FD0100008F0D00000000000000010000000C000000000000D3020000720D00000000000000020000000C000000000000AB030000570D00000000000000030000000C000000000000820400003C0D00000000000000040000000C0000000000005A050000210D00000000000000050000000C00000000000031060000080D00000000000000060000000C00000000000009070000EF0C00000000000000070000000C000000000000E1070000D60C00000000000000080000000C000000000000B8080000BE0C00000000000000090000000C00000000000090090000A70C000000000000000A0000000C000000000000670A0000900C000000000000000B0000000C0000000000003E0B00007A0C000000000000000C0000000C000000000000140C0000650C000000000000000D0000000C000000000000E90C0000500C000000000000000E0000000C000000000000BE0D00003B0C000000000000000F0000000C000000000000930E0000270C00000000000000100000000C000000000000660F0000130C00000000000000000000000D00000000000029020000B20E00000000000000010000000D00000000000000030000950E00000000000000020000000D000000000000D7030000790E00000000000000030000000D000000000000AE0400005E0E00000000000000040000000D00000000000085050000430E00000000000000050000000D0000000000005D060000290E00000000000000060000000D000000000000350700000F0E00000000000000070000000D0000000000000C080000F60D00000000000000080000000D000000000000E4080000DE0D00000000000000090000000D000000000000BB090000C60D000000000000000A0000000D000000000000920A0000AF0D000000000000000B0000000D000000000000680B0000980D000000000000000C0000000D0000000000003E0C0000820D000000000000000D0000000D000000000000140D00006C0D000000000000000E0000000D000000000000E90D0000570D000000000000000F0000000D000000000000BD0E0000430D00000000000000100000000D000000000000900F00002F0D00000000000000000000000E00000000000056020000D90F00000200000000010000000E0000000000002C030000BB0F00000000000000020000000E000000000000030400009F0F00000000000000030000000E000000000000DA040000820F00000000000000040000000E000000000000B1050000670F00000000000000050000000E000000000000890600004C0F00000000000000060000000E00000000000060070000320F00000000000000070000000E00000000000037080000190F00000000000000080000000E0000000000000F090000000F00000000000000090000000E000000000000E6090000E80E000000000000000A0000000E000000000000BC0A0000D00E000000000000000B0000000E000000000000930B0000B90E000000000000000C0000000E000000000000690C0000A20E000000000000000D0000000E0000000000003E0D00008C0E000000000000000E0000000E000000000000130E0000760E000000000000000F0000000E000000000000E60E0000610E00000000000000100000000E000000000000B90F00004C0E00000000000000000000000F00000000000082020000FF0F00000500000000010000000F00000000000058030000FF0F00000000000000020000000F0000000000002F040000FF0F00000000000000030000000F00000000000006050000FF0F00000000000000040000000F000000000000DD050000FF0F00000000000000050000000F000000000000B4060000FF0F00000000000000060000000F0000000000008B070000FF0F00000000000000070000000F00000000000062080000FF0F00000000000000080000000F0000000000003A090000FF0F00000000000000090000000F000000000000100A0000FF0F000000000000000A0000000F000000000000E70A0000F40F000000000000000B0000000F000000000000BD0B0000DC0F000000000000000C0000000F000000000000930C0000C50F000000000000000D0000000F000000000000680D0000AE0F000000000000000E0000000F0000000000003C0E0000980F000000000000000F0000000F000000000000100F0000830F00000000000000100000000F000000000000E30F00006D0F000000000000000000000010000000000000AE020000FF0F00000700000000010000001000000000000084030000FF0F0000000000000002000000100000000000005B040000FF0F00000000000000030000001000000000000031050000FF0F00000000000000040000001000000000000008060000FF0F000000000000000500000010000000000000DF060000FF0F000000000000000600000010000000000000B6070000FF0F0000000000000007000000100000000000008D080000FF0F00000000000000080000001000000000000064090000FF0F0000000000000009000000100000000000003B0A0000FF0F000000000000000A00000010000000000000110B0000FF0F000000000000000B00000010000000000000E70B0000FF0F000000000000000C00000010000000000000BD0C0000FF0F000000000000000D00000010000000000000920D0000FF0F000000000000000E00000010000000000000660E0000FF0F000000000000000F00000010000000000000390F0000FF0F000000000000001000000010000000000000FF0F0000FF0F000000000000000000000000000000010000030000000000000010010000000100000000000000010000DC0000000000000003010000000200000000000000010000B501000000000000F80000000003000000000000000100008E02000000000000EF0000000004000000000000000100006803000000000000E70000000005000000000000000100004204000000000000E00000000006000000000000000100001B05000000000000DA000000000700000000000000010000F505000000000000D5000000000800000000000000010000CF06000000000000D1000000000900000000000000010000A807000000000000CD000000000A000000000000000100008108000000000000CA000000000B000000000000000100005A09000000000000C8000000000C00000000000000010000320A000000000000C5000000000D000000000000000100000A0B000000000000C3000000000E00000000000000010000E10B000000000000C0000000000F00000000000000010000B70C000000000000BD0000000010000000000000000100008C0D000000000000BA0000000000000000010000000100002A000000190100000B0100000001000000010000000100000201000003010000FF000000000200000001000000010000DB010000ED000000F4000000000300000001000000010000B4020000D8000000EB0000000004000000010000000100008E030000C4000000E300000000050000000100000001000067040000B0000000DC000000000600000001000000010000410500009D000000D60000000007000000010000000100001A0600008A000000D2000000000800000001000000010000F406000078000000CE000000000900000001000000010000CD07000067000000CA000000000A00000001000000010000A608000056000000C7000000000B000000010000000100007E09000045000000C5000000000C00000001000000010000560A000036000000C2000000000D000000010000000100002E0B000026000000C0000000000E00000001000000010000050C000018000000BD000000000F00000001000000010000DB0C000009000000BB000000001000000001000000010000B00D000000000000B80000000000000000020000000100005100000040020000080100000001000000020000000100002A01000029020000FC0000000002000000020000000100000202000012020000F1000000000300000002000000010000DB020000FD010000E8000000000400000002000000010000B4030000E8010000E00000000005000000020000000100008E040000D4010000D900000000060000000200000001000067050000C0010000D400000000070000000200000001000041060000AD010000CF0000000008000000020000000100001A0700009A010000CB000000000900000002000000010000F307000088010000C8000000000A00000002000000010000CC08000077010000C5000000000B00000002000000010000A409000066010000C3000000000C000000020000000100007C0A000056010000C0000000000D00000002000000010000530B000046010000BE000000000E000000020000000100002A0C000037010000BC000000000F00000002000000010000FF0C000028010000B9000000001000000002000000010000D40D00001A010000B60000000000000000030000000100007A0000006303000006010000000100000003000000010000520100004C030000FA0000000002000000030000000100002A02000035030000EF000000000300000003000000010000030300001F030000E6000000000400000003000000010000DC03000009030000DE000000000500000003000000010000B5040000F5020000D80000000006000000030000000100008F050000E0020000D200000000070000000300000001000068060000CD020000CD00000000080000000300000001000041070000BA020000CA0000000009000000030000000100001A080000A7020000C6000000000A00000003000000010000F208000095020000C4000000000B00000003000000010000CA09000084020000C1000000000C00000003000000010000A20A000073020000BF000000000D00000003000000010000790B000063020000BD000000000E00000003000000010000500C000053020000BB000000000F00000003000000010000250D000044020000B8000000001000000003000000010000FA0D000035020000B5000000000000000004000000010000A300000085040000040100000001000000040000000100007B0100006D040000F80000000002000000040000000100005302000055040000EE0000000003000000040000000100002C0300003F040000E50000000004000000040000000100000504000029040000DD000000000500000004000000010000DE04000013040000D6000000000600000004000000010000B7050000FF030000D100000000070000000400000001000090060000EA030000CD00000000080000000400000001000069070000D7030000C900000000090000000400000001000041080000C4030000C6000000000A000000040000000100001A090000B1030000C3000000000B00000004000000010000F2090000A0030000C1000000000C00000004000000010000C90A00008E030000BF000000000D00000004000000010000A00B00007E030000BD000000000E00000004000000010000760C00006D030000BB000000000F000000040000000100004C0D00005D030000B8000000001000000004000000010000200E00004E030000B5000000000000000005000000010000CD000000A405000003010000000100000005000000010000A50100008C050000F70000000002000000050000000100007D02000074050000ED000000000300000005000000010000550300005D050000E40000000004000000050000000100002E04000046050000DC0000000005000000050000000100000705000030050000D6000000000600000005000000010000E00500001B050000D1000000000700000005000000010000B806000006050000CC00000000080000000500000001000091070000F2040000C90000000009000000050000000100006A080000DF040000C6000000000A0000000500000001000042090000CC040000C3000000000B000000050000000100001A0A0000BA040000C1000000000C00000005000000010000F10A0000A8040000BF000000000D00000005000000010000C80B000096040000BD000000000E000000050000000100009E0C000086040000BB000000000F00000005000000010000730D000075040000B9000000001000000005000000010000480E000066040000B6000000000000000006000000010000F7000000C306000003010000000100000006000000010000CF010000AA060000F7000000000200000006000000010000A702000091060000ED0000000003000000060000000100007F03000079060000E40000000004000000060000000100005804000062060000DC000000000500000006000000010000300500004C060000D60000000006000000060000000100000906000036060000D1000000000700000006000000010000E206000021060000CD000000000800000006000000010000BA0700000D060000C900000000090000000600000001000093080000F9050000C6000000000A000000060000000100006B090000E5050000C4000000000B00000006000000010000420A0000D2050000C2000000000C00000006000000010000190B0000C0050000C0000000000D00000006000000010000F00B0000AE050000BE000000000E00000006000000010000C60C00009D050000BC000000000F000000060000000100009B0D00008C050000BA0000000010000000060000000100006F0E00007C050000B800000000000000000700000001000022010000E007000003010000000100000007000000010000FA010000C7070000F7000000000200000007000000010000D2020000AE070000ED000000000300000007000000010000AA03000095070000E4000000000400000007000000010000820400007E070000DD0000000005000000070000000100005B05000067070000D70000000006000000070000000100003306000051070000D20000000007000000070000000100000C0700003B070000CE000000000800000007000000010000E407000026070000CA000000000900000007000000010000BC08000011070000C8000000000A0000000700000001000094090000FD060000C5000000000B000000070000000100006C0A0000EA060000C3000000000C00000007000000010000420B0000D7060000C2000000000D00000007000000010000190C0000C5060000C0000000000E00000007000000010000EF0C0000B3060000BE000000000F00000007000000010000C40D0000A2060000BC000000001000000007000000010000980E000091060000BA0000000000000000080000000100004E010000FD0800000401000000010000000800000001000025020000E3080000F8000000000200000008000000010000FD020000CA080000EE000000000300000008000000010000D5030000B1080000E5000000000400000008000000010000AD04000099080000DE0000000005000000080000000100008505000082080000D80000000006000000080000000100005E0600006B080000D30000000007000000080000000100003607000055080000CF0000000008000000080000000100000E0800003F080000CC000000000900000008000000010000E60800002A080000C9000000000A00000008000000010000BE09000016080000C7000000000B00000008000000010000950A000002080000C5000000000C000000080000000100006C0B0000EE070000C4000000000D00000008000000010000420C0000DC070000C2000000000E00000008000000010000180D0000C9070000C0000000000F00000008000000010000ED0D0000B7070000BE000000001000000008000000010000C10E0000A6070000BC0000000000000000090000000100007A0100001B0A00000501000000010000000900000001000051020000000A0000F900000000020000000900000001000029030000E6090000EF00000000030000000900000001000000040000CD090000E7000000000400000009000000010000D8040000B4090000E0000000000500000009000000010000B00500009D090000DA0000000006000000090000000100008906000085090000D5000000000700000009000000010000610700006F090000D10000000008000000090000000100003908000058090000CE0000000009000000090000000100001109000043090000CB000000000A00000009000000010000E80900002E090000C9000000000B00000009000000010000BF0A00001A090000C7000000000C00000009000000010000960B000006090000C6000000000D000000090000000100006C0C0000F2080000C4000000000E00000009000000010000410D0000DF080000C3000000000F00000009000000010000160E0000CD080000C1000000001000000009000000010000EA0E0000BB080000BF00000000000000000A000000010000A6010000390B00000601000000010000000A0000000100007D0200001E0B0000FB00000000020000000A00000001000054030000030B0000F100000000030000000A0000000100002C040000EA0A0000E900000000040000000A00000001000004050000D10A0000E200000000050000000A000000010000DC050000B80A0000DC00000000060000000A000000010000B4060000A00A0000D700000000070000000A0000000100008C070000890A0000D300000000080000000A00000001000064080000720A0000D000000000090000000A0000000100003B0900005C0A0000CE000000000A0000000A000000010000130A0000470A0000CC000000000B0000000A000000010000EA0A0000320A0000CA000000000C0000000A000000010000C00B00001E0A0000C9000000000D0000000A000000010000960C00000A0A0000C7000000000E0000000A0000000100006B0D0000F6090000C6000000000F0000000A000000010000400E0000E4090000C400000000100000000A000000010000130F0000D1090000C200000000000000000B000000010000D3010000580C00000801000000010000000B000000010000A90200003D0C0000FD00000000020000000B00000001000080030000220C0000F300000000030000000B00000001000058040000070C0000EB00000000040000000B00000001000030050000EE0B0000E400000000050000000B00000001000007060000D50B0000DE00000000060000000B000000010000DF060000BD0B0000D900000000070000000B000000010000B7070000A50B0000D600000000080000000B0000000100008F0800008E0B0000D300000000090000000B00000001000066090000770B0000D0000000000A0000000B0000000100003D0A0000610B0000CE000000000B0000000B000000010000140B00004C0B0000CD000000000C0000000B000000010000EA0B0000370B0000CC000000000D0000000B000000010000C00C0000220B0000CA000000000E0000000B000000010000950D00000F0B0000C9000000000F0000000B000000010000690E0000FB0A0000C700000000100000000B0000000100003D0F0000E80A0000C500000000000000000C000000010000FF010000790D00000A01000000010000000C000000010000D60200005D0D0000FF00000000020000000C000000010000AD030000420D0000F500000000030000000C00000001000084040000270D0000ED00000000040000000C0000000100005B0500000D0D0000E600000000050000000C00000001000033060000F30C0000E000000000060000000C0000000100000B070000DA0C0000DC00000000070000000C000000010000E2070000C20C0000D800000000080000000C000000010000BA080000AB0C0000D500000000090000000C00000001000091090000930C0000D3000000000A0000000C000000010000680A00007D0C0000D1000000000B0000000C0000000100003F0B0000670C0000D0000000000C0000000C000000010000150C0000520C0000CF000000000D0000000C000000010000EA0C00003D0C0000CE000000000E0000000C000000010000BF0D0000280C0000CC000000000F0000000C000000010000930E0000140C0000CB00000000100000000C000000010000660F0000010C0000C900000000000000000D0000000100002C0200009C0E00000C01000000010000000D00000001000002030000800E00000101000000020000000D000000010000D9030000640E0000F700000000030000000D000000010000B0040000480E0000EF00000000040000000D000000010000870500002E0E0000E800000000050000000D0000000100005F060000140E0000E300000000060000000D00000001000036070000FB0D0000DE00000000070000000D0000000100000E080000E20D0000DB00000000080000000D000000010000E5080000CA0D0000D800000000090000000D000000010000BC090000B20D0000D6000000000A0000000D000000010000930A00009B0D0000D4000000000B0000000D000000010000690B0000850D0000D3000000000C0000000D0000000100003F0C00006F0D0000D2000000000D0000000D000000010000140D0000590D0000D1000000000E0000000D000000010000E90D0000440D0000D0000000000F0000000D000000010000BD0E0000300D0000CF00000000100000000D000000010000900F00001C0D0000CD00000000000000000E00000001000058020000C20F00000E01000000010000000E0000000100002E030000A50F00000301000000020000000E00000001000005040000890F0000F900000000030000000E000000010000DC0400006D0F0000F100000000040000000E000000010000B3050000520F0000EB00000000050000000E0000000100008A060000370F0000E500000000060000000E000000010000610700001D0F0000E100000000070000000E00000001000039080000040F0000DE00000000080000000E00000001000010090000EB0E0000DB00000000090000000E000000010000E7090000D30E0000D9000000000A0000000E000000010000BD0A0000BC0E0000D8000000000B0000000E000000010000940B0000A50E0000D6000000000C0000000E000000010000690C00008E0E0000D5000000000D0000000E0000000100003F0D0000780E0000D4000000000E0000000E000000010000130E0000630E0000D3000000000F0000000E000000010000E70E00004E0E0000D200000000100000000E000000010000BA0F00003A0E0000D100000000000000000F00000001000084020000FF0F00001001000000010000000F0000000100005A030000FF0F00000501000000020000000F00000001000031040000FF0F0000FB00000000030000000F00000001000007050000FF0F0000F400000000040000000F000000010000DE050000FF0F0000ED00000000050000000F000000010000B6060000FF0F0000E800000000060000000F0000000100008D070000FF0F0000E400000000070000000F00000001000064080000FF0F0000E000000000080000000F0000000100003B090000FF0F0000DE00000000090000000F000000010000120A0000F80F0000DC000000000A0000000F000000010000E80A0000E00F0000DB000000000B0000000F000000010000BE0B0000C80F0000DA000000000C0000000F000000010000940C0000B10F0000D9000000000D0000000F000000010000690D00009B0F0000D8000000000E0000000F0000000100003D0E0000850F0000D7000000000F0000000F000000010000110F00006F0F0000D600000000100000000F000000010000E30F00005A0F0000D4000000000000000010000000010000B0020000FF0F00001201000000010000001000000001000086030000FF0F0000070100000002000000100000000100005C040000FF0F0000FE00000000030000001000000001000033050000FF0F0000F60000000004000000100000000100000A060000FF0F0000EF000000000500000010000000010000E1060000FF0F0000EA000000000600000010000000010000B8070000FF0F0000E60000000007000000100000000100008F080000FF0F0000E300000000080000001000000001000065090000FF0F0000E10000000009000000100000000100003C0A0000FF0F0000DF000000000A00000010000000010000120B0000FF0F0000DE000000000B00000010000000010000E80B0000FF0F0000DD000000000C00000010000000010000BD0C0000FF0F0000DC000000000D00000010000000010000920D0000FF0F0000DB000000000E00000010000000010000660E0000FF0F0000DA000000000F000000100000000100003A0F0000FF0F0000D9000000001000000010000000010000FF0F0000FF0F0000D800000000000000000000000002000005000000000000001E020000000100000000000000020000DE0000000000000011020000000200000000000000020000B701000000000000060200000003000000000000000200009002000000000000FD0100000004000000000000000200006903000000000000F40100000005000000000000000200004304000000000000ED0100000006000000000000000200001D05000000000000E7010000000700000000000000020000F605000000000000E2010000000800000000000000020000D006000000000000DE010000000900000000000000020000A907000000000000DA010000000A000000000000000200008208000000000000D7010000000B000000000000000200005A09000000000000D4010000000C00000000000000020000320A000000000000D1010000000D000000000000000200000A0B000000000000CE010000000E00000000000000020000E00B000000000000CC010000000F00000000000000020000B60C000000000000C90100000010000000000000000200008C0D000000000000C50100000000000000010000000200002C0000000E0100001A02000000010000000100000002000004010000F70000000D020000000200000001000000020000DD010000E100000002020000000300000001000000020000B6020000CC000000F90100000004000000010000000200008F030000B8000000F001000000050000000100000002000068040000A4000000E90100000006000000010000000200004205000091000000E30100000007000000010000000200001B0600007E000000DE010000000800000001000000020000F40600006C000000DA010000000900000001000000020000CE0700005B000000D7010000000A00000001000000020000A60800004A000000D3010000000B000000010000000200007F0900003A000000D1010000000C00000001000000020000560A00002A000000CE010000000D000000010000000200002E0B00001B000000CB010000000E00000001000000020000040C00000C000000C9010000000F00000001000000020000DA0C000000000000C6010000001000000001000000020000AF0D000000000000C30100000000000000020000000200005300000033020000160200000001000000020000000200002B0100001C0200000A0200000002000000020000000200000402000006020000FF010000000300000002000000020000DD020000F1010000F5010000000400000002000000020000B6030000DC010000ED0100000005000000020000000200008F040000C7010000E601000000060000000200000002000068050000B4010000E101000000070000000200000002000041060000A1010000DC0100000008000000020000000200001A0700008E010000D8010000000900000002000000020000F30700007C010000D4010000000A00000002000000020000CC0800006B010000D1010000000B00000002000000020000A40900005A010000CE010000000C000000020000000200007C0A00004A010000CC010000000D00000002000000020000530B00003A010000C9010000000E00000002000000020000290C00002B010000C7010000000F00000002000000020000FF0C00001D010000C4010000001000000002000000020000D40D00000E010000C10100000000000000030000000200007B0000005703000013020000000100000003000000020000530100003F030000070200000002000000030000000200002C02000028030000FC0100000003000000030000000200000403000012030000F3010000000400000003000000020000DD030000FD020000EB010000000500000003000000020000B6040000E8020000E40100000006000000030000000200008F050000D4020000DF01000000070000000300000002000068060000C0020000DA01000000080000000300000002000041070000AD020000D60100000009000000030000000200001A0800009B020000D2010000000A00000003000000020000F208000089020000CF010000000B00000003000000020000CA09000078020000CD010000000C00000003000000020000A20A000067020000CA010000000D00000003000000020000790B000057020000C8010000000E000000030000000200004F0C000047020000C6010000000F00000003000000020000250D000038020000C3010000001000000003000000020000F90D000029020000C0010000000000000004000000020000A400000077040000110200000001000000040000000200007C0100005F040000050200000002000000040000000200005402000048040000FA0100000003000000040000000200002D03000032040000F1010000000400000004000000020000060400001C040000E9010000000500000004000000020000DF04000006040000E3010000000600000004000000020000B8050000F2030000DD01000000070000000400000002000090060000DE030000D901000000080000000400000002000069070000CA030000D501000000090000000400000002000042080000B7030000D1010000000A000000040000000200001A090000A5030000CF010000000B00000004000000020000F209000093030000CC010000000C00000004000000020000C90A000082030000CA010000000D00000004000000020000A00B000071030000C8010000000E00000004000000020000760C000061030000C5010000000F000000040000000200004B0D000052030000C3010000001000000004000000020000200E000042030000C0010000000000000005000000020000CE0000009605000010020000000100000005000000020000A60100007E050000040200000002000000050000000200007E02000066050000F9010000000300000005000000020000560300004F050000F00100000004000000050000000200002F04000039050000E90100000005000000050000000200000805000023050000E2010000000600000005000000020000E00500000E050000DD010000000700000005000000020000B9060000F9040000D801000000080000000500000002000092070000E5040000D40100000009000000050000000200006A080000D2040000D1010000000A0000000500000002000042090000BF040000CE010000000B000000050000000200001A0A0000AD040000CC010000000C00000005000000020000F10A00009B040000CA010000000D00000005000000020000C70B00008A040000C8010000000E000000050000000200009D0C000079040000C6010000000F00000005000000020000730D000069040000C3010000001000000005000000020000470E000059040000C0010000000000000006000000020000F9000000B406000010020000000100000006000000020000D00100009B06000003020000000200000006000000020000A802000083060000F9010000000300000006000000020000800300006C060000F00100000004000000060000000200005904000055060000E8010000000500000006000000020000310500003E060000E20100000006000000060000000200000A06000029060000DD010000000700000006000000020000E206000014060000D8010000000800000006000000020000BB070000FF050000D501000000090000000600000002000093080000EB050000D2010000000A000000060000000200006B090000D8050000CF010000000B00000006000000020000420A0000C5050000CD010000000C00000006000000020000190B0000B3050000CB010000000D00000006000000020000F00B0000A1050000C9010000000E00000006000000020000C50C000090050000C7010000000F000000060000000200009A0D000080050000C40100000010000000060000000200006F0E00006F050000C201000000000000000700000002000024010000D10700000F020000000100000007000000020000FB010000B807000004020000000200000007000000020000D30200009F070000F9010000000300000007000000020000AB03000087070000F00100000004000000070000000200008304000070070000E90100000005000000070000000200005B05000059070000E30100000006000000070000000200003406000043070000DD0100000007000000070000000200000C0700002D070000D9010000000800000007000000020000E407000018070000D5010000000900000007000000020000BC08000004070000D2010000000A0000000700000002000094090000F0060000D0010000000B000000070000000200006B0A0000DD060000CE010000000C00000007000000020000420B0000CA060000CC010000000D00000007000000020000180C0000B8060000CA010000000E00000007000000020000EE0C0000A6060000C8010000000F00000007000000020000C30D000095060000C6010000001000000007000000020000970E000084060000C30100000000000000080000000200004F010000EE0800001002000000010000000800000002000026020000D408000004020000000200000008000000020000FE020000BB080000FA010000000300000008000000020000D6030000A2080000F1010000000400000008000000020000AE0400008B080000EA0100000005000000080000000200008605000073080000E30100000006000000080000000200005E0600005D080000DE0100000007000000080000000200003607000047080000DA0100000008000000080000000200000F08000031080000D7010000000900000008000000020000E60800001C080000D4010000000A00000008000000020000BE09000008080000D2010000000B00000008000000020000950A0000F4070000D0010000000C000000080000000200006C0B0000E1070000CE010000000D00000008000000020000420C0000CE070000CC010000000E00000008000000020000170D0000BC070000CA010000000F00000008000000020000EC0D0000AA070000C8010000001000000008000000020000C00E000099070000C60100000000000000090000000200007B0100000B0A00001102000000010000000900000002000052020000F10900000502000000020000000900000002000029030000D7090000FB01000000030000000900000002000001040000BE090000F2010000000400000009000000020000D9040000A6090000EB010000000500000009000000020000B10500008E090000E50100000006000000090000000200008906000077090000E00100000007000000090000000200006107000060090000DC010000000800000009000000020000390800004A090000D80100000009000000090000000200001109000035090000D6010000000A00000009000000020000E809000020090000D4010000000B00000009000000020000BF0A00000C090000D2010000000C00000009000000020000960B0000F8080000D0010000000D000000090000000200006B0C0000E5080000CE010000000E00000009000000020000410D0000D2080000CD010000000F00000009000000020000150E0000C0080000CB010000001000000009000000020000E90E0000AE080000C801000000000000000A000000020000A7010000290B00001202000000010000000A0000000200007E0200000E0B00000602000000020000000A00000002000055030000F40A0000FC01000000030000000A0000000200002D040000DA0A0000F401000000040000000A00000002000004050000C10A0000EC01000000050000000A000000020000DC050000A90A0000E701000000060000000A000000020000B4060000910A0000E201000000070000000A0000000200008C0700007A0A0000DE01000000080000000A00000002000064080000640A0000DA01000000090000000A0000000200003B0900004E0A0000D8010000000A0000000A000000020000120A0000390A0000D6010000000B0000000A000000020000E90A0000240A0000D4010000000C0000000A000000020000C00B0000100A0000D2010000000D0000000A000000020000950C0000FC090000D1010000000E0000000A0000000200006A0D0000E9090000CF010000000F0000000A0000000200003F0E0000D6090000CD01000000100000000A000000020000120F0000C4090000CB01000000000000000B000000020000D4010000480C00001302000000010000000B000000020000AA0200002C0C00000802000000020000000B00000002000081030000120C0000FE01000000030000000B00000002000059040000F70B0000F501000000040000000B00000002000030050000DE0B0000EE01000000050000000B00000002000008060000C50B0000E801000000060000000B000000020000E0060000AD0B0000E401000000070000000B000000020000B7070000960B0000E001000000080000000B0000000200008F0800007F0B0000DD01000000090000000B00000002000066090000680B0000DA010000000A0000000B0000000200003D0A0000530B0000D8010000000B0000000B000000020000140B00003D0B0000D7010000000C0000000B000000020000EA0B0000290B0000D5010000000D0000000B000000020000BF0C0000140B0000D4010000000E0000000B000000020000940D0000010B0000D2010000000F0000000B000000020000690E0000ED0A0000D101000000100000000B0000000200003C0F0000DB0A0000CE01000000000000000C00000002000000020000680D00001502000000010000000C000000020000D70200004C0D00000902000000020000000C000000020000AD030000310D00000002000000030000000C00000002000084040000170D0000F701000000040000000C0000000200005C050000FD0C0000F001000000050000000C00000002000033060000E30C0000EB01000000060000000C0000000200000B070000CB0C0000E601000000070000000C000000020000E2070000B30C0000E201000000080000000C000000020000BA0800009B0C0000DF01000000090000000C00000002000091090000840C0000DD010000000A0000000C000000020000680A00006E0C0000DB010000000B0000000C0000000200003E0B0000580C0000D9010000000C0000000C000000020000140C0000430C0000D8010000000D0000000C000000020000EA0C00002E0C0000D7010000000E0000000C000000020000BE0D00001A0C0000D5010000000F0000000C000000020000920E0000070C0000D401000000100000000C000000020000660F0000F30B0000D201000000000000000D0000000200002C0200008B0E00001602000000010000000D000000020000030300006F0E00000B02000000020000000D000000020000D9030000530E00000102000000030000000D000000020000B0040000380E0000F901000000040000000D000000020000880500001D0E0000F201000000050000000D0000000200005F060000040E0000ED01000000060000000D00000002000036070000EA0D0000E801000000070000000D0000000200000E080000D20D0000E501000000080000000D000000020000E5080000BA0D0000E201000000090000000D000000020000BC090000A30D0000E0010000000A0000000D000000020000930A00008C0D0000DE010000000B0000000D000000020000690B0000760D0000DC010000000C0000000D0000000200003F0C0000600D0000DB010000000D0000000D000000020000140D00004B0D0000DA010000000E0000000D000000020000E80D0000360D0000D9010000000F0000000D000000020000BC0E0000220D0000D701000000100000000D0000000200008F0F00000E0D0000D501000000000000000E00000002000059020000B00F00001802000000010000000E0000000200002F030000930F00000D02000000020000000E00000002000005040000770F00000302000000030000000E000000020000DC0400005C0F0000FB01000000040000000E000000020000B3050000410F0000F501000000050000000E0000000200008A060000260F0000EF01000000060000000E000000020000620700000D0F0000EB01000000070000000E00000002000039080000F40E0000E701000000080000000E00000002000010090000DB0E0000E401000000090000000E000000020000E7090000C30E0000E2010000000A0000000E000000020000BD0A0000AC0E0000E1010000000B0000000E000000020000930B0000950E0000DF010000000C0000000E000000020000690C00007F0E0000DE010000000D0000000E0000000200003E0D00006A0E0000DD010000000E0000000E000000020000120E0000540E0000DC010000000F0000000E000000020000E60E0000400E0000DB01000000100000000E000000020000B90F00002B0E0000D901000000000000000F00000002000085020000FF0F00001A02000000010000000F0000000200005B030000FF0F00000F02000000020000000F00000002000031040000FF0F00000502000000030000000F00000002000008050000FF0F0000FD01000000040000000F000000020000DF050000FF0F0000F701000000050000000F000000020000B6060000FF0F0000F101000000060000000F0000000200008D070000FF0F0000ED01000000070000000F00000002000064080000FF0F0000EA01000000080000000F0000000200003B090000FF0F0000E701000000090000000F000000020000110A0000E80F0000E5010000000A0000000F000000020000E80A0000D00F0000E4010000000B0000000F000000020000BE0B0000B80F0000E2010000000C0000000F000000020000930C0000A20F0000E1010000000D0000000F000000020000680D00008C0F0000E0010000000E0000000F0000000200003C0E0000760F0000DF010000000F0000000F000000020000100F0000610F0000DE01000000100000000F000000020000E20F00004C0F0000DC010000000000000010000000020000B1020000FF0F00001B02000000010000001000000002000087030000FF0F0000100200000002000000100000000200005D040000FF0F00000702000000030000001000000002000033050000FF0F0000FF0100000004000000100000000200000A060000FF0F0000F9010000000500000010000000020000E1060000FF0F0000F3010000000600000010000000020000B8070000FF0F0000EF0100000007000000100000000200008E080000FF0F0000EC01000000080000001000000002000065090000FF0F0000E90100000009000000100000000200003C0A0000FF0F0000E8010000000A00000010000000020000120B0000FF0F0000E6010000000B00000010000000020000E80B0000FF0F0000E5010000000C00000010000000020000BD0C0000FF0F0000E4010000000D00000010000000020000920D0000FF0F0000E3010000000E00000010000000020000660E0000FF0F0000E3010000000F00000010000000020000390F0000FF0F0000E1010000001000000010000000020000FF0F0000FF0F0000E001000000000000000000000003000006000000000000002C030000000100000000000000030000DF000000000000001F030000000200000000000000030000B7010000000000001303000000030000000000000003000090020000000000000A0300000004000000000000000300006A03000000000000010300000005000000000000000300004304000000000000FA0200000006000000000000000300001D05000000000000F3020000000700000000000000030000F605000000000000EE020000000800000000000000030000CF06000000000000EA020000000900000000000000030000A807000000000000E6020000000A000000000000000300008108000000000000E2020000000B000000000000000300005909000000000000DF020000000C00000000000000030000310A000000000000DC020000000D00000000000000030000080B000000000000D9020000000E00000000000000030000DF0B000000000000D6020000000F00000000000000030000B50C000000000000D30200000010000000000000000300008A0D000000000000CF0200000000000000010000000300002D000000050100002703000000010000000100000003000005010000EF0000001A030000000200000001000000030000DD010000D90000000F030000000300000001000000030000B6020000C4000000050300000004000000010000000300008F030000B0000000FD020000000500000001000000030000690400009C000000F60200000006000000010000000300004205000089000000EF0200000007000000010000000300001B06000077000000EA020000000800000001000000030000F406000065000000E6020000000900000001000000030000CD07000053000000E2020000000A00000001000000030000A608000043000000DF020000000B000000010000000300007E09000032000000DC020000000C00000001000000030000550A000023000000D9020000000D000000010000000300002D0B000014000000D6020000000E00000001000000030000030C000005000000D3020000000F00000001000000030000D90C000000000000D0020000001000000001000000030000AE0D000000000000CD020000000000000002000000030000540000002B020000230300000001000000020000000300002C010000140200001603000000020000000200000003000004020000FE0100000B030000000300000002000000030000DD020000E801000002030000000400000002000000030000B6030000D3010000F90200000005000000020000000300008F040000BF010000F202000000060000000200000003000068050000AC010000EC0200000007000000020000000300004106000099010000E70200000008000000020000000300001A07000086010000E3020000000900000002000000030000F307000074010000DF020000000A00000002000000030000CB08000063010000DC020000000B00000002000000030000A309000053010000D9020000000C000000020000000300007B0A000042010000D6020000000D00000002000000030000520B000033010000D4020000000E00000002000000030000280C000024010000D1020000000F00000002000000030000FD0C000015010000CE020000001000000002000000030000D20D000007010000CB0200000000000000030000000300007C0000004D030000200300000001000000030000000300005401000036030000130300000002000000030000000300002C0200001F030000080300000003000000030000000300000503000009030000FF020000000400000003000000030000DD030000F4020000F7020000000500000003000000030000B6040000DF020000F00200000006000000030000000300008F050000CB020000EA02000000070000000300000003000068060000B8020000E502000000080000000300000003000041070000A5020000E10200000009000000030000000300001908000093020000DD020000000A00000003000000030000F208000081020000DA020000000B00000003000000030000CA09000070020000D7020000000C00000003000000030000A10A00005F020000D5020000000D00000003000000030000780B00004F020000D2020000000E000000030000000300004E0C00003F020000D0020000000F00000003000000030000230D000030020000CD020000001000000003000000030000F80D000022020000CA020000000000000004000000030000A50000006E0400001E0300000001000000040000000300007D0100005604000011030000000200000004000000030000550200003F040000060300000003000000040000000300002D03000028040000FD0200000004000000040000000300000604000013040000F5020000000500000004000000030000DE040000FD030000EE020000000600000004000000030000B7050000E9030000E802000000070000000400000003000090060000D5030000E402000000080000000400000003000069070000C2030000DF02000000090000000400000003000041080000AF030000DC020000000A00000004000000030000190900009D030000D9020000000B00000004000000030000F10900008B030000D6020000000C00000004000000030000C80A00007A030000D4020000000D000000040000000300009E0B000069030000D2020000000E00000004000000030000740C000059030000CF020000000F000000040000000300004A0D00004A030000CC0200000010000000040000000300001E0E00003A030000C9020000000000000005000000030000CF0000008D0500001C030000000100000005000000030000A601000074050000100300000002000000050000000300007E0200005D050000050300000003000000050000000300005603000046050000FC0200000004000000050000000300002F0400002F050000F4020000000500000005000000030000070500001A050000ED020000000600000005000000030000E005000005050000E8020000000700000005000000030000B9060000F0040000E302000000080000000500000003000091070000DC040000DF02000000090000000500000003000069080000C9040000DC020000000A0000000500000003000041090000B6040000D9020000000B00000005000000030000190A0000A4040000D6020000000C00000005000000030000F00A000093040000D4020000000D00000005000000030000C60B000082040000D2020000000E000000050000000300009C0C000071040000CF020000000F00000005000000030000710D000061040000CD020000001000000005000000030000450E000051040000CA020000000000000006000000030000F9000000AA0600001B030000000100000006000000030000D1010000910600000F030000000200000006000000030000A802000079060000040300000003000000060000000300008003000062060000FB020000000400000006000000030000590400004B060000F30200000005000000060000000300003105000035060000ED020000000600000006000000030000090600001F060000E7020000000700000006000000030000E20600000A060000E3020000000800000006000000030000BA070000F6050000DF02000000090000000600000003000092080000E2050000DC020000000A000000060000000300006A090000CF050000D9020000000B00000006000000030000410A0000BC050000D7020000000C00000006000000030000180B0000AA050000D4020000000D00000006000000030000EE0B000099050000D2020000000E00000006000000030000C40C000088050000D0020000000F00000006000000030000990D000077050000CD0200000010000000060000000300006D0E000067050000CB02000000000000000700000003000024010000C70700001B030000000100000007000000030000FB010000AD0700000F030000000200000007000000030000D30200009507000004030000000300000007000000030000AB0300007D070000FB0200000004000000070000000300008304000065070000F40200000005000000070000000300005B0500004F070000ED0200000006000000070000000300003306000039070000E80200000007000000070000000300000C07000023070000E3020000000800000007000000030000E40700000F070000DF020000000900000007000000030000BC080000FA060000DC020000000A0000000700000003000093090000E7060000DA020000000B000000070000000300006A0A0000D4060000D8020000000C00000007000000030000410B0000C1060000D5020000000D00000007000000030000170C0000AF060000D3020000000E00000007000000030000ED0C00009D060000D1020000000F00000007000000030000C10D00008C060000CF020000001000000007000000030000950E00007C060000CC02000000000000000800000003000050010000E30800001B03000000010000000800000003000027020000C90800000F030000000200000008000000030000FE020000B008000005030000000300000008000000030000D603000098080000FC020000000400000008000000030000AE04000080080000F40200000005000000080000000300008605000069080000EE0200000006000000080000000300005E06000052080000E8020000000700000008000000030000360700003C080000E40200000008000000080000000300000E08000027080000E1020000000900000008000000030000E508000012080000DE020000000A00000008000000030000BD090000FE070000DB020000000B00000008000000030000940A0000EB070000D9020000000C000000080000000300006A0B0000D7070000D7020000000D00000008000000030000400C0000C5070000D5020000000E00000008000000030000160D0000B3070000D3020000000F00000008000000030000EA0D0000A1070000D1020000001000000008000000030000BE0E000090070000CE0200000000000000090000000300007B010000FF0900001B03000000010000000900000003000052020000E50900001003000000020000000900000003000029030000CC0900000503000000030000000900000003000001040000B3090000FC020000000400000009000000030000D90400009A090000F5020000000500000009000000030000B105000083090000EF020000000600000009000000030000890600006C090000EA0200000007000000090000000300006007000055090000E50200000008000000090000000300003808000040090000E2020000000900000009000000030000100900002A090000DF020000000A00000009000000030000E709000016090000DD020000000B00000009000000030000BE0A000002090000DB020000000C00000009000000030000940B0000EE080000D9020000000D000000090000000300006A0C0000DB080000D7020000000E000000090000000300003F0D0000C9080000D5020000000F00000009000000030000130E0000B7080000D3020000001000000009000000030000E70E0000A5080000D102000000000000000A000000030000A70100001D0B00001C03000000010000000A0000000300007E020000020B00001003000000020000000A00000003000055030000E80A00000603000000030000000A0000000300002C040000CE0A0000FE02000000040000000A00000003000004050000B60A0000F602000000050000000A000000030000DC0500009E0A0000F002000000060000000A000000030000B4060000860A0000EB02000000070000000A0000000300008B0700006F0A0000E702000000080000000A00000003000063080000590A0000E402000000090000000A0000000300003A090000430A0000E1020000000A0000000A000000030000110A00002E0A0000DF020000000B0000000A000000030000E80A00001A0A0000DD020000000C0000000A000000030000BE0B0000060A0000DB020000000D0000000A000000030000940C0000F2090000DA020000000E0000000A000000030000690D0000DF090000D8020000000F0000000A0000000300003D0E0000CD090000D602000000100000000A000000030000100F0000BB090000D302000000000000000B000000030000D40100003B0C00001D03000000010000000B000000030000AA020000200C00001203000000020000000B00000003000081030000050C00000803000000030000000B00000003000058040000EB0B0000FF02000000040000000B00000003000030050000D20B0000F802000000050000000B00000003000007060000BA0B0000F202000000060000000B000000030000DF060000A20B0000ED02000000070000000B000000030000B60700008A0B0000E902000000080000000B0000000300008E080000740B0000E602000000090000000B000000030000650900005D0B0000E3020000000A0000000B0000000300003C0A0000480B0000E1020000000B0000000B000000030000120B0000330B0000DF020000000C0000000B000000030000E80B00001E0B0000DE020000000D0000000B000000030000BE0C00000A0B0000DC020000000E0000000B000000030000930D0000F70A0000DB020000000F0000000B000000030000670E0000E40A0000D902000000100000000B0000000300003A0F0000D10A0000D602000000000000000C000000030000000200005B0D00001F03000000010000000C000000030000D60200003F0D00001303000000020000000C000000030000AD030000240D00000903000000030000000C000000030000840400000A0D00000103000000040000000C0000000300005B050000F00C0000FA02000000050000000C00000003000033060000D70C0000F402000000060000000C0000000300000A070000BF0C0000EF02000000070000000C000000030000E2070000A70C0000EB02000000080000000C000000030000B9080000900C0000E802000000090000000C00000003000090090000790C0000E6020000000A0000000C000000030000670A0000630C0000E4020000000B0000000C0000000300003D0B00004D0C0000E2020000000C0000000C000000030000130C0000380C0000E0020000000D0000000C000000030000E80C0000240C0000DF020000000E0000000C000000030000BD0D0000100C0000DD020000000F0000000C000000030000900E0000FC0B0000DC02000000100000000C000000030000640F0000E90B0000DA02000000000000000D0000000300002C0200007D0E00002003000000010000000D00000003000002030000610E00001403000000020000000D000000030000D9030000460E00000B03000000030000000D000000030000B00400002B0E00000203000000040000000D00000003000087050000110E0000FC02000000050000000D0000000300005E060000F70D0000F602000000060000000D00000003000035070000DE0D0000F102000000070000000D0000000300000D080000C60D0000ED02000000080000000D000000030000E4080000AE0D0000EA02000000090000000D000000030000BB090000970D0000E8020000000A0000000D000000030000910A0000800D0000E6020000000B0000000D000000030000670B00006A0D0000E5020000000C0000000D0000000300003D0C0000550D0000E3020000000D0000000D000000030000120D0000400D0000E2020000000E0000000D000000030000E70D00002B0D0000E1020000000F0000000D000000030000BA0E0000170D0000DF02000000100000000D0000000300008D0F0000040D0000DD02000000000000000E00000003000059020000A20F00002103000000010000000E0000000300002F030000860F00001603000000020000000E000000030000050400006A0F00000C03000000030000000E000000030000DC0400004E0F00000403000000040000000E000000030000B3050000340F0000FD02000000050000000E0000000300008A0600001A0F0000F802000000060000000E00000003000061070000000F0000F302000000070000000E00000003000038080000E70E0000F002000000080000000E0000000300000F090000CF0E0000ED02000000090000000E000000030000E5090000B80E0000EB020000000A0000000E000000030000BC0A0000A00E0000E9020000000B0000000E000000030000920B00008A0E0000E7020000000C0000000E000000030000670C0000740E0000E6020000000D0000000E0000000300003C0D00005F0E0000E5020000000E0000000E000000030000110E00004A0E0000E4020000000F0000000E000000030000E40E0000350E0000E202000000100000000E000000030000B70F0000210E0000E002000000000000000F00000003000085020000FF0F00002303000000010000000F0000000300005A030000FF0F00001703000000020000000F00000003000031040000FF0F00000E03000000030000000F00000003000007050000FF0F00000603000000040000000F000000030000DE050000FF0F0000FF02000000050000000F000000030000B5060000FF0F0000FA02000000060000000F0000000300008C070000FF0F0000F502000000070000000F00000003000063080000FF0F0000F202000000080000000F00000003000039090000F30F0000EF02000000090000000F000000030000100A0000DB0F0000ED020000000A0000000F000000030000E60A0000C40F0000EB020000000B0000000F000000030000BC0B0000AD0F0000EA020000000C0000000F000000030000910C0000960F0000E9020000000D0000000F000000030000660D0000800F0000E8020000000E0000000F0000000300003A0E00006B0F0000E7020000000F0000000F0000000300000E0F0000560F0000E502000000100000000F000000030000E00F0000410F0000E4020000000000000010000000030000B0020000FF0F00002403000000010000001000000003000086030000FF0F0000190300000002000000100000000300005C040000FF0F00000F03000000030000001000000003000032050000FF0F00000803000000040000001000000003000009060000FF0F000001030000000500000010000000030000E0060000FF0F0000FC020000000600000010000000030000B7070000FF0F0000F70200000007000000100000000300008D080000FF0F0000F402000000080000001000000003000064090000FF0F0000F10200000009000000100000000300003A0A0000FF0F0000EF020000000A00000010000000030000100B0000FF0F0000EE020000000B00000010000000030000E60B0000FF0F0000ED020000000C00000010000000030000BB0C0000FF0F0000EC020000000D00000010000000030000900D0000FF0F0000EB020000000E00000010000000030000640E0000FF0F0000EA020000000F00000010000000030000370F0000FF0F0000E8020000001000000010000000030000FF0F0000FF0F0000E7020000000000000000000000040000070000000000000038040000000100000000000000040000DF000000000000002B040000000200000000000000040000B7010000000000002004000000030000000000000004000090020000000000001504000000040000000000000004000069030000000000000D0400000005000000000000000400004304000000000000050400000006000000000000000400001C05000000000000FF030000000700000000000000040000F505000000000000F9030000000800000000000000040000CE06000000000000F4030000000900000000000000040000A707000000000000F0030000000A000000000000000400008008000000000000ED030000000B000000000000000400005809000000000000E9030000000C000000000000000400002F0A000000000000E6030000000D00000000000000040000070B000000000000E3030000000E00000000000000040000DD0B000000000000E0030000000F00000000000000040000B30C000000000000DC030000001000000000000000040000880D000000000000D80300000000000000010000000400002D000000000100003304000000010000000100000004000005010000EA00000026040000000200000001000000040000DD010000D40000001B040000000300000001000000040000B6020000C0000000110400000004000000010000000400008F030000AB000000080400000005000000010000000400006804000098000000010400000006000000010000000400004105000084000000FA0300000007000000010000000400001A06000072000000F5030000000800000001000000040000F306000060000000F0030000000900000001000000040000CC0700004F000000EC030000000A00000001000000040000A40800003E000000E9030000000B000000010000000400007C0900002E000000E5030000000C00000001000000040000540A00001E000000E2030000000D000000010000000400002B0B00000F000000E0030000000E00000001000000040000010C000001000000DC030000000F00000001000000040000D60C000000000000D9030000001000000001000000040000AB0D000000000000D503000000000000000200000004000054000000250200002F0400000001000000020000000400002C0100000F0200002204000000020000000200000004000004020000F901000017040000000300000002000000040000DD020000E30100000D040000000400000002000000040000B5030000CE010000040400000005000000020000000400008E040000BA010000FD03000000060000000200000004000067050000A7010000F70300000007000000020000000400004006000094010000F20300000008000000020000000400001907000081010000ED030000000900000002000000040000F107000070010000E9030000000A00000002000000040000CA0800005E010000E6030000000B00000002000000040000A20900004E010000E3030000000C00000002000000040000790A00003E010000E0030000000D00000002000000040000500B00002E010000DD030000000E00000002000000040000260C00001F010000DA030000000F00000002000000040000FB0C000011010000D7030000001000000002000000040000D00D000003010000D30300000000000000030000000400007C000000480300002C04000000010000000300000004000054010000300300001F0400000002000000030000000400002C0200001A0300001404000000030000000300000004000004030000040300000A040000000400000003000000040000DD030000EF02000002040000000500000003000000040000B6040000DA020000FA0300000006000000030000000400008E050000C6020000F403000000070000000300000004000067060000B3020000EF03000000080000000300000004000040070000A0020000EB030000000900000003000000040000180800008E020000E7030000000A00000003000000040000F00800007C020000E4030000000B00000003000000040000C80900006B020000E1030000000C000000030000000400009F0A00005A020000DE030000000D00000003000000040000760B00004A020000DB030000000E000000030000000400004C0C00003B020000D9030000000F00000003000000040000210D00002C020000D5030000001000000003000000040000F50D00001D020000D2030000000000000004000000040000A500000068040000290400000001000000040000000400007C010000500400001C0400000002000000040000000400005402000039040000110400000003000000040000000400002D0300002204000008040000000400000004000000040000050400000D04000000040000000500000004000000040000DE040000F8030000F9030000000600000004000000040000B6050000E3030000F30300000007000000040000000400008F060000CF030000EE03000000080000000400000004000067070000BC030000E903000000090000000400000004000040080000A9030000E6030000000A000000040000000400001709000097030000E2030000000B00000004000000040000EF09000086030000E0030000000C00000004000000040000C60A000075030000DD030000000D000000040000000400009C0B000064030000DA030000000E00000004000000040000720C000054030000D8030000000F00000004000000040000470D000045030000D50300000010000000040000000400001C0E000036030000D2030000000000000005000000040000CF0000008605000027040000000100000005000000040000A60100006E0500001B0400000002000000050000000400007E0200005605000010040000000300000005000000040000560300003F050000060400000004000000050000000400002E04000029050000FE0300000005000000050000000400000605000013050000F7030000000600000005000000040000DF050000FF040000F1030000000700000005000000040000B7060000EA040000ED03000000080000000500000004000090070000D6040000E803000000090000000500000004000068080000C3040000E5030000000A000000050000000400003F090000B1040000E2030000000B00000005000000040000170A00009F040000DF030000000C00000005000000040000EE0A00008D040000DD030000000D00000005000000040000C40B00007C040000DA030000000E000000050000000400009A0C00006C040000D8030000000F000000050000000400006F0D00005C040000D5030000001000000005000000040000430E00004C040000D2030000000000000006000000040000F9000000A306000026040000000100000006000000040000D00100008A06000019040000000200000006000000040000A8020000720600000F040000000300000006000000040000800300005B060000050400000004000000060000000400005804000044060000FD030000000500000006000000040000300500002E060000F70300000006000000060000000400000806000019060000F1030000000700000006000000040000E106000004060000EC030000000800000006000000040000B9070000F0050000E803000000090000000600000004000091080000DC050000E5030000000A0000000600000004000068090000C9050000E2030000000B000000060000000400003F0A0000B6050000DF030000000C00000006000000040000160B0000A4050000DD030000000D00000006000000040000EC0B000093050000DB030000000E00000006000000040000C20C000082050000D8030000000F00000006000000040000960D000072050000D60300000010000000060000000400006A0E000062050000D303000000000000000700000004000024010000BF07000025040000000100000007000000040000FB010000A607000019040000000200000007000000040000D20200008D0700000E040000000300000007000000040000AA0300007507000005040000000400000007000000040000820400005E070000FD0300000005000000070000000400005A05000048070000F70300000006000000070000000400003206000032070000F10300000007000000070000000400000A0700001D070000EC030000000800000007000000040000E207000008070000E9030000000900000007000000040000BA080000F4060000E5030000000A0000000700000004000091090000E0060000E2030000000B00000007000000040000680A0000CD060000E0030000000C000000070000000400003F0B0000BB060000DE030000000D00000007000000040000150C0000A9060000DC030000000E00000007000000040000EA0C000098060000D9030000000F00000007000000040000BF0D000087060000D7030000001000000007000000040000930E000076060000D40300000000000000080000000400004F010000DB0800002504000000010000000800000004000026020000C108000019040000000200000008000000040000FD020000A80800000E040000000300000008000000040000D50300009008000005040000000400000008000000040000AD04000078080000FE0300000005000000080000000400008505000061080000F70300000006000000080000000400005C0600004B080000F20300000007000000080000000400003407000035080000ED0300000008000000080000000400000C08000020080000E9030000000900000008000000040000E40800000C080000E6030000000A00000008000000040000BB090000F7070000E4030000000B00000008000000040000920A0000E4070000E1030000000C00000008000000040000680B0000D1070000DF030000000D000000080000000400003E0C0000BF070000DD030000000E00000008000000040000130D0000AD070000DB030000000F00000008000000040000E80D00009B070000D9030000001000000008000000040000BB0E00008B070000D60300000000000000090000000400007B010000F70900002504000000010000000900000004000052020000DD0900001904000000020000000900000004000029030000C30900000F04000000030000000900000004000000040000AB09000006040000000400000009000000040000D804000092090000FE030000000500000009000000040000AF0500007B090000F80300000006000000090000000400008706000064090000F30300000007000000090000000400005F0700004E090000EE0300000008000000090000000400003708000038090000EB0300000009000000090000000400000E09000023090000E8030000000A00000009000000040000E50900000F090000E5030000000B00000009000000040000BC0A0000FB080000E3030000000C00000009000000040000920B0000E8080000E1030000000D00000009000000040000680C0000D5080000DF030000000E000000090000000400003D0D0000C2080000DD030000000F00000009000000040000110E0000B0080000DB030000001000000009000000040000E40E00009F080000D803000000000000000A000000040000A7010000140B00002604000000010000000A0000000400007D020000F90A00001A04000000020000000A00000004000054030000DF0A00000F04000000030000000A0000000400002B040000C60A00000704000000040000000A00000004000003050000AD0A0000FF03000000050000000A000000040000DB050000950A0000F903000000060000000A000000040000B20600007E0A0000F403000000070000000A0000000400008A070000670A0000F003000000080000000A00000004000061080000510A0000EC03000000090000000A000000040000380900003C0A0000E9030000000A0000000A0000000400000F0A0000270A0000E7030000000B0000000A000000040000E60A0000130A0000E5030000000C0000000A000000040000BC0B0000FF090000E3030000000D0000000A000000040000910C0000EB090000E1030000000E0000000A000000040000660D0000D8090000DF030000000F0000000A0000000400003A0E0000C6090000DD03000000100000000A0000000400000E0F0000B4090000DB03000000000000000B000000040000D3010000320C00002604000000010000000B000000040000A9020000170C00001B04000000020000000B00000004000080030000FC0B00001004000000030000000B00000004000057040000E20B00000804000000040000000B0000000400002E050000C90B00000104000000050000000B00000004000006060000B10B0000FA03000000060000000B000000040000DD060000990B0000F503000000070000000B000000040000B5070000820B0000F103000000080000000B0000000400008C0800006C0B0000EE03000000090000000B00000004000063090000560B0000EB030000000A0000000B0000000400003A0A0000400B0000E9030000000B0000000B000000040000100B00002B0B0000E7030000000C0000000B000000040000E60B0000170B0000E5030000000D0000000B000000040000BC0C0000030B0000E4030000000E0000000B000000040000900D0000F00A0000E2030000000F0000000B000000040000640E0000DD0A0000E003000000100000000B000000040000370F0000CB0A0000DD03000000000000000C000000040000FF010000510D00002704000000010000000C000000040000D5020000360D00001C04000000020000000C000000040000AC0300001B0D00001204000000030000000C00000004000083040000010D00000904000000040000000C0000000400005A050000E70C00000204000000050000000C00000004000031060000CE0C0000FC03000000060000000C00000004000009070000B60C0000F703000000070000000C000000040000E00700009E0C0000F303000000080000000C000000040000B7080000870C0000F003000000090000000C0000000400008E090000710C0000ED030000000A0000000C000000040000650A00005B0C0000EB030000000B0000000C0000000400003B0B0000460C0000E9030000000C0000000C000000040000100C0000310C0000E8030000000D0000000C000000040000E60C00001D0C0000E6030000000E0000000C000000040000BA0D0000090C0000E4030000000F0000000C0000000400008E0E0000F60B0000E303000000100000000C000000040000610F0000E30B0000E003000000000000000D0000000400002B020000730E00002804000000010000000D00000004000001030000570E00001D04000000020000000D000000040000D80300003C0E00001304000000030000000D000000040000AF040000210E00000B04000000040000000D00000004000086050000070E00000404000000050000000D0000000400005D060000EE0D0000FE03000000060000000D00000004000034070000D50D0000F903000000070000000D0000000400000B080000BD0D0000F503000000080000000D000000040000E2080000A50D0000F203000000090000000D000000040000B90900008F0D0000EF030000000A0000000D0000000400008F0A0000780D0000ED030000000B0000000D000000040000650B0000620D0000EC030000000C0000000D0000000400003B0C00004D0D0000EA030000000D0000000D000000040000100D0000380D0000E9030000000E0000000D000000040000E40D0000240D0000E7030000000F0000000D000000040000B80E0000100D0000E603000000100000000D0000000400008A0F0000FD0C0000E303000000000000000E00000004000058020000980F00002904000000010000000E0000000400002D0300007B0F00001E04000000020000000E000000040000040400005F0F00001404000000030000000E000000040000DA040000440F00000C04000000040000000E000000040000B10500002A0F00000504000000050000000E00000004000088060000100F0000FF03000000060000000E0000000400005F070000F70E0000FB03000000070000000E00000004000036080000DE0E0000F703000000080000000E0000000400000D090000C60E0000F403000000090000000E000000040000E3090000AF0E0000F2030000000A0000000E000000040000BA0A0000980E0000F0030000000B0000000E000000040000900B0000820E0000EE030000000C0000000E000000040000650C00006C0E0000ED030000000D0000000E0000000400003A0D0000570E0000EC030000000E0000000E0000000400000E0E0000420E0000EA030000000F0000000E000000040000E10E00002E0E0000E903000000100000000E000000040000B40F00001A0E0000E703000000000000000F00000004000084020000FF0F00002B04000000010000000F00000004000059030000FF0F00001F04000000020000000F0000000400002F040000FF0F00001604000000030000000F00000004000006050000FF0F00000D04000000040000000F000000040000DC050000FF0F00000704000000050000000F000000040000B3060000FF0F00000104000000060000000F0000000400008A070000FF0F0000FD03000000070000000F00000004000061080000FF0F0000F903000000080000000F00000004000037090000EA0F0000F603000000090000000F0000000400000E0A0000D20F0000F4030000000A0000000F000000040000E40A0000BB0F0000F2030000000B0000000F000000040000BA0B0000A40F0000F1030000000C0000000F0000000400008F0C00008E0F0000F0030000000D0000000F000000040000640D0000780F0000EE030000000E0000000F000000040000380E0000630F0000ED030000000F0000000F0000000400000B0F00004E0F0000EC03000000100000000F000000040000DD0F00003A0F0000EA030000000000000010000000040000AF020000FF0F00002B04000000010000001000000004000085030000FF0F0000200400000002000000100000000400005B040000FF0F00001704000000030000001000000004000031050000FF0F00000F04000000040000001000000004000007060000FF0F000008040000000500000010000000040000DE060000FF0F000003040000000600000010000000040000B5070000FF0F0000FE0300000007000000100000000400008B080000FF0F0000FB03000000080000001000000004000062090000FF0F0000F8030000000900000010000000040000380A0000FF0F0000F6030000000A000000100000000400000E0B0000FF0F0000F4030000000B00000010000000040000E40B0000FF0F0000F3030000000C00000010000000040000B90C0000FF0F0000F2030000000D000000100000000400008D0D0000FF0F0000F1030000000E00000010000000040000610E0000FF0F0000F0030000000F00000010000000040000340F0000FF0F0000EE030000001000000010000000040000FF0F0000FF0F0000ED030000000000000000000000050000060000000000000044050000000100000000000000050000DE0000000000000036050000000200000000000000050000B7010000000000002B0500000003000000000000000500009002000000000000200500000004000000000000000500006803000000000000170500000005000000000000000500004204000000000000100500000006000000000000000500001B0500000000000009050000000700000000000000050000F40500000000000003050000000800000000000000050000CD06000000000000FE040000000900000000000000050000A507000000000000FA040000000A000000000000000500007E08000000000000F6040000000B000000000000000500005609000000000000F2040000000C000000000000000500002D0A000000000000EF040000000D00000000000000050000040B000000000000EC040000000E00000000000000050000DB0B000000000000E8040000000F00000000000000050000B00C000000000000E5040000001000000000000000050000850D000000000000E10400000000000000010000000500002C000000FE0000003E05000000010000000100000005000004010000E800000031050000000200000001000000050000DD010000D200000025050000000300000001000000050000B5020000BD0000001B0500000004000000010000000500008E030000A90000001305000000050000000100000005000067040000950000000B0500000006000000010000000500004005000082000000040500000007000000010000000500001906000070000000FF040000000800000001000000050000F10600005E000000FA040000000900000001000000050000CA0700004D000000F6040000000A00000001000000050000A20800003C000000F2040000000B000000010000000500007A0900002C000000EE040000000C00000001000000050000520A00001D000000EB040000000D00000001000000050000280B00000E000000E8040000000E00000001000000050000FE0B000000000000E5040000000F00000001000000050000D40C000000000000E1040000001000000001000000050000A80D000000000000DD04000000000000000200000005000054000000220200003A0500000001000000020000000500002B0100000C0200002D05000000020000000200000005000003020000F601000021050000000300000002000000050000DC020000E001000017050000000400000002000000050000B4030000CC0100000F0500000005000000020000000500008D040000B70100000705000000060000000200000005000066050000A4010000010500000007000000020000000500003F06000091010000FB040000000800000002000000050000170700007F010000F6040000000900000002000000050000F00700006D010000F2040000000A00000002000000050000C80800005C010000EF040000000B000000020000000500009F0900004C010000EB040000000C00000002000000050000770A00003C010000E8040000000D000000020000000500004D0B00002C010000E5040000000E00000002000000050000230C00001D010000E2040000000F00000002000000050000F90C00000F010000DF040000001000000002000000050000CD0D000001010000DB0400000000000000030000000500007C0000004403000036050000000100000003000000050000530100002D030000290500000002000000030000000500002B020000170300001E050000000300000003000000050000030300000103000014050000000400000003000000050000DC030000EC0200000B050000000500000003000000050000B4040000D7020000040500000006000000030000000500008D050000C3020000FE04000000070000000300000005000066060000B0020000F80400000008000000030000000500003E0700009D020000F4040000000900000003000000050000160800008B020000F0040000000A00000003000000050000EE08000079020000EC040000000B00000003000000050000C609000068020000E9040000000C000000030000000500009D0A000058020000E6040000000D00000003000000050000730B000048020000E3040000000E00000003000000050000490C000038020000E0040000000F000000030000000500001E0D00002A020000DD040000001000000003000000050000F20D00001B020000DA040000000000000004000000050000A400000064040000330500000001000000040000000500007C0100004C0400002705000000020000000400000005000054020000350400001B0500000003000000040000000500002C0300001F04000012050000000400000004000000050000040400000904000009050000000500000004000000050000DC040000F403000002050000000600000004000000050000B5050000E0030000FC0400000007000000040000000500008D060000CC030000F704000000080000000400000005000066070000B9030000F20400000009000000040000000500003E080000A6030000EE040000000A000000040000000500001509000094030000EB040000000B00000004000000050000ED09000083030000E8040000000C00000004000000050000C40A000072030000E5040000000D000000040000000500009A0B000061030000E2040000000E00000004000000050000700C000052030000DF040000000F00000004000000050000450D000042030000DC040000001000000004000000050000190E000033030000D9040000000000000005000000050000CE0000008105000031050000000100000005000000050000A501000069050000240500000002000000050000000500007D0200005205000019050000000300000005000000050000550300003B050000100500000004000000050000000500002D0400002505000007050000000500000005000000050000050500001005000000050000000600000005000000050000DD050000FB040000FA040000000700000005000000050000B6060000E7040000F50400000008000000050000000500008E070000D3040000F104000000090000000500000005000066080000C0040000ED040000000A000000050000000500003D090000AD040000EA040000000B00000005000000050000150A00009C040000E7040000000C00000005000000050000EB0A00008A040000E5040000000D00000005000000050000C10B000079040000E2040000000E00000005000000050000970C000069040000DF040000000F000000050000000500006C0D000059040000DC040000001000000005000000050000400E00004A040000D9040000000000000006000000050000F80000009E06000030050000000100000006000000050000CF0100008506000023050000000200000006000000050000A70200006E060000180500000003000000060000000500007E030000560600000F0500000004000000060000000500005604000040060000060500000005000000060000000500002F0500002A060000000500000006000000060000000500000706000015060000FA040000000700000006000000050000DF06000000060000F5040000000800000006000000050000B7070000EC050000F10400000009000000060000000500008F080000D8050000ED040000000A0000000600000005000066090000C5050000EA040000000B000000060000000500003D0A0000B3050000E7040000000C00000006000000050000140B0000A1050000E5040000000D00000006000000050000EA0B000090050000E2040000000E00000006000000050000BF0C00007F050000E0040000000F00000006000000050000940D00006F050000DD040000001000000006000000050000670E00005F050000D904000000000000000700000005000023010000BA0700002F050000000100000007000000050000FA010000A107000022050000000200000007000000050000D10200008807000017050000000300000007000000050000A9030000710700000E050000000400000007000000050000810400005A070000060500000005000000070000000500005905000043070000FF040000000600000007000000050000310600002E070000F90400000007000000070000000500000807000018070000F5040000000800000007000000050000E007000004070000F1040000000900000007000000050000B8080000F0060000ED040000000A000000070000000500008F090000DC060000EA040000000B00000007000000050000660A0000CA060000E8040000000C000000070000000500003C0B0000B7060000E5040000000D00000007000000050000120C0000A6060000E3040000000E00000007000000050000E70C000094060000E0040000000F00000007000000050000BC0D000083060000DE040000001000000007000000050000900E000073060000DB0400000000000000080000000500004E010000D50800002E05000000010000000800000005000025020000BC08000022050000000200000008000000050000FC020000A308000017050000000300000008000000050000D40300008B0800000E050000000400000008000000050000AB0400007308000006050000000500000008000000050000830500005C080000FF0400000006000000080000000500005B06000046080000FA0400000007000000080000000500003307000031080000F50400000008000000080000000500000A0800001C080000F1040000000900000008000000050000E208000007080000EE040000000A00000008000000050000B9090000F3070000EB040000000B00000008000000050000900A0000E0070000E9040000000C00000008000000050000660B0000CD070000E6040000000D000000080000000500003B0C0000BB070000E4040000000E00000008000000050000100D0000A9070000E2040000000F00000008000000050000E50D000098070000DF040000001000000008000000050000B80E000087070000DC0400000000000000090000000500007A010000F10900002E05000000010000000900000005000050020000D70900002205000000020000000900000005000027030000BE09000017050000000300000009000000050000FF030000A50900000E050000000400000009000000050000D60400008D09000006050000000500000009000000050000AE0500007609000000050000000600000009000000050000850600005F090000FA0400000007000000090000000500005D07000049090000F60400000008000000090000000500003508000034090000F20400000009000000090000000500000C0900001F090000EF040000000A00000009000000050000E30900000A090000EC040000000B00000009000000050000B90A0000F7080000EA040000000C000000090000000500008F0B0000E3080000E8040000000D00000009000000050000650C0000D1080000E6040000000E000000090000000500003A0D0000BE080000E4040000000F000000090000000500000E0E0000AD080000E1040000001000000009000000050000E10E00009B080000DE04000000000000000A000000050000A60100000D0B00002E05000000010000000A0000000500007C020000F30A00002205000000020000000A00000005000053030000D90A00001805000000030000000A0000000500002A040000C00A00000F05000000040000000A00000005000001050000A70A00000705000000050000000A000000050000D9050000900A00000105000000060000000A000000050000B0060000790A0000FB04000000070000000A00000005000088070000620A0000F704000000080000000A0000000500005F0800004C0A0000F304000000090000000A00000005000036090000370A0000F0040000000A0000000A0000000500000D0A0000220A0000EE040000000B0000000A000000050000E30A00000E0A0000EC040000000C0000000A000000050000B90B0000FA090000EA040000000D0000000A0000000500008F0C0000E7090000E8040000000E0000000A000000050000630D0000D4090000E6040000000F0000000A000000050000370E0000C2090000E304000000100000000A0000000500000B0F0000B0090000E104000000000000000B000000050000D20100002B0C00002F05000000010000000B000000050000A8020000100C00002305000000020000000B0000000500007F030000F60B00001805000000030000000B00000005000056040000DC0B00001005000000040000000B0000000500002D050000C30B00000805000000050000000B00000005000004060000AB0B00000205000000060000000B000000050000DB060000930B0000FD04000000070000000B000000050000B30700007C0B0000F804000000080000000B0000000500008A080000660B0000F504000000090000000B00000005000061090000500B0000F2040000000A0000000B000000050000380A00003B0B0000F0040000000B0000000B0000000500000E0B0000260B0000EE040000000C0000000B000000050000E40B0000120B0000EC040000000D0000000B000000050000B90C0000FF0A0000EA040000000E0000000B0000000500008D0D0000EB0A0000E8040000000F0000000B000000050000610E0000D90A0000E604000000100000000B000000050000340F0000C70A0000E304000000000000000C000000050000FE0100004A0D00002F05000000010000000C000000050000D40200002E0D00002305000000020000000C000000050000AB030000140D00001905000000030000000C00000005000081040000FA0C00001105000000040000000C00000005000058050000E10C00000905000000050000000C0000000500002F060000C80C00000305000000060000000C00000005000007070000B00C0000FE04000000070000000C000000050000DE070000980C0000FA04000000080000000C000000050000B5080000820C0000F704000000090000000C0000000500008C0900006B0C0000F4040000000A0000000C000000050000620A0000560C0000F2040000000B0000000C000000050000380B0000400C0000F0040000000C0000000C0000000500000E0C00002C0C0000EE040000000D0000000C000000050000E30C0000180C0000EC040000000E0000000C000000050000B70D0000040C0000EB040000000F0000000C0000000500008B0E0000F10B0000E904000000100000000C0000000500005E0F0000DE0B0000E604000000000000000D0000000500002A0200006B0E00003005000000010000000D000000050000000300004F0E00002405000000020000000D000000050000D6030000340E00001A05000000030000000D000000050000AD0400001A0E00001205000000040000000D00000005000084050000000E00000B05000000050000000D0000000500005B060000E70D00000505000000060000000D00000005000032070000CE0D00000005000000070000000D00000005000009080000B70D0000FC04000000080000000D000000050000E00800009F0D0000F804000000090000000D000000050000B6090000880D0000F6040000000A0000000D0000000500008D0A0000720D0000F4040000000B0000000D000000050000630B00005D0D0000F2040000000C0000000D000000050000380C0000480D0000F0040000000D0000000D0000000500000D0D0000330D0000EF040000000E0000000D000000050000E10D00001F0D0000ED040000000F0000000D000000050000B50E00000C0D0000EB04000000100000000D000000050000870F0000F80C0000E904000000000000000E000000050000560200008F0F00003105000000010000000E0000000500002C030000730F00002505000000020000000E00000005000002040000570F00001B05000000030000000E000000050000D90400003C0F00001305000000040000000E000000050000AF050000220F00000C05000000050000000E00000005000086060000090F00000605000000060000000E0000000500005D070000F00E00000105000000070000000E00000005000034080000D70E0000FD04000000080000000E0000000500000A090000C00E0000FA04000000090000000E000000050000E1090000A80E0000F8040000000A0000000E000000050000B70A0000920E0000F6040000000B0000000E0000000500008D0B00007C0E0000F4040000000C0000000E000000050000620C0000660E0000F3040000000D0000000E000000050000370D0000510E0000F1040000000E0000000E0000000500000B0E00003D0E0000F0040000000F0000000E000000050000DE0E0000290E0000EE04000000100000000E000000050000B10F0000150E0000EC04000000000000000F00000005000082020000FF0F00003105000000010000000F00000005000058030000FF0F00002605000000020000000F0000000500002E040000FF0F00001C05000000030000000F00000005000004050000FF0F00001405000000040000000F000000050000DA050000FF0F00000D05000000050000000F000000050000B1060000FF0F00000805000000060000000F00000005000088070000FF0F00000305000000070000000F0000000500005F080000FB0F0000FF04000000080000000F00000005000035090000E30F0000FC04000000090000000F0000000500000B0A0000CB0F0000FA040000000A0000000F000000050000E10A0000B40F0000F8040000000B0000000F000000050000B70B00009E0F0000F6040000000C0000000F0000000500008C0C0000880F0000F5040000000D0000000F000000050000610D0000720F0000F4040000000E0000000F000000050000350E00005D0F0000F2040000000F0000000F000000050000080F0000490F0000F104000000100000000F000000050000DA0F0000350F0000EF040000000000000010000000050000AE020000FF0F00003205000000010000001000000005000083030000FF0F00002705000000020000001000000005000059040000FF0F00001D0500000003000000100000000500002F050000FF0F00001505000000040000001000000005000005060000FF0F00000E050000000500000010000000050000DC060000FF0F000009050000000600000010000000050000B2070000FF0F00000405000000070000001000000005000089080000FF0F0000010500000008000000100000000500005F090000FF0F0000FE040000000900000010000000050000360A0000FF0F0000FC040000000A000000100000000500000B0B0000FF0F0000FA040000000B00000010000000050000E10B0000FF0F0000F9040000000C00000010000000050000B60C0000FF0F0000F7040000000D000000100000000500008A0D0000FF0F0000F6040000000E000000100000000500005E0E0000FF0F0000F5040000000F00000010000000050000310F0000FF0F0000F4040000001000000010000000050000FF0F0000FF0F0000F204000000000000000000000006000006000000000000004E060000000100000000000000060000DE0000000000000041060000000200000000000000060000B601000000000000350600000003000000000000000600008F020000000000002A060000000400000000000000060000670300000000000021060000000500000000000000060000400400000000000019060000000600000000000000060000190500000000000012060000000700000000000000060000F2050000000000000C060000000800000000000000060000CB0600000000000007060000000900000000000000060000A40700000000000003060000000A000000000000000600007C08000000000000FE050000000B000000000000000600005409000000000000FB050000000C000000000000000600002B0A000000000000F7050000000D00000000000000060000020B000000000000F4050000000E00000000000000060000D80B000000000000F0050000000F00000000000000060000AD0C000000000000EC050000001000000000000000060000820D000000000000E80500000000000000010000000600002C000000FD0000004906000000010000000100000006000004010000E70000003B060000000200000001000000060000DC010000D10000002F060000000300000001000000060000B4020000BD000000250600000004000000010000000600008D030000A80000001C0600000005000000010000000600006604000095000000140600000006000000010000000600003E050000820000000D060000000700000001000000060000170600007000000008060000000800000001000000060000F00600005E00000003060000000900000001000000060000C80700004D000000FE050000000A00000001000000060000A00800003C000000FA050000000B00000001000000060000780900002C000000F7050000000C000000010000000600004F0A00001D000000F3050000000D00000001000000060000260B00000E000000F0050000000E00000001000000060000FC0B000000000000EC050000000F00000001000000060000D10C000000000000E9050000001000000001000000060000A60D000000000000E40500000000000000020000000600005300000021020000440600000001000000020000000600002B0100000B0200003706000000020000000200000006000003020000F50100002B060000000300000002000000060000DB020000DF01000021060000000400000002000000060000B3030000CB010000180600000005000000020000000600008C040000B70100001006000000060000000200000006000064050000A30100000A0600000007000000020000000600003D0600009001000004060000000800000002000000060000160700007E010000FF050000000900000002000000060000EE0700006D010000FB050000000A00000002000000060000C60800005C010000F7050000000B000000020000000600009D0900004B010000F3050000000C00000002000000060000740A00003B010000F0050000000D000000020000000600004B0B00002C010000ED050000000E00000002000000060000210C00001D010000E9050000000F00000002000000060000F60C00000E010000E6050000001000000002000000060000CA0D000000010000E20500000000000000030000000600007B0000004303000040060000000100000003000000060000520100002B030000330600000002000000030000000600002A020000150300002706000000030000000300000006000002030000FF0200001D060000000400000003000000060000DB030000EA02000014060000000500000003000000060000B3040000D60200000D0600000006000000030000000600008B050000C20200000606000000070000000300000006000064060000AF020000010600000008000000030000000600003C0700009C020000FC050000000900000003000000060000140800008A020000F8050000000A00000003000000060000EC08000078020000F4050000000B00000003000000060000C309000068020000F1050000000C000000030000000600009A0A000057020000EE050000000D00000003000000060000710B000047020000EB050000000E00000003000000060000460C000038020000E7050000000F000000030000000600001B0D000029020000E4050000001000000003000000060000EF0D00001B020000E0050000000000000004000000060000A4000000620400003D0600000001000000040000000600007B0100004A040000300600000002000000040000000600005302000033040000240600000003000000040000000600002B0300001D0400001A060000000400000004000000060000030400000704000012060000000500000004000000060000DB040000F30300000A060000000600000004000000060000B3050000DE030000040600000007000000040000000600008C060000CB030000FF05000000080000000400000006000064070000B8030000FA0500000009000000040000000600003C080000A5030000F6050000000A000000040000000600001309000093030000F2050000000B00000004000000060000EB09000082030000EF050000000C00000004000000060000C10A000071030000EC050000000D00000004000000060000970B000061030000E9050000000E000000040000000600006D0C000051030000E6050000000F00000004000000060000420D000041030000E3050000001000000004000000060000160E000033030000DF050000000000000005000000060000CD0000007F0500003A060000000100000005000000060000A4010000670500002D0600000002000000050000000600007C02000050050000220600000003000000050000000600005403000039050000180600000004000000050000000600002C0400002305000010060000000500000005000000060000040500000E05000009060000000600000005000000060000DC050000F904000002060000000700000005000000060000B4060000E5040000FD0500000008000000050000000600008C070000D1040000F905000000090000000500000006000064080000BE040000F5050000000A000000050000000600003B090000AC040000F1050000000B00000005000000060000120A00009A040000EE050000000C00000005000000060000E90A000089040000EC050000000D00000005000000060000BF0B000078040000E9050000000E00000005000000060000940C000068040000E6050000000F00000005000000060000690D000058040000E30500000010000000050000000600003D0E000049040000DF050000000000000006000000060000F70000009B06000038060000000100000006000000060000CE010000820600002C060000000200000006000000060000A60200006B060000210600000003000000060000000600007D0300005406000017060000000400000006000000060000550400003D0600000F0600000005000000060000000600002D0500002706000007060000000600000006000000060000050600001206000001060000000700000006000000060000DD060000FE050000FC050000000800000006000000060000B5070000EA050000F80500000009000000060000000600008C080000D6050000F4050000000A0000000600000006000064090000C4050000F1050000000B000000060000000600003B0A0000B1050000EE050000000C00000006000000060000110B0000A0050000EB050000000D00000006000000060000E70B00008E050000E9050000000E00000006000000060000BC0C00007E050000E6050000000F00000006000000060000910D00006D050000E3050000001000000006000000060000640E00005E050000E005000000000000000700000006000022010000B607000037060000000100000007000000060000F90100009D0700002A060000000200000007000000060000D0020000850700001F060000000300000007000000060000A70300006E070000160600000004000000070000000600007F040000570700000E0600000005000000070000000600005705000040070000070600000006000000070000000600002F0600002B070000010600000007000000070000000600000707000016070000FC050000000800000007000000060000DE07000001070000F8050000000900000007000000060000B6080000EE060000F4050000000A000000070000000600008D090000DA060000F1050000000B00000007000000060000640A0000C8060000EE050000000C000000070000000600003A0B0000B5060000EC050000000D00000007000000060000100C0000A4060000E9050000000E00000007000000060000E50C000093060000E7050000000F00000007000000060000B90D000082060000E40500000010000000070000000600008C0E000072060000E10500000000000000080000000600004D010000D10800003606000000010000000800000006000024020000B80800002A060000000200000008000000060000FB0200009F0800001F060000000300000008000000060000D20300008708000016060000000400000008000000060000AA040000700800000E060000000500000008000000060000810500005908000007060000000600000008000000060000590600004308000001060000000700000008000000060000310700002E080000FC0500000008000000080000000600000808000019080000F8050000000900000008000000060000DF08000005080000F5050000000A00000008000000060000B6090000F1070000F2050000000B000000080000000600008D0A0000DE070000EF050000000C00000008000000060000630B0000CB070000ED050000000D00000008000000060000390C0000B9070000EA050000000E000000080000000600000E0D0000A7070000E8050000000F00000008000000060000E20D000096070000E5050000001000000008000000060000B50E000086070000E205000000000000000900000006000079010000EC090000360600000001000000090000000600004F020000D30900002906000000020000000900000006000026030000B90900001F060000000300000009000000060000FD030000A109000016060000000400000009000000060000D5040000890900000E060000000500000009000000060000AC0500007209000007060000000600000009000000060000840600005C090000010600000007000000090000000600005B07000046090000FD0500000008000000090000000600003208000030090000F90500000009000000090000000600000A0900001C090000F5050000000A00000009000000060000E009000008090000F3050000000B00000009000000060000B70A0000F4080000F0050000000C000000090000000600008D0B0000E1080000EE050000000D00000009000000060000620C0000CE080000EC050000000E00000009000000060000370D0000BC080000E9050000000F000000090000000600000B0E0000AB080000E7050000001000000009000000060000DE0E00009A080000E405000000000000000A000000060000A5010000080B00003606000000010000000A0000000600007B020000EE0A00002A06000000020000000A00000006000052030000D40A00001F06000000030000000A00000006000028040000BC0A00001606000000040000000A00000006000000050000A30A00000E06000000050000000A000000060000D70500008C0A00000806000000060000000A000000060000AE060000750A00000206000000070000000A000000060000860700005E0A0000FE05000000080000000A0000000600005D080000490A0000FA05000000090000000A00000006000034090000340A0000F7050000000A0000000A0000000600000B0A00001F0A0000F4050000000B0000000A000000060000E10A00000B0A0000F2050000000C0000000A000000060000B70B0000F7090000EF050000000D0000000A0000000600008C0C0000E4090000ED050000000E0000000A000000060000610D0000D2090000EB050000000F0000000A000000060000340E0000C0090000E905000000100000000A000000060000070F0000AE090000E605000000000000000B000000060000D1010000250C00003606000000010000000B000000060000A70200000B0C00002A06000000020000000B0000000600007D030000F10B00001F06000000030000000B00000006000054040000D70B00001606000000040000000B0000000600002B050000BF0B00000F06000000050000000B00000006000002060000A70B00000806000000060000000B000000060000D90600008F0B00000306000000070000000B000000060000B1070000780B0000FF05000000080000000B00000006000088080000620B0000FB05000000090000000B0000000600005E0900004D0B0000F8050000000A0000000B000000060000350A0000380B0000F6050000000B0000000B0000000600000B0B0000230B0000F3050000000C0000000B000000060000E10B00000F0B0000F1050000000D0000000B000000060000B60C0000FC0A0000EF050000000E0000000B0000000600008A0D0000E90A0000ED050000000F0000000B0000000600005E0E0000D60A0000EB05000000100000000B000000060000310F0000C40A0000E805000000000000000C000000060000FD010000440D00003606000000010000000C000000060000D3020000290D00002A06000000020000000C000000060000A90300000E0D00002006000000030000000C00000006000080040000F50C00001706000000040000000C00000006000056050000DC0C00001006000000050000000C0000000600002D060000C30C00000A06000000060000000C00000006000005070000AB0C00000406000000070000000C000000060000DC070000940C00000006000000080000000C000000060000B20800007D0C0000FD05000000090000000C00000006000089090000670C0000FA050000000A0000000C000000060000600A0000520C0000F7050000000B0000000C000000060000350B00003D0C0000F5050000000C0000000C0000000600000B0C0000280C0000F3050000000D0000000C000000060000E00C0000150C0000F2050000000E0000000C000000060000B40D0000010C0000F0050000000F0000000C000000060000880E0000EE0B0000EE05000000100000000C0000000600005A0F0000DC0B0000EB05000000000000000D00000006000029020000650E00003706000000010000000D000000060000FE020000490E00002B06000000020000000D000000060000D50300002E0E00002106000000030000000D000000060000AB040000140E00001806000000040000000D00000006000082050000FB0D00001106000000050000000D00000006000059060000E20D00000B06000000060000000D00000006000030070000CA0D00000606000000070000000D00000006000007080000B20D00000106000000080000000D000000060000DD0800009B0D0000FE05000000090000000D000000060000B4090000840D0000FB050000000A0000000D0000000600008A0A00006E0D0000F9050000000B0000000D000000060000600B0000590D0000F7050000000C0000000D000000060000350C0000440D0000F6050000000D0000000D0000000600000A0D0000300D0000F4050000000E0000000D000000060000DE0D00001C0D0000F2050000000F0000000D000000060000B10E0000090D0000F005000000100000000D000000060000840F0000F60C0000EE05000000000000000E00000006000055020000880F00003706000000010000000E0000000600002A0300006C0F00002B06000000020000000E00000006000000040000510F00002106000000030000000E000000060000D7040000370F00001906000000040000000E000000060000AD0500001D0F00001206000000050000000E00000006000084060000030F00000C06000000060000000E0000000600005B070000EA0E00000706000000070000000E00000006000031080000D20E00000306000000080000000E00000006000008090000BB0E00000006000000090000000E000000060000DE090000A40E0000FD050000000A0000000E000000060000B40A00008D0E0000FB050000000B0000000E0000000600008A0B0000780E0000F9050000000C0000000E0000000600005F0C0000620E0000F8050000000D0000000E000000060000340D00004D0E0000F6050000000E0000000E000000060000080E0000390E0000F5050000000F0000000E000000060000DB0E0000250E0000F305000000100000000E000000060000AD0F0000120E0000F005000000000000000F00000006000080020000FF0F00003806000000010000000F00000006000056030000FF0F00002C06000000020000000F0000000600002C040000FF0F00002206000000030000000F00000006000002050000FF0F00001A06000000040000000F000000060000D8050000FF0F00001306000000050000000F000000060000AF060000FF0F00000D06000000060000000F00000006000086070000FF0F00000806000000070000000F0000000600005C080000F60F00000406000000080000000F00000006000033090000DE0F00000106000000090000000F000000060000090A0000C70F0000FF050000000A0000000F000000060000DF0A0000B00F0000FD050000000B0000000F000000060000B40B0000990F0000FB050000000C0000000F000000060000890C0000840F0000FA050000000D0000000F0000000600005E0D00006E0F0000F8050000000E0000000F000000060000310E00005A0F0000F7050000000F0000000F000000060000040F0000450F0000F505000000100000000F000000060000D70F0000320F0000F3050000000000000010000000060000AC020000FF0F00003806000000010000001000000006000081030000FF0F00002C06000000020000001000000006000057040000FF0F0000230600000003000000100000000600002D050000FF0F00001B06000000040000001000000006000003060000FF0F000014060000000500000010000000060000DA060000FF0F00000E060000000600000010000000060000B0070000FF0F00000906000000070000001000000006000087080000FF0F0000060600000008000000100000000600005D090000FF0F000003060000000900000010000000060000330A0000FF0F000000060000000A00000010000000060000090B0000FF0F0000FF050000000B00000010000000060000DE0B0000FF0F0000FD050000000C00000010000000060000B30C0000FF0F0000FC050000000D00000010000000060000870D0000FF0F0000FB050000000E000000100000000600005B0E0000FF0F0000F9050000000F000000100000000600002E0F0000FF0F0000F8050000001000000010000000060000FF0F0000FF0F0000F6050000000000000000000000070000060000000000000058070000000100000000000000070000DE000000000000004A070000000200000000000000070000B6010000000000003E0700000003000000000000000700008E020000000000003307000000040000000000000007000067030000000000002A07000000050000000000000007000040040000000000002207000000060000000000000007000018050000000000001B070000000700000000000000070000F10500000000000015070000000800000000000000070000CA060000000000000F070000000900000000000000070000A2070000000000000A070000000A000000000000000700007A0800000000000006070000000B00000000000000070000520900000000000002070000000C00000000000000070000290A000000000000FE060000000D00000000000000070000000B000000000000FB060000000E00000000000000070000D60B000000000000F7060000000F00000000000000070000AB0C000000000000F30600000010000000000000000700007F0D000000000000EE0600000000000000010000000700002C000000FD0000005207000000010000000100000007000003010000E700000044070000000200000001000000070000DB010000D200000038070000000300000001000000070000B4020000BD0000002E0700000004000000010000000700008C030000A90000002507000000050000000100000007000065040000950000001D0700000006000000010000000700003D0500008200000016070000000700000001000000070000160600007000000010070000000800000001000000070000EE0600005E0000000A070000000900000001000000070000C70700004D00000006070000000A000000010000000700009F0800003D00000002070000000B00000001000000070000760900002D000000FE060000000C000000010000000700004D0A00001D000000FA060000000D00000001000000070000240B00000F000000F7060000000E00000001000000070000F90B000000000000F3060000000F00000001000000070000CF0C000000000000EF060000001000000001000000070000A30D000000000000EB06000000000000000200000007000053000000210200004D0700000001000000020000000700002A0100000A0200004007000000020000000200000007000002020000F501000034070000000300000002000000070000DA020000DF01000029070000000400000002000000070000B2030000CB010000200700000005000000020000000700008B040000B70100001807000000060000000200000007000063050000A3010000110700000007000000020000000700003C060000910100000C070000000800000002000000070000140700007F01000006070000000900000002000000070000EC0700006D01000002070000000A00000002000000070000C40800005C010000FE060000000B000000020000000700009B0900004C010000FA060000000C00000002000000070000720A00003C010000F7060000000D00000002000000070000490B00002C010000F3060000000E000000020000000700001E0C00001E010000F0060000000F00000002000000070000F30C00000F010000EC060000001000000002000000070000C70D000001010000E80600000000000000030000000700007B0000004203000049070000000100000003000000070000520100002B0300003B0700000002000000030000000700002A020000150300003007000000030000000300000007000001030000FF02000025070000000400000003000000070000DA030000EA0200001C070000000500000003000000070000B2040000D5020000150700000006000000030000000700008A050000C20200000E07000000070000000300000007000063060000AF020000080700000008000000030000000700003B0700009C02000003070000000900000003000000070000130800008A020000FF060000000A00000003000000070000EA08000079020000FB060000000B00000003000000070000C109000068020000F8060000000C00000003000000070000980A000058020000F4060000000D000000030000000700006E0B000048020000F1060000000E00000003000000070000440C000038020000EE060000000F00000003000000070000190D00002A020000EA060000001000000003000000070000ED0D00001B020000E6060000000000000004000000070000A300000061040000450700000001000000040000000700007A010000490400003807000000020000000400000007000052020000320400002C0700000003000000040000000700002A0300001C0400002207000000040000000400000007000002040000070400001A070000000500000004000000070000DA040000F203000012070000000600000004000000070000B2050000DE0300000C0700000007000000040000000700008A060000CA0300000607000000080000000400000007000062070000B7030000010700000009000000040000000700003A080000A5030000FD060000000A000000040000000700001109000093030000F9060000000B00000004000000070000E809000082030000F6060000000C00000004000000070000BF0A000071030000F3060000000D00000004000000070000950B000061030000EF060000000E000000040000000700006A0C000051030000EC060000000F000000040000000700003F0D000042030000E9060000001000000004000000070000130E000033030000E5060000000000000005000000070000CD0000007D05000043070000000100000005000000070000A401000065050000350700000002000000050000000700007B0200004E0500002A0700000003000000050000000700005303000038050000200700000004000000050000000700002A0400002205000017070000000500000005000000070000020500000D05000010070000000600000005000000070000DA050000F80400000A070000000700000005000000070000B2060000E4040000040700000008000000050000000700008A070000D1040000FF06000000090000000500000007000062080000BE040000FB060000000A0000000500000007000039090000AB040000F8060000000B00000005000000070000100A00009A040000F5060000000C00000005000000070000E70A000089040000F2060000000D00000005000000070000BC0B000078040000EF060000000E00000005000000070000920C000068040000EC060000000F00000005000000070000660D000058040000E80600000010000000050000000700003A0E000049040000E5060000000000000006000000070000F70000009906000040070000000100000006000000070000CE0100008106000033070000000200000006000000070000A502000069060000280700000003000000060000000700007C030000520600001E070000000400000006000000070000540400003C060000160700000005000000060000000700002C050000260600000F070000000600000006000000070000040600001106000008070000000700000006000000070000DB060000FD05000003070000000800000006000000070000B3070000E9050000FF0600000009000000060000000700008B080000D5050000FB060000000A0000000600000007000062090000C3050000F7060000000B00000006000000070000390A0000B1050000F4060000000C000000060000000700000F0B00009F050000F1060000000D00000006000000070000E50B00008E050000EE060000000E00000006000000070000BA0C00007D050000EB060000000F000000060000000700008E0D00006D050000E8060000001000000006000000070000610E00005E050000E506000000000000000700000007000021010000B40700003F070000000100000007000000070000F80100009B07000032070000000200000007000000070000CF0200008307000027070000000300000007000000070000A60300006C0700001D0700000004000000070000000700007E0400005507000015070000000500000007000000070000560500003F0700000E0700000006000000070000000700002D0600002907000008070000000700000007000000070000050700001407000002070000000800000007000000070000DC07000000070000FE060000000900000007000000070000B4080000EC060000FA060000000A000000070000000700008B090000D9060000F7060000000B00000007000000070000610A0000C7060000F4060000000C00000007000000070000380B0000B5060000F1060000000D000000070000000700000D0C0000A3060000EF060000000E00000007000000070000E20C000092060000EC060000000F00000007000000070000B60D000082060000E90600000010000000070000000700008A0E000071060000E50600000000000000080000000700004C010000CE0800003E07000000010000000800000007000023020000B508000031070000000200000008000000070000FA0200009D08000026070000000300000008000000070000D1030000850800001C070000000400000008000000070000A80400006E0800001407000000050000000800000007000080050000570800000D0700000006000000080000000700005706000041080000070700000007000000080000000700002F0700002C080000020700000008000000080000000700000608000017080000FE060000000900000008000000070000DD08000003080000FB060000000A00000008000000070000B4090000EF070000F7060000000B000000080000000700008B0A0000DC070000F5060000000C00000008000000070000610B0000CA070000F2060000000D00000008000000070000360C0000B8070000EF060000000E000000080000000700000B0D0000A7070000ED060000000F00000008000000070000DF0D000096070000EA060000001000000008000000070000B20E000085070000E706000000000000000900000007000078010000E90900003D0700000001000000090000000700004E020000CF0900003007000000020000000900000007000025030000B609000025070000000300000009000000070000FC0300009E0900001C070000000400000009000000070000D30400008709000014070000000500000009000000070000AA050000700900000D070000000600000009000000070000820600005909000007070000000700000009000000070000590700004409000003070000000800000009000000070000300800002E090000FF060000000900000009000000070000080900001A090000FB060000000A00000009000000070000DE09000006090000F8060000000B00000009000000070000B50A0000F2080000F6060000000C000000090000000700008A0B0000DF080000F3060000000D00000009000000070000600C0000CD080000F1060000000E00000009000000070000340D0000BB080000EE060000000F00000009000000070000080E0000AA080000EB060000001000000009000000070000DB0E000099080000E806000000000000000A000000070000A4010000040B00003C07000000010000000A0000000700007A020000EA0A00003007000000020000000A00000007000050030000D10A00002507000000030000000A00000007000027040000B80A00001C07000000040000000A000000070000FE040000A00A00001407000000050000000A000000070000D5050000890A00000E07000000060000000A000000070000AD060000720A00000807000000070000000A000000070000840700005C0A00000307000000080000000A0000000700005B080000460A0000FF06000000090000000A00000007000032090000310A0000FC060000000A0000000A000000070000080A00001D0A0000F9060000000B0000000A000000070000DF0A0000090A0000F7060000000C0000000A000000070000B40B0000F6090000F4060000000D0000000A000000070000890C0000E3090000F2060000000E0000000A0000000700005E0D0000D1090000F0060000000F0000000A000000070000310E0000BF090000ED06000000100000000A000000070000040F0000AD090000EA06000000000000000B000000070000CF010000210C00003C07000000010000000B000000070000A5020000070C00003007000000020000000B0000000700007C030000ED0B00002507000000030000000B00000007000053040000D40B00001C07000000040000000B00000007000029050000BB0B00001507000000050000000B00000007000001060000A30B00000E07000000060000000B000000070000D80600008C0B00000907000000070000000B000000070000AF070000750B00000407000000080000000B000000070000860800005F0B00000007000000090000000B0000000700005C0900004A0B0000FD060000000A0000000B000000070000330A0000350B0000FB060000000B0000000B000000070000090B0000210B0000F8060000000C0000000B000000070000DE0B00000D0B0000F6060000000D0000000B000000070000B30C0000FA0A0000F4060000000E0000000B000000070000870D0000E70A0000F2060000000F0000000B0000000700005B0E0000D50A0000EF06000000100000000B0000000700002E0F0000C30A0000ED06000000000000000C000000070000FB0100003F0D00003C07000000010000000C000000070000D1020000240D00003007000000020000000C000000070000A80300000A0D00002607000000030000000C0000000700007E040000F10C00001D07000000040000000C00000007000055050000D80C00001507000000050000000C0000000700002C060000BF0C00000F07000000060000000C00000007000003070000A80C00000A07000000070000000C000000070000DA070000910C00000507000000080000000C000000070000B00800007A0C00000207000000090000000C00000007000087090000640C0000FF060000000A0000000C0000000700005D0A00004F0C0000FC060000000B0000000C000000070000330B00003A0C0000FA060000000C0000000C000000070000080C0000260C0000F8060000000D0000000C000000070000DD0C0000130C0000F6060000000E0000000C000000070000B10D0000FF0B0000F4060000000F0000000C000000070000850E0000ED0B0000F206000000100000000C000000070000570F0000DA0B0000EF06000000000000000D00000007000027020000600E00003C07000000010000000D000000070000FD020000440E00003007000000020000000D000000070000D30300002A0E00002607000000030000000D000000070000AA040000100E00001D07000000040000000D00000007000080050000F60D00001607000000050000000D00000007000057060000DE0D00001007000000060000000D0000000700002E070000C60D00000B07000000070000000D00000007000005080000AE0D00000607000000080000000D000000070000DB080000970D00000307000000090000000D000000070000B2090000810D000000070000000A0000000D000000070000880A00006B0D0000FE060000000B0000000D0000000700005D0B0000560D0000FC060000000C0000000D000000070000330C0000410D0000FA060000000D0000000D000000070000070D00002D0D0000F8060000000E0000000D000000070000DB0D00001A0D0000F6060000000F0000000D000000070000AE0E0000070D0000F406000000100000000D000000070000810F0000F40C0000F106000000000000000E00000007000053020000830F00003D07000000010000000E00000007000029030000670F00003107000000020000000E000000070000FF0300004C0F00002707000000030000000E000000070000D5040000320F00001E07000000040000000E000000070000AB050000180F00001707000000050000000E00000007000082060000FF0E00001107000000060000000E00000007000059070000E60E00000C07000000070000000E0000000700002F080000CE0E00000807000000080000000E00000007000006090000B70E00000407000000090000000E000000070000DC090000A00E000002070000000A0000000E000000070000B20A00008A0E0000FF060000000B0000000E000000070000880B0000740E0000FD060000000C0000000E0000000700005D0C00005F0E0000FC060000000D0000000E000000070000310D00004B0E0000FA060000000E0000000E000000070000050E0000370E0000F8060000000F0000000E000000070000D80E0000230E0000F606000000100000000E000000070000AA0F0000100E0000F406000000000000000F0000000700007F020000FF0F00003D07000000010000000F00000007000054030000FF0F00003107000000020000000F0000000700002A040000FF0F00002707000000030000000F00000007000000050000FF0F00001F07000000040000000F000000070000D7050000FF0F00001807000000050000000F000000070000AD060000FF0F00001207000000060000000F00000007000084070000FF0F00000D07000000070000000F0000000700005A080000F20F00000907000000080000000F00000007000030090000DA0F00000607000000090000000F000000070000060A0000C30F000003070000000A0000000F000000070000DC0A0000AC0F000001070000000B0000000F000000070000B20B0000960F0000FF060000000C0000000F000000070000860C0000800F0000FE060000000D0000000F0000000700005B0D00006B0F0000FC060000000E0000000F0000000700002E0E0000570F0000FB060000000F0000000F000000070000010F0000430F0000F906000000100000000F000000070000D30F0000300F0000F7060000000000000010000000070000AB020000FF0F00003D07000000010000001000000007000080030000FF0F00003107000000020000001000000007000055040000FF0F0000270700000003000000100000000700002B050000FF0F00001F07000000040000001000000007000001060000FF0F000018070000000500000010000000070000D8060000FF0F000012070000000600000010000000070000AE070000FF0F00000E07000000070000001000000007000084080000FF0F00000A0700000008000000100000000700005A090000FF0F000007070000000900000010000000070000300A0000FF0F000004070000000A00000010000000070000060B0000FF0F000002070000000B00000010000000070000DB0B0000FF0F000001070000000C00000010000000070000B00C0000FF0F0000FF060000000D00000010000000070000840D0000FF0F0000FE060000000E00000010000000070000580E0000FF0F0000FD060000000F000000100000000700002A0F0000FF0F0000FB060000001000000010000000070000FC0F0000FF0F0000F9060000000000000000000000080000060000000000000061080000000100000000000000080000DE0000000000000053080000000200000000000000080000B601000000000000470800000003000000000000000800008E020000000000003C0800000004000000000000000800006703000000000000320800000005000000000000000800003F040000000000002A080000000600000000000000080000180500000000000022080000000700000000000000080000F0050000000000001C080000000800000000000000080000C90600000000000016080000000900000000000000080000A10700000000000011080000000A0000000000000008000079080000000000000D080000000B00000000000000080000510900000000000009080000000C00000000000000080000280A00000000000005080000000D00000000000000080000FE0A00000000000001080000000E00000000000000080000D40B000000000000FD070000000F00000000000000080000A90C000000000000F80700000010000000000000000800007D0D000000000000F40700000000000000010000000800002C000000FE0000005B08000000010000000100000008000004010000E80000004D080000000200000001000000080000DB010000D300000041080000000300000001000000080000B3020000BE000000360800000004000000010000000800008C030000AA0000002C0800000005000000010000000800006404000096000000240800000006000000010000000800003D050000830000001D080000000700000001000000080000150600007100000017080000000800000001000000080000ED0600006000000011080000000900000001000000080000C60700004F0000000D080000000A000000010000000800009D0800003E00000008080000000B00000001000000080000750900002E00000004080000000C000000010000000800004C0A00001F00000000080000000D00000001000000080000220B000010000000FC070000000E00000001000000080000F80B000001000000F9070000000F00000001000000080000CD0C000000000000F4070000001000000001000000080000A10D000000000000F00700000000000000020000000800005300000021020000550800000001000000020000000800002A0100000B0200004808000000020000000200000008000002020000F50100003C080000000300000002000000080000DA020000E001000031080000000400000002000000080000B2030000CB010000280800000005000000020000000800008A040000B70100002008000000060000000200000008000063050000A4010000190800000007000000020000000800003B0600009101000013080000000800000002000000080000130700007F0100000D080000000900000002000000080000EB0700006E01000009080000000A00000002000000080000C30800005D01000004080000000B000000020000000800009A0900004D01000000080000000C00000002000000080000710A00003D010000FD070000000D00000002000000080000470B00002E010000F9070000000E000000020000000800001C0C00001F010000F5070000000F00000002000000080000F10C000010010000F1070000001000000002000000080000C50D000003010000ED0700000000000000030000000800007B0000004203000051080000000100000003000000080000520100002B0300004308000000020000000300000008000029020000140300003708000000030000000300000008000001030000FF0200002D080000000400000003000000080000D9030000EA02000024080000000500000003000000080000B1040000D60200001C08000000060000000300000008000089050000C20200001508000000070000000300000008000062060000AF0200000F0800000008000000030000000800003A0700009C0200000A080000000900000003000000080000110800008B02000005080000000A00000003000000080000E90800007902000001080000000B00000003000000080000C009000068020000FE070000000C00000003000000080000970A000058020000FA070000000D000000030000000800006D0B000049020000F7070000000E00000003000000080000420C000039020000F3070000000F00000003000000080000170D00002B020000EF070000001000000003000000080000EA0D00001C020000EB070000000000000004000000080000A3000000600400004D0800000001000000040000000800007A0100004804000040080000000200000004000000080000520200003204000034080000000300000004000000080000290300001C0400002A080000000400000004000000080000010400000604000021080000000500000004000000080000D9040000F203000019080000000600000004000000080000B1050000DE0300001208000000070000000400000008000089060000CA0300000C08000000080000000400000008000061070000B70300000708000000090000000400000008000039080000A503000003080000000A000000040000000800001009000093030000FF070000000B00000004000000080000E709000082030000FB070000000C00000004000000080000BD0A000071030000F8070000000D00000004000000080000930B000061030000F5070000000E00000004000000080000680C000052030000F1070000000F000000040000000800003D0D000042030000EE070000001000000004000000080000110E000034030000EA070000000000000005000000080000CD0000007C0500004A080000000100000005000000080000A4010000640500003D0800000002000000050000000800007B0200004D050000310800000003000000050000000800005203000037050000270800000004000000050000000800002A040000210500001E080000000500000005000000080000020500000C05000016080000000600000005000000080000DA050000F704000010080000000700000005000000080000B1060000E40400000A08000000080000000500000008000089070000D00400000508000000090000000500000008000061080000BE04000001080000000A0000000500000008000038090000AB040000FD070000000B000000050000000800000F0A00009A040000FA070000000C00000005000000080000E50A000089040000F7070000000D00000005000000080000BB0B000078040000F4070000000E00000005000000080000900C000068040000F0070000000F00000005000000080000640D000059040000ED070000001000000005000000080000370E000049040000E9070000000000000006000000080000F70000009706000047080000000100000006000000080000CD0100007F0600003A080000000200000006000000080000A4020000680600002F0800000003000000060000000800007C0300005106000025080000000400000006000000080000530400003B0600001C0800000005000000060000000800002B050000250600001508000000060000000600000008000003060000100600000E080000000700000006000000080000DA060000FC05000009080000000800000006000000080000B2070000E80500000408000000090000000600000008000089080000D505000000080000000A0000000600000008000060090000C2050000FD070000000B00000006000000080000370A0000B0050000F9070000000C000000060000000800000D0B00009F050000F6070000000D00000006000000080000E30B00008E050000F3070000000E00000006000000080000B80C00007D050000F0070000000F000000060000000800008C0D00006D050000ED0700000010000000060000000800005F0E00005E050000E907000000000000000700000008000021010000B207000046080000000100000007000000080000F80100009907000039080000000200000007000000080000CF020000810700002D080000000300000007000000080000A60300006A070000230800000004000000070000000800007D040000530700001B080000000500000007000000080000550500003D070000140800000006000000070000000800002C060000280700000D080000000700000007000000080000040700001307000008080000000800000007000000080000DB070000FF06000004080000000900000007000000080000B2080000EB06000000080000000A0000000700000008000089090000D8060000FC070000000B00000007000000080000600A0000C6060000F9070000000C00000007000000080000360B0000B4060000F6070000000D000000070000000800000B0C0000A3060000F3070000000E00000007000000080000E00C000092060000F0070000000F00000007000000080000B40D000081060000ED070000001000000007000000080000870E000072060000EA0700000000000000080000000800004C010000CC0800004408000000010000000800000008000023020000B308000037080000000200000008000000080000F90200009A0800002C080000000300000008000000080000D00300008308000022080000000400000008000000080000A80400006C0800001A0800000005000000080000000800007F0500005508000013080000000600000008000000080000560600003F0800000D0800000007000000080000000800002E0700002A08000008080000000800000008000000080000050800001608000003080000000900000008000000080000DC0800000208000000080000000A00000008000000080000B3090000EE070000FC070000000B00000008000000080000890A0000DB070000F9070000000C000000080000000800005F0B0000C9070000F7070000000D00000008000000080000340C0000B7070000F4070000000E00000008000000080000090D0000A6070000F1070000000F00000008000000080000DD0D000095070000EE070000001000000008000000080000B00E000085070000EB07000000000000000900000008000078010000E6090000430800000001000000090000000800004E020000CD0900003608000000020000000900000008000024030000B40900002B080000000300000009000000080000FB0300009C09000022080000000400000009000000080000D2040000840900001A080000000500000009000000080000A90500006D0900001308000000060000000900000008000081060000570900000D0800000007000000090000000800005807000042090000080800000008000000090000000800002F0800002D09000004080000000900000009000000080000060900001809000000080000000A00000009000000080000DD09000004090000FD070000000B00000009000000080000B30A0000F1080000FA070000000C00000009000000080000880B0000DE080000F7070000000D000000090000000800005E0C0000CC080000F5070000000E00000009000000080000320D0000BA080000F2070000000F00000009000000080000060E0000A9080000EF070000001000000009000000080000D90E000098080000EC07000000000000000A000000080000A3010000010B00004208000000010000000A00000008000079020000E70A00003608000000020000000A00000008000050030000CE0A00002B08000000030000000A00000008000026040000B50A00002208000000040000000A000000080000FD0400009E0A00001A08000000050000000A000000080000D4050000860A00001308000000060000000A000000080000AB060000700A00000D08000000070000000A000000080000830700005A0A00000808000000080000000A0000000800005A080000440A00000408000000090000000A000000080000300900002F0A000001080000000A0000000A000000080000070A00001B0A0000FE070000000B0000000A000000080000DD0A0000070A0000FB070000000C0000000A000000080000B20B0000F4090000F9070000000D0000000A000000080000870C0000E2090000F6070000000E0000000A0000000800005C0D0000D0090000F4070000000F0000000A0000000800002F0E0000BE090000F107000000100000000A000000080000020F0000AD090000EE07000000000000000B000000080000CF0100001D0C00004208000000010000000B000000080000A5020000030C00003508000000020000000B0000000800007B030000E90B00002B08000000030000000B00000008000052040000D00B00002208000000040000000B00000008000028050000B80B00001A08000000050000000B000000080000FF050000A00B00001308000000060000000B000000080000D6060000890B00000D08000000070000000B000000080000AD070000730B00000908000000080000000B000000080000840800005D0B00000508000000090000000B0000000800005B090000480B000002080000000A0000000B000000080000310A0000330B0000FF070000000B0000000B000000080000070B00001F0B0000FC070000000C0000000B000000080000DC0B00000B0B0000FA070000000D0000000B000000080000B10C0000F80A0000F8070000000E0000000B000000080000850D0000E60A0000F5070000000F0000000B000000080000590E0000D40A0000F307000000100000000B0000000800002B0F0000C20A0000F007000000000000000C000000080000FB0100003B0D00004208000000010000000C000000080000D1020000200D00003508000000020000000C000000080000A7030000060D00002B08000000030000000C0000000800007D040000ED0C00002208000000040000000C00000008000054050000D40C00001A08000000050000000C0000000800002B060000BC0C00001408000000060000000C00000008000001070000A50C00000E08000000070000000C000000080000D80700008E0C00000A08000000080000000C000000080000AF080000780C00000608000000090000000C00000008000085090000620C000003080000000A0000000C0000000800005B0A00004D0C000000080000000B0000000C000000080000310B0000380C0000FE070000000C0000000C000000080000060C0000240C0000FC070000000D0000000C000000080000DB0C0000110C0000FA070000000E0000000C000000080000AF0D0000FE0B0000F7070000000F0000000C000000080000820E0000EB0B0000F507000000100000000C000000080000550F0000D90B0000F207000000000000000D000000080000270200005B0E00004108000000010000000D000000080000FC020000400E00003508000000020000000D000000080000D2030000250E00002B08000000030000000D000000080000A90400000C0E00002208000000040000000D0000000800007F050000F20D00001B08000000050000000D00000008000056060000DA0D00001408000000060000000D0000000800002C070000C20D00000F08000000070000000D00000008000003080000AB0D00000A08000000080000000D000000080000D9080000940D00000708000000090000000D000000080000B00900007E0D000004080000000A0000000D000000080000860A0000690D000001080000000B0000000D0000000800005B0B0000540D0000FF070000000C0000000D000000080000300C00003F0D0000FD070000000D0000000D000000080000050D00002B0D0000FB070000000E0000000D000000080000D90D0000180D0000F9070000000F0000000D000000080000AC0E0000050D0000F707000000100000000D0000000800007E0F0000F30C0000F407000000000000000E000000080000530200007E0F00004108000000010000000E00000008000028030000620F00003508000000020000000E000000080000FE030000470F00002B08000000030000000E000000080000D40400002D0F00002208000000040000000E000000080000AA050000130F00001B08000000050000000E00000008000081060000FB0E00001508000000060000000E00000008000057070000E20E00001008000000070000000E0000000800002E080000CB0E00000B08000000080000000E00000008000004090000B40E00000808000000090000000E000000080000DA0900009D0E000005080000000A0000000E000000080000B00A0000870E000003080000000B0000000E000000080000850B0000720E000001080000000C0000000E0000000800005A0C00005D0E0000FF070000000D0000000E0000000800002F0D0000490E0000FD070000000E0000000E000000080000030E0000350E0000FB070000000F0000000E000000080000D50E0000210E0000F907000000100000000E000000080000A80F00000F0E0000F707000000000000000F0000000800007E020000FF0F00004108000000010000000F00000008000053030000FF0F00003508000000020000000F00000008000029040000FF0F00002B08000000030000000F000000080000FF040000FF0F00002308000000040000000F000000080000D5050000FF0F00001B08000000050000000F000000080000AC060000FF0F00001508000000060000000F00000008000082070000FF0F00001008000000070000000F00000008000058080000ED0F00000C08000000080000000F0000000800002F090000D60F00000908000000090000000F000000080000040A0000BF0F000006080000000A0000000F000000080000DA0A0000A90F000004080000000B0000000F000000080000AF0B0000930F000002080000000C0000000F000000080000840C00007E0F000001080000000D0000000F000000080000580D0000690F0000FF070000000E0000000F0000000800002C0E0000550F0000FD070000000F0000000F000000080000FF0E0000410F0000FB07000000100000000F000000080000D10F00002E0F0000F9070000000000000010000000080000AA020000FF0F0000410800000001000000100000000800007F030000FF0F00003508000000020000001000000008000054040000FF0F00002B0800000003000000100000000800002A050000FF0F00002308000000040000001000000008000000060000FF0F00001C080000000500000010000000080000D6060000FF0F000016080000000600000010000000080000AC070000FF0F00001108000000070000001000000008000083080000FF0F00000D08000000080000001000000008000059090000FF0F00000A0800000009000000100000000800002E0A0000FF0F000008080000000A00000010000000080000040B0000FF0F000005080000000B00000010000000080000D90B0000FF0F000004080000000C00000010000000080000AE0C0000FF0F000002080000000D00000010000000080000820D0000FF0F000001080000000E00000010000000080000550E0000FF0F0000FF070000000F00000010000000080000280F0000FF0F0000FE070000001000000010000000080000FA0F0000FF0F0000FB070000000000000000000000090000080000000000000069090000000100000000000000090000DF000000000000005B090000000200000000000000090000B7010000000000004E0900000003000000000000000900008F0200000000000043090000000400000000000000090000670300000000000039090000000500000000000000090000400400000000000031090000000600000000000000090000180500000000000029090000000700000000000000090000F00500000000000023090000000800000000000000090000C9060000000000001D090000000900000000000000090000A10700000000000018090000000A00000000000000090000790800000000000013090000000B0000000000000009000050090000000000000F090000000C00000000000000090000270A0000000000000A090000000D00000000000000090000FD0A00000000000006090000000E00000000000000090000D30B00000000000002090000000F00000000000000090000A80C000000000000FD0800000010000000000000000900007C0D000000000000F90800000000000000010000000900002D000000FE0000006309000000010000000100000009000005010000E800000055090000000200000001000000090000DC010000D300000048090000000300000001000000090000B4020000BE0000003D0900000004000000010000000900008C030000AA0000003409000000050000000100000009000065040000970000002B0900000006000000010000000900003D050000840000002409000000070000000100000009000015060000720000001D090000000800000001000000090000ED0600006000000018090000000900000001000000090000C50700004F00000013090000000A000000010000000900009D0800003F0000000E090000000B00000001000000090000740900002F0000000A090000000C000000010000000900004B0A00002000000006090000000D00000001000000090000210B00001100000002090000000E00000001000000090000F70B000003000000FE080000000F00000001000000090000CB0C000000000000F90800000010000000010000000900009F0D000000000000F508000000000000000200000009000054000000210200005D0900000001000000020000000900002B0100000B0200004F09000000020000000200000009000003020000F501000043090000000300000002000000090000DA020000E001000038090000000400000002000000090000B2030000CB0100002E0900000005000000020000000900008B040000B70100002609000000060000000200000009000063050000A40100001F0900000007000000020000000900003B0600009201000019090000000800000002000000090000130700008001000013090000000900000002000000090000EB0700006E0100000E090000000A00000002000000090000C20800005D0100000A090000000B00000002000000090000990900004D01000006090000000C00000002000000090000700A00003D01000002090000000D00000002000000090000460B00002E010000FE080000000E000000020000000900001B0C000020010000FA080000000F00000002000000090000F00C000011010000F6080000001000000002000000090000C40D000004010000F10800000000000000030000000900007C0000004103000058090000000100000003000000090000530100002A0300004A0900000002000000030000000900002A020000140300003E09000000030000000300000009000002030000FE02000034090000000400000003000000090000DA030000EA0200002A090000000500000003000000090000B2040000D5020000220900000006000000030000000900008A050000C20200001B09000000070000000300000009000062060000AF02000015090000000800000003000000090000390700009C02000010090000000900000003000000090000110800008B0200000B090000000A00000003000000090000E80800007902000007090000000B00000003000000090000BF0900006902000003090000000C00000003000000090000960A000059020000FF080000000D000000030000000900006C0B000049020000FB080000000E00000003000000090000410C00003A020000F8080000000F00000003000000090000150D00002B020000F4080000001000000003000000090000E90D00001D020000EF080000000000000004000000090000A40000005F040000540900000001000000040000000900007B010000470400004609000000020000000400000009000052020000310400003A0900000003000000040000000900002A0300001B04000030090000000400000004000000090000010400000604000027090000000500000004000000090000D9040000F10300001F090000000600000004000000090000B1050000DD0300001809000000070000000400000009000089060000CA0300001209000000080000000400000009000061070000B70300000D09000000090000000400000009000038080000A503000008090000000A000000040000000900000F0900009303000004090000000B00000004000000090000E60900008203000000090000000C00000004000000090000BD0A000071030000FD080000000D00000004000000090000920B000061030000F9080000000E00000004000000090000670C000052030000F6080000000F000000040000000900003C0D000043030000F20800000010000000040000000900000F0E000034030000EE080000000000000005000000090000CE0000007B05000051090000000100000005000000090000A401000063050000430900000002000000050000000900007B0200004C0500003709000000030000000500000009000053030000360500002D0900000004000000050000000900002A0400002005000024090000000500000005000000090000020500000B0500001C090000000600000005000000090000DA050000F704000016090000000700000005000000090000B1060000E30400001009000000080000000500000009000089070000D00400000B09000000090000000500000009000060080000BD04000006090000000A0000000500000009000037090000AB04000002090000000B000000050000000900000E0A000099040000FF080000000C00000005000000090000E40A000088040000FB080000000D00000005000000090000BA0B000078040000F8080000000E000000050000000900008E0C000068040000F5080000000F00000005000000090000630D000059040000F1080000001000000005000000090000360E00004A040000ED080000000000000006000000090000F7000000950600004E090000000100000006000000090000CE0100007D06000040090000000200000006000000090000A502000066060000350900000003000000060000000900007C0300004F0600002B0900000004000000060000000900005304000039060000220900000005000000060000000900002B050000240600001A090000000600000006000000090000030600000F06000014090000000700000006000000090000DA060000FB0500000E090000000800000006000000090000B1070000E70500000909000000090000000600000009000089080000D405000005090000000A0000000600000009000060090000C205000001090000000B00000006000000090000360A0000B0050000FE080000000C000000060000000900000C0B00009E050000FB080000000D00000006000000090000E20B00008D050000F7080000000E00000006000000090000B60C00007D050000F4080000000F000000060000000900008A0D00006D050000F10800000010000000060000000900005E0E00005E050000ED08000000000000000700000009000022010000AF0700004C090000000100000007000000090000F8010000970700003E090000000200000007000000090000CF0200007F07000033090000000300000007000000090000A603000068070000290900000004000000070000000900007D0400005107000020090000000500000007000000090000550500003B070000190900000006000000070000000900002C060000260700001209000000070000000700000009000003070000120700000D090000000800000007000000090000DB070000FE06000008090000000900000007000000090000B2080000EA06000004090000000A0000000700000009000089090000D706000001090000000B000000070000000900005F0A0000C5060000FD080000000C00000007000000090000350B0000B3060000FA080000000D000000070000000900000A0C0000A2060000F7080000000E00000007000000090000DF0C000091060000F4080000000F00000007000000090000B30D000081060000F1080000001000000007000000090000860E000071060000ED0800000000000000080000000900004D010000C90800004A09000000010000000800000009000023020000B00800003D090000000200000008000000090000FA0200009808000031090000000300000008000000090000D00300008008000028090000000400000008000000090000A8040000690800001F0900000005000000080000000900007F0500005308000018090000000600000008000000090000560600003D080000120900000007000000080000000900002D070000280800000C090000000800000008000000090000040800001408000008090000000900000008000000090000DB0800000008000004090000000A00000008000000090000B2090000ED07000000090000000B00000008000000090000880A0000DA070000FD080000000C000000080000000900005E0B0000C8070000FA080000000D00000008000000090000330C0000B6070000F8080000000E00000008000000090000070D0000A5070000F5080000000F00000008000000090000DB0D000095070000F1080000001000000008000000090000AE0E000084070000EE08000000000000000900000009000078010000E3090000480900000001000000090000000900004E020000C90900003C09000000020000000900000009000024030000B109000030090000000300000009000000090000FB0300009909000027090000000400000009000000090000D2040000820900001E090000000500000009000000090000A90500006B09000017090000000600000009000000090000800600005509000011090000000700000009000000090000580700003F0900000C0900000008000000090000000900002F0800002B09000008090000000900000009000000090000050900001609000004090000000A00000009000000090000DC0900000309000001090000000B00000009000000090000B20A0000F0080000FE080000000C00000009000000090000870B0000DD080000FB080000000D000000090000000900005C0C0000CB080000F8080000000E00000009000000090000310D0000B9080000F6080000000F00000009000000090000040E0000A8080000F3080000001000000009000000090000D70E000098080000EF08000000000000000A000000090000A4010000FD0A00004709000000010000000A00000009000079020000E30A00003B09000000020000000A00000009000050030000CA0A00003009000000030000000A00000009000026040000B20A00002609000000040000000A000000090000FD0400009A0A00001E09000000050000000A000000090000D4050000830A00001709000000060000000A000000090000AB0600006D0A00001109000000070000000A00000009000082070000570A00000C09000000080000000A00000009000059080000420A00000809000000090000000A0000000900002F0900002D0A000004090000000A0000000A000000090000060A0000190A000001090000000B0000000A000000090000DC0A0000060A0000FF080000000C0000000A000000090000B10B0000F3090000FC080000000D0000000A000000090000860C0000E0090000F9080000000E0000000A0000000900005A0D0000CE090000F7080000000F0000000A0000000900002E0E0000BD090000F408000000100000000A000000090000000F0000AC090000F108000000000000000B000000090000CF010000190C00004709000000010000000B000000090000A5020000FF0B00003A09000000020000000B0000000900007B030000E50B00002F09000000030000000B00000009000052040000CD0B00002609000000040000000B00000009000028050000B40B00001E09000000050000000B000000090000FF0500009D0B00001709000000060000000B000000090000D6060000860B00001109000000070000000B000000090000AD070000700B00000D09000000080000000B000000090000830800005A0B00000909000000090000000B0000000900005A090000450B000005090000000A0000000B000000090000300A0000310B000002090000000B0000000B000000090000060B00001D0B000000090000000C0000000B000000090000DB0B0000090B0000FD080000000D0000000B000000090000B00C0000F70A0000FB080000000E0000000B000000090000840D0000E40A0000F8080000000F0000000B000000090000570E0000D20A0000F608000000100000000B0000000900002A0F0000C10A0000F308000000000000000C000000090000FB010000360D00004609000000010000000C000000090000D10200001C0D00003A09000000020000000C000000090000A7030000020D00002F09000000030000000C0000000900007D040000E90C00002609000000040000000C00000009000054050000D00C00001E09000000050000000C0000000900002A060000B80C00001709000000060000000C00000009000001070000A10C00001209000000070000000C000000090000D80700008A0C00000D09000000080000000C000000090000AE080000740C00000909000000090000000C000000090000840900005F0C000006090000000A0000000C0000000900005A0A00004A0C000003090000000B0000000C000000090000300B0000360C000001090000000C0000000C000000090000050C0000220C0000FF080000000D0000000C000000090000DA0C00000F0C0000FC080000000E0000000C000000090000AE0D0000FC0B0000FA080000000F0000000C000000090000810E0000EA0B0000F708000000100000000C000000090000530F0000D80B0000F508000000000000000D00000009000027020000560E00004609000000010000000D000000090000FC0200003B0E00003909000000020000000D000000090000D2030000210E00002F09000000030000000D000000090000A8040000070E00002609000000040000000D0000000900007F050000EE0D00001E09000000050000000D00000009000055060000D60D00001809000000060000000D0000000900002C070000BE0D00001209000000070000000D00000009000002080000A70D00000E09000000080000000D000000090000D9080000910D00000A09000000090000000D000000090000AF0900007B0D000007090000000A0000000D000000090000850A0000660D000004090000000B0000000D0000000900005A0B0000510D000002090000000C0000000D0000000900002F0C00003D0D000000090000000D0000000D000000090000040D0000290D0000FE080000000E0000000D000000090000D70D0000160D0000FC080000000F0000000D000000090000AA0E0000030D0000F908000000100000000D0000000900007C0F0000F10C0000F708000000000000000E00000009000053020000780F00004509000000010000000E000000090000280300005D0F00003909000000020000000E000000090000FE030000420F00002F09000000030000000E000000090000D4040000280F00002609000000040000000E000000090000AA0500000F0F00001E09000000050000000E00000009000080060000F60E00001809000000060000000E00000009000057070000DE0E00001309000000070000000E0000000900002D080000C70E00000F09000000080000000E00000009000003090000B00E00000B09000000090000000E000000090000D9090000990E000008090000000A0000000E000000090000AF0A0000840E000006090000000B0000000E000000090000840B00006F0E000003090000000C0000000E000000090000590C00005A0E000001090000000D0000000E0000000900002D0D0000460E000000090000000E0000000E000000090000010E0000320E0000FE080000000F0000000E000000090000D40E00001F0E0000FB08000000100000000E000000090000A60F00000D0E0000F908000000000000000F0000000900007E020000FF0F00004509000000010000000F00000009000053030000FF0F00003909000000020000000F00000009000029040000FF0F00002F09000000030000000F000000090000FF040000FF0F00002609000000040000000F000000090000D5050000FF0F00001F09000000050000000F000000090000AB060000FF0F00001809000000060000000F00000009000081070000FF0F00001309000000070000000F00000009000057080000E90F00000F09000000080000000F0000000900002E090000D20F00000C09000000090000000F000000090000030A0000BB0F000009090000000A0000000F000000090000D90A0000A50F000007090000000B0000000F000000090000AE0B00008F0F000005090000000C0000000F000000090000830C00007A0F000003090000000D0000000F000000090000570D0000660F000001090000000E0000000F0000000900002A0E0000520F0000FF080000000F0000000F000000090000FD0E00003E0F0000FD08000000100000000F000000090000CF0F00002B0F0000FB080000000000000010000000090000A9020000FF0F0000440900000001000000100000000900007E030000FF0F00003809000000020000001000000009000054040000FF0F00002E0900000003000000100000000900002A050000FF0F000026090000000400000010000000090000FF050000FF0F00001F090000000500000010000000090000D6060000FF0F000019090000000600000010000000090000AC070000FF0F00001409000000070000001000000009000082080000FF0F00001009000000080000001000000009000058090000FF0F00000C0900000009000000100000000900002D0A0000FF0F00000A090000000A00000010000000090000030B0000FF0F000008090000000B00000010000000090000D80B0000FF0F000006090000000C00000010000000090000AC0C0000FF0F000004090000000D00000010000000090000800D0000FF0F000003090000000E00000010000000090000540E0000FF0F000001090000000F00000010000000090000260F0000FF0F0000FF080000001000000010000000090000F80F0000FF0F0000FD0800000000000000000000000A00000A00000000000000710A00000001000000000000000A0000E100000000000000620A00000002000000000000000A0000B901000000000000550A00000003000000000000000A000091020000000000004A0A00000004000000000000000A00006903000000000000400A00000005000000000000000A00004104000000000000370A00000006000000000000000A00001A05000000000000300A00000007000000000000000A0000F205000000000000290A00000008000000000000000A0000CA06000000000000230A00000009000000000000000A0000A2070000000000001D0A0000000A000000000000000A00007908000000000000180A0000000B000000000000000A00005109000000000000140A0000000C000000000000000A0000270A0000000000000F0A0000000D000000000000000A0000FE0A0000000000000B0A0000000E000000000000000A0000D30B000000000000060A0000000F000000000000000A0000A80C000000000000020A00000010000000000000000A00007C0D000000000000FD0900000000000000010000000A000030000000FD0000006A0A00000001000000010000000A000007010000E80000005C0A00000002000000010000000A0000DE010000D20000004F0A00000003000000010000000A0000B6020000BE000000440A00000004000000010000000A00008E030000AA0000003A0A00000005000000010000000A00006604000096000000310A00000006000000010000000A00003E050000840000002A0A00000007000000010000000A00001606000071000000230A00000008000000010000000A0000EE060000600000001D0A00000009000000010000000A0000C60700004F000000180A0000000A000000010000000A00009E0800003F000000130A0000000B000000010000000A0000750900002F0000000F0A0000000C000000010000000A00004B0A00001F0000000A0A0000000D000000010000000A0000210B000011000000060A0000000E000000010000000A0000F70B000002000000020A0000000F000000010000000A0000CB0C000000000000FD0900000010000000010000000A00009F0D000000000000F80900000000000000020000000A00005600000020020000640A00000001000000020000000A00002D01000009020000560A00000002000000020000000A000005020000F4010000490A00000003000000020000000A0000DC020000DF0100003E0A00000004000000020000000A0000B4030000CA010000340A00000005000000020000000A00008C040000B70100002C0A00000006000000020000000A000064050000A3010000250A00000007000000020000000A00003C060000910100001E0A00000008000000020000000A0000140700007F010000180A00000009000000020000000A0000EC0700006E010000130A0000000A000000020000000A0000C30800005D0100000F0A0000000B000000020000000A00009A0900004D0100000A0A0000000C000000020000000A0000700A00003D010000060A0000000D000000020000000A0000460B00002E010000020A0000000E000000020000000A00001B0C00001F010000FE090000000F000000020000000A0000F00C000011010000FA0900000010000000020000000A0000C30D000003010000F50900000000000000030000000A00007E0000003F0300005F0A00000001000000030000000A00005501000028030000510A00000002000000030000000A00002C02000012030000440A00000003000000030000000A000003030000FD020000390A00000004000000030000000A0000DB030000E8020000300A00000005000000030000000A0000B3040000D4020000280A00000006000000030000000A00008B050000C1020000200A00000007000000030000000A000063060000AE0200001A0A00000008000000030000000A00003A0700009B020000150A00000009000000030000000A0000120800008A020000100A0000000A000000030000000A0000E9080000790200000B0A0000000B000000030000000A0000C009000068020000070A0000000C000000030000000A0000960A000058020000030A0000000D000000030000000A00006C0B000048020000FF090000000E000000030000000A0000410C000039020000FB090000000F000000030000000A0000150D00002B020000F70900000010000000030000000A0000E90D00001D020000F30900000000000000040000000A0000A60000005D0400005A0A00000001000000040000000A00007D010000450400004C0A00000002000000040000000A0000540200002F040000400A00000003000000040000000A00002B03000019040000360A00000004000000040000000A000003040000040400002C0A00000005000000040000000A0000DB040000EF030000240A00000006000000040000000A0000B2050000DB0300001D0A00000007000000040000000A00008A060000C8030000170A00000008000000040000000A000062070000B5030000120A00000009000000040000000A000039080000A30300000D0A0000000A000000040000000A00001009000092030000080A0000000B000000040000000A0000E709000081030000050A0000000C000000040000000A0000BD0A000070030000010A0000000D000000040000000A0000920B000060030000FD090000000E000000040000000A0000670C000051030000F9090000000F000000040000000A00003C0D000042030000F50900000010000000040000000A00000F0E000034030000F10900000000000000050000000A0000D000000078050000560A00000001000000050000000A0000A601000060050000490A00000002000000050000000A00007D0200004A0500003D0A00000003000000050000000A00005403000033050000320A00000004000000050000000A00002C0400001E050000290A00000005000000050000000A00000305000009050000210A00000006000000050000000A0000DB050000F50400001A0A00000007000000050000000A0000B2060000E1040000140A00000008000000050000000A00008A070000CE0400000F0A00000009000000050000000A000061080000BB0400000B0A0000000A000000050000000A000038090000A9040000060A0000000B000000050000000A00000E0A000098040000030A0000000C000000050000000A0000E40A000087040000FF090000000D000000050000000A0000BA0B000077040000FC090000000E000000050000000A00008E0C000067040000F8090000000F000000050000000A0000630D000058040000F40900000010000000050000000A0000360E000049040000F00900000000000000060000000A0000F900000092060000530A00000001000000060000000A0000D00100007A060000460A00000002000000060000000A0000A6020000630600003A0A00000003000000060000000A00007D0300004C060000300A00000004000000060000000A00005504000036060000270A00000005000000060000000A00002C050000210600001F0A00000006000000060000000A0000040600000C060000180A00000007000000060000000A0000DB060000F8050000120A00000008000000060000000A0000B2070000E50500000D0A00000009000000060000000A000089080000D2050000090A0000000A000000060000000A000060090000C0050000050A0000000B000000060000000A0000360A0000AE050000010A0000000C000000060000000A00000C0B00009D050000FE090000000D000000060000000A0000E20B00008C050000FB090000000E000000060000000A0000B60C00007C050000F7090000000F000000060000000A00008A0D00006C050000F40900000010000000060000000A00005D0E00005D050000F00900000000000000070000000A000024010000AC070000510A00000001000000070000000A0000FA01000093070000440A00000002000000070000000A0000D00200007C070000380A00000003000000070000000A0000A7030000650700002E0A00000004000000070000000A00007F0400004E070000250A00000005000000070000000A000056050000390700001D0A00000006000000070000000A00002D06000024070000170A00000007000000070000000A0000040700000F070000110A00000008000000070000000A0000DB070000FB0600000C0A00000009000000070000000A0000B2080000E8060000080A0000000A000000070000000A000089090000D5060000040A0000000B000000070000000A00005F0A0000C3060000010A0000000C000000070000000A0000350B0000B1060000FE090000000D000000070000000A00000A0C0000A0060000FA090000000E000000070000000A0000DF0C000090060000F7090000000F000000070000000A0000B20D000080060000F40900000010000000070000000A0000850E000070060000F00900000000000000080000000A00004F010000C50800004F0A00000001000000080000000A000025020000AC080000420A00000002000000080000000A0000FB02000094080000360A00000003000000080000000A0000D20300007D0800002C0A00000004000000080000000A0000A904000066080000240A00000005000000080000000A000080050000500800001C0A00000006000000080000000A0000570600003A080000160A00000007000000080000000A00002E07000026080000100A00000008000000080000000A000005080000110800000C0A00000009000000080000000A0000DC080000FE070000070A0000000A000000080000000A0000B2090000EA070000040A0000000B000000080000000A0000880A0000D8070000010A0000000C000000080000000A00005E0B0000C6070000FE090000000D000000080000000A0000330C0000B4070000FB090000000E000000080000000A0000070D0000A3070000F7090000000F000000080000000A0000DB0D000093070000F40900000010000000080000000A0000AE0E000083070000F00900000000000000090000000A00007A010000DE0900004D0A00000001000000090000000A000050020000C5090000400A00000002000000090000000A000026030000AD090000350A00000003000000090000000A0000FC030000950900002B0A00000004000000090000000A0000D30400007E090000230A00000005000000090000000A0000AA050000670900001B0A00000006000000090000000A00008106000051090000150A00000007000000090000000A0000580700003C090000100A00000008000000090000000A00002F080000270900000B0A00000009000000090000000A00000609000013090000070A0000000A000000090000000A0000DC09000000090000040A0000000B000000090000000A0000B20A0000ED080000010A0000000C000000090000000A0000870B0000DA080000FE090000000D000000090000000A00005C0C0000C9080000FB090000000E000000090000000A0000300D0000B7080000F8090000000F000000090000000A0000040E0000A6080000F50900000010000000090000000A0000D70E000096080000F109000000000000000A0000000A0000A5010000F80A00004C0A000000010000000A0000000A00007B020000DF0A00003F0A000000020000000A0000000A000051030000C60A0000340A000000030000000A0000000A000028040000AE0A00002A0A000000040000000A0000000A0000FE040000960A0000220A000000050000000A0000000A0000D50500007F0A00001B0A000000060000000A0000000A0000AC060000690A0000150A000000070000000A0000000A000083070000530A0000100A000000080000000A0000000A0000590800003E0A00000B0A000000090000000A0000000A0000300900002A0A0000080A0000000A0000000A0000000A0000060A0000160A0000040A0000000B0000000A0000000A0000DC0A0000030A0000010A0000000C0000000A0000000A0000B10B0000F0090000FF090000000D0000000A0000000A0000860C0000DE090000FC090000000E0000000A0000000A00005A0D0000CC090000F9090000000F0000000A0000000A00002D0E0000BA090000F609000000100000000A0000000A0000000F0000AA090000F309000000000000000B0000000A0000D1010000140C00004B0A000000010000000B0000000A0000A6020000FA0B00003E0A000000020000000B0000000A00007C030000E00B0000330A000000030000000B0000000A000053040000C80B00002A0A000000040000000B0000000A000029050000B00B0000210A000000050000000B0000000A000000060000990B00001B0A000000060000000B0000000A0000D7060000820B0000150A000000070000000B0000000A0000AD0700006C0B0000100A000000080000000B0000000A000084080000570B00000C0A000000090000000B0000000A00005A090000420B0000080A0000000A0000000B0000000A0000300A00002D0B0000050A0000000B0000000B0000000A0000060B00001A0B0000020A0000000C0000000B0000000A0000DB0B0000060B0000000A0000000D0000000B0000000A0000B00C0000F40A0000FD090000000E0000000B0000000A0000840D0000E20A0000FA090000000F0000000B0000000A0000570E0000D00A0000F809000000100000000B0000000A0000290F0000BF0A0000F409000000000000000C0000000A0000FC010000310D00004A0A000000010000000C0000000A0000D2020000160D00003D0A000000020000000C0000000A0000A8030000FD0C0000330A000000030000000C0000000A00007E040000E40C0000290A000000040000000C0000000A000054050000CB0C0000210A000000050000000C0000000A00002B060000B40C00001B0A000000060000000C0000000A0000020700009D0C0000150A000000070000000C0000000A0000D8070000860C0000100A000000080000000C0000000A0000AE080000700C00000C0A000000090000000C0000000A0000850900005B0C0000090A0000000A0000000C0000000A00005B0A0000460C0000060A0000000B0000000C0000000A0000300B0000320C0000030A0000000C0000000C0000000A0000050C00001F0C0000010A0000000D0000000C0000000A0000D90C00000C0C0000FE090000000E0000000C0000000A0000AD0D0000F90B0000FC090000000F0000000C0000000A0000800E0000E70B0000F909000000100000000C0000000A0000520F0000D50B0000F609000000000000000D0000000A000028020000500E0000490A000000010000000D0000000A0000FE020000350E00003D0A000000020000000D0000000A0000D30300001B0E0000320A000000030000000D0000000A0000A9040000020E0000290A000000040000000D0000000A000080050000E90D0000210A000000050000000D0000000A000056060000D10D00001B0A000000060000000D0000000A00002C070000B90D0000150A000000070000000D0000000A000003080000A20D0000100A000000080000000D0000000A0000D90800008C0D00000D0A000000090000000D0000000A0000AF090000770D0000090A0000000A0000000D0000000A0000850A0000620D0000070A0000000B0000000D0000000A00005A0B00004D0D0000040A0000000C0000000D0000000A00002F0C0000390D0000020A0000000D0000000D0000000A0000030D0000260D0000000A0000000E0000000D0000000A0000D70D0000130D0000FE090000000F0000000D0000000A0000AA0E0000000D0000FB09000000100000000D0000000A00007C0F0000EE0C0000F809000000000000000E0000000A000054020000710F0000480A000000010000000E0000000A000029030000560F00003C0A000000020000000E0000000A0000FF0300003C0F0000320A000000030000000E0000000A0000D4040000220F0000290A000000040000000E0000000A0000AB050000090F0000210A000000050000000E0000000A000081060000F10E00001B0A000000060000000E0000000A000057070000D90E0000150A000000070000000E0000000A00002D080000C20E0000110A000000080000000E0000000A000004090000AB0E00000D0A000000090000000E0000000A0000D9090000950E00000A0A0000000A0000000E0000000A0000AF0A00007F0E0000080A0000000B0000000E0000000A0000840B00006A0E0000050A0000000C0000000E0000000A0000590C0000560E0000030A0000000D0000000E0000000A00002D0D0000420E0000010A0000000E0000000E0000000A0000010E00002F0E0000FF090000000F0000000E0000000A0000D30E00001C0E0000FD09000000100000000E0000000A0000A50F00000A0E0000FA09000000000000000F0000000A00007F020000FF0F0000470A000000010000000F0000000A000054030000FF0F00003C0A000000020000000F0000000A00002A040000FF0F0000310A000000030000000F0000000A000000050000FF0F0000280A000000040000000F0000000A0000D5050000FF0F0000210A000000050000000F0000000A0000AC060000FF0F00001B0A000000060000000F0000000A000082070000FB0F0000160A000000070000000F0000000A000058080000E40F0000110A000000080000000F0000000A00002E090000CD0F00000E0A000000090000000F0000000A0000040A0000B60F00000B0A0000000A0000000F0000000A0000D90A0000A00F0000080A0000000B0000000F0000000A0000AE0B00008B0F0000060A0000000C0000000F0000000A0000830C0000760F0000040A0000000D0000000F0000000A0000570D0000620F0000030A0000000E0000000F0000000A00002A0E00004E0F0000010A0000000F0000000F0000000A0000FD0E00003B0F0000FF09000000100000000F0000000A0000CE0F0000280F0000FC0900000000000000100000000A0000AA020000FF0F0000470A00000001000000100000000A00007F030000FF0F00003B0A00000002000000100000000A000055040000FF0F0000310A00000003000000100000000A00002A050000FF0F0000280A00000004000000100000000A000000060000FF0F0000210A00000005000000100000000A0000D6060000FF0F00001B0A00000006000000100000000A0000AC070000FF0F0000160A00000007000000100000000A000082080000FF0F0000120A00000008000000100000000A000058090000FF0F00000E0A00000009000000100000000A00002D0A0000FF0F00000B0A0000000A000000100000000A0000030B0000FF0F0000090A0000000B000000100000000A0000D80B0000FF0F0000070A0000000C000000100000000A0000AC0C0000FF0F0000060A0000000D000000100000000A0000800D0000FF0F0000040A0000000E000000100000000A0000530E0000FF0F0000020A0000000F000000100000000A0000260F0000FF0F0000000A00000010000000100000000A0000F70F0000FF0F0000FE0900000000000000000000000B00000E00000000000000780B00000001000000000000000B0000E500000000000000690B00000002000000000000000B0000BC010000000000005C0B00000003000000000000000B00009402000000000000500B00000004000000000000000B00006C03000000000000460B00000005000000000000000B000044040000000000003D0B00000006000000000000000B00001C05000000000000350B00000007000000000000000B0000F5050000000000002E0B00000008000000000000000B0000CD06000000000000280B00000009000000000000000B0000A407000000000000220B0000000A000000000000000B00007C080000000000001D0B0000000B000000000000000B00005309000000000000180B0000000C000000000000000B0000290A000000000000130B0000000D000000000000000B0000FF0A0000000000000F0B0000000E000000000000000B0000D50B0000000000000A0B0000000F000000000000000B0000A90C000000000000050B00000010000000000000000B00007D0D000000000000000B00000000000000010000000B000034000000FB000000700B00000001000000010000000B00000A010000E5000000620B00000002000000010000000B0000E2010000D0000000550B00000003000000010000000B0000B9020000BB000000490B00000004000000010000000B000091030000A70000003F0B00000005000000010000000B00006904000094000000370B00000006000000010000000B000041050000810000002F0B00000007000000010000000B0000190600006F000000280B00000008000000010000000B0000F10600005E000000220B00000009000000010000000B0000C90700004D0000001C0B0000000A000000010000000B0000A00800003D000000170B0000000B000000010000000B0000770900002D000000130B0000000C000000010000000B00004D0A00001E0000000E0B0000000D000000010000000B0000230B00000F0000000A0B0000000E000000010000000B0000F80B000001000000050B0000000F000000010000000B0000CD0C000000000000010B00000010000000010000000B0000A00D000000000000FC0A00000000000000020000000B00005A0000001D0200006A0B00000001000000020000000B000031010000060200005C0B00000002000000020000000B000008020000F10100004F0B00000003000000020000000B0000E0020000DC010000440B00000004000000020000000B0000B7030000C80100003A0B00000005000000020000000B00008F040000B4010000310B00000006000000020000000B000067050000A10100002A0B00000007000000020000000B00003F0600008E010000230B00000008000000020000000B0000160700007D0100001D0B00000009000000020000000B0000EE0700006B010000180B0000000A000000020000000B0000C50800005B010000130B0000000B000000020000000B00009C0900004A0100000E0B0000000C000000020000000B0000720A00003B0100000A0B0000000D000000020000000B0000480B00002C010000060B0000000E000000020000000B00001D0C00001D010000020B0000000F000000020000000B0000F10C00000F010000FD0A00000010000000020000000B0000C50D000001010000F80A00000000000000030000000B0000820000003C030000640B00000001000000030000000B00005801000025030000560B00000002000000030000000B00002F0200000F0300004A0B00000003000000030000000B000007030000FA0200003F0B00000004000000030000000B0000DE030000E5020000350B00000005000000030000000B0000B6040000D10200002D0B00000006000000030000000B00008E050000BE020000250B00000007000000030000000B000065060000AB0200001F0B00000008000000030000000B00003D07000099020000190B00000009000000030000000B00001408000087020000140B0000000A000000030000000B0000EB080000760200000F0B0000000B000000030000000B0000C2090000650200000B0B0000000C000000030000000B0000980A000055020000070B0000000D000000030000000B00006E0B000046020000030B0000000E000000030000000B0000420C000037020000FF0A0000000F000000030000000B0000170D000028020000FA0A00000010000000030000000B0000EA0D00001A020000F50A00000000000000040000000B0000AA00000059040000600B00000001000000040000000B00008001000042040000520B00000002000000040000000B0000570200002B040000450B00000003000000040000000B00002F030000150400003B0B00000004000000040000000B00000604000000040000310B00000005000000040000000B0000DD040000EC030000290B00000006000000040000000B0000B5050000D8030000210B00000007000000040000000B00008D060000C50300001B0B00000008000000040000000B000064070000B2030000160B00000009000000040000000B00003B080000A0030000110B0000000A000000040000000B0000120900008F0300000C0B0000000B000000040000000B0000E90900007E030000080B0000000C000000040000000B0000BF0A00006E030000040B0000000D000000040000000B0000940B00005E030000000B0000000E000000040000000B0000690C00004E030000FC0A0000000F000000040000000B00003D0D000040030000F80A00000010000000040000000B0000100E000031030000F30A00000000000000050000000B0000D3000000740500005C0B00000001000000050000000B0000A90100005C0500004E0B00000002000000050000000B00008002000045050000420B00000003000000050000000B0000570300002F050000370B00000004000000050000000B00002E0400001A0500002E0B00000005000000050000000B00000605000005050000260B00000006000000050000000B0000DD050000F10400001F0B00000007000000050000000B0000B5060000DD040000180B00000008000000050000000B00008C070000CA040000130B00000009000000050000000B000063080000B80400000E0B0000000A000000050000000B00003A090000A60400000A0B0000000B000000050000000B0000100A000095040000060B0000000C000000050000000B0000E60A000084040000020B0000000D000000050000000B0000BB0B000074040000FF0A0000000E000000050000000B0000900C000064040000FB0A0000000F000000050000000B0000640D000055040000F70A00000010000000050000000B0000370E000046040000F20A00000000000000060000000B0000FD0000008D060000580B00000001000000060000000B0000D3010000760600004B0B00000002000000060000000B0000AA0200005E0600003F0B00000003000000060000000B00008003000048060000340B00000004000000060000000B000058040000320600002B0B00000005000000060000000B00002F0500001D060000230B00000006000000060000000B000006060000080600001C0B00000007000000060000000B0000DD060000F4050000160B00000008000000060000000B0000B5070000E1050000110B00000009000000060000000B00008B080000CE0500000C0B0000000A000000060000000B000062090000BC050000080B0000000B000000060000000B0000380A0000AA050000050B0000000C000000060000000B00000E0B000099050000010B0000000D000000060000000B0000E30B000089050000FD0A0000000E000000060000000B0000B80C000079050000FA0A0000000F000000060000000B00008B0D000069050000F60A00000010000000060000000B00005E0E00005A050000F20A00000000000000070000000B000027010000A6070000550B00000001000000070000000B0000FD0100008E070000480B00000002000000070000000B0000D3020000770700003C0B00000003000000070000000B0000AA03000060070000320B00000004000000070000000B0000810400004A070000290B00000005000000070000000B00005805000034070000210B00000006000000070000000B0000300600001F0700001A0B00000007000000070000000B0000070700000B070000150B00000008000000070000000B0000DE070000F7060000100B00000009000000070000000B0000B4080000E40600000B0B0000000A000000070000000B00008B090000D1060000070B0000000B000000070000000B0000610A0000BF060000040B0000000C000000070000000B0000370B0000AE060000000B0000000D000000070000000B00000C0C00009D060000FD0A0000000E000000070000000B0000E00C00008C060000F90A0000000F000000070000000B0000B40D00007C060000F60A00000010000000070000000B0000860E00006D060000F20A00000000000000080000000B000052010000BF080000530B00000001000000080000000B000028020000A7080000460B00000002000000080000000B0000FE0200008F0800003A0B00000003000000080000000B0000D503000077080000300B00000004000000080000000B0000AB04000061080000270B00000005000000080000000B0000820500004B080000200B00000006000000080000000B00005906000036080000190B00000007000000080000000B00003007000021080000130B00000008000000080000000B0000070800000D0800000F0B00000009000000080000000B0000DE080000F90700000A0B0000000A000000080000000B0000B4090000E6070000070B0000000B000000080000000B00008A0A0000D4070000030B0000000C000000080000000B0000600B0000C2070000000B0000000D000000080000000B0000340C0000B1070000FD0A0000000E000000080000000B0000090D0000A0070000FA0A0000000F000000080000000B0000DC0D00008F070000F60A00000010000000080000000B0000AF0E00007F070000F20A00000000000000090000000B00007D010000D8090000510B00000001000000090000000B000053020000BF090000440B00000002000000090000000B000029030000A7090000390B00000003000000090000000B0000FF0300008F0900002F0B00000004000000090000000B0000D604000078090000260B00000005000000090000000B0000AD050000620900001F0B00000006000000090000000B0000840600004C090000180B00000007000000090000000B00005A07000037090000130B00000008000000090000000B000031080000230900000E0B00000009000000090000000B0000080900000F0900000A0B0000000A000000090000000B0000DE090000FB080000060B0000000B000000090000000B0000B40A0000E9080000030B0000000C000000090000000B0000890B0000D6080000000B0000000D000000090000000B00005E0C0000C5080000FD0A0000000E000000090000000B0000320D0000B3080000FA0A0000000F000000090000000B0000050E0000A3080000F70A00000010000000090000000B0000D80E000092080000F30A000000000000000A0000000B0000A8010000F20A00004F0B000000010000000A0000000B00007E020000D80A0000430B000000020000000A0000000B000054030000C00A0000370B000000030000000A0000000B00002A040000A80A00002D0B000000040000000A0000000B000001050000900A0000250B000000050000000A0000000B0000D70500007A0A00001E0B000000060000000A0000000B0000AE060000640A0000180B000000070000000A0000000B0000850700004E0A0000120B000000080000000A0000000B00005B080000390A00000E0B000000090000000A0000000B000032090000250A00000A0B0000000A0000000A0000000B0000080A0000110A0000070B0000000B0000000A0000000B0000DD0A0000FE090000030B0000000C0000000A0000000B0000B30B0000EB090000010B0000000D0000000A0000000B0000870C0000D9090000FE0A0000000E0000000A0000000B00005B0D0000C8090000FB0A0000000F0000000A0000000B00002E0E0000B6090000F80A000000100000000A0000000B0000010F0000A6090000F40A000000000000000B0000000B0000D40100000D0C00004E0B000000010000000B0000000B0000A9020000F30B0000410B000000020000000B0000000B00007F030000DA0B0000360B000000030000000B0000000B000055040000C10B00002D0B000000040000000B0000000B00002C050000AA0B0000240B000000050000000B0000000B000002060000930B00001D0B000000060000000B0000000B0000D90600007C0B0000170B000000070000000B0000000B0000AF070000660B0000120B000000080000000B0000000B000086080000510B00000E0B000000090000000B0000000B00005C0900003C0B00000A0B0000000A0000000B0000000B0000320A0000280B0000070B0000000B0000000B0000000B0000070B0000150B0000040B0000000C0000000B0000000B0000DC0B0000020B0000010B0000000D0000000B0000000B0000B10C0000EF0A0000FF0A0000000E0000000B0000000B0000850D0000DD0A0000FC0A0000000F0000000B0000000B0000580E0000CC0A0000F90A000000100000000B0000000B00002A0F0000BB0A0000F60A000000000000000C0000000B0000FF010000290D00004D0B000000010000000C0000000B0000D50200000F0D0000400B000000020000000C0000000B0000AA030000F50C0000350B000000030000000C0000000B000080040000DD0C00002C0B000000040000000C0000000B000057050000C50C0000240B000000050000000C0000000B00002D060000AD0C00001D0B000000060000000C0000000B000004070000960C0000170B000000070000000C0000000B0000DA070000800C0000120B000000080000000C0000000B0000B00800006A0C00000E0B000000090000000C0000000B000086090000550C00000A0B0000000A0000000C0000000B00005C0A0000410C0000070B0000000B0000000C0000000B0000320B00002D0C0000050B0000000C0000000C0000000B0000060C0000190C0000020B0000000D0000000C0000000B0000DB0C0000070C0000000B0000000E0000000C0000000B0000AE0D0000F40B0000FD0A0000000F0000000C0000000B0000810E0000E20B0000FA0A000000100000000C0000000B0000530F0000D10B0000F70A000000000000000D0000000B00002B020000480E00004C0B000000010000000D0000000B0000000300002D0E00003F0B000000020000000D0000000B0000D6030000130E0000350B000000030000000D0000000B0000AC040000FA0D00002B0B000000040000000D0000000B000082050000E20D0000230B000000050000000D0000000B000058060000CA0D00001D0B000000060000000D0000000B00002E070000B30D0000170B000000070000000D0000000B0000050800009C0D0000120B000000080000000D0000000B0000DB080000860D00000E0B000000090000000D0000000B0000B1090000710D00000B0B0000000A0000000D0000000B0000860A00005C0D0000080B0000000B0000000D0000000B00005C0B0000470D0000060B0000000C0000000D0000000B0000300C0000340D0000030B0000000D0000000D0000000B0000050D0000200D0000010B0000000E0000000D0000000B0000D80D00000E0D0000FF0A0000000F0000000D0000000B0000AB0E0000FB0C0000FC0A000000100000000D0000000B00007D0F0000E90C0000F90A000000000000000E0000000B000057020000690F00004B0B000000010000000E0000000B00002C0300004E0F00003F0B000000020000000E0000000B000001040000340F0000340B000000030000000E0000000B0000D70400001A0F00002B0B000000040000000E0000000B0000AD050000020F0000230B000000050000000E0000000B000083060000E90E00001D0B000000060000000E0000000B000059070000D20E0000170B000000070000000E0000000B00002F080000BB0E0000120B000000080000000E0000000B000005090000A40E00000F0B000000090000000E0000000B0000DB0900008E0E00000C0B0000000A0000000E0000000B0000B10A0000790E0000090B0000000B0000000E0000000B0000860B0000640E0000060B0000000C0000000E0000000B00005A0C0000500E0000040B0000000D0000000E0000000B00002E0D00003D0E0000020B0000000E0000000E0000000B0000020E00002A0E0000000B0000000F0000000E0000000B0000D40E0000170E0000FE0A000000100000000E0000000B0000A60F0000050E0000FB0A000000000000000F0000000B000082020000FF0F00004A0B000000010000000F0000000B000057030000FF0F00003E0B000000020000000F0000000B00002C040000FF0F0000330B000000030000000F0000000B000002050000FF0F00002A0B000000040000000F0000000B0000D8050000FF0F0000230B000000050000000F0000000B0000AE060000FF0F00001C0B000000060000000F0000000B000084070000F40F0000170B000000070000000F0000000B00005A080000DC0F0000130B000000080000000F0000000B000030090000C60F00000F0B000000090000000F0000000B0000050A0000B00F00000C0B0000000A0000000F0000000B0000DB0A00009A0F0000090B0000000B0000000F0000000B0000AF0B0000850F0000070B0000000C0000000F0000000B0000840C0000700F0000050B0000000D0000000F0000000B0000580D00005C0F0000030B0000000E0000000F0000000B00002B0E0000490F0000010B0000000F0000000F0000000B0000FE0E0000360F0000FF0A000000100000000F0000000B0000CF0F0000230F0000FC0A00000000000000100000000B0000AD020000FF0F0000480B00000001000000100000000B000082030000FF0F00003D0B00000002000000100000000B000057040000FF0F0000320B00000003000000100000000B00002C050000FF0F00002A0B00000004000000100000000B000002060000FF0F0000220B00000005000000100000000B0000D8060000FF0F00001C0B00000006000000100000000B0000AE070000FF0F0000170B00000007000000100000000B000084080000FF0F0000130B00000008000000100000000B000059090000FF0F00000F0B00000009000000100000000B00002F0A0000FF0F00000C0B0000000A000000100000000B0000040B0000FF0F00000A0B0000000B000000100000000B0000D90B0000FF0F0000080B0000000C000000100000000B0000AD0C0000FF0F0000060B0000000D000000100000000B0000810D0000FF0F0000040B0000000E000000100000000B0000540E0000FF0F0000030B0000000F000000100000000B0000270F0000FF0F0000010B00000010000000100000000B0000F80F0000FF0F0000FE0A00000000000000000000000C000014000000000000007E0C00000001000000000000000C0000EB000000000000006F0C00000002000000000000000C0000C201000000000000610C00000003000000000000000C00009902000000000000560C00000004000000000000000C000071030000000000004B0C00000005000000000000000C00004904000000000000420C00000006000000000000000C000021050000000000003A0C00000007000000000000000C0000F905000000000000330C00000008000000000000000C0000D1060000000000002C0C00000009000000000000000C0000A907000000000000260C0000000A000000000000000C00008008000000000000210C0000000B000000000000000C000057090000000000001C0C0000000C000000000000000C00002D0A000000000000170C0000000D000000000000000C0000030B000000000000120C0000000E000000000000000C0000D80B0000000000000D0C0000000F000000000000000C0000AD0C000000000000080C00000010000000000000000C0000800D000000000000030C00000000000000010000000C000039000000F6000000760C00000001000000010000000C000010010000E0000000670C00000002000000010000000C0000E7010000CB0000005A0C00000003000000010000000C0000BE020000B60000004F0C00000004000000010000000C000096030000A2000000440C00000005000000010000000C00006E0400008F0000003B0C00000006000000010000000C0000460500007D000000330C00000007000000010000000C00001E0600006B0000002C0C00000008000000010000000C0000F506000059000000260C00000009000000010000000C0000CD07000048000000200C0000000A000000010000000C0000A4080000380000001B0C0000000B000000010000000C00007B09000028000000160C0000000C000000010000000C0000510A000019000000120C0000000D000000010000000C0000270B00000B0000000D0C0000000E000000010000000C0000FC0B000000000000080C0000000F000000010000000C0000D00C000000000000030C00000010000000010000000C0000A40D000000000000FE0B00000000000000020000000C000060000000170200006F0C00000001000000020000000C00003601000001020000610C00000002000000020000000C00000D020000EB010000540C00000003000000020000000C0000E5020000D7010000490C00000004000000020000000C0000BC030000C20100003F0C00000005000000020000000C000094040000AF010000360C00000006000000020000000C00006B0500009C0100002E0C00000007000000020000000C00004306000089010000270C00000008000000020000000C00001B07000078010000210C00000009000000020000000C0000F2070000660100001B0C0000000A000000020000000C0000C908000056010000160C0000000B000000020000000C0000A009000046010000120C0000000C000000020000000C0000760A0000360100000D0C0000000D000000020000000C00004B0B000027010000090C0000000E000000020000000C0000200C000019010000040C0000000F000000020000000C0000F40C00000B010000000C00000010000000020000000C0000C80D0000FD000000FA0B00000000000000030000000C000087000000360300006A0C00000001000000030000000C00005E0100001F0300005B0C00000002000000030000000C000034020000090300004F0C00000003000000030000000C00000C030000F4020000430C00000004000000030000000C0000E3030000DF020000390C00000005000000030000000C0000BB040000CC020000310C00000006000000030000000C000092050000B8020000290C00000007000000030000000C00006A060000A5020000220C00000008000000030000000C000041070000930200001D0C00000009000000030000000C00001808000082020000170C0000000A000000030000000C0000EF08000071020000120C0000000B000000030000000C0000C6090000600200000E0C0000000C000000030000000C00009C0A0000500200000A0C0000000D000000030000000C0000710B000041020000050C0000000E000000030000000C0000460C000032020000010C0000000F000000030000000C00001A0D000024020000FC0B00000010000000030000000C0000ED0D000016020000F80B00000000000000040000000C0000AF00000052040000650C00000001000000040000000C0000860100003B040000560C00000002000000040000000C00005C020000250400004A0C00000003000000040000000C0000330300000F0400003F0C00000004000000040000000C00000B040000FA030000350C00000005000000040000000C0000E2040000E60300002D0C00000006000000040000000C0000BA050000D2030000250C00000007000000040000000C000091060000BF0300001F0C00000008000000040000000C000068070000AD030000190C00000009000000040000000C00003F0800009B030000140C0000000A000000040000000C000016090000890300000F0C0000000B000000040000000C0000EC090000790300000B0C0000000C000000040000000C0000C20A000068030000070C0000000D000000040000000C0000970B000059030000030C0000000E000000040000000C00006C0C000049030000FF0B0000000F000000040000000C0000400D00003B030000FA0B00000010000000040000000C0000130E00002C030000F50B00000000000000050000000C0000D80000006D050000600C00000001000000050000000C0000AE01000056050000520C00000002000000050000000C0000850200003F050000460C00000003000000050000000C00005C030000290500003B0C00000004000000050000000C00003304000014050000320C00000005000000050000000C00000A050000FF040000290C00000006000000050000000C0000E2050000EB040000220C00000007000000050000000C0000B9060000D70400001C0C00000008000000050000000C000090070000C4040000160C00000009000000050000000C000067080000B2040000110C0000000A000000050000000C00003E090000A00400000D0C0000000B000000050000000C0000140A00008F040000090C0000000C000000050000000C0000EA0A00007F040000050C0000000D000000050000000C0000BF0B00006E040000010C0000000E000000050000000C0000930C00005F040000FD0B0000000F000000050000000C0000670D000050040000F90B00000010000000050000000C00003A0E000041040000F40B00000000000000060000000C000002010000860600005D0C00000001000000060000000C0000D80100006E0600004F0C00000002000000060000000C0000AE02000057060000430C00000003000000060000000C00008503000041060000380C00000004000000060000000C00005C0400002B0600002F0C00000005000000060000000C00003305000016060000270C00000006000000060000000C00000A060000020600001F0C00000007000000060000000C0000E2060000EE050000190C00000008000000060000000C0000B9070000DB050000140C00000009000000060000000C00008F080000C80500000F0C0000000A000000060000000C000066090000B60500000B0C0000000B000000060000000C00003C0A0000A4050000070C0000000C000000060000000C0000110B000093050000030C0000000D000000060000000C0000E60B000083050000FF0B0000000E000000060000000C0000BB0C000073050000FC0B0000000F000000060000000C00008E0D000064050000F80B00000010000000060000000C0000610E000055050000F30B00000000000000070000000C00002C0100009F070000590C00000001000000070000000C000002020000870700004C0C00000002000000070000000C0000D80200006F070000400C00000003000000070000000C0000AF03000059070000350C00000004000000070000000C000086040000420700002C0C00000005000000070000000C00005D0500002D070000240C00000006000000070000000C000034060000180700001D0C00000007000000070000000C00000B07000004070000170C00000008000000070000000C0000E2070000F0060000120C00000009000000070000000C0000B8080000DD0600000E0C0000000A000000070000000C00008F090000CB0600000A0C0000000B000000070000000C0000650A0000B9060000060C0000000C000000070000000C00003A0B0000A8060000020C0000000D000000070000000C00000F0C000097060000FF0B0000000E000000070000000C0000E30C000086060000FB0B0000000F000000070000000C0000B70D000077060000F70B00000010000000070000000C0000890E000067060000F30B00000000000000080000000C000057010000B7080000570C00000001000000080000000C00002C0200009F080000490C00000002000000080000000C000003030000870800003E0C00000003000000080000000C0000D903000070080000330C00000004000000080000000C0000B0040000590800002A0C00000005000000080000000C00008705000043080000230C00000006000000080000000C00005E0600002E0800001C0C00000007000000080000000C0000340700001A080000160C00000008000000080000000C00000B08000006080000110C00000009000000080000000C0000E2080000F20700000D0C0000000A000000080000000C0000B8090000E0070000090C0000000B000000080000000C00008E0A0000CD070000050C0000000C000000080000000C0000630B0000BC070000020C0000000D000000080000000C0000380C0000AA070000FE0B0000000E000000080000000C00000C0D00009A070000FB0B0000000F000000080000000C0000DF0D000089070000F70B00000010000000080000000C0000B20E00007A070000F30B00000000000000090000000C000082010000CF090000540C00000001000000090000000C000057020000B7090000470C00000002000000090000000C00002D0300009F0900003C0C00000003000000090000000C00000404000087090000320C00000004000000090000000C0000DA04000070090000290C00000005000000090000000C0000B10500005A090000210C00000006000000090000000C000088060000450900001B0C00000007000000090000000C00005E07000030090000150C00000008000000090000000C0000350800001B090000100C00000009000000090000000C00000B090000080900000C0C0000000A000000090000000C0000E1090000F4080000080C0000000B000000090000000C0000B70A0000E2080000050C0000000C000000090000000C00008C0B0000D0080000020C0000000D000000090000000C0000610C0000BE080000FF0B0000000E000000090000000C0000350D0000AD080000FB0B0000000F000000090000000C0000080E00009C080000F80B00000010000000090000000C0000DA0E00008C080000F40B000000000000000A0000000C0000AD010000E90A0000530C000000010000000A0000000C000082020000CF0A0000450C000000020000000A0000000C000058030000B70A00003A0C000000030000000A0000000C00002F0400009F0A0000300C000000040000000A0000000C000005050000880A0000280C000000050000000A0000000C0000DC050000710A0000200C000000060000000A0000000C0000B20600005C0A00001A0C000000070000000A0000000C000089070000460A0000140C000000080000000A0000000C00005F080000310A0000100C000000090000000A0000000C0000350900001D0A00000C0C0000000A0000000A0000000C00000B0A00000A0A0000080C0000000B0000000A0000000C0000E10A0000F7090000050C0000000C0000000A0000000C0000B60B0000E4090000020C0000000D0000000A0000000C00008A0C0000D2090000FF0B0000000E0000000A0000000C00005E0D0000C1090000FC0B0000000F0000000A0000000C0000310E0000B0090000F90B000000100000000A0000000C0000030F0000A0090000F50B000000000000000B0000000C0000D8010000030C0000510C000000010000000B0000000C0000AE020000E90B0000440C000000020000000B0000000C000084030000D10B0000390C000000030000000B0000000C00005A040000B80B00002F0C000000040000000B0000000C000030050000A10B0000270C000000050000000B0000000C0000060600008A0B00001F0C000000060000000B0000000C0000DD060000740B0000190C000000070000000B0000000C0000B30700005E0B0000140C000000080000000B0000000C00008A080000490B00000F0C000000090000000B0000000C000060090000340B00000C0C0000000A0000000B0000000C0000350A0000200B0000080C0000000B0000000B0000000C00000B0B00000D0B0000050C0000000C0000000B0000000C0000E00B0000FA0A0000020C0000000D0000000B0000000C0000B40C0000E80A0000000C0000000E0000000B0000000C0000880D0000D60A0000FD0B0000000F0000000B0000000C00005B0E0000C50A0000FA0B000000100000000B0000000C00002D0F0000B40A0000F60B000000000000000C0000000C0000040200001F0D00004F0C000000010000000C0000000C0000D9020000050D0000430C000000020000000C0000000C0000AF030000EC0C0000380C000000030000000C0000000C000085040000D30C00002E0C000000040000000C0000000C00005B050000BB0C0000260C000000050000000C0000000C000031060000A40C00001F0C000000060000000C0000000C0000080700008D0C0000190C000000070000000C0000000C0000DE070000770C0000140C000000080000000C0000000C0000B4080000620C00000F0C000000090000000C0000000C00008A0900004D0C00000C0C0000000A0000000C0000000C0000600A0000390C0000090C0000000B0000000C0000000C0000350B0000250C0000060C0000000C0000000C0000000C00000A0C0000120C0000030C0000000D0000000C0000000C0000DE0C0000FF0B0000010C0000000E0000000C0000000C0000B10D0000ED0B0000FE0B0000000F0000000C0000000C0000840E0000DB0B0000FB0B000000100000000C0000000C0000560F0000CA0B0000F80B000000000000000D0000000C0000300200003D0E00004E0C000000010000000D0000000C000005030000230E0000410C000000020000000D0000000C0000DA030000090E0000370C000000030000000D0000000C0000B0040000F00D00002D0C000000040000000D0000000C000086050000D80D0000250C000000050000000D0000000C00005C060000C00D00001E0C000000060000000D0000000C000032070000A90D0000180C000000070000000D0000000C000008080000930D0000140C000000080000000D0000000C0000DE0800007D0D0000100C000000090000000D0000000C0000B4090000680D00000C0C0000000A0000000D0000000C00008A0A0000530D0000090C0000000B0000000D0000000C00005F0B00003F0D0000060C0000000C0000000D0000000C0000340C00002C0D0000040C0000000D0000000D0000000C0000080D0000190D0000010C0000000E0000000D0000000C0000DB0D0000060D0000FF0B0000000F0000000D0000000C0000AE0E0000F40C0000FC0B000000100000000D0000000C00007F0F0000E20C0000F90B000000000000000E0000000C00005B0200005E0F00004D0C000000010000000E0000000C000030030000430F0000400C000000020000000E0000000C000005040000290F0000360C000000030000000E0000000C0000DB040000100F00002C0C000000040000000E0000000C0000B1050000F80E0000240C000000050000000E0000000C000087060000E00E00001E0C000000060000000E0000000C00005D070000C80E0000180C000000070000000E0000000C000033080000B10E0000140C000000080000000E0000000C0000090900009B0E0000100C000000090000000E0000000C0000DF090000860E00000C0C0000000A0000000E0000000C0000B40A0000710E0000090C0000000B0000000E0000000C0000890B00005C0E0000070C0000000C0000000E0000000C00005D0C0000480E0000050C0000000D0000000E0000000C0000310D0000350E0000030C0000000E0000000E0000000C0000050E0000220E0000000C0000000F0000000E0000000C0000D70E00000F0E0000FE0B000000100000000E0000000C0000A90F0000FD0D0000FB0B000000000000000F0000000C000086020000FF0F00004B0C000000010000000F0000000C00005B030000FF0F00003F0C000000020000000F0000000C000030040000FF0F0000350C000000030000000F0000000C000006050000FF0F00002B0C000000040000000F0000000C0000DC050000FF0F0000240C000000050000000F0000000C0000B1060000FF0F00001D0C000000060000000F0000000C000087070000EA0F0000180C000000070000000F0000000C00005D080000D30F0000130C000000080000000F0000000C000033090000BC0F0000100C000000090000000F0000000C0000090A0000A60F00000D0C0000000A0000000F0000000C0000DE0A0000910F00000A0C0000000B0000000F0000000C0000B30B00007C0F0000080C0000000C0000000F0000000C0000870C0000680F0000060C0000000D0000000F0000000C00005B0D0000540F0000030C0000000E0000000F0000000C00002E0E0000410F0000010C0000000F0000000F0000000C0000000F00002E0F0000FF0B000000100000000F0000000C0000D20F00001C0F0000FC0B00000000000000100000000C0000B1020000FF0F00004A0C00000001000000100000000C000086030000FF0F00003E0C00000002000000100000000C00005B040000FF0F0000330C00000003000000100000000C000030050000FF0F00002B0C00000004000000100000000C000006060000FF0F0000230C00000005000000100000000C0000DC060000FF0F00001D0C00000006000000100000000C0000B2070000FF0F0000170C00000007000000100000000C000087080000FF0F0000130C00000008000000100000000C00005D090000FF0F0000100C00000009000000100000000C0000320A0000FF0F00000D0C0000000A000000100000000C0000070B0000FF0F00000A0C0000000B000000100000000C0000DC0B0000FF0F0000080C0000000C000000100000000C0000B00C0000FF0F0000060C0000000D000000100000000C0000840D0000FF0F0000040C0000000E000000100000000C0000570E0000FF0F0000020C0000000F000000100000000C0000290F0000FF0F0000000C00000010000000100000000C0000FB0F0000FF0F0000FE0B00000000000000000000000D00001B00000000000000830D00000001000000000000000D0000F200000000000000740D00000002000000000000000D0000C901000000000000670D00000003000000000000000D0000A1020000000000005B0D00000004000000000000000D00007803000000000000500D00000005000000000000000D00005004000000000000470D00000006000000000000000D000028050000000000003E0D00000007000000000000000D00000006000000000000370D00000008000000000000000D0000D706000000000000300D00000009000000000000000D0000AF070000000000002A0D0000000A000000000000000D00008608000000000000240D0000000B000000000000000D00005D090000000000001F0D0000000C000000000000000D0000330A0000000000001A0D0000000D000000000000000D0000090B000000000000150D0000000E000000000000000D0000DE0B000000000000100D0000000F000000000000000D0000B20C0000000000000B0D00000010000000000000000D0000850D000000000000050D00000000000000010000000D000041000000EE0000007B0D00000001000000010000000D000017010000D80000006C0D00000002000000010000000D0000EE010000C30000005F0D00000003000000010000000D0000C6020000AE000000530D00000004000000010000000D00009D0300009B000000490D00000005000000010000000D00007504000087000000400D00000006000000010000000D00004D05000075000000370D00000007000000010000000D00002406000063000000300D00000008000000010000000D0000FC060000510000002A0D00000009000000010000000D0000D307000041000000240D0000000A000000010000000D0000AA080000310000001E0D0000000B000000010000000D00008109000021000000190D0000000C000000010000000D0000570A000012000000140D0000000D000000010000000D00002C0B000003000000100D0000000E000000010000000D0000010C0000000000000B0D0000000F000000010000000D0000D50C000000000000060D00000010000000010000000D0000A90D000000000000000D00000000000000020000000D0000670000000F020000740D00000001000000020000000D00003E010000F8010000660D00000002000000020000000D000015020000E3010000590D00000003000000020000000D0000EC020000CE0100004D0D00000004000000020000000D0000C3030000BA010000430D00000005000000020000000D00009B040000A60100003A0D00000006000000020000000D00007205000094010000320D00000007000000020000000D00004A060000810100002B0D00000008000000020000000D00002107000070010000240D00000009000000020000000D0000F80700005E0100001F0D0000000A000000020000000D0000CF0800004E010000190D0000000B000000020000000D0000A60900003E010000140D0000000C000000020000000D00007C0A00002E010000100D0000000D000000020000000D0000510B00001F0100000B0D0000000E000000020000000D0000260C000011010000060D0000000F000000020000000D0000FA0C000003010000010D00000010000000020000000D0000CD0D0000F6000000FC0C00000000000000030000000D00008F0000002D0300006E0D00000001000000030000000D00006501000016030000600D00000002000000030000000D00003C02000000030000530D00000003000000030000000D000013030000EB020000470D00000004000000030000000D0000EA030000D70200003D0D00000005000000030000000D0000C1040000C3020000340D00000006000000030000000D000099050000B00200002D0D00000007000000030000000D0000700600009D020000260D00000008000000030000000D0000470700008B020000200D00000009000000030000000D00001E080000790200001A0D0000000A000000030000000D0000F508000069020000150D0000000B000000030000000D0000CB09000058020000100D0000000C000000030000000D0000A10A0000480200000C0D0000000D000000030000000D0000770B000039020000080D0000000E000000030000000D00004B0C00002A020000030D0000000F000000030000000D00001F0D00001C020000FE0C00000010000000030000000D0000F20D00000E020000F90C00000000000000040000000D0000B700000049040000690D00000001000000040000000D00008D010000320400005B0D00000002000000040000000D0000640200001C0400004E0D00000003000000040000000D00003A03000006040000430D00000004000000040000000D000012040000F1030000390D00000005000000040000000D0000E9040000DD030000300D00000006000000040000000D0000C0050000C9030000280D00000007000000040000000D000097060000B6030000220D00000008000000040000000D00006E070000A40300001C0D00000009000000040000000D00004508000092030000170D0000000A000000040000000D00001C09000081030000120D0000000B000000040000000D0000F2090000700300000D0D0000000C000000040000000D0000C80A000060030000090D0000000D000000040000000D00009D0B000050030000050D0000000E000000040000000D0000710C000041030000000D0000000F000000040000000D0000450D000033030000FC0C00000010000000040000000D0000180E000024030000F70C00000000000000050000000D0000E000000063050000640D00000001000000050000000D0000B60100004C050000560D00000002000000050000000D00008C020000350500004A0D00000003000000050000000D0000630300001F0500003F0D00000004000000050000000D00003A0400000A050000350D00000005000000050000000D000011050000F50400002C0D00000006000000050000000D0000E8050000E1040000250D00000007000000050000000D0000BF060000CE0400001E0D00000008000000050000000D000096070000BB040000190D00000009000000050000000D00006D080000A9040000140D0000000A000000050000000D000043090000970400000F0D0000000B000000050000000D00001A0A0000860400000B0D0000000C000000050000000D0000EF0A000076040000070D0000000D000000050000000D0000C40B000066040000030D0000000E000000050000000D0000980C000056040000FE0C0000000F000000050000000D00006C0D000047040000FA0C00000010000000050000000D00003F0E000039040000F50C00000000000000060000000D0000090100007C060000600D00000001000000060000000D0000DF01000064060000520D00000002000000060000000D0000B50200004D060000460D00000003000000060000000D00008C030000370600003B0D00000004000000060000000D00006304000021060000320D00000005000000060000000D00003A0500000C060000290D00000006000000060000000D000011060000F8050000220D00000007000000060000000D0000E8060000E40500001C0D00000008000000060000000D0000BF070000D1050000160D00000009000000060000000D000095080000BF050000110D0000000A000000060000000D00006C090000AD0500000D0D0000000B000000060000000D0000420A00009B050000090D0000000C000000060000000D0000170B00008B050000050D0000000D000000060000000D0000EC0B00007A050000010D0000000E000000060000000D0000C00C00006A050000FD0C0000000F000000060000000D0000940D00005B050000F90C00000010000000060000000D0000660E00004C050000F40C00000000000000070000000D000033010000940700005D0D00000001000000070000000D0000090200007C0700004F0D00000002000000070000000D0000DF02000065070000430D00000003000000070000000D0000B60300004E070000380D00000004000000070000000D00008C040000380700002F0D00000005000000070000000D00006305000023070000270D00000006000000070000000D00003A0600000E070000200D00000007000000070000000D000011070000FA0600001A0D00000008000000070000000D0000E8070000E7060000140D00000009000000070000000D0000BE080000D4060000100D0000000A000000070000000D000094090000C10600000B0D0000000B000000070000000D00006A0A0000B0060000070D0000000C000000070000000D0000400B00009E060000040D0000000D000000070000000D0000140C00008E060000000D0000000E000000070000000D0000E80C00007D060000FC0C0000000F000000070000000D0000BC0D00006E060000F80C00000010000000070000000D00008E0E00005E060000F40C00000000000000080000000D00005E010000AC0800005A0D00000001000000080000000D000033020000930800004C0D00000002000000080000000D0000090300007C080000400D00000003000000080000000D0000E003000065080000360D00000004000000080000000D0000B60400004F0800002D0D00000005000000080000000D00008D05000039080000250D00000006000000080000000D000064060000240800001E0D00000007000000080000000D00003B0700000F080000180D00000008000000080000000D000011080000FC070000130D00000009000000080000000D0000E8080000E80700000E0D0000000A000000080000000D0000BE090000D60700000A0D0000000B000000080000000D0000930A0000C4070000060D0000000C000000080000000D0000680B0000B2070000030D0000000D000000080000000D00003D0C0000A1070000FF0C0000000E000000080000000D0000110D000090070000FC0C0000000F000000080000000D0000E40D000080070000F80C00000010000000080000000D0000B70E000071070000F40C00000000000000090000000D000089010000C4090000570D00000001000000090000000D00005E020000AB0900004A0D00000002000000090000000D000034030000930900003E0D00000003000000090000000D00000A0400007C090000340D00000004000000090000000D0000E1040000650900002B0D00000005000000090000000D0000B70500004F090000230D00000006000000090000000D00008E0600003A0900001D0D00000007000000090000000D00006507000025090000170D00000008000000090000000D00003B08000011090000120D00000009000000090000000D000011090000FD0800000D0D0000000A000000090000000D0000E7090000EA0800000A0D0000000B000000090000000D0000BD0A0000D8080000060D0000000C000000090000000D0000920B0000C6080000030D0000000D000000090000000D0000660C0000B4080000FF0C0000000E000000090000000D00003A0D0000A3080000FC0C0000000F000000090000000D00000D0E000093080000F80C00000010000000090000000D0000DF0E000083080000F40C000000000000000A0000000D0000B4010000DC0A0000550D000000010000000A0000000D000089020000C30A0000480D000000020000000A0000000D00005F030000AB0A00003C0D000000030000000A0000000D000035040000930A0000320D000000040000000A0000000D00000B0500007C0A0000290D000000050000000A0000000D0000E2050000660A0000220D000000060000000A0000000D0000B8060000500A00001B0D000000070000000A0000000D00008F0700003B0A0000160D000000080000000A0000000D000065080000270A0000110D000000090000000A0000000D00003B090000130A00000D0D0000000A0000000A0000000D0000110A0000FF090000090D0000000B0000000A0000000D0000E60A0000EC090000060D0000000C0000000A0000000D0000BB0B0000DA090000030D0000000D0000000A0000000D0000900C0000C8090000000D0000000E0000000A0000000D0000630D0000B7090000FC0C0000000F0000000A0000000D0000360E0000A6090000F90C000000100000000A0000000D0000080F000096090000F50C000000000000000B0000000D0000DF010000F60B0000530D000000010000000B0000000D0000B4020000DD0B0000460D000000020000000B0000000D00008A030000C40B00003B0D000000030000000B0000000D000060040000AC0B0000310D000000040000000B0000000D000036050000950B0000280D000000050000000B0000000D00000D0600007E0B0000210D000000060000000B0000000D0000E3060000680B00001B0D000000070000000B0000000D0000B9070000530B0000150D000000080000000B0000000D00008F0800003E0B0000110D000000090000000B0000000D000065090000290B00000D0D0000000A0000000B0000000D00003B0A0000160B0000090D0000000B0000000B0000000D0000100B0000020B0000060D0000000C0000000B0000000D0000E50B0000F00A0000030D0000000D0000000B0000000D0000B90C0000DE0A0000000D0000000E0000000B0000000D00008D0D0000CC0A0000FD0C0000000F0000000B0000000D0000600E0000BB0A0000FA0C000000100000000B0000000D0000320F0000AA0A0000F60C000000000000000C0000000D00000B020000120D0000510D000000010000000C0000000D0000E0020000F80C0000440D000000020000000C0000000D0000B5030000DF0C0000390D000000030000000C0000000D00008B040000C70C00002F0D000000040000000C0000000D000061050000AF0C0000270D000000050000000C0000000D000037060000980C0000200D000000060000000C0000000D00000E070000820C00001A0D000000070000000C0000000D0000E40700006C0C0000150D000000080000000C0000000D0000BA080000560C0000100D000000090000000C0000000D000090090000420C00000C0D0000000A0000000C0000000D0000650A00002E0C0000090D0000000B0000000C0000000D00003A0B00001A0C0000060D0000000C0000000C0000000D00000F0C0000070C0000030D0000000D0000000C0000000D0000E30C0000F50B0000010D0000000E0000000C0000000D0000B60D0000E30B0000FE0C0000000F0000000C0000000D0000890E0000D10B0000FB0C000000100000000C0000000D00005B0F0000C00B0000F70C000000000000000D0000000D000036020000300E0000500D000000010000000D0000000D00000B030000160E0000430D000000020000000D0000000D0000E1030000FC0D0000380D000000030000000D0000000D0000B6040000E30D00002E0D000000040000000D0000000D00008C050000CB0D0000260D000000050000000D0000000D000062060000B40D00001F0D000000060000000D0000000D0000380700009D0D0000190D000000070000000D0000000D00000E080000870D0000140D000000080000000D0000000D0000E4080000710D0000100D000000090000000D0000000D0000BA0900005C0D00000C0D0000000A0000000D0000000D00008F0A0000480D0000090D0000000B0000000D0000000D0000640B0000340D0000070D0000000C0000000D0000000D0000390C0000210D0000040D0000000D0000000D0000000D00000D0D00000E0D0000010D0000000E0000000D0000000D0000E00D0000FC0C0000FF0C0000000F0000000D0000000D0000B30E0000EA0C0000FC0C000000100000000D0000000D0000840F0000D80C0000F90C000000000000000E0000000D000062020000500F00004E0D000000010000000E0000000D000036030000360F0000410D000000020000000E0000000D00000C0400001C0F0000370D000000030000000E0000000D0000E1040000030F00002D0D000000040000000E0000000D0000B7050000EA0E0000250D000000050000000E0000000D00008D060000D30E00001E0D000000060000000E0000000D000063070000BB0E0000190D000000070000000E0000000D000039080000A50E0000140D000000080000000E0000000D00000F0900008F0E0000100D000000090000000E0000000D0000E40900007A0E00000D0D0000000A0000000E0000000D0000B90A0000650E00000A0D0000000B0000000E0000000D00008E0B0000510E0000070D0000000C0000000E0000000D0000630C00003D0E0000050D0000000D0000000E0000000D0000360D00002A0E0000020D0000000E0000000E0000000D0000090E0000170E0000000D0000000F0000000E0000000D0000DC0E0000050E0000FD0C000000100000000E0000000D0000AD0F0000F30D0000FA0C000000000000000F0000000D00008D020000FF0F00004C0D000000010000000F0000000D000061030000FF0F0000400D000000020000000F0000000D000037040000FF0F0000350D000000030000000F0000000D00000C050000FF0F00002C0D000000040000000F0000000D0000E2050000FF0F0000240D000000050000000F0000000D0000B7060000F40F00001E0D000000060000000F0000000D00008D070000DD0F0000180D000000070000000F0000000D000063080000C60F0000140D000000080000000F0000000D000039090000B00F0000100D000000090000000F0000000D00000E0A00009A0F00000D0D0000000A0000000F0000000D0000E30A0000850F00000A0D0000000B0000000F0000000D0000B80B0000700F0000070D0000000C0000000F0000000D00008C0C00005C0F0000050D0000000D0000000F0000000D0000600D0000490F0000030D0000000E0000000F0000000D0000330E0000360F0000010D0000000F0000000F0000000D0000050F0000230F0000FE0C000000100000000F0000000D0000D60F0000110F0000FB0C00000000000000100000000D0000B8020000FF0F00004A0D00000001000000100000000D00008C030000FF0F00003E0D00000002000000100000000D000061040000FF0F0000340D00000003000000100000000D000037050000FF0F00002B0D00000004000000100000000D00000C060000FF0F0000230D00000005000000100000000D0000E2060000FF0F00001D0D00000006000000100000000D0000B7070000FF0F0000180D00000007000000100000000D00008D080000FF0F0000130D00000008000000100000000D000062090000FF0F00000F0D00000009000000100000000D0000380A0000FF0F00000C0D0000000A000000100000000D00000D0B0000FF0F00000A0D0000000B000000100000000D0000E10B0000FF0F0000080D0000000C000000100000000D0000B50C0000FF0F0000060D0000000D000000100000000D0000890D0000FF0F0000040D0000000E000000100000000D00005C0E0000FF0F0000020D0000000F000000100000000D00002E0F0000FF0F0000FF0C00000010000000100000000D0000FF0F0000FF0F0000FD0C00000000000000000000000E00002600000000000000880E00000001000000000000000E0000FC00000000000000790E00000002000000000000000E0000D3010000000000006B0E00000003000000000000000E0000AA020000000000005F0E00000004000000000000000E00008203000000000000540E00000005000000000000000E00005A040000000000004A0E00000006000000000000000E00003105000000000000420E00000007000000000000000E000009060000000000003A0E00000008000000000000000E0000E006000000000000330E00000009000000000000000E0000B8070000000000002D0E0000000A000000000000000E00008F08000000000000270E0000000B000000000000000E00006509000000000000220E0000000C000000000000000E00003B0A0000000000001D0E0000000D000000000000000E0000110B000000000000170E0000000E000000000000000E0000E60B000000000000120E0000000F000000000000000E0000BA0C0000000000000C0E00000010000000000000000E00008D0D000000000000060E00000000000000010000000E00004B000000E2000000800E00000001000000010000000E000021010000CC000000710E00000002000000010000000E0000F8010000B7000000630E00000003000000010000000E0000CF020000A2000000570E00000004000000010000000E0000A70300008F0000004D0E00000005000000010000000E00007E0400007C000000430E00000006000000010000000E000056050000690000003B0E00000007000000010000000E00002D06000057000000330E00000008000000010000000E000005070000460000002D0E00000009000000010000000E0000DC07000035000000270E0000000A000000010000000E0000B308000025000000210E0000000B000000010000000E000089090000150000001C0E0000000C000000010000000E00005F0A000006000000170E0000000D000000010000000E0000340B000000000000120E0000000E000000010000000E0000090C0000000000000D0E0000000F000000010000000E0000DD0C000000000000070E00000010000000010000000E0000B00D000000000000010E00000000000000020000000E00007100000002020000790E00000001000000020000000E000048010000EC0100006A0E00000002000000020000000E00001E020000D70100005D0E00000003000000020000000E0000F5020000C2010000510E00000004000000020000000E0000CD030000AE010000460E00000005000000020000000E0000A40400009A0100003D0E00000006000000020000000E00007B05000087010000350E00000007000000020000000E000053060000750100002E0E00000008000000020000000E00002A07000064010000270E00000009000000020000000E00000108000053010000210E0000000A000000020000000E0000D8080000420100001C0E0000000B000000020000000E0000AE09000032010000170E0000000C000000020000000E0000840A000023010000120E0000000D000000020000000E0000590B0000140100000D0E0000000E000000020000000E00002E0C000006010000080E0000000F000000020000000E0000010D0000F8000000030E00000010000000020000000E0000D50D0000EA000000FD0D00000000000000030000000E00009900000020030000720E00000001000000030000000E00006F01000009030000640E00000002000000030000000E000045020000F4020000570E00000003000000030000000E00001C030000DF0200004B0E00000004000000030000000E0000F3030000CA020000410E00000005000000030000000E0000CA040000B6020000380E00000006000000030000000E0000A2050000A3020000300E00000007000000030000000E00007906000091020000290E00000008000000030000000E0000500700007F020000220E00000009000000030000000E0000270800006D0200001D0E0000000A000000030000000E0000FE0800005C020000170E0000000B000000030000000E0000D40900004C020000120E0000000C000000030000000E0000A90A00003C0200000E0E0000000D000000030000000E00007F0B00002D020000090E0000000E000000030000000E0000530C00001E020000040E0000000F000000030000000E0000270D000010020000FF0D00000010000000030000000E0000FA0D000002020000FA0D00000000000000040000000E0000C10000003B0400006D0E00000001000000040000000E000097010000250400005E0E00000002000000040000000E00006D0200000E040000510E00000003000000040000000E000044030000F9030000460E00000004000000040000000E00001B040000E40300003C0E00000005000000040000000E0000F2040000D0030000330E00000006000000040000000E0000C9050000BD0300002B0E00000007000000040000000E0000A0060000AA030000240E00000008000000040000000E000077070000970300001E0E00000009000000040000000E00004E08000086030000190E0000000A000000040000000E00002409000074030000140E0000000B000000040000000E0000FA090000640300000F0E0000000C000000040000000E0000D00A0000540300000A0E0000000D000000040000000E0000A50B000044030000060E0000000E000000040000000E0000790C000035030000020E0000000F000000040000000E00004D0D000027030000FD0D00000010000000040000000E0000200E000018030000F80D00000000000000050000000E0000E900000055050000680E00000001000000050000000E0000BF0100003E050000590E00000002000000050000000E000096020000270500004D0E00000003000000050000000E00006C03000012050000420E00000004000000050000000E000043040000FD040000380E00000005000000050000000E00001A050000E80400002F0E00000006000000050000000E0000F1050000D4040000270E00000007000000050000000E0000C8060000C1040000210E00000008000000050000000E00009F070000AE0400001B0E00000009000000050000000E0000750800009C040000150E0000000A000000050000000E00004C0900008B040000110E0000000B000000050000000E0000220A00007A0400000C0E0000000C000000050000000E0000F70A000069040000080E0000000D000000050000000E0000CC0B000059040000040E0000000E000000050000000E0000A00C00004A040000FF0D0000000F000000050000000E0000740D00003B040000FB0D00000010000000050000000E0000460E00002D040000F60D00000000000000060000000E0000130100006D060000630E00000001000000060000000E0000E901000056060000550E00000002000000060000000E0000BF0200003F060000490E00000003000000060000000E000095030000290600003E0E00000004000000060000000E00006C04000014060000340E00000005000000060000000E000043050000FF0500002C0E00000006000000060000000E00001A060000EB050000240E00000007000000060000000E0000F1060000D70500001E0E00000008000000060000000E0000C7070000C4050000180E00000009000000060000000E00009E080000B2050000130E0000000A000000060000000E000074090000A00500000E0E0000000B000000060000000E00004A0A00008E0500000A0E0000000C000000060000000E00001F0B00007E050000060E0000000D000000060000000E0000F40B00006D050000020E0000000E000000060000000E0000C80C00005E050000FE0D0000000F000000060000000E00009B0D00004E050000F90D00000010000000060000000E00006E0E000040050000F50D00000000000000070000000E00003D01000085070000600E00000001000000070000000E0000120200006D070000520E00000002000000070000000E0000E902000056070000450E00000003000000070000000E0000BF030000400700003B0E00000004000000070000000E0000950400002A070000310E00000005000000070000000E00006C05000015070000290E00000006000000070000000E00004306000000070000220E00000007000000070000000E00001A070000EC0600001B0E00000008000000070000000E0000F0070000D9060000160E00000009000000070000000E0000C7080000C6060000110E0000000A000000070000000E00009D090000B40600000D0E0000000B000000070000000E0000720A0000A2060000080E0000000C000000070000000E0000470B000091060000050E0000000D000000070000000E00001C0C000081060000010E0000000E000000070000000E0000F00C000071060000FD0D0000000F000000070000000E0000C30D000061060000F90D00000010000000070000000E0000960E000052060000F40D00000000000000080000000E0000670100009C0800005C0E00000001000000080000000E00003D020000840800004F0E00000002000000080000000E0000130300006D080000430E00000003000000080000000E0000E903000056080000380E00000004000000080000000E0000BF040000400800002F0E00000005000000080000000E0000960500002A080000270E00000006000000080000000E00006D06000016080000200E00000007000000080000000E00004307000001080000190E00000008000000080000000E00001A080000EE070000140E00000009000000080000000E0000F0080000DA0700000F0E0000000A000000080000000E0000C6090000C80700000B0E0000000B000000080000000E00009B0A0000B6070000070E0000000C000000080000000E0000700B0000A5070000040E0000000D000000080000000E0000450C000094070000000E0000000E000000080000000E0000190D000083070000FC0D0000000F000000080000000E0000EC0D000073070000F80D00000010000000080000000E0000BE0E000064070000F40D00000000000000090000000E000092010000B40900005A0E00000001000000090000000E0000670200009C0900004C0E00000002000000090000000E00003D03000084090000400E00000003000000090000000E0000130400006D090000360E00000004000000090000000E0000EA040000560900002D0E00000005000000090000000E0000C005000040090000250E00000006000000090000000E0000970600002B0900001E0E00000007000000090000000E00006D07000016090000180E00000008000000090000000E00004308000002090000130E00000009000000090000000E000019090000EF0800000E0E0000000A000000090000000E0000EF090000DC0800000A0E0000000B000000090000000E0000C50A0000CA080000070E0000000C000000090000000E00009A0B0000B8080000030E0000000D000000090000000E00006E0C0000A7080000000E0000000E000000090000000E0000420D000096080000FC0D0000000F000000090000000E0000150E000086080000F80D00000010000000090000000E0000E70E000076080000F40D000000000000000A0000000E0000BD010000CC0A0000570E000000010000000A0000000E000092020000B30A00004A0E000000020000000A0000000E0000680300009B0A00003E0E000000030000000A0000000E00003E040000840A0000340E000000040000000A0000000E0000140500006D0A00002B0E000000050000000A0000000E0000EB050000570A0000230E000000060000000A0000000E0000C1060000410A00001C0E000000070000000A0000000E0000970700002C0A0000170E000000080000000A0000000E00006D080000180A0000120E000000090000000A0000000E000043090000040A00000E0E0000000A0000000A0000000E0000190A0000F10900000A0E0000000B0000000A0000000E0000EE0A0000DE090000060E0000000C0000000A0000000E0000C30B0000CC090000030E0000000D0000000A0000000E0000970C0000BB090000000E0000000E0000000A0000000E00006B0D0000A9090000FC0D0000000F0000000A0000000E00003E0E000099090000F90D000000100000000A0000000E0000100F000089090000F50D000000000000000B0000000E0000E9010000E60B0000550E000000010000000B0000000E0000BE020000CD0B0000480E000000020000000B0000000E000093030000B40B00003C0E000000030000000B0000000E0000690400009C0B0000320E000000040000000B0000000E00003F050000850B0000290E000000050000000B0000000E0000150600006F0B0000220E000000060000000B0000000E0000EB060000590B00001B0E000000070000000B0000000E0000C2070000430B0000160E000000080000000B0000000E0000980800002F0B0000110E000000090000000B0000000E00006E0900001B0B00000D0E0000000A0000000B0000000E0000430A0000070B0000090E0000000B0000000B0000000E0000180B0000F40A0000060E0000000C0000000B0000000E0000ED0B0000E20A0000030E0000000D0000000B0000000E0000C10C0000D00A0000000E0000000E0000000B0000000E0000940D0000BE0A0000FD0D0000000F0000000B0000000E0000670E0000AD0A0000F90D000000100000000B0000000E0000390F00009D0A0000F60D000000000000000C0000000E000014020000010D0000530E000000010000000C0000000E0000E9020000E70C0000460E000000020000000C0000000E0000BE030000CF0C00003A0E000000030000000C0000000E000094040000B60C0000300E000000040000000C0000000E00006A0500009F0C0000280E000000050000000C0000000E000040060000880C0000210E000000060000000C0000000E000016070000720C00001A0E000000070000000C0000000E0000EC0700005C0C0000150E000000080000000C0000000E0000C2080000470C0000110E000000090000000C0000000E000098090000330C00000D0E0000000A0000000C0000000E00006D0A00001F0C0000090E0000000B0000000C0000000E0000420B00000B0C0000060E0000000C0000000C0000000E0000170C0000F90B0000030E0000000D0000000C0000000E0000EB0C0000E60B0000000E0000000E0000000C0000000E0000BE0D0000D50B0000FD0D0000000F0000000C0000000E0000900E0000C30B0000FA0D000000100000000C0000000E0000620F0000B20B0000F70D000000000000000D0000000E00003F0200001E0E0000510E000000010000000D0000000E000014030000040E0000440E000000020000000D0000000E0000E9030000EB0D0000390E000000030000000D0000000E0000BF040000D30D00002F0E000000040000000D0000000E000095050000BB0D0000270E000000050000000D0000000E00006B060000A40D0000200E000000060000000D0000000E0000410700008D0D00001A0E000000070000000D0000000E000017080000770D0000140E000000080000000D0000000E0000EC080000620D0000100E000000090000000D0000000E0000C20900004D0D00000C0E0000000A0000000D0000000E0000970A0000390D0000090E0000000B0000000D0000000E00006C0B0000250D0000060E0000000C0000000D0000000E0000400C0000120D0000040E0000000D0000000D0000000E0000140D0000FF0C0000010E0000000E0000000D0000000E0000E70D0000ED0C0000FE0D0000000F0000000D0000000E0000BA0E0000DB0C0000FB0D000000100000000D0000000E00008B0F0000CA0C0000F80D000000000000000E0000000E00006B0200003E0F00004F0E000000010000000E0000000E00003F030000240F0000420E000000020000000E0000000E0000140400000A0F0000370E000000030000000E0000000E0000EA040000F20E00002E0E000000040000000E0000000E0000BF050000D90E0000260E000000050000000E0000000E000095060000C20E00001F0E000000060000000E0000000E00006B070000AB0E0000190E000000070000000E0000000E000041080000950E0000140E000000080000000E0000000E0000170900007F0E0000100E000000090000000E0000000E0000EC0900006A0E00000C0E0000000A0000000E0000000E0000C10A0000550E0000090E0000000B0000000E0000000E0000960B0000410E0000060E0000000C0000000E0000000E00006A0C00002E0E0000040E0000000D0000000E0000000E00003E0D00001B0E0000010E0000000E0000000E0000000E0000110E0000080E0000FF0D0000000F0000000E0000000E0000E30E0000F60D0000FC0D000000100000000E0000000E0000B50F0000E50D0000F90D000000000000000F0000000E000096020000FF0F00004D0E000000010000000F0000000E00006A030000FF0F0000400E000000020000000F0000000E00003F040000FF0F0000350E000000030000000F0000000E000015050000FF0F00002C0E000000040000000F0000000E0000EA050000FB0F0000240E000000050000000F0000000E0000C0060000E30F00001E0E000000060000000F0000000E000095070000CC0F0000180E000000070000000F0000000E00006B080000B50F0000130E000000080000000F0000000E0000410900009F0F00000F0E000000090000000F0000000E0000160A00008A0F00000C0E0000000A0000000F0000000E0000EB0A0000750F0000090E0000000B0000000F0000000E0000C00B0000610F0000070E0000000C0000000F0000000E0000940C00004D0F0000040E0000000D0000000F0000000E0000670D0000390F0000020E0000000E0000000F0000000E00003A0E0000270F0000000E0000000F0000000F0000000E00000C0F0000140F0000FD0D000000100000000F0000000E0000DE0F0000020F0000FA0D00000000000000100000000E0000C1020000FF0F00004A0E00000001000000100000000E000095030000FF0F00003E0E00000002000000100000000E00006A040000FF0F0000340E00000003000000100000000E00003F050000FF0F00002B0E00000004000000100000000E000014060000FF0F0000230E00000005000000100000000E0000EA060000FF0F00001C0E00000006000000100000000E0000BF070000FF0F0000170E00000007000000100000000E000095080000FF0F0000120E00000008000000100000000E00006A090000FF0F00000F0E00000009000000100000000E0000400A0000FF0F00000C0E0000000A000000100000000E0000140B0000FF0F0000090E0000000B000000100000000E0000E90B0000FF0F0000070E0000000C000000100000000E0000BD0C0000FF0F0000040E0000000D000000100000000E0000900D0000FF0F0000020E0000000E000000100000000E0000630E0000FF0F0000000E0000000F000000100000000E0000350F0000FF0F0000FE0D00000010000000100000000E0000FF0F0000FF0F0000FB0D00000000000000000000000F000033000000000000008D0F00000001000000000000000F000009010000000000007D0F00000002000000000000000F0000E0010000000000006F0F00000003000000000000000F0000B702000000000000630F00000004000000000000000F00008E03000000000000580F00000005000000000000000F000066040000000000004E0F00000006000000000000000F00003D05000000000000450F00000007000000000000000F000015060000000000003D0F00000008000000000000000F0000EC06000000000000360F00000009000000000000000F0000C307000000000000300F0000000A000000000000000F00009A080000000000002A0F0000000B000000000000000F00007009000000000000240F0000000C000000000000000F0000460A0000000000001E0F0000000D000000000000000F00001C0B000000000000190F0000000E000000000000000F0000F00B000000000000140F0000000F000000000000000F0000C40C0000000000000E0F00000010000000000000000F0000970D000000000000080F00000000000000010000000F000058000000D1000000840F00000001000000010000000F00002E010000BB000000750F00000002000000010000000F000005020000A6000000670F00000003000000010000000F0000DC020000920000005B0F00000004000000010000000F0000B30300007E000000500F00000005000000010000000F00008A0400006B000000470F00000006000000010000000F000062050000590000003E0F00000007000000010000000F00003906000047000000360F00000008000000010000000F000010070000360000002F0F00000009000000010000000F0000E707000025000000290F0000000A000000010000000F0000BE08000015000000230F0000000B000000010000000F000094090000050000001E0F0000000C000000010000000F00006A0A000000000000180F0000000D000000010000000F00003F0B000000000000130F0000000E000000010000000F0000140C0000000000000E0F0000000F000000010000000F0000E80C000000000000080F00000010000000010000000F0000BB0D000000000000020F00000000000000020000000F00007E000000F10100007D0F00000001000000020000000F000054010000DB0100006E0F00000002000000020000000F00002B020000C6010000600F00000003000000020000000F000002030000B1010000540F00000004000000020000000F0000D90300009D010000490F00000005000000020000000F0000B00400008A010000400F00000006000000020000000F00008705000077010000380F00000007000000020000000F00005E06000065010000300F00000008000000020000000F00003507000053010000290F00000009000000020000000F00000C08000042010000230F0000000A000000020000000F0000E3080000320100001E0F0000000B000000020000000F0000B909000022010000180F0000000C000000020000000F00008F0A000013010000130F0000000D000000020000000F0000640B0000040100000E0F0000000E000000020000000F0000380C0000F5000000090F0000000F000000020000000F00000C0D0000E8000000040F00000010000000020000000F0000DF0D0000DA000000FE0E00000000000000030000000F0000A50000000E030000760F00000001000000030000000F00007B010000F8020000670F00000002000000030000000F000052020000E20200005A0F00000003000000030000000F000028030000CD0200004E0F00000004000000030000000F0000FF030000B9020000440F00000005000000030000000F0000D6040000A50200003A0F00000006000000030000000F0000AE05000092020000320F00000007000000030000000F000085060000800200002B0F00000008000000030000000F00005C0700006E020000240F00000009000000030000000F0000320800005C0200001E0F0000000A000000030000000F0000090900004C020000190F0000000B000000030000000F0000DF0900003C020000140F0000000C000000030000000F0000B40A00002C0200000F0F0000000D000000030000000F0000890B00001D0200000A0F0000000E000000030000000F00005E0C00000E020000050F0000000F000000030000000F0000310D000000020000000F00000010000000030000000F0000040E0000F2010000FB0E00000000000000040000000F0000CD00000029040000700F00000001000000040000000F0000A301000013040000610F00000002000000040000000F000079020000FD030000540F00000003000000040000000F000050030000E7030000490F00000004000000040000000F000027040000D30300003E0F00000005000000040000000F0000FE040000BF030000350F00000006000000040000000F0000D5050000AB0300002D0F00000007000000040000000F0000AC06000098030000260F00000008000000040000000F00008307000086030000200F00000009000000040000000F000059080000750300001A0F0000000A000000040000000F00002F09000063030000150F0000000B000000040000000F0000050A000053030000100F0000000C000000040000000F0000DB0A0000430300000C0F0000000D000000040000000F0000B00B000033030000070F0000000E000000040000000F0000840C000025030000020F0000000F000000040000000F0000570D000016030000FD0E00000010000000040000000F00002A0E000008030000F80E00000000000000050000000F0000F6000000430500006B0F00000001000000050000000F0000CC0100002C0500005C0F00000002000000050000000F0000A2020000150500004F0F00000003000000050000000F00007803000000050000440F00000004000000050000000F00004F040000EB0400003A0F00000005000000050000000F000026050000D6040000310F00000006000000050000000F0000FD050000C2040000290F00000007000000050000000F0000D4060000AF040000220F00000008000000050000000F0000AA0700009D0400001C0F00000009000000050000000F0000810800008B040000170F0000000A000000050000000F00005709000079040000120F0000000B000000050000000F00002D0A0000690400000D0F0000000C000000050000000F0000020B000058040000090F0000000D000000050000000F0000D70B000048040000040F0000000E000000050000000F0000AB0C000039040000000F0000000F000000050000000F00007E0D00002A040000FB0E00000010000000050000000F0000510E00001C040000F60E00000000000000060000000F00001F0100005B060000660F00000001000000060000000F0000F501000043060000580F00000002000000060000000F0000CB0200002D0600004B0F00000003000000060000000F0000A103000017060000400F00000004000000060000000F00007804000001060000360F00000005000000060000000F00004F050000ED0500002E0F00000006000000060000000F000025060000D8050000260F00000007000000060000000F0000FC060000C50500001F0F00000008000000060000000F0000D3070000B2050000190F00000009000000060000000F0000A9080000A0050000140F0000000A000000060000000F00007F0900008E0500000F0F0000000B000000060000000F0000550A00007D0500000B0F0000000C000000060000000F00002A0B00006C050000070F0000000D000000060000000F0000FE0B00005C050000020F0000000E000000060000000F0000D20C00004D050000FE0E0000000F000000060000000F0000A50D00003D050000FA0E00000010000000060000000F0000780E00002F050000F50E00000000000000070000000F00004901000072070000620F00000001000000070000000F00001F0200005A070000540F00000002000000070000000F0000F502000043070000480F00000003000000070000000F0000CB0300002D0700003D0F00000004000000070000000F0000A104000017070000330F00000005000000070000000F000078050000020700002A0F00000006000000070000000F00004E060000EE060000230F00000007000000070000000F000025070000DA0600001D0F00000008000000070000000F0000FB070000C7060000170F00000009000000070000000F0000D2080000B4060000120F0000000A000000070000000F0000A8090000A20600000D0F0000000B000000070000000F00007D0A000091060000090F0000000C000000070000000F0000520B000080060000050F0000000D000000070000000F0000270C00006F060000010F0000000E000000070000000F0000FA0C00005F060000FD0E0000000F000000070000000F0000CD0D000050060000F90E00000010000000070000000F0000A00E000041060000F40E00000000000000080000000F000074010000890800005F0F00000001000000080000000F00004902000071080000510F00000002000000080000000F00001F03000059080000440F00000003000000080000000F0000F5030000430800003A0F00000004000000080000000F0000CB0400002D080000300F00000005000000080000000F0000A205000017080000280F00000006000000080000000F00007806000003080000210F00000007000000080000000F00004E070000EF0700001A0F00000008000000080000000F000025080000DB070000150F00000009000000080000000F0000FB080000C8070000100F0000000A000000080000000F0000D1090000B60700000C0F0000000B000000080000000F0000A60A0000A4070000080F0000000C000000080000000F00007B0B000093070000040F0000000D000000080000000F00004F0C000082070000000F0000000E000000080000000F0000230D000072070000FC0E0000000F000000080000000F0000F60D000062070000F80E00000010000000080000000F0000C80E000052070000F30E00000000000000090000000F00009E010000A00900005B0F00000001000000090000000F000074020000880900004E0F00000002000000090000000F00004903000070090000420F00000003000000090000000F00001F04000059090000370F00000004000000090000000F0000F5040000430900002E0F00000005000000090000000F0000CC0500002D090000260F00000006000000090000000F0000A2060000180900001F0F00000007000000090000000F00007807000003090000190F00000008000000090000000F00004E080000F0080000130F00000009000000090000000F000024090000DC0800000F0F0000000A000000090000000F0000FA090000CA0800000B0F0000000B000000090000000F0000CF0A0000B7080000070F0000000C000000090000000F0000A40B0000A6080000030F0000000D000000090000000F0000780C000095080000FF0E0000000E000000090000000F00004C0D000084080000FC0E0000000F000000090000000F00001F0E000074080000F80E00000010000000090000000F0000F10E000064080000F30E000000000000000A0000000F0000C9010000B80A0000580F000000010000000A0000000F00009E0200009F0A00004B0F000000020000000A0000000F000074030000870A00003F0F000000030000000A0000000F00004A040000700A0000350F000000040000000A0000000F000020050000590A00002C0F000000050000000A0000000F0000F6050000430A0000240F000000060000000A0000000F0000CC0600002E0A00001D0F000000070000000A0000000F0000A2070000190A0000170F000000080000000A0000000F000078080000050A0000120F000000090000000A0000000F00004E090000F10900000E0F0000000A0000000A0000000F0000240A0000DE0900000A0F0000000B0000000A0000000F0000F90A0000CC090000060F0000000C0000000A0000000F0000CE0B0000BA090000030F0000000D0000000A0000000F0000A20C0000A8090000FF0E0000000E0000000A0000000F0000750D000097090000FC0E0000000F0000000A0000000F0000480E000087090000F80E000000100000000A0000000F00001A0F000077090000F40E000000000000000B0000000F0000F4010000D10B0000560F000000010000000B0000000F0000C9020000B80B0000490F000000020000000B0000000F00009F0300009F0B00003D0F000000030000000B0000000F000075040000880B0000330F000000040000000B0000000F00004B050000710B00002A0F000000050000000B0000000F0000210600005A0B0000220F000000060000000B0000000F0000F7060000450B00001C0F000000070000000B0000000F0000CD070000300B0000160F000000080000000B0000000F0000A30800001B0B0000110F000000090000000B0000000F000078090000070B00000D0F0000000A0000000B0000000F00004E0A0000F40A0000090F0000000B0000000B0000000F0000230B0000E10A0000060F0000000C0000000B0000000F0000F70B0000CF0A0000020F0000000D0000000B0000000F0000CB0C0000BD0A0000FF0E0000000E0000000B0000000F00009F0D0000AC0A0000FC0E0000000F0000000B0000000F0000710E00009B0A0000F80E000000100000000B0000000F0000430F00008B0A0000F50E000000000000000C0000000F000020020000EB0C0000530F000000010000000C0000000F0000F5020000D20C0000460F000000020000000C0000000F0000CA030000B90C00003B0F000000030000000C0000000F00009F040000A10C0000310F000000040000000C0000000F0000750500008A0C0000280F000000050000000C0000000F00004B060000730C0000210F000000060000000C0000000F0000210700005D0C00001A0F000000070000000C0000000F0000F7070000480C0000150F000000080000000C0000000F0000CD080000330C0000100F000000090000000C0000000F0000A30900001F0C00000C0F0000000A0000000C0000000F0000780A00000B0C0000090F0000000B0000000C0000000F00004D0B0000F80B0000060F0000000C0000000C0000000F0000210C0000E50B0000020F0000000D0000000C0000000F0000F50C0000D30B0000FF0E0000000E0000000C0000000F0000C80D0000C20B0000FC0E0000000F0000000C0000000F00009B0E0000B10B0000F90E000000100000000C0000000F00006C0F0000A00B0000F50E000000000000000D0000000F00004B020000080E0000510F000000010000000D0000000F000020030000EF0D0000440F000000020000000D0000000F0000F5030000D60D0000390F000000030000000D0000000F0000CA040000BD0D00002F0F000000040000000D0000000F0000A0050000A60D0000270F000000050000000D0000000F0000760600008F0D0000200F000000060000000D0000000F00004C070000780D0000190F000000070000000D0000000F000022080000630D0000140F000000080000000D0000000F0000F70800004D0D0000100F000000090000000D0000000F0000CD090000390D00000C0F0000000A0000000D0000000F0000A20A0000250D0000080F0000000B0000000D0000000F0000770B0000110D0000050F0000000C0000000D0000000F00004B0C0000FE0C0000030F0000000D0000000D0000000F00001F0D0000EC0C0000000F0000000E0000000D0000000F0000F20D0000DA0C0000FD0E0000000F0000000D0000000F0000C40E0000C90C0000FA0E000000100000000D0000000F0000950F0000B80C0000F60E000000000000000E0000000F000076020000280F00004F0F000000010000000E0000000F00004B0300000E0F0000420F000000020000000E0000000F000020040000F40E0000370F000000030000000E0000000F0000F5040000DC0E00002E0F000000040000000E0000000F0000CB050000C40E0000250F000000050000000E0000000F0000A0060000AD0E00001E0F000000060000000E0000000F000076070000960E0000180F000000070000000E0000000F00004C080000800E0000130F000000080000000E0000000F0000210900006A0E00000F0F000000090000000E0000000F0000F7090000550E00000B0F0000000A0000000E0000000F0000CC0A0000410E0000080F0000000B0000000E0000000F0000A00B00002D0E0000050F0000000C0000000E0000000F0000750C00001A0E0000030F0000000D0000000E0000000F0000480D0000070E0000000F0000000E0000000E0000000F00001B0E0000F50D0000FD0E0000000F0000000E0000000F0000ED0E0000E30D0000FB0E000000100000000E0000000F0000BE0F0000D20D0000F70E000000000000000F0000000F0000A1020000FF0F00004C0F000000010000000F0000000F000076030000FF0F0000400F000000020000000F0000000F00004B040000FF0F0000350F000000030000000F0000000F000020050000FE0F00002C0F000000040000000F0000000F0000F5050000E50F0000240F000000050000000F0000000F0000CB060000CE0F00001D0F000000060000000F0000000F0000A0070000B70F0000170F000000070000000F0000000F000076080000A00F0000120F000000080000000F0000000F00004B0900008A0F00000E0F000000090000000F0000000F0000210A0000750F00000B0F0000000A0000000F0000000F0000F50A0000600F0000080F0000000B0000000F0000000F0000CA0B00004C0F0000050F0000000C0000000F0000000F00009E0C0000390F0000030F0000000D0000000F0000000F0000710D0000260F0000000F0000000E0000000F0000000F0000440E0000130F0000FE0E0000000F0000000F0000000F0000160F0000010F0000FB0E000000100000000F0000000F0000E70F0000EF0E0000F80E00000000000000100000000F0000CC020000FF0F00004A0F00000001000000100000000F0000A0030000FF0F00003E0F00000002000000100000000F000075040000FF0F0000330F00000003000000100000000F00004A050000FF0F00002A0F00000004000000100000000F000020060000FF0F0000220F00000005000000100000000F0000F5060000FF0F00001C0F00000006000000100000000F0000CA070000FF0F0000160F00000007000000100000000F0000A0080000FF0F0000110F00000008000000100000000F000075090000FF0F00000E0F00000009000000100000000F00004A0A0000FF0F00000A0F0000000A000000100000000F00001F0B0000FF0F0000080F0000000B000000100000000F0000F30B0000FF0F0000050F0000000C000000100000000F0000C70C0000FF0F0000030F0000000D000000100000000F00009B0D0000FF0F0000010F0000000E000000100000000F00006D0E0000FF0F0000FE0E0000000F000000100000000F00003F0F0000FF0F0000FC0E00000010000000100000000F0000FF0F0000FF0F0000F90E00000000000000000000001000004300000000000000FF0F00000001000000000000001000001901000000000000FF0F0000000200000000000000100000EF01000000000000FF0F0000000300000000000000100000C602000000000000FF0F00000004000000000000001000009E03000000000000FF0F00000005000000000000001000007504000000000000FF0F00000006000000000000001000004C05000000000000FF0F00000007000000000000001000002406000000000000FF0F0000000800000000000000100000FB06000000000000FF0F0000000900000000000000100000D207000000000000FF0F0000000A00000000000000100000A808000000000000FF0F0000000B000000000000001000007F09000000000000FF0F0000000C00000000000000100000540A000000000000FF0F0000000D000000000000001000002A0B000000000000FF0F0000000E00000000000000100000FE0B000000000000FF0F0000000F00000000000000100000D20C000000000000FF0F0000001000000000000000100000A50D000000000000FF0F000000000000000100000010000068000000BB000000FF0F00000001000000010000001000003E010000A6000000FF0F00000002000000010000001000001402000091000000FF0F0000000300000001000000100000EB0200007C000000FF0F0000000400000001000000100000C203000069000000FF0F00000005000000010000001000009904000056000000FF0F00000006000000010000001000007105000043000000FF0F00000007000000010000001000004806000032000000FF0F00000008000000010000001000001F07000020000000FF0F0000000900000001000000100000F607000010000000FF0F0000000A00000001000000100000CC08000000000000FF0F0000000B00000001000000100000A209000000000000FF0F0000000C00000001000000100000780A000000000000FF0F0000000D000000010000001000004D0B000000000000FF0F0000000E00000001000000100000220C000000000000FF0F0000000F00000001000000100000F50C000000000000FF0F0000001000000001000000100000C80D000000000000FF0F00000000000000020000001000008E000000DB010000FF0F000000010000000200000010000064010000C5010000FF0F00000002000000020000001000003A020000B0010000FF0F0000000300000002000000100000110300009B010000FF0F0000000400000002000000100000E803000087010000FF0F0000000500000002000000100000BF04000074010000FF0F00000006000000020000001000009605000061010000FF0F00000007000000020000001000006D0600004F010000FF0F0000000800000002000000100000440700003D010000FF0F00000009000000020000001000001B0800002C010000FF0F0000000A00000002000000100000F10800001C010000FF0F0000000B00000002000000100000C70900000C010000FF0F0000000C000000020000001000009D0A0000FD000000FF0F0000000D00000002000000100000720B0000EE000000FF0F0000000E00000002000000100000460C0000E0000000FF0F0000000F00000002000000100000190D0000D2000000FF0F0000001000000002000000100000EC0D0000C5000000FE0F0000000000000003000000100000B5000000F8020000FF0F00000001000000030000001000008B010000E1020000FF0F000000020000000300000010000061020000CC020000FF0F000000030000000300000010000038030000B7020000FF0F00000004000000030000001000000E040000A3020000FF0F0000000500000003000000100000E50400008F020000FF0F0000000600000003000000100000BC0500007C020000FF0F00000007000000030000001000009306000069020000FF0F00000008000000030000001000006A07000058020000FF0F00000009000000030000001000004108000046020000FF0F0000000A000000030000001000001709000036020000FF0F0000000B00000003000000100000ED09000026020000FF0F0000000C00000003000000100000C20A000016020000FF0F0000000D00000003000000100000970B000007020000FF0F0000000E000000030000001000006B0C0000F8010000FF0F0000000F000000030000001000003F0D0000EA010000FF0F0000001000000003000000100000110E0000DD010000FB0F0000000000000004000000100000DD00000012040000FF0F0000000100000004000000100000B3010000FC030000FF0F000000020000000400000010000089020000E6030000FF0F00000003000000040000001000005F030000D0030000FF0F000000040000000400000010000036040000BC030000FF0F00000005000000040000001000000D050000A8030000FF0F0000000600000004000000100000E305000095030000FF0F0000000700000004000000100000BA06000082030000FF0F00000008000000040000001000009107000070030000FF0F0000000900000004000000100000670800005E030000FF0F0000000A000000040000001000003E0900004D030000FF0F0000000B00000004000000100000130A00003D030000FF0F0000000C00000004000000100000E90A00002D030000FF0F0000000D00000004000000100000BD0B00001E030000FF0F0000000E00000004000000100000910C00000F030000FF0F0000000F00000004000000100000650D000000030000FD0F0000001000000004000000100000370E0000F2020000F80F0000000000000005000000100000050100002B050000FF0F0000000100000005000000100000DB01000014050000FF0F0000000200000005000000100000B1020000FE040000FF0F000000030000000500000010000087030000E8040000FF0F00000004000000050000001000005E040000D3040000FF0F000000050000000500000010000035050000BF040000FF0F00000006000000050000001000000B060000AB040000FF0F0000000700000005000000100000E206000098040000FF0F0000000800000005000000100000B907000086040000FF0F00000009000000050000001000008F08000074040000FF0F0000000A000000050000001000006509000063040000FF0F0000000B000000050000001000003B0A000052040000FF0F0000000C00000005000000100000100B000042040000FF0F0000000D00000005000000100000E40B000032040000FF0F0000000E00000005000000100000B80C000023040000FF0F0000000F000000050000001000008B0D000014040000FB0F00000010000000050000001000005E0E000006040000F60F00000000000000060000001000002F01000043060000FF0F0000000100000006000000100000040200002B060000FF0F0000000200000006000000100000DA02000015060000FF0F0000000300000006000000100000B0030000FF050000FF0F000000040000000600000010000087040000EA050000FF0F00000005000000060000001000005D050000D5050000FF0F000000060000000600000010000034060000C1050000FF0F00000007000000060000001000000A070000AE050000FF0F0000000800000006000000100000E10700009B050000FF0F0000000900000006000000100000B708000089050000FF0F0000000A000000060000001000008D09000077050000FF0F0000000B00000006000000100000630A000066050000FF0F0000000C00000006000000100000380B000056050000FF0F0000000D000000060000001000000C0C000046050000FF0F0000000E00000006000000100000E00C000036050000FE0F0000000F00000006000000100000B30D000027050000F90F0000001000000006000000100000850E000019050000F40F00000000000000070000001000005901000059070000FF0F00000001000000070000001000002E02000042070000FF0F0000000200000007000000100000040300002B070000FF0F0000000300000007000000100000DA03000015070000FF0F0000000400000007000000100000B0040000FF060000FF0F000000050000000700000010000086050000EA060000FF0F00000006000000070000001000005D060000D6060000FF0F000000070000000700000010000033070000C2060000FF0F00000008000000070000001000000A080000AF060000FF0F0000000900000007000000100000E00800009D060000FF0F0000000A00000007000000100000B60900008B060000FF0F0000000B000000070000001000008B0A000079060000FF0F0000000C00000007000000100000600B000069060000FF0F0000000D00000007000000100000340C000058060000FF0F0000000E00000007000000100000080D000049060000FC0F0000000F00000007000000100000DB0D000039060000F80F0000001000000007000000100000AD0E00002A060000F30F00000000000000080000001000008301000070080000FF0F00000001000000080000001000005802000058080000FF0F00000002000000080000001000002E03000041080000FF0F0000000300000008000000100000040400002A080000FF0F0000000400000008000000100000DA04000014080000FF0F0000000500000008000000100000B0050000FF070000FF0F000000060000000800000010000087060000EB070000FF0F00000007000000080000001000005D070000D7070000FF0F000000080000000800000010000033080000C3070000FF0F000000090000000800000010000009090000B0070000FF0F0000000A00000008000000100000DF0900009E070000FF0F0000000B00000008000000100000B40A00008C070000FF0F0000000C00000008000000100000890B00007B070000FF0F0000000D000000080000001000005D0C00006B070000FF0F0000000E00000008000000100000300D00005B070000FC0F0000000F00000008000000100000030E00004B070000F70F0000001000000008000000100000D50E00003C070000F30F0000000000000009000000100000AD01000086090000FF0F0000000100000009000000100000830200006E090000FF0F00000002000000090000001000005803000057090000FF0F00000003000000090000001000002E04000040090000FF0F0000000400000009000000100000040500002A090000FF0F0000000500000009000000100000DA05000014090000FF0F0000000600000009000000100000B0060000FF080000FF0F000000070000000900000010000087070000EB080000FF0F00000008000000090000001000005D080000D7080000FF0F000000090000000900000010000032090000C4080000FF0F0000000A00000009000000100000080A0000B2080000FF0F0000000B00000009000000100000DD0A0000A0080000FF0F0000000C00000009000000100000B20B00008E080000FF0F0000000D00000009000000100000860C00007D080000FF0F0000000E00000009000000100000590D00006D080000FB0F0000000F000000090000001000002C0E00005D080000F70F0000001000000009000000100000FE0E00004D080000F20F000000000000000A000000100000D80100009E0A0000FF0F000000010000000A000000100000AD020000850A0000FF0F000000020000000A000000100000830300006D0A0000FF0F000000030000000A00000010000058040000560A0000FF0F000000040000000A0000001000002E050000400A0000FF0F000000050000000A000000100000040600002A0A0000FF0F000000060000000A000000100000DB060000150A0000FF0F000000070000000A000000100000B1070000000A0000FF0F000000080000000A00000010000087080000EC090000FF0F000000090000000A0000001000005C090000D9090000FF0F0000000A0000000A000000100000320A0000C6090000FF0F0000000B0000000A000000100000070B0000B4090000FF0F0000000C0000000A000000100000DB0B0000A2090000FF0F0000000D0000000A000000100000AF0C000091090000FE0F0000000E0000000A000000100000830D000080090000FB0F0000000F0000000A000000100000550E000070090000F70F000000100000000A000000100000270F000060090000F30F000000000000000B00000010000004020000B60B0000FF0F000000010000000B000000100000D80200009E0B0000FF0F000000020000000B000000100000AE030000850B0000FF0F000000030000000B000000100000830400006E0B0000FF0F000000040000000B00000010000059050000570B0000FF0F000000050000000B0000001000002F060000410B0000FF0F000000060000000B000000100000050700002B0B0000FF0F000000070000000B000000100000DB070000170B0000FF0F000000080000000B000000100000B1080000020B0000FF0F000000090000000B00000010000086090000EE0A0000FF0F0000000A0000000B0000001000005C0A0000DB0A0000FF0F0000000B0000000B000000100000300B0000C90A0000FF0F0000000C0000000B000000100000050C0000B70A0000FF0F0000000D0000000B000000100000D90C0000A50A0000FE0F0000000E0000000B000000100000AC0D0000940A0000FB0F0000000F0000000B0000001000007E0E0000830A0000F70F000000100000000B000000100000500F0000730A0000F30F000000000000000C0000001000002F020000D10C0000FF0F000000010000000C00000010000003030000B70C0000FF0F000000020000000C000000100000D90300009F0C0000FF0F000000030000000C000000100000AE040000870C0000FF0F000000040000000C00000010000084050000700C0000FF0F000000050000000C0000001000005A0600005A0C0000FF0F000000060000000C0000001000002F070000440C0000FF0F000000070000000C000000100000050800002F0C0000FF0F000000080000000C000000100000DB0800001A0C0000FF0F000000090000000C000000100000B0090000060C0000FF0F0000000A0000000C000000100000860A0000F20B0000FF0F0000000B0000000C0000001000005A0B0000DF0B0000FF0F0000000C0000000C0000001000002F0C0000CD0B0000FF0F0000000D0000000C000000100000020D0000BB0B0000FE0F0000000E0000000C000000100000D50D0000AA0B0000FB0F0000000F0000000C000000100000A80E0000990B0000F80F000000100000000C000000100000790F0000880B0000F40F000000000000000D0000001000005A020000ED0D0000FF0F000000010000000D0000001000002F030000D40D0000FF0F000000020000000D00000010000004040000BB0D0000FF0F000000030000000D000000100000D9040000A30D0000FF0F000000040000000D000000100000AE0500008B0D0000FF0F000000050000000D00000010000084060000740D0000FF0F000000060000000D0000001000005A0700005E0D0000FF0F000000070000000D00000010000030080000490D0000FF0F000000080000000D00000010000005090000340D0000FF0F000000090000000D000000100000DA0900001F0D0000FF0F0000000A0000000D000000100000AF0A00000C0D0000FF0F0000000B0000000D000000100000840B0000F80C0000FF0F0000000C0000000D000000100000580C0000E60C0000FF0F0000000D0000000D0000001000002C0D0000D30C0000FE0F0000000E0000000D000000100000FF0D0000C20C0000FB0F0000000F0000000D000000100000D10E0000B10C0000F80F000000100000000D000000100000A20F0000A00C0000F40F000000000000000E000000100000850200000C0F0000FF0F000000010000000E0000001000005A030000F20E0000FF0F000000020000000E0000001000002E040000D90E0000FF0F000000030000000E00000010000004050000C10E0000FF0F000000040000000E000000100000D9050000A90E0000FF0F000000050000000E000000100000AF060000920E0000FF0F000000060000000E000000100000840700007C0E0000FF0F000000070000000E0000001000005A080000660E0000FF0F000000080000000E0000001000002F090000500E0000FF0F000000090000000E000000100000040A00003C0E0000FF0F0000000A0000000E000000100000D90A0000280E0000FF0F0000000B0000000E000000100000AE0B0000140E0000FF0F0000000C0000000E000000100000820C0000010E0000FF0F0000000D0000000E000000100000550D0000EE0D0000FE0F0000000E0000000E000000100000280E0000DC0D0000FC0F0000000F0000000E000000100000FA0E0000CB0D0000F90F000000100000000E000000100000CB0F0000BA0D0000F50F000000000000000F000000100000B0020000FF0F0000FF0F000000010000000F00000010000084030000FF0F0000FF0F000000020000000F00000010000059040000FB0F0000FF0F000000030000000F0000001000002E050000E20F0000FF0F000000040000000F00000010000004060000CA0F0000FF0F000000050000000F000000100000D9060000B30F0000FF0F000000060000000F000000100000AE0700009C0F0000FF0F000000070000000F00000010000084080000860F0000FF0F000000080000000F00000010000059090000700F0000FF0F000000090000000F0000001000002E0A00005B0F0000FF0F0000000A0000000F000000100000030B0000470F0000FF0F0000000B0000000F000000100000D70B0000330F0000FF0F0000000C0000000F000000100000AB0C00001F0F0000FF0F0000000D0000000F0000001000007F0D00000D0F0000FF0F0000000E0000000F000000100000510E0000FA0E0000FC0F0000000F0000000F000000100000230F0000E80E0000F90F000000100000000F000000100000F40F0000D70E0000F60F0000000000000010000000100000DB020000FF0F0000FF0F0000000100000010000000100000AF030000FF0F0000FF0F000000020000001000000010000084040000FF0F0000FF0F000000030000001000000010000059050000FF0F0000FF0F00000004000000100000001000002E060000FF0F0000FF0F000000050000001000000010000003070000FF0F0000FF0F0000000600000010000000100000D8070000FF0F0000FF0F0000000700000010000000100000AE080000FF0F0000FF0F000000080000001000000010000083090000FF0F0000FF0F0000000900000010000000100000580A0000FF0F0000FF0F0000000A000000100000001000002C0B0000FF0F0000FF0F0000000B00000010000000100000010C0000FF0F0000FF0F0000000C00000010000000100000D50C0000FF0F0000FF0F0000000D00000010000000100000A80D0000FF0F0000FF0F0000000E000000100000001000007A0E0000FF0F0000FC0F0000000F000000100000001000004C0F0000FF0F0000FA0F0000001000000010000000100000FF0F0000F80F0000F70F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000650300000000000000000000000800000000000000000000CD0600000000000000000000000C00000000000000000000310A000000000000000000000010000000000000000000008B0D00000000000000000000000000000004000000000000A00000009704000000000000000400000004000000000000020400003A0400000000000000080000000400000000000067070000E803000000000000000C00000004000000000000C80A00009F03000000000000001000000004000000000000200E00005F030000000000000000000000080000000000004B0100001109000000000000000400000008000000000000AB040000AC080000000000000008000000080000000000000D0800005208000000000000000C000000080000000000006B0B00000008000000000000001000000008000000000000C00E0000B70700000000000000000000000C000000000000FD0100008F0D00000000000000040000000C0000000000005A050000210D00000000000000080000000C000000000000B8080000BE0C000000000000000C0000000C000000000000140C0000650C00000000000000100000000C000000000000660F0000130C000000000000000000000010000000000000AE020000FF0F00000700000000040000001000000000000008060000FF0F00000000000000080000001000000000000064090000FF0F000000000000000C00000010000000000000BD0C0000FF0F000000000000001000000010000000000000FF0F0000FF0F00000000000000000000000000000004000007000000000000003804000000040000000000000004000069030000000000000D040000000800000000000000040000CE06000000000000F4030000000C000000000000000400002F0A000000000000E6030000001000000000000000040000880D000000000000D8030000000000000004000000040000A50000006804000029040000000400000004000000040000050400000D0400000004000000080000000400000004000067070000BC030000E9030000000C00000004000000040000C60A000075030000DD0300000010000000040000000400001C0E000036030000D20300000000000000080000000400004F010000DB08000025040000000400000008000000040000AD04000078080000FE0300000008000000080000000400000C08000020080000E9030000000C00000008000000040000680B0000D1070000DF030000001000000008000000040000BB0E00008B070000D603000000000000000C000000040000FF010000510D00002704000000040000000C0000000400005A050000E70C00000204000000080000000C000000040000B7080000870C0000F0030000000C0000000C000000040000100C0000310C0000E803000000100000000C000000040000610F0000E30B0000E0030000000000000010000000040000AF020000FF0F00002B04000000040000001000000004000007060000FF0F00000804000000080000001000000004000062090000FF0F0000F8030000000C00000010000000040000B90C0000FF0F0000F2030000001000000010000000040000FF0F0000FF0F0000ED030000000000000000000000080000060000000000000061080000000400000000000000080000670300000000000032080000000800000000000000080000C90600000000000016080000000C00000000000000080000280A000000000000050800000010000000000000000800007D0D000000000000F4070000000000000004000000080000A3000000600400004D08000000040000000400000008000001040000060400002108000000080000000400000008000061070000B703000007080000000C00000004000000080000BD0A000071030000F8070000001000000004000000080000110E000034030000EA0700000000000000080000000800004C010000CC08000044080000000400000008000000080000A80400006C0800001A080000000800000008000000080000050800001608000003080000000C000000080000000800005F0B0000C9070000F7070000001000000008000000080000B00E000085070000EB07000000000000000C000000080000FB0100003B0D00004208000000040000000C00000008000054050000D40C00001A08000000080000000C000000080000AF080000780C000006080000000C0000000C000000080000060C0000240C0000FC07000000100000000C000000080000550F0000D90B0000F2070000000000000010000000080000AA020000FF0F00004108000000040000001000000008000000060000FF0F00001C08000000080000001000000008000059090000FF0F00000A080000000C00000010000000080000AE0C0000FF0F000002080000001000000010000000080000FA0F0000FF0F0000FB0700000000000000000000000C000014000000000000007E0C00000004000000000000000C000071030000000000004B0C00000008000000000000000C0000D1060000000000002C0C0000000C000000000000000C00002D0A000000000000170C00000010000000000000000C0000800D000000000000030C00000000000000040000000C0000AF00000052040000650C00000004000000040000000C00000B040000FA030000350C00000008000000040000000C000068070000AD030000190C0000000C000000040000000C0000C20A000068030000070C00000010000000040000000C0000130E00002C030000F50B00000000000000080000000C000057010000B7080000570C00000004000000080000000C0000B0040000590800002A0C00000008000000080000000C00000B08000006080000110C0000000C000000080000000C0000630B0000BC070000020C00000010000000080000000C0000B20E00007A070000F30B000000000000000C0000000C0000040200001F0D00004F0C000000040000000C0000000C00005B050000BB0C0000260C000000080000000C0000000C0000B4080000620C00000F0C0000000C0000000C0000000C00000A0C0000120C0000030C000000100000000C0000000C0000560F0000CA0B0000F80B00000000000000100000000C0000B1020000FF0F00004A0C00000004000000100000000C000006060000FF0F0000230C00000008000000100000000C00005D090000FF0F0000100C0000000C000000100000000C0000B00C0000FF0F0000060C00000010000000100000000C0000FB0F0000FF0F0000FE0B00000000000000000000001000004300000000000000FF0F00000004000000000000001000009E03000000000000FF0F0000000800000000000000100000FB06000000000000FF0F0000000C00000000000000100000540A000000000000FF0F0000001000000000000000100000A50D000000000000FF0F0000000000000004000000100000DD00000012040000FF0F000000040000000400000010000036040000BC030000FF0F00000008000000040000001000009107000070030000FF0F0000000C00000004000000100000E90A00002D030000FF0F0000001000000004000000100000370E0000F2020000F80F00000000000000080000001000008301000070080000FF0F0000000400000008000000100000DA04000014080000FF0F000000080000000800000010000033080000C3070000FF0F0000000C00000008000000100000890B00007B070000FF0F0000001000000008000000100000D50E00003C070000F30F000000000000000C0000001000002F020000D10C0000FF0F000000040000000C00000010000084050000700C0000FF0F000000080000000C000000100000DB0800001A0C0000FF0F0000000C0000000C0000001000002F0C0000CD0B0000FF0F000000100000000C000000100000790F0000880B0000F40F0000000000000010000000100000DB020000FF0F0000FF0F00000004000000100000001000002E060000FF0F0000FF0F000000080000001000000010000083090000FF0F0000FF0F0000000C00000010000000100000D50C0000FF0F0000FF0F0000001000000010000000100000FF0F0000F80F0000F70F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000500000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000000B0000002F0000003D0000004A000000530000005B000000640000006C00000071000000770000007C00000083000000880000008F00000094000000990000009E000000A2000000A5000000AA000000AD000000B1000000B3000000B7000000BA000000BD000000C0000000C4000000C8000000CC000000CE000000D1000000D4000000D8000000DA000000DC000000E0000000E2000000E4000000E7000000EA000000ED000000EF000000F1000000F3000000F5000000F8000000FA000000FB000000FE000000020100000301000006010000090100000B0100000D01000010010000110100001501000017010000190100001B0100001D0100001F01000021010000240100002501000027010000290100002B0100002D0100002F01000031010000330100003501000038010000390100003B0100003D0100003E0100004001000041010000430100004501000046010000490100004A0100004C0100004E0100004F010000500100005201000053010000550100005701000058010000590100005B0100005C0100005E010000600100006001000062010000640100006501000066010000680100006A0100006B0100006D0100006E010000700100007101000072010000740100007501000077010000780100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000083010000840100008601000088010000890100008A0100008B0100008C0100008E0100008F01000090010000910100009201000094010000950100009601000097010000980100009A0100009B0100009D0100009E010000A0010000A1010000A2010000A3010000A5010000A6010000A7010000A7010000A9010000AA010000AB010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BB010000BB010000BC010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C9010000C9010000CC010000CD010000CD010000CE010000CF010000D1010000D2010000D3010000D3010000D5010000D6010000D7010000D7010000D8010000D9010000DB010000DD010000DE010000DF010000DF010000E1010000E1010000E2010000E3010000E5010000E6010000E7010000E9010000EA010000EB010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F1010000F3010000F4010000F6010000F7010000F8010000F8010000F9010000FB010000FC010000FD010000FD010000FE0100000002000000020000010200000202000003020000030200000402000005020000060200000802000008020000090200000A0200000B0200000C0200000C0200000D0200000E0200000F020000100200001102000011020000130200001402000015020000150200001602000018020000190200001A0200001B0200001D0200001E0200001E0200001F02000020020000210200002102000023020000240200002402000025020000260200002602000027020000280200002A0200002A0200002B0200002C0200002D0200002E0200002E0200002F0200003002000031020000320200003202000033020000340200003602000037020000380200003802000039020000390200003B0200003C0200003C0200003D0200003E0200004002000040020000420200004302000043020000440200004502000045020000470200004702000048020000490200004A0200004B0200004B0200004C0200004D0200004D0200004E0200004F020000510200005102000051020000520200005502000055020000560200005602000057020000590200005A0200005B0200005B0200005C0200005D0200005E0200005E0200005F02000060020000610200006102000062020000630200006402000065020000650200006602000068020000690200006A0200006A0200006B0200006C0200006C0200006D0200006F02000070020000700200007002000071020000720200007302000074020000750200007502000076020000770200007802000078020000790200007A0200007B0200007D0200007E0200007E0200007F02000080020000800200008102000081020000820200008302000083020000840200008502000085020000870200008802000088020000880200008A0200008A0200008B0200008B0200008C0200008D0200008D0200008E0200008F020000900200009002000091020000920200009202000093020000930200009402000095020000950200009702000097020000980200009802000099020000990200009B0200009B0200009B0200009C0200009D0200009D0200009E0200009E0200009F0200009F020000A1020000A2020000A2020000A3020000A4020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000A9020000AA020000AB020000AB020000AC020000AC020000AD020000AE020000AE020000AF020000B0020000B1020000B1020000B2020000B3020000B3020000B4020000B4020000B6020000B6020000B8020000B8020000B9020000BB020000BB020000BB020000BC020000BD020000BD020000BD020000BE020000C0020000C0020000C0020000C1020000C1020000C3020000C4020000C5020000C5020000C6020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CC020000CD020000CD020000CD020000CE020000CF020000CF020000D1020000D2020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D7020000D7020000D8020000D8020000D9020000DA020000DA020000DB020000DB020000DC020000DD020000DE020000DF020000DF020000E0020000E0020000E2020000E2020000E4020000E4020000E5020000E6020000E6020000E7020000E7020000E8020000E9020000E9020000EA020000EA020000EB020000EC020000EC020000EE020000EF020000EF020000F0020000F0020000F1020000F2020000F3020000F4020000F4020000F5020000F5020000F7020000F8020000F8020000F9020000F9020000F9020000FB020000FC020000FD020000FD020000FE020000FE02000000030000010300000103000002030000030300000303000004030000040300000503000006030000060300000603000007030000070300000803000009030000090300000A0300000B0300000B0300000B0300000D0300000E0300000E0300000E0300000F0300000F03000010030000110300001103000012030000120300001303000013030000140300001403000015030000150300001703000017030000180300001803000019030000190300001A0300001A0300001B0300001C0300001C0300001C0300001D0300001E0300001E0300001F0300002003000021030000210300002203000022030000230300002303000024030000250300002503000027030000270300002803000028030000290300002A0300002A0300002A0300002B0300002B0300002D0300002E0300002E0300002F0300002F0300002F0300003003000031030000320300003203000032030000340300003403000035030000360300003603000037030000380300003803000038030000390300003B0300003B0300003C0300003C0300003C0300003D0300003E0300003F030000400300004003000041030000410300004103000042030000420300004303000043030000450300004503000046030000460300004603000047030000480300004803000049030000490300004A0300004A0300004A0300004B0300004B0300004C0300004C0300004E0300004F0300004F030000500300005003000051030000510300005203000052030000520300005203000053030000530300005403000055030000550300005603000056030000570300005703000057030000580300005803000059030000590300005A0300005A0300005C0300005C0300005D0300005E0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000620300006403000065030000650300006603000066030000660300006703000067030000680300006903000069030000690300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006F0300006F0300006F0300007003000070030000720300007303000073030000740300007403000075030000750300007603000076030000770300007703000078030000790300007A0300007A0300007B0300007C0300007C0300007C0300007D0300007D0300007F030000800300008003000080030000800300008103000082030000820300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008A0300008B0300008B0300008B0300008C0300008D0300008D0300008E0300008F0300008F0300009003000090030000900300009103000091030000920300009203000093030000940300009403000095030000960300009603000096030000970300009703000097030000980300009A0300009A0300009B0300009B0300009C0300009C0300009C0300009D0300009D0300009E0300009E030000A0030000A0030000A1030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A6030000A6030000A6030000A6030000A7030000A7030000A9030000AA030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AD030000AE030000AF030000AF030000B0030000B0030000B1030000B2030000B2030000B2030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B6030000B7030000B7030000B8030000B9030000B9030000BA030000BA030000BA030000BB030000BB030000BC030000BD030000BD030000BE030000BE030000BF030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C3030000C4030000C4030000C5030000C5030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CB030000CD030000CD030000CE030000CE030000CE030000CF030000CF030000D0030000D2030000D2030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D7030000D7030000D8030000D8030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DD030000DD030000DF030000DF030000DF030000DF030000E1030000E1030000E1030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E6030000E6030000E8030000E9030000E9030000E9030000E9030000EA030000EB030000EC030000EC030000ED030000ED030000ED030000EE030000EE030000EF030000F1030000F1030000F2030000F2030000F2030000F2030000F3030000F3030000F4030000F4030000F6030000F6030000F7030000F7030000F8030000F8030000F9030000FA030000FA030000FA030000FB030000FB030000FB030000FC030000FC030000FD030000FD030000FE030000FE030000FF030000FF03000000000000040000002B00000039000000450000004E000000540000005C000000640000006A00000070000000750000007B0000008000000085000000890000008E00000093000000970000009A0000009F000000A2000000A6000000A8000000AC000000AF000000B2000000B5000000B8000000BA000000BD000000BF000000C3000000C6000000C9000000CC000000CE000000D1000000D4000000D6000000D8000000DC000000DE000000E0000000E2000000E4000000E6000000E9000000EB000000EC000000EE000000F1000000F2000000F5000000F7000000F9000000FB000000FE000000FF000000020100000401000006010000080100000B0100000D0100000F01000012010000130100001501000017010000190100001B0100001D0100001F010000200100002101000023010000240100002601000027010000280100002B0100002C0100002F0100003101000032010000340100003501000037010000390100003A0100003B0100003D0100003E010000400100004201000043010000440100004601000047010000490100004B0100004B0100004D010000500100005101000052010000530100005501000055010000560100005701000058010000590100005A0100005C0100005E0100005F0100006001000062010000630100006401000065010000660100006701000068010000690100006C0100006D0100006F0100007001000071010000720100007301000074010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000810100008201000084010000850100008701000088010000890100008A0100008B0100008C0100008D0100008D0100008E0100008F01000090010000920100009301000094010000950100009601000097010000980100009A0100009B0100009C0100009D0100009F0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AD010000AD010000AF010000B0010000B0010000B1010000B2010000B3010000B4010000B5010000B5010000B7010000B9010000BA010000BA010000BB010000BD010000BE010000BF010000C0010000C1010000C1010000C2010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CA010000CB010000CC010000CD010000CF010000D0010000D2010000D2010000D3010000D4010000D5010000D6010000D7010000D7010000D8010000DA010000DB010000DC010000DC010000DD010000DF010000DF010000E0010000E1010000E2010000E2010000E3010000E4010000E5010000E7010000E7010000E8010000E9010000EA010000EB010000EB010000EC010000ED010000EE010000EF010000F0010000F0010000F2010000F3010000F4010000F4010000F5010000F6010000F6010000F7010000F8010000F9010000FA010000FA010000FB010000FC010000FD010000FD010000FF0100000002000000020000010200000202000002020000030200000402000005020000050200000702000008020000090200000A0200000A0200000B0200000C0200000D0200000E0200000E0200000F02000010020000110200001202000013020000130200001402000014020000160200001702000017020000190200001A0200001B0200001B0200001C0200001D0200001D0200001E0200001F0200001F0200002102000021020000220200002302000024020000260200002602000027020000280200002802000029020000290200002A0200002A0200002A0200002B0200002D0200002D0200002E0200002E0200002F020000300200003102000032020000320200003302000034020000350200003502000036020000370200003802000038020000390200003B0200003C0200003D0200003D0200003E0200003F020000400200004102000041020000420200004302000043020000440200004502000046020000460200004602000048020000490200004A0200004B0200004C0200004C0200004D0200004E0200004F0200004F02000050020000510200005202000053020000540200005402000055020000560200005602000057020000570200005802000059020000590200005A0200005B0200005B0200005C0200005D0200005D0200005D0200005E0200005E0200005E0200005E0200006002000061020000610200006202000063020000640200006402000065020000660200006602000067020000670200006802000069020000690200006B0200006B0200006C0200006C0200006D0200006D0200006F0200006F0200006F020000700200007202000072020000730200007302000074020000740200007502000076020000760200007702000079020000790200007A0200007A0200007B0200007C0200007D0200007D0200007E0200007E0200007F020000800200008002000081020000810200008202000083020000830200008402000085020000860200008602000087020000880200008802000089020000890200008B0200008B0200008C0200008C0200008D0200008E0200008E0200008E0200008F0200009102000091020000910200009102000092020000920200009202000093020000930200009402000095020000960200009602000097020000970200009802000098020000990200009A0200009A0200009B0200009C0200009D0200009E0200009E0200009E0200009F020000A0020000A0020000A1020000A2020000A2020000A3020000A3020000A4020000A4020000A5020000A5020000A7020000A7020000A8020000A8020000A9020000AA020000AA020000AB020000AB020000AC020000AD020000AE020000AF020000AF020000B0020000B0020000B2020000B2020000B3020000B3020000B4020000B5020000B5020000B6020000B6020000B7020000B8020000B8020000B9020000B9020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BE020000BF020000C0020000C1020000C2020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C6020000C6020000C7020000C7020000C8020000C8020000C9020000C9020000CA020000CB020000CB020000CC020000CD020000CD020000CE020000CE020000CF020000D0020000D0020000D0020000D1020000D1020000D2020000D3020000D3020000D5020000D6020000D6020000D6020000D7020000D8020000D8020000D8020000D9020000D9020000DA020000DC020000DC020000DD020000DD020000DE020000DE020000DF020000DF020000E0020000E0020000E2020000E2020000E3020000E3020000E4020000E4020000E5020000E5020000E6020000E7020000E7020000E7020000E8020000E9020000E9020000EA020000EB020000ED020000ED020000EE020000EE020000EF020000EF020000F0020000F1020000F1020000F3020000F3020000F4020000F4020000F5020000F6020000F6020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FA020000FB020000FD020000FE020000FE020000FE020000FF020000FF020000FF02000000030000000300000103000002030000020300000203000003030000040300000403000005030000050300000503000006030000070300000803000009030000090300000A0300000A0300000A0300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000E0300000F0300001003000010030000120300001203000013030000130300001303000014030000140300001503000015030000160300001703000017030000180300001803000019030000190300001A0300001A0300001A0300001A0300001B0300001B0300001C0300001E0300001E0300001F0300001F0300002003000020030000200300002103000021030000220300002203000023030000230300002403000024030000250300002603000026030000260300002703000027030000280300002803000029030000290300002B0300002B0300002B0300002C0300002D0300002D0300002E0300002E0300002E0300003003000030030000310300003203000032030000320300003303000033030000330300003303000034030000340300003503000036030000360300003603000037030000370300003803000039030000390300003A0300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003F03000040030000400300004103000042030000420300004203000043030000430300004403000045030000450300004503000045030000460300004703000047030000480300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004E0300004F0300004F0300004F03000050030000510300005103000052030000530300005303000054030000540300005403000055030000550300005603000056030000570300005803000058030000590300005A0300005A0300005A0300005B0300005B0300005B0300005C0300005D0300005D0300005E0300005E0300005F0300005F0300005F030000600300006003000061030000610300006303000063030000640300006403000064030000650300006503000066030000660300006603000066030000670300006703000067030000670300006803000068030000690300006A0300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006D0300006E0300006F0300006F030000700300007003000071030000720300007203000072030000730300007403000074030000750300007503000076030000760300007603000077030000770300007803000079030000790300007A0300007A0300007A0300007B0300007B0300007C0300007D0300007D0300007E0300007E0300007F03000080030000810300008103000082030000820300008303000083030000830300008403000084030000850300008503000086030000870300008703000088030000880300008903000089030000890300008A0300008A0300008A0300008C0300008C0300008D0300008D0300008D0300008E0300008E0300008F0300009003000090030000910300009103000092030000920300009203000093030000930300009403000094030000950300009503000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009A0300009A0300009B0300009B0300009B0300009B0300009C0300009C0300009C0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A1030000A2030000A3030000A3030000A3030000A3030000A4030000A5030000A6030000A6030000A7030000A7030000A7030000A8030000A8030000A9030000AA030000AA030000AB030000AB030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B2030000B2030000B2030000B3030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B703000000000000000000002800000039000000450000004F0000005800000060000000680000006F000000740000007900000080000000850000008B00000090000000950000009A0000009E000000A1000000A6000000AA000000AE000000B0000000B3000000B6000000BA000000BD000000C0000000C4000000C7000000CA000000CE000000D0000000D4000000D7000000D9000000DD000000DF000000E1000000E3000000E6000000E9000000EB000000ED000000EF000000F2000000F4000000F6000000F8000000FB000000FD000000FF000000020100000401000007010000090100000C0100000E01000011010000130100001501000017010000190100001B0100001D0100002001000021010000230100002501000027010000290100002B0100002E0100002F0100003201000034010000350100003701000038010000390100003C0100003D0100003F0100004101000042010000440100004501000047010000490100004A0100004C0100004E0100004F0100005101000053010000540100005501000057010000580100005A0100005C0100005C0100005E01000060010000600100006201000063010000650100006601000068010000690100006A0100006C0100006D0100006F01000071010000720100007301000075010000760100007701000078010000790100007A0100007B0100007C0100007E0100007E010000800100008101000083010000850100008601000087010000890100008A0100008B0100008C0100008D0100008E0100008F010000910100009201000093010000950100009601000098010000990100009A0100009C0100009D0100009E0100009E0100009F010000A0010000A1010000A3010000A4010000A5010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AF010000AF010000B0010000B1010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BC010000BD010000BE010000BF010000C0010000C0010000C2010000C3010000C5010000C6010000C6010000C7010000C9010000CA010000CB010000CC010000CC010000CD010000CF010000D0010000D0010000D1010000D2010000D4010000D6010000D7010000D8010000D8010000DA010000DA010000DB010000DC010000DD010000DE010000DF010000E1010000E2010000E4010000E4010000E5010000E6010000E7010000E8010000E9010000EB010000EB010000EC010000ED010000EE010000EF010000F0010000F0010000F1010000F3010000F4010000F5010000F5010000F6010000F9010000F9010000FA010000FB010000FC010000FC010000FD010000FE010000FE01000000020000000200000102000002020000030200000402000004020000050200000602000007020000090200000A0200000A0200000C0200000D0200000E0200000E0200000F02000011020000110200001202000013020000140200001502000015020000160200001702000018020000190200001A0200001C0200001C0200001D0200001E0200001F0200002002000021020000220200002202000024020000240200002502000026020000260200002702000028020000290200002A0200002A0200002B0200002C0200002D0200002E0200003002000030020000320200003202000034020000340200003402000036020000370200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003E0200003F02000040020000410200004302000043020000440200004502000045020000460200004702000049020000490200004A0200004B0200004C0200004D0200004E0200004E0200004F0200005002000051020000520200005202000053020000550200005602000056020000570200005802000059020000590200005A0200005C0200005C0200005D0200005D0200005E0200005F0200006002000061020000620200006202000063020000630200006402000065020000660200006702000067020000690200006A0200006B0200006C0200006C0200006D0200006D0200006E0200006F0200007002000071020000720200007302000074020000750200007502000076020000770200007702000079020000790200007A0200007B0200007C0200007D0200007E0200007E0200007F0200008002000080020000810200008202000083020000840200008402000085020000860200008602000087020000870200008802000088020000890200008A0200008A0200008B0200008B0200008C0200008D0200008D0200008F0200008F02000090020000900200009102000091020000930200009302000093020000930200009502000095020000960200009602000097020000970200009802000099020000990200009A0200009B0200009C0200009D0200009D0200009D0200009E0200009F0200009F020000A0020000A0020000A1020000A2020000A2020000A3020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AA020000AB020000AB020000AD020000AD020000AE020000AE020000AF020000B0020000B0020000B0020000B1020000B2020000B2020000B2020000B3020000B5020000B5020000B5020000B6020000B6020000B7020000B8020000B9020000B9020000BA020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BF020000C0020000C1020000C1020000C1020000C2020000C3020000C3020000C4020000C6020000C6020000C7020000C7020000C8020000C8020000C9020000C9020000CA020000CB020000CC020000CC020000CD020000CE020000CE020000CF020000CF020000D0020000D2020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D6020000D6020000D7020000D8020000D8020000D9020000D9020000DB020000DC020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E2020000E2020000E3020000E3020000E3020000E4020000E5020000E6020000E6020000E7020000E7020000E9020000EA020000EA020000EB020000EC020000EC020000EE020000EF020000F0020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F4020000F5020000F5020000F5020000F7020000F8020000F8020000F8020000F9020000F9020000FA020000FB020000FB020000FD020000FE020000FE020000FE02000000030000010300000103000001030000020300000303000003030000050300000503000006030000060300000703000007030000080300000803000009030000090300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000F03000010030000100300001003000011030000120300001203000013030000140300001503000015030000160300001603000017030000170300001803000019030000190300001A0300001A0300001B0300001B0300001C0300001D0300001D0300001D0300001F0300001F030000200300002103000021030000220300002203000023030000230300002503000025030000250300002503000027030000270300002803000029030000290300002A0300002B0300002B0300002B0300002C0300002D0300002D0300002F0300002F0300002F03000030030000310300003203000033030000330300003403000034030000340300003503000035030000360300003603000038030000380300003903000039030000390300003A0300003B0300003B0300003D0300003D0300003E0300003E0300003E030000400300004003000041030000410300004203000043030000430300004403000044030000450300004503000046030000460300004603000046030000470300004703000048030000490300004A0300004A0300004A0300004B0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000052030000520300005203000053030000530300005403000054030000540300005503000056030000560300005603000057030000580300005803000059030000590300005A0300005B0300005B0300005C0300005C0300005C0300005C0300005E0300005E0300005F0300005F03000060030000600300006103000062030000620300006203000063030000630300006403000065030000650300006603000066030000670300006703000068030000680300006903000069030000690300006A0300006B0300006B0300006C0300006D0300006D0300006D0300006E0300006E0300006F03000070030000710300007103000071030000720300007303000073030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007D0300007E0300007F0300007F030000800300008103000081030000820300008203000082030000840300008403000085030000850300008603000086030000860300008703000088030000880300008803000089030000890300008A0300008A0300008C0300008C0300008D0300008D0300008E0300008E0300008E0300008F0300008F030000900300009003000092030000920300009303000093030000930300009403000094030000950300009503000096030000960300009803000098030000980300009803000099030000990300009A0300009B0300009B0300009B0300009D0300009D0300009E0300009E0300009F0300009F0300009F030000A0030000A1030000A1030000A2030000A2030000A3030000A4030000A4030000A4030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A8030000A9030000A9030000A9030000AA030000AA030000AB030000AB030000AB030000AC030000AC030000AD030000AE030000AE030000AF030000AF030000B0030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B8030000B8030000B9030000B9030000BA030000BB030000BB030000BC030000BC030000BC030000BE030000BE030000BF030000BF030000BF030000C0030000C0030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CC030000CC030000CC030000CD030000CE030000CF030000CF030000CF030000D0030000D0030000D0030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D5030000D6030000D7030000D7030000D7030000D8030000D9030000DA030000DB030000DB030000DC030000DC030000DC030000DD030000DD030000DE030000DF030000DF030000E0030000E1030000E1030000E1030000E2030000E2030000E3030000E3030000E5030000E5030000E6030000E6030000E7030000E7030000E8030000E9030000E9030000E9030000EA030000EA030000EA030000EB030000EB030000ED030000ED030000EE030000EE030000EF030000EF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000005000000050000000500000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ <Feature FeatureType="28" Disable="false" DataSize="8192">3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D227574662D38223F3E3C6864725F6C69622076657273696F6E3D22322E30223E3C5144434D5F76657273696F6E3E362E31303C2F5144434D5F76657273696F6E3E3C70616E656C5F636F6C6F725F6D6F64653E44434950333C2F70616E656C5F636F6C6F725F6D6F64653E3C70616E656C5F6D61785F6C756D696E616E63653E3432332E3736333039323034313031363C2F70616E656C5F6D61785F6C756D696E616E63653E3C70616E656C5F6D696E5F6C756D696E616E63653E302E34313035323937303239303138343C2F70616E656C5F6D696E5F6C756D696E616E63653E3C6E6F6D696E616C5F7065616B5F6C756D696E616E63653E313530303C2F6E6F6D696E616C5F7065616B5F6C756D696E616E63653E3C5344525F7065616B5F6C756D696E616E63653E3430303C2F5344525F7065616B5F6C756D696E616E63653E3C6F75747075745F67616D6D615F73706163653E3C73706163653E3270323C2F73706163653E3C76616C3E322E323C2F76616C3E3C2F6F75747075745F67616D6D615F73706163653E3C70616E656C5F7063633E3C723E3C633E303C2F633E3C723E313C2F723E3C673E303C2F673E3C623E303C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F723E3C673E3C633E303C2F633E3C723E303C2F723E3C673E313C2F673E3C623E303C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F673E3C623E3C633E303C2F633E3C723E303C2F723E3C673E303C2F673E3C623E313C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F623E3C2F70616E656C5F7063633E3C746F6E655F6D61703E3C706F696E74733E3C783E303C2F783E3C793E303C2F793E3C783E36323C2F783E3C793E383C2F793E3C783E3132333C2F783E3C793E33313C2F793E3C783E3138353C2F783E3C793E37353C2F793E3C783E3235343C2F783E3C793E3133313C2F793E3C783E3330383C2F783E3C793E3138343C2F793E3C783E3338363C2F783E3C793E3238323C2F793E3C783E3435313C2F783E3C793E3338373C2F793E3C783E3438323C2F783E3C793E3434373C2F793E3C783E3531333C2F783E3C793E3531343C2F793E3C783E3534343C2F783E3C793E3539303C2F793E3C783E3537353C2F783E3C793E3637353C2F793E3C783E3630363C2F783E3C793E3737303C2F793E3C783E3633373C2F783E3C793E3837373C2F793E3C783E3636383C2F783E3C793E3931363C2F793E3C783E3830303C2F783E3C793E3938313C2F793E3C783E3932333C2F783E3C793E313032333C2F793E3C2F706F696E74733E3C2F746F6E655F6D61703E3C73616D706C696E675F677269643E3C7265643E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F7265643E3C677265656E3E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F677265656E3E3C626C75653E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F626C75653E3C2F73616D706C696E675F677269643E3C647370705F73616D706C696E675F677269643E3C747970653E637573746F6D3C2F747970653E3C73697A653E31373C2F73697A653E3C2F647370705F73616D706C696E675F677269643E3C2F6864725F6C69623E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ </Mode>
+ <Mode ModeID="2" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="P3" NumOfFeatures="14" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="dcip3" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000D00000000000000000000000000200000000000000000000A00100000000000000000000000300000000000000000000710200000000000000000000000400000000000000000000410300000000000000000000000500000000000000000000110400000000000000000000000600000000000000000000E20400000000000000000000000700000000000000000000B20500000000000000000000000800000000000000000000830600000000000000000000000900000000000000000000530700000000000000000000000A00000000000000000000230800000000000000000000000B00000000000000000000F40800000000000000000000000C00000000000000000000C40900000000000000000000000D00000000000000000000950A00000000000000000000000E00000000000000000000650B00000000000000000000000F00000000000000000000350C00000000000000000000001000000000000000000000060D00000000000000000000000000000001000000000000290000001A01000000000000000100000001000000000000FA0000000501000000000000000200000001000000000000CA010000F0000000000000000003000000010000000000009B020000DA000000000000000004000000010000000000006C030000C5000000000000000005000000010000000000003C040000B0000000000000000006000000010000000000000D0500009B00000000000000000700000001000000000000DE0500008500000000000000000800000001000000000000AE06000070000000000000000009000000010000000000007F0700005B00000000000000000A00000001000000000000500800004500000000000000000B00000001000000000000200900003000000000000000000C00000001000000000000F10900001B00000000000000000D00000001000000000000C20A00000600000000000000000E00000001000000000000930B00000000000000000000000F00000001000000000000630C00000000000000000000001000000001000000000000340D00000000000000000000000000000002000000000000530000003902000000000000000100000002000000000000240100002302000000000000000200000002000000000000F40100000E02000000000000000300000002000000000000C5020000F80100000000000000040000000200000000000096030000E20100000000000000050000000200000000000067040000CD0100000000000000060000000200000000000038050000B70100000000000000070000000200000000000009060000A101000000000000000800000002000000000000DA0600008C01000000000000000900000002000000000000AB0700007601000000000000000A000000020000000000007C0800006001000000000000000B000000020000000000004D0900004B01000000000000000C000000020000000000001E0A00003501000000000000000D00000002000000000000EF0A00001F01000000000000000E00000002000000000000C00B00000A01000000000000000F00000002000000000000910C0000F400000000000000001000000002000000000000620D0000DF000000000000000000000000030000000000007C00000058030000010000000001000000030000000000004D01000042030000000000000002000000030000000000001F0200002C03000000000000000300000003000000000000F00200001603000000000000000400000003000000000000C1030000000300000000000000050000000300000000000092040000EA0200000000000000060000000300000000000064050000D40200000000000000070000000300000000000035060000BD0200000000000000080000000300000000000006070000A702000000000000000900000003000000000000D70700009102000000000000000A00000003000000000000A90800007B02000000000000000B000000030000000000007A0900006502000000000000000C000000030000000000004B0A00004F02000000000000000D000000030000000000001C0B00003902000000000000000E00000003000000000000EE0B00002302000000000000000F00000003000000000000BF0C00000D02000000000000001000000003000000000000900D0000F701000000000000000000000004000000000000A600000076040000020000000001000000040000000000007701000060040000000000000002000000040000000000004902000049040000000000000003000000040000000000001A0300003304000000000000000400000004000000000000EC0300001D04000000000000000500000004000000000000BD04000006040000000000000006000000040000000000008F050000F00300000000000000070000000400000000000060060000DA0300000000000000080000000400000000000032070000C30300000000000000090000000400000000000003080000AD03000000000000000A00000004000000000000D50800009603000000000000000B00000004000000000000A60900008003000000000000000C00000004000000000000780A00006A03000000000000000D000000040000000000004A0B00005303000000000000000E000000040000000000001B0C00003D03000000000000000F00000004000000000000ED0C00002703000000000000001000000004000000000000BE0D00001003000000000000000000000005000000000000CF0000009505000003000000000100000005000000000000A10100007E05000000000000000200000005000000000000730200006705000000000000000300000005000000000000450300005105000000000000000400000005000000000000160400003A05000000000000000500000005000000000000E80400002305000000000000000600000005000000000000BA0500000C050000000000000007000000050000000000008C060000F6040000000000000008000000050000000000005E070000DF040000000000000009000000050000000000002F080000C804000000000000000A0000000500000000000001090000B204000000000000000B00000005000000000000D30900009B04000000000000000C00000005000000000000A50A00008404000000000000000D00000005000000000000770B00006D04000000000000000E00000005000000000000490C00005704000000000000000F000000050000000000001A0D00004004000000000000001000000005000000000000EC0D00002904000000000000000000000006000000000000F9000000B306000004000000000100000006000000000000CB0100009C060000000000000002000000060000000000009D02000085060000000000000003000000060000000000006F0300006E06000000000000000400000006000000000000410400005706000000000000000500000006000000000000130500004006000000000000000600000006000000000000E50500002906000000000000000700000006000000000000B7060000120600000000000000080000000600000000000089070000FB050000000000000009000000060000000000005C080000E405000000000000000A000000060000000000002E090000CD05000000000000000B00000006000000000000000A0000B505000000000000000C00000006000000000000D20A00009E05000000000000000D00000006000000000000A40B00008705000000000000000E00000006000000000000760C00007005000000000000000F00000006000000000000480D000059050000000000000010000000060000000000001A0E0000420500000000000000000000000700000000000022010000D207000005000000000100000007000000000000F4010000BB07000000000000000200000007000000000000C7020000A307000000000000000300000007000000000000990300008C070000000000000004000000070000000000006C04000074070000000000000005000000070000000000003E0500005D07000000000000000600000007000000000000100600004507000000000000000700000007000000000000E30600002E07000000000000000800000007000000000000B5070000160700000000000000090000000700000000000088080000FF06000000000000000A000000070000000000005A090000E806000000000000000B000000070000000000002C0A0000D006000000000000000C00000007000000000000FF0A0000B906000000000000000D00000007000000000000D10B0000A106000000000000000E00000007000000000000A40C00008A06000000000000000F00000007000000000000760D00007206000000000000001000000007000000000000480E00005B060000000000000000000000080000000000004C010000F1080000070000000001000000080000000000001E020000D908000001000000000200000008000000000000F1020000C108000000000000000300000008000000000000C4030000A908000000000000000400000008000000000000960400009108000000000000000500000008000000000000690500007A080000000000000006000000080000000000003C06000062080000000000000007000000080000000000000E0700004A08000000000000000800000008000000000000E10700003208000000000000000900000008000000000000B40800001A08000000000000000A00000008000000000000860900000308000000000000000B00000008000000000000590A0000EB07000000000000000C000000080000000000002C0B0000D307000000000000000D00000008000000000000FF0B0000BB07000000000000000E00000008000000000000D10C0000A307000000000000000F00000008000000000000A40D00008C07000000000000001000000008000000000000770E00007407000000000000000000000009000000000000750100000F0A00000800000000010000000900000000000048020000F7090000020000000002000000090000000000001B030000DF09000000000000000300000009000000000000EE030000C709000000000000000400000009000000000000C1040000AF09000000000000000500000009000000000000940500009609000000000000000600000009000000000000670600007E090000000000000007000000090000000000003A07000066090000000000000008000000090000000000000D0800004E09000000000000000900000009000000000000E00800003609000000000000000A00000009000000000000B30900001E09000000000000000B00000009000000000000860A00000509000000000000000C00000009000000000000590B0000ED08000000000000000D000000090000000000002C0C0000D508000000000000000E00000009000000000000FF0C0000BD08000000000000000F00000009000000000000D20D0000A508000000000000001000000009000000000000A50E00008D0800000000000000000000000A0000000000009F0100002E0B00000900000000010000000A00000000000072020000150B00000300000000020000000A00000000000045030000FD0A00000000000000030000000A00000000000018040000E40A00000000000000040000000A000000000000EC040000CC0A00000000000000050000000A000000000000BF050000B30A00000000000000060000000A000000000000920600009B0A00000000000000070000000A00000000000065070000820A00000000000000080000000A000000000000390800006A0A00000000000000090000000A0000000000000C090000510A000000000000000A0000000A000000000000DF090000390A000000000000000B0000000A000000000000B20A0000200A000000000000000C0000000A000000000000860B0000080A000000000000000D0000000A000000000000590C0000EF09000000000000000E0000000A0000000000002C0D0000D709000000000000000F0000000A000000000000000E0000BE0900000000000000100000000A000000000000D30E0000A50900000000000000000000000B000000000000C80100004C0C00000A00000000010000000B0000000000009C020000330C00000500000000020000000B0000000000006F0300001B0C00000000000000030000000B00000000000043040000020C00000000000000040000000B00000000000016050000E90B00000000000000050000000B000000000000EA050000D00B00000000000000060000000B000000000000BD060000B70B00000000000000070000000B000000000000910700009E0B00000000000000080000000B00000000000064080000850B00000000000000090000000B000000000000380900006C0B000000000000000A0000000B0000000000000C0A0000540B000000000000000B0000000B000000000000DF0A00003B0B000000000000000C0000000B000000000000B30B0000220B000000000000000D0000000B000000000000860C0000090B000000000000000E0000000B0000000000005A0D0000F00A000000000000000F0000000B0000000000002D0E0000D70A00000000000000100000000B000000000000010F0000BE0A00000000000000000000000C000000000000F20100006B0D00000B00000000010000000C000000000000C5020000520D00000600000000020000000C00000000000099030000380D00000100000000030000000C0000000000006D0400001F0D00000000000000040000000C00000000000041050000060D00000000000000050000000C00000000000015060000ED0C00000000000000060000000C000000000000E9060000D40C00000000000000070000000C000000000000BC070000BA0C00000000000000080000000C00000000000090080000A10C00000000000000090000000C00000000000064090000880C000000000000000A0000000C000000000000380A00006F0C000000000000000B0000000C0000000000000C0B0000550C000000000000000C0000000C000000000000E00B00003C0C000000000000000D0000000C000000000000B30C0000230C000000000000000E0000000C000000000000870D00000A0C000000000000000F0000000C0000000000005B0E0000F00B00000000000000100000000C0000000000002F0F0000D70B00000000000000000000000D0000000000001B0200008A0E00000C00000000010000000D000000000000EF020000700E00000700000000020000000D000000000000C3030000560E00000200000000030000000D000000000000970400003D0E00000000000000040000000D0000000000006C050000230E00000000000000050000000D000000000000400600000A0E00000000000000060000000D00000000000014070000F00D00000000000000070000000D000000000000E8070000D60D00000000000000080000000D000000000000BC080000BD0D00000000000000090000000D00000000000090090000A30D000000000000000A0000000D000000000000640A00008A0D000000000000000B0000000D000000000000380B0000700D000000000000000C0000000D0000000000000D0C0000560D000000000000000D0000000D000000000000E10C00003D0D000000000000000E0000000D000000000000B50D0000230D000000000000000F0000000D000000000000890E00000A0D00000000000000100000000D0000000000005D0F0000F00C00000000000000000000000E00000000000045020000A80F00000D00000000010000000E000000000000190300008E0F00000800000000020000000E000000000000ED030000740F00000400000000030000000E000000000000C20400005A0F00000000000000040000000E00000000000096050000400F00000000000000050000000E0000000000006B060000260F00000000000000060000000E0000000000003F0700000C0F00000000000000070000000E00000000000013080000F30E00000000000000080000000E000000000000E8080000D90E00000000000000090000000E000000000000BC090000BF0E000000000000000A0000000E000000000000910A0000A50E000000000000000B0000000E000000000000650B00008B0E000000000000000C0000000E0000000000003A0C0000710E000000000000000D0000000E0000000000000E0D0000570E000000000000000E0000000E000000000000E20D00003D0E000000000000000F0000000E000000000000B70E0000230E00000000000000100000000E0000000000008B0F0000090E00000000000000000000000F0000000000006E020000FF0F00000E00000000010000000F00000000000043030000FF0F00000A00000000020000000F00000000000017040000FF0F00000500000000030000000F000000000000EC040000FF0F00000100000000040000000F000000000000C1050000FF0F00000000000000050000000F00000000000096060000FF0F00000000000000060000000F0000000000006A070000FF0F00000000000000070000000F0000000000003F080000FF0F00000000000000080000000F00000000000014090000F40F00000000000000090000000F000000000000E8090000DA0F000000000000000A0000000F000000000000BD0A0000C00F000000000000000B0000000F000000000000920B0000A50F000000000000000C0000000F000000000000660C00008B0F000000000000000D0000000F0000000000003B0D0000710F000000000000000E0000000F000000000000100E0000560F000000000000000F0000000F000000000000E50E00003C0F00000000000000100000000F000000000000B90F0000220F00000000000000000000001000000000000098020000FF0F00000F0000000001000000100000000000006D030000FF0F00000B00000000020000001000000000000042040000FF0F00000700000000030000001000000000000017050000FF0F000002000000000400000010000000000000EC050000FF0F000000000000000500000010000000000000C1060000FF0F00000000000000060000001000000000000096070000FF0F0000000000000007000000100000000000006B080000FF0F0000000000000008000000100000000000003F090000FF0F000000000000000900000010000000000000140A0000FF0F000000000000000A00000010000000000000E90A0000FF0F000000000000000B00000010000000000000BE0B0000FF0F000000000000000C00000010000000000000930C0000FF0F000000000000000D00000010000000000000680D0000FF0F000000000000000E000000100000000000003D0E0000FF0F000000000000000F00000010000000000000120F0000FF0F000000000000001000000010000000000000E70F0000FF0F000000000000000000000000000000010000020000000000000001010000000100000000000000010000D200000000000000FA000000000200000000000000010000A301000000000000F30000000003000000000000000100007402000000000000EC0000000004000000000000000100004403000000000000E50000000005000000000000000100001504000000000000DE000000000600000000000000010000E604000000000000D7000000000700000000000000010000B605000000000000D00000000008000000000000000100008706000000000000C90000000009000000000000000100005807000000000000C2000000000A000000000000000100002808000000000000BB000000000B00000000000000010000F908000000000000B4000000000C00000000000000010000CA09000000000000AD000000000D000000000000000100009A0A000000000000A6000000000E000000000000000100006B0B0000000000009F000000000F000000000000000100003C0C000000000000980000000010000000000000000100000D0D000000000000910000000000000000010000000100002B0000001101000002010000000100000001000000010000000100000001000000010000000200000001000000010000CD010000E8000000F40000000003000000010000000100009E020000D3000000EE0000000004000000010000000100006F030000BE000000E700000000050000000100000001000040040000A9000000E00000000006000000010000000100001105000094000000D9000000000700000001000000010000E20500007F000000D2000000000800000001000000010000B30600006A000000CC0000000009000000010000000100008407000055000000C5000000000A000000010000000100005508000040000000BE000000000B00000001000000010000260900002B000000B7000000000C00000001000000010000F709000016000000B0000000000D00000001000000010000C70A000001000000AA000000000E00000001000000010000980B000000000000A3000000000F00000001000000010000690C0000000000009C0000000010000000010000000100003A0D00000000000095000000000000000002000000010000550000003002000003010000000100000002000000010000260100001B020000FD000000000200000002000000010000F701000005020000F6000000000300000002000000010000C8020000F0010000EF0000000004000000020000000100009A030000DB010000E90000000005000000020000000100006B040000C5010000E20000000006000000020000000100003C050000B0010000DB0000000007000000020000000100000D0600009B010000D5000000000800000002000000010000DE06000085010000CE000000000900000002000000010000B007000070010000C7000000000A00000002000000010000810800005B010000C1000000000B000000020000000100005209000045010000BA000000000C00000002000000010000230A000030010000B3000000000D00000002000000010000F40A00001B010000AD000000000E00000002000000010000C60B000006010000A6000000000F00000002000000010000970C0000F0000000A0000000001000000002000000010000680D0000DB000000990000000000000000030000000100007E0000004F030000050100000001000000030000000100005001000039030000FE0000000002000000030000000100002102000023030000F8000000000300000003000000010000F30200000E030000F1000000000400000003000000010000C4030000F8020000EB00000000050000000300000001000096040000E2020000E400000000060000000300000001000067050000CD020000DE00000000070000000300000001000039060000B7020000D70000000008000000030000000100000A070000A1020000D1000000000900000003000000010000DC0700008C020000CA000000000A00000003000000010000AD08000076020000C4000000000B000000030000000100007E09000060020000BD000000000C00000003000000010000500A00004A020000B7000000000D00000003000000010000210B000035020000B0000000000E00000003000000010000F30B00001F020000AA000000000F00000003000000010000C40C000009020000A3000000001000000003000000010000960D0000F40100009D000000000000000004000000010000A80000006D040000060100000001000000040000000100007A01000057040000FF0000000002000000040000000100004B02000041040000F90000000003000000040000000100001D0300002B040000F3000000000400000004000000010000EF03000015040000EC000000000500000004000000010000C1040000FF030000E600000000060000000400000001000092050000E9030000E000000000070000000400000001000064060000D3030000D900000000080000000400000001000036070000BD030000D300000000090000000400000001000007080000A7030000CD000000000A00000004000000010000D908000091030000C6000000000B00000004000000010000AB0900007B030000C0000000000C000000040000000100007D0A000065030000BA000000000D000000040000000100004E0B00004F030000B3000000000E00000004000000010000200C000039030000AD000000000F00000004000000010000F20C000023030000A7000000001000000004000000010000C40D00000D030000A0000000000000000005000000010000D10000008C05000007010000000100000005000000010000A30100007505000001010000000200000005000000010000750200005F050000FB0000000003000000050000000100004703000049050000F40000000004000000050000000100001904000032050000EE000000000500000005000000010000EB0400001C050000E8000000000600000005000000010000BD05000005050000E20000000007000000050000000100008F060000EF040000DC00000000080000000500000001000061070000D9040000D600000000090000000500000001000033080000C2040000CF000000000A0000000500000001000005090000AC040000C9000000000B00000005000000010000D709000095040000C3000000000C00000005000000010000A90A00007F040000BD000000000D000000050000000100007B0B000069040000B7000000000E000000050000000100004D0C000052040000B1000000000F000000050000000100001F0D00003C040000AA000000001000000005000000010000F10D000025040000A4000000000000000006000000010000FB000000AB06000008010000000100000006000000010000CD0100009406000002010000000200000006000000010000A00200007D060000FC0000000003000000060000000100007203000066060000F6000000000400000006000000010000440400004F060000F00000000005000000060000000100001605000039060000EA000000000600000006000000010000E905000022060000E4000000000700000006000000010000BB0600000B060000DE0000000008000000060000000100008D070000F4050000D80000000009000000060000000100005F080000DE050000D2000000000A0000000600000001000032090000C7050000CC000000000B00000006000000010000040A0000B0050000C6000000000C00000006000000010000D60A000099050000C0000000000D00000006000000010000A80B000083050000BA000000000E000000060000000100007B0C00006C050000B4000000000F000000060000000100004D0D000055050000AE0000000010000000060000000100001F0E00003E050000A800000000000000000700000001000025010000C90700000A010000000100000007000000010000F7010000B207000004010000000200000007000000010000CA0200009B070000FE0000000003000000070000000100009C03000084070000F80000000004000000070000000100006F0400006D070000F20000000005000000070000000100004105000056070000EC000000000600000007000000010000140600003E070000E6000000000700000007000000010000E606000027070000E1000000000800000007000000010000B907000010070000DB0000000009000000070000000100008B080000F9060000D5000000000A000000070000000100005E090000E2060000CF000000000B00000007000000010000300A0000CB060000C9000000000C00000007000000010000030B0000B4060000C3000000000D00000007000000010000D50B00009D060000BD000000000E00000007000000010000A80C000085060000B8000000000F000000070000000100007A0D00006E060000B20000000010000000070000000100004D0E000057060000AC0000000000000000080000000100004E010000E80800000B01000000010000000800000001000021020000D008000005010000000200000008000000010000F4020000B9080000FF000000000300000008000000010000C7030000A1080000FA000000000400000008000000010000990400008A080000F40000000005000000080000000100006C05000072080000EE0000000006000000080000000100003F0600005B080000E90000000007000000080000000100001207000043080000E3000000000800000008000000010000E40700002C080000DD000000000900000008000000010000B708000014080000D7000000000A000000080000000100008A090000FD070000D2000000000B000000080000000100005D0A0000E5070000CC000000000C00000008000000010000300B0000CE070000C6000000000D00000008000000010000020C0000B6070000C1000000000E00000008000000010000D50C00009F070000BB000000000F00000008000000010000A80D000087070000B50000000010000000080000000100007B0E000070070000B000000000000000000900000001000078010000060A00000C0100000001000000090000000100004B020000EF090000060100000002000000090000000100001E030000D709000001010000000300000009000000010000F1030000BF090000FB000000000400000009000000010000C4040000A7090000F6000000000500000009000000010000970500008F090000F00000000006000000090000000100006A06000077090000EB0000000007000000090000000100003D0700005F090000E50000000008000000090000000100001008000048090000E0000000000900000009000000010000E308000030090000DA000000000A00000009000000010000B609000018090000D5000000000B00000009000000010000890A000000090000CF000000000C000000090000000100005C0B0000E8080000CA000000000D000000090000000100002F0C0000D0080000C4000000000E00000009000000010000020D0000B9080000BE000000000F00000009000000010000D50D0000A1080000B9000000001000000009000000010000A80E000089080000B300000000000000000A000000010000A1010000250B00000D01000000010000000A000000010000750200000D0B00000801000000020000000A00000001000048030000F50A00000201000000030000000A0000000100001B040000DC0A0000FD00000000040000000A000000010000EF040000C40A0000F800000000050000000A000000010000C2050000AC0A0000F200000000060000000A00000001000095060000940A0000ED00000000070000000A000000010000680700007C0A0000E800000000080000000A0000000100003C080000630A0000E200000000090000000A0000000100000F0900004B0A0000DD000000000A0000000A000000010000E2090000330A0000D7000000000B0000000A000000010000B60A00001B0A0000D2000000000C0000000A000000010000890B0000030A0000CD000000000D0000000A0000000100005C0C0000EA090000C7000000000E0000000A000000010000300D0000D2090000C2000000000F0000000A000000010000030E0000BA090000BD00000000100000000A000000010000D60E0000A2090000B700000000000000000B000000010000CB010000440C00000E01000000010000000B0000000100009F0200002B0C00000901000000020000000B00000001000072030000120C00000401000000030000000B00000001000046040000FA0B0000FF00000000040000000B00000001000019050000E10B0000FA00000000050000000B000000010000ED050000C90B0000F400000000060000000B000000010000C0060000B00B0000EF00000000070000000B00000001000094070000980B0000EA00000000080000000B000000010000670800007F0B0000E500000000090000000B0000000100003B090000670B0000DF000000000A0000000B0000000100000F0A00004E0B0000DA000000000B0000000B000000010000E20A0000350B0000D5000000000C0000000B000000010000B60B00001D0B0000D0000000000D0000000B000000010000890C0000040B0000CB000000000E0000000B0000000100005D0D0000EC0A0000C5000000000F0000000B000000010000300E0000D30A0000C000000000100000000B000000010000040F0000BB0A0000BB00000000000000000C000000010000F5010000620D00001001000000010000000C000000010000C8020000490D00000B01000000020000000C0000000100009C030000300D00000601000000030000000C00000001000070040000170D00000101000000040000000C00000001000044050000FF0C0000FB00000000050000000C00000001000018060000E60C0000F600000000060000000C000000010000EB060000CD0C0000F100000000070000000C000000010000BF070000B40C0000EC00000000080000000C000000010000930800009B0C0000E700000000090000000C00000001000067090000820C0000E2000000000A0000000C0000000100003B0A0000690C0000DD000000000B0000000C0000000100000F0B0000500C0000D8000000000C0000000C000000010000E20B0000370C0000D3000000000D0000000C000000010000B60C00001E0C0000CE000000000E0000000C0000000100008A0D0000050C0000C9000000000F0000000C0000000100005E0E0000EC0B0000C400000000100000000C000000010000320F0000D30B0000BF00000000000000000D0000000100001E020000810E00001101000000010000000D000000010000F2020000680E00000C01000000020000000D000000010000C60300004E0E00000701000000030000000D0000000100009A040000350E00000201000000040000000D0000000100006E0500001C0E0000FD00000000050000000D00000001000043060000020E0000F800000000060000000D00000001000017070000E90D0000F400000000070000000D000000010000EB070000D00D0000EF00000000080000000D000000010000BF080000B70D0000EA00000000090000000D000000010000930900009D0D0000E5000000000A0000000D000000010000670A0000840D0000E0000000000B0000000D0000000100003B0B00006B0D0000DB000000000C0000000D0000000100000F0C0000510D0000D6000000000D0000000D000000010000E30C0000380D0000D1000000000E0000000D000000010000B70D00001F0D0000CC000000000F0000000D0000000100008B0E0000060D0000C700000000100000000D0000000100005F0F0000EC0C0000C300000000000000000E000000010000480200009F0F00001201000000010000000E0000000100001C030000860F00000D01000000020000000E000000010000F00300006C0F00000901000000030000000E000000010000C5040000530F00000401000000040000000E00000001000099050000390F0000FF00000000050000000E0000000100006D0600001F0F0000FA00000000060000000E00000001000042070000060F0000F600000000070000000E00000001000016080000EC0E0000F100000000080000000E000000010000EA080000D20E0000EC00000000090000000E000000010000BF090000B90E0000E8000000000A0000000E000000010000930A00009F0E0000E3000000000B0000000E000000010000670B0000850E0000DE000000000C0000000E0000000100003C0C00006C0E0000D9000000000D0000000E000000010000100D0000520E0000D5000000000E0000000E000000010000E40D0000380E0000D0000000000F0000000E000000010000B90E00001F0E0000CB00000000100000000E0000000100008D0F0000050E0000C600000000000000000F00000001000071020000FF0F00001301000000010000000F00000001000046030000FF0F00000F01000000020000000F0000000100001B040000FF0F00000A01000000030000000F000000010000EF040000FF0F00000601000000040000000F000000010000C4050000FF0F00000101000000050000000F00000001000098060000FF0F0000FD00000000060000000F0000000100006D070000FF0F0000F800000000070000000F00000001000042080000FF0F0000F300000000080000000F00000001000016090000EE0F0000EF00000000090000000F000000010000EB090000D40F0000EA000000000A0000000F000000010000BF0A0000BA0F0000E6000000000B0000000F000000010000940B0000A00F0000E1000000000C0000000F000000010000690C0000860F0000DC000000000D0000000F0000000100003D0D00006C0F0000D8000000000E0000000F000000010000120E0000520F0000D3000000000F0000000F000000010000E60E0000380F0000CF00000000100000000F000000010000BB0F00001E0F0000CA0000000000000000100000000100009B020000FF0F00001501000000010000001000000001000070030000FF0F00001001000000020000001000000001000045040000FF0F00000C01000000030000001000000001000019050000FF0F000007010000000400000010000000010000EE050000FF0F000003010000000500000010000000010000C3060000FF0F0000FF00000000060000001000000001000098070000FF0F0000FA0000000007000000100000000100006D080000FF0F0000F600000000080000001000000001000042090000FF0F0000F1000000000900000010000000010000170A0000FF0F0000ED000000000A00000010000000010000EC0A0000FF0F0000E8000000000B00000010000000010000C00B0000FF0F0000E4000000000C00000010000000010000950C0000FF0F0000E0000000000D000000100000000100006A0D0000FF0F0000DB000000000E000000100000000100003F0E0000FF0F0000D7000000000F00000010000000010000140F0000FF0F0000D2000000001000000010000000010000E90F0000FF0F0000CE000000000000000000000000020000040000000000000004020000000100000000000000020000D500000000000000FD010000000200000000000000020000A601000000000000F60100000003000000000000000200007702000000000000EF0100000004000000000000000200004803000000000000E90100000005000000000000000200001904000000000000E2010000000600000000000000020000E904000000000000DB010000000700000000000000020000BA05000000000000D40100000008000000000000000200008B06000000000000CD0100000009000000000000000200005C07000000000000C7010000000A000000000000000200002D08000000000000C0010000000B00000000000000020000FE08000000000000B9010000000C00000000000000020000CF09000000000000B2010000000D00000000000000020000A00A000000000000AB010000000E00000000000000020000710B000000000000A5010000000F00000000000000020000420C0000000000009E010000001000000000000000020000130D000000000000970100000000000000010000000200002D0000000801000005020000000100000001000000020000FE000000F4000000FE010000000200000001000000020000D0010000DF000000F8010000000300000001000000020000A1020000CB000000F101000000040000000100000002000072030000B6000000EB01000000050000000100000002000043040000A1000000E4010000000600000001000000020000150500008D000000DD010000000700000001000000020000E605000078000000D7010000000800000001000000020000B706000063000000D0010000000900000001000000020000880700004F000000C9010000000A00000001000000020000590800003A000000C3010000000B000000010000000200002B09000026000000BC010000000C00000001000000020000FC09000011000000B5010000000D00000001000000020000CD0A000000000000AF010000000E000000010000000200009E0B000000000000A8010000000F00000001000000020000700C000000000000A1010000001000000001000000020000410D0000000000009B010000000000000002000000020000570000002702000007020000000100000002000000020000280100001202000000020000000200000002000000020000000200000002000000020000000300000002000000020000CB020000E8010000F30100000004000000020000000200009D030000D3010000EC0100000005000000020000000200006E040000BE010000E601000000060000000200000002000040050000A9010000DF0100000007000000020000000200001106000094010000D9010000000800000002000000020000E30600007F010000D2010000000900000002000000020000B40700006A010000CC010000000A000000020000000200008508000055010000C5010000000B000000020000000200005709000040010000BF010000000C00000002000000020000280A00002B010000B8010000000D00000002000000020000FA0A000016010000B2010000000E00000002000000020000CB0B000001010000AB010000000F000000020000000200009D0C0000EC000000A50100000010000000020000000200006E0D0000D70000009E010000000000000003000000020000810000004603000008020000000100000003000000020000520100003003000002020000000200000003000000020000240200001B030000FB010000000300000003000000020000F602000006030000F5010000000400000003000000020000C7030000F0020000EE01000000050000000300000002000099040000DB020000E80100000006000000030000000200006B050000C6020000E20100000007000000030000000200003C060000B0020000DB0100000008000000030000000200000E0700009B020000D5010000000900000003000000020000E007000086020000CE010000000A00000003000000020000B108000070020000C8010000000B00000003000000020000830900005B020000C2010000000C00000003000000020000550A000045020000BB010000000D00000003000000020000260B000030020000B5010000000E00000003000000020000F80B00001B020000AF010000000F00000003000000020000CA0C000005020000A80100000010000000030000000200009C0D0000F0010000A2010000000000000004000000020000AA00000064040000090200000001000000040000000200007C0100004F040000030200000002000000040000000200004E02000039040000FD0100000003000000040000000200002003000023040000F7010000000400000004000000020000F20300000E040000F0010000000500000004000000020000C4040000F8030000EA01000000060000000400000002000096050000E2030000E401000000070000000400000002000068060000CC030000DE0100000008000000040000000200003A070000B7030000D70100000009000000040000000200000C080000A1030000D1010000000A00000004000000020000DD0800008B030000CB010000000B00000004000000020000AF09000075030000C5010000000C00000004000000020000810A000060030000BE010000000D00000004000000020000530B00004A030000B8010000000E00000004000000020000250C000034030000B2010000000F00000004000000020000F70C00001F030000AC010000001000000004000000020000C90D000009030000A5010000000000000005000000020000D4000000830500000B020000000100000005000000020000A60100006D050000050200000002000000050000000200007802000057050000FF0100000003000000050000000200004A03000041050000F80100000004000000050000000200001D0400002B050000F2010000000500000005000000020000EF04000015050000EC010000000600000005000000020000C1050000FF040000E601000000070000000500000002000093060000E8040000E001000000080000000500000002000065070000D2040000DA01000000090000000500000002000037080000BC040000D4010000000A0000000500000002000009090000A6040000CE010000000B00000005000000020000DC09000090040000C8010000000C00000005000000020000AE0A00007A040000C1010000000D00000005000000020000800B000064040000BB010000000E00000005000000020000520C00004E040000B5010000000F00000005000000020000240D000038040000AF010000001000000005000000020000F60D000022040000A9010000000000000006000000020000FE000000A20600000C020000000100000006000000020000D00100008B06000006020000000200000006000000020000A20200007506000000020000000300000006000000020000750300005E060000FA0100000004000000060000000200004704000048060000F40100000005000000060000000200001A05000031060000EE010000000600000006000000020000EC0500001B060000E8010000000700000006000000020000BE06000005060000E201000000080000000600000002000091070000EE050000DC01000000090000000600000002000063080000D8050000D6010000000A0000000600000002000035090000C1050000D0010000000B00000006000000020000080A0000AB050000CB010000000C00000006000000020000DA0A000094050000C5010000000D00000006000000020000AD0B00007E050000BF010000000E000000060000000200007F0C000067050000B9010000000F00000006000000020000510D000051050000B3010000001000000006000000020000240E00003B050000AD01000000000000000700000002000027010000C00700000E020000000100000007000000020000FA010000A907000008020000000200000007000000020000CC02000093070000020200000003000000070000000200009F0300007C070000FC0100000004000000070000000200007204000065070000F6010000000500000007000000020000440500004E070000F00100000006000000070000000200001706000037070000EB010000000700000007000000020000EA06000021070000E5010000000800000007000000020000BC0700000A070000DF0100000009000000070000000200008F080000F3060000D9010000000A0000000700000002000061090000DC060000D3010000000B00000007000000020000340A0000C5060000CD010000000C00000007000000020000070B0000AF060000C8010000000D00000007000000020000D90B000098060000C2010000000E00000007000000020000AC0C000081060000BC010000000F000000070000000200007F0D00006A060000B6010000001000000007000000020000510E000053060000B001000000000000000800000002000051010000DF0800000F02000000010000000800000002000024020000C808000009020000000200000008000000020000F7020000B108000004020000000300000008000000020000C903000099080000FE0100000004000000080000000200009C04000082080000F80100000005000000080000000200006F0500006B080000F30100000006000000080000000200004206000054080000ED010000000700000008000000020000150700003D080000E7010000000800000008000000020000E807000026080000E1010000000900000008000000020000BB0800000E080000DC010000000A000000080000000200008D090000F7070000D6010000000B00000008000000020000600A0000E0070000D0010000000C00000008000000020000330B0000C9070000CB010000000D00000008000000020000060C0000B2070000C5010000000E00000008000000020000D90C00009B070000BF010000000F00000008000000020000AC0D000083070000BA0100000010000000080000000200007F0E00006C070000B40100000000000000090000000200007B010000FE090000100200000001000000090000000200004E020000E60900000B02000000020000000900000002000021030000CF09000005020000000300000009000000020000F4030000B709000000020000000400000009000000020000C70400009F090000FA0100000005000000090000000200009A05000088090000F50100000006000000090000000200006D06000070090000EF0100000007000000090000000200004007000059090000EA0100000008000000090000000200001308000041090000E4010000000900000009000000020000E60800002A090000DE010000000A00000009000000020000B909000012090000D9010000000B000000090000000200008D0A0000FB080000D3010000000C00000009000000020000600B0000E3080000CE010000000D00000009000000020000330C0000CC080000C8010000000E00000009000000020000060D0000B4080000C3010000000F00000009000000020000D90D00009D080000BD010000001000000009000000020000AC0E000085080000B801000000000000000A000000020000A40100001C0B00001202000000010000000A00000002000078020000040B00000C02000000020000000A0000000200004B030000EC0A00000702000000030000000A0000000200001E040000D50A00000202000000040000000A000000020000F2040000BD0A0000FC01000000050000000A000000020000C5050000A50A0000F701000000060000000A000000020000980600008D0A0000F101000000070000000A0000000200006C070000750A0000EC01000000080000000A0000000200003F0800005D0A0000E601000000090000000A00000002000012090000450A0000E1010000000A0000000A000000020000E60900002D0A0000DC010000000B0000000A000000020000B90A0000150A0000D6010000000C0000000A0000000200008C0B0000FD090000D1010000000D0000000A0000000200005F0C0000E6090000CB010000000E0000000A000000020000330D0000CE090000C6010000000F0000000A000000020000060E0000B6090000C101000000100000000A000000020000D90E00009E090000BB01000000000000000B000000020000CE0100003B0C00001302000000010000000B000000020000A1020000230C00000E02000000020000000B000000020000750300000A0C00000902000000030000000B00000002000049040000F20B00000302000000040000000B0000000200001C050000DA0B0000FE01000000050000000B000000020000F0050000C20B0000F901000000060000000B000000020000C3060000A90B0000F401000000070000000B00000002000097070000910B0000EE01000000080000000B0000000200006A080000790B0000E901000000090000000B0000000200003E090000610B0000E4010000000A0000000B000000020000120A0000480B0000DE010000000B0000000B000000020000E50A0000300B0000D9010000000C0000000B000000020000B90B0000180B0000D4010000000D0000000B0000000200008C0C0000000B0000CF010000000E0000000B000000020000600D0000E70A0000C9010000000F0000000B000000020000330E0000CF0A0000C401000000100000000B000000020000070F0000B70A0000BF01000000000000000C000000020000F8010000590D00001502000000010000000C000000020000CB020000410D00000F02000000020000000C0000000200009F030000280D00000A02000000030000000C00000002000073040000100D00000502000000040000000C00000002000047050000F70C00000002000000050000000C0000000200001B060000DE0C0000FB01000000060000000C000000020000EE060000C60C0000F601000000070000000C000000020000C2070000AD0C0000F101000000080000000C00000002000096080000950C0000EB01000000090000000C0000000200006A0900007C0C0000E6010000000A0000000C0000000200003E0A0000630C0000E1010000000B0000000C000000020000110B00004B0C0000DC010000000C0000000C000000020000E50B0000320C0000D7010000000D0000000C000000020000B90C0000190C0000D2010000000E0000000C0000000200008D0D0000010C0000CD010000000F0000000C000000020000600E0000E80B0000C801000000100000000C000000020000340F0000D00B0000C201000000000000000D00000002000021020000780E00001602000000010000000D000000020000F50200005F0E00001102000000020000000D000000020000C9030000460E00000C02000000030000000D0000000200009D0400002D0E00000702000000040000000D00000002000071050000140E00000202000000050000000D00000002000045060000FB0D0000FD01000000060000000D00000002000019070000E20D0000F801000000070000000D000000020000ED070000C90D0000F301000000080000000D000000020000C1080000B00D0000EE01000000090000000D00000002000095090000970D0000E9010000000A0000000D0000000200006A0A00007E0D0000E4010000000B0000000D0000000200003E0B0000650D0000DF010000000C0000000D000000020000120C00004C0D0000DA010000000D0000000D000000020000E60C0000330D0000D5010000000E0000000D000000020000BA0D00001A0D0000D0010000000F0000000D0000000200008E0E0000010D0000CB01000000100000000D000000020000620F0000E80C0000C601000000000000000E0000000200004B020000970F00001702000000010000000E0000000200001F0300007D0F00001202000000020000000E000000020000F3030000640F00000E02000000030000000E000000020000C80400004B0F00000902000000040000000E0000000200009C050000310F00000402000000050000000E00000002000070060000180F0000FF01000000060000000E00000002000044070000FF0E0000FA01000000070000000E00000002000019080000E50E0000F501000000080000000E000000020000ED080000CC0E0000F101000000090000000E000000020000C1090000B30E0000EC010000000A0000000E000000020000960A0000990E0000E7010000000B0000000E0000000200006A0B0000800E0000E2010000000C0000000E0000000200003E0C0000670E0000DD010000000D0000000E000000020000120D00004D0E0000D8010000000E0000000E000000020000E70D0000340E0000D3010000000F0000000E000000020000BB0E00001B0E0000CF01000000100000000E0000000200008F0F0000010E0000CA01000000000000000F00000002000075020000FF0F00001902000000010000000F00000002000049030000FF0F00001402000000020000000F0000000200001E040000FF0F00000F02000000030000000F000000020000F2040000FF0F00000B02000000040000000F000000020000C7050000FF0F00000602000000050000000F0000000200009B060000FF0F00000102000000060000000F00000002000070070000FF0F0000FC01000000070000000F00000002000044080000FF0F0000F801000000080000000F00000002000019090000E80F0000F301000000090000000F000000020000ED090000CE0F0000EE010000000A0000000F000000020000C20A0000B40F0000EA010000000B0000000F000000020000960B00009B0F0000E5010000000C0000000F0000000200006B0C0000810F0000E0010000000D0000000F0000000200003F0D0000670F0000DB010000000E0000000F000000020000140E00004D0F0000D7010000000F0000000F000000020000E80E0000340F0000D201000000100000000F000000020000BD0F00001A0F0000CD0100000000000000100000000200009E020000FF0F00001A02000000010000001000000002000073030000FF0F00001602000000020000001000000002000048040000FF0F0000110200000003000000100000000200001C050000FF0F00000C020000000400000010000000020000F1050000FF0F000008020000000500000010000000020000C6060000FF0F0000030200000006000000100000000200009B070000FF0F0000FF0100000007000000100000000200006F080000FF0F0000FA01000000080000001000000002000044090000FF0F0000F6010000000900000010000000020000190A0000FF0F0000F1010000000A00000010000000020000EE0A0000FF0F0000EC010000000B00000010000000020000C20B0000FF0F0000E8010000000C00000010000000020000970C0000FF0F0000E3010000000D000000100000000200006C0D0000FF0F0000DF010000000E00000010000000020000400E0000FF0F0000DA010000000F00000010000000020000150F0000FF0F0000D6010000001000000010000000020000EA0F0000FF0F0000D1010000000000000000000000030000060000000000000007030000000100000000000000030000D70000000000000000030000000200000000000000030000A801000000000000F90200000003000000000000000300007902000000000000F30200000004000000000000000300004B03000000000000EC0200000005000000000000000300001C04000000000000E6020000000600000000000000030000ED04000000000000DF020000000700000000000000030000BF05000000000000D80200000008000000000000000300009006000000000000D20200000009000000000000000300006107000000000000CB020000000A000000000000000300003208000000000000C4020000000B000000000000000300000409000000000000BE020000000C00000000000000030000D509000000000000B7020000000D00000000000000030000A60A000000000000B0020000000E00000000000000030000780B000000000000AA020000000F00000000000000030000490C000000000000A30200000010000000000000000300001A0D0000000000009D0200000000000000010000000300002F000000000100000803000000010000000100000003000001010000EB00000002030000000200000001000000030000D2010000D7000000FB020000000300000001000000030000A4020000C3000000F502000000040000000100000003000075030000AE000000EE020000000500000001000000030000470400009A000000E80200000006000000010000000300001805000086000000E1020000000700000001000000030000EA05000071000000DB020000000800000001000000030000BB0600005D000000D40200000009000000010000000300008D07000049000000CE020000000A000000010000000300005E08000035000000C7020000000B000000010000000300003009000020000000C1020000000C00000001000000030000010A00000C000000BA020000000D00000001000000030000D30A000000000000B4020000000E00000001000000030000A40B000000000000AD020000000F00000001000000030000760C000000000000A7020000001000000001000000030000470D000000000000A0020000000000000002000000030000590000001E0200000A0300000001000000020000000300002B0100000A02000003030000000200000002000000030000FD010000F5010000FD020000000300000002000000030000CE020000E0010000F7020000000400000002000000030000A0030000CC010000F002000000050000000200000003000072040000B7010000EA02000000060000000200000003000043050000A2010000E3020000000700000002000000030000150600008E010000DD020000000800000002000000030000E706000079010000D7020000000900000002000000030000B807000064010000D0020000000A000000020000000300008A08000050010000CA020000000B000000020000000300005C0900003B010000C3020000000C000000020000000300002D0A000026010000BD020000000D00000002000000030000FF0A000012010000B7020000000E00000002000000030000D10B0000FD000000B0020000000F00000002000000030000A30C0000E8000000AA020000001000000002000000030000740D0000D4000000A3020000000000000003000000030000830000003D0300000B0300000001000000030000000300005501000028030000050300000002000000030000000300002702000013030000FF020000000300000003000000030000000300000003000000030000000400000003000000030000CA030000E9020000F20200000005000000030000000300009C040000D4020000EC0200000006000000030000000300006E050000BF020000E602000000070000000300000003000040060000AA020000DF0200000008000000030000000300001207000095020000D9020000000900000003000000030000E407000080020000D3020000000A00000003000000030000B60800006B020000CD020000000B000000030000000300008809000056020000C6020000000C000000030000000300005A0A000040020000C0020000000D000000030000000300002C0B00002B020000BA020000000E00000003000000030000FD0B000016020000B3020000000F00000003000000030000CF0C000001020000AD020000001000000003000000030000A10D0000EC010000A7020000000000000004000000030000AD0000005C0400000D0300000001000000040000000300007F0100004604000007030000000200000004000000030000510200003104000001030000000300000004000000030000230300001B040000FA020000000400000004000000030000F503000006040000F4020000000500000004000000030000C7040000F1030000EE02000000060000000400000003000099050000DB030000E80200000007000000040000000300006B060000C6030000E20200000008000000040000000300003D070000B0030000DC020000000900000004000000030000100800009B030000D6020000000A00000004000000030000E208000086030000CF020000000B00000004000000030000B409000070030000C9020000000C00000004000000030000860A00005B030000C3020000000D00000004000000030000580B000045030000BD020000000E000000040000000300002A0C000030030000B7020000000F00000004000000030000FC0C00001B030000B1020000001000000004000000030000CE0D000005030000AA020000000000000005000000030000D60000007A0500000E030000000100000005000000030000A901000064050000080300000002000000050000000300007B0200004F050000020300000003000000050000000300004D03000039050000FC0200000004000000050000000300002004000023050000F6020000000500000005000000030000F20400000D050000F0020000000600000005000000030000C4050000F8040000EA02000000070000000500000003000097060000E2040000E402000000080000000500000003000069070000CC040000DE0200000009000000050000000300003B080000B6040000D8020000000A000000050000000300000E090000A1040000D2020000000B00000005000000030000E00900008B040000CC020000000C00000005000000030000B20A000075040000C6020000000D00000005000000030000840B00005F040000C0020000000E00000005000000030000570C00004A040000BA020000000F00000005000000030000290D000034040000B4020000001000000005000000030000FB0D00001E040000AE020000000000000006000000030000000100009906000010030000000100000006000000030000D3010000830600000A030000000200000006000000030000A50200006D060000040300000003000000060000000300007803000056060000FE0200000004000000060000000300004A04000040060000F80200000005000000060000000300001D0500002A060000F2020000000600000006000000030000EF05000014060000ED020000000700000006000000030000C2060000FE050000E702000000080000000600000003000094070000E8050000E102000000090000000600000003000067080000D2050000DB020000000A0000000600000003000039090000BC050000D5020000000B000000060000000300000C0A0000A5050000CF020000000C00000006000000030000DE0A00008F050000C9020000000D00000006000000030000B10B000079050000C3020000000E00000006000000030000830C000063050000BD020000000F00000006000000030000560D00004D050000B7020000001000000006000000030000290E000037050000B10200000000000000070000000300002A010000B707000012030000000100000007000000030000FD010000A10700000C030000000200000007000000030000CF0200008B07000006030000000300000007000000030000A20300007407000000030000000400000007000000030000750400005E070000FA0200000005000000070000000300004805000047070000F50200000006000000070000000300001A06000031070000EF020000000700000007000000030000ED0600001A070000E9020000000800000007000000030000C007000004070000E302000000090000000700000003000092080000ED060000DD020000000A0000000700000003000065090000D7060000D8020000000B00000007000000030000380A0000C0060000D2020000000C000000070000000300000B0B0000AA060000CC020000000D00000007000000030000DD0B000093060000C6020000000E00000007000000030000B00C00007D060000C0020000000F00000007000000030000830D000066060000BB020000001000000007000000030000560E000050060000B502000000000000000800000003000054010000D60800001303000000010000000800000003000027020000BF0800000D030000000200000008000000030000F9020000A808000008030000000300000008000000030000CC03000092080000020300000004000000080000000300009F0400007B080000FC0200000005000000080000000300007205000064080000F7020000000600000008000000030000450600004D080000F10200000007000000080000000300001807000036080000EB020000000800000008000000030000EB0700001F080000E6020000000900000008000000030000BE08000008080000E0020000000A0000000800000003000091090000F2070000DA020000000B00000008000000030000640A0000DB070000D5020000000C00000008000000030000370B0000C4070000CF020000000D000000080000000300000A0C0000AD070000C9020000000E00000008000000030000DD0C000096070000C4020000000F00000008000000030000B00D00007F070000BE020000001000000008000000030000830E000068070000B80200000000000000090000000300007D010000F50900001503000000010000000900000003000050020000DE0900000F03000000020000000900000003000024030000C60900000A030000000300000009000000030000F7030000AF09000004030000000400000009000000030000CA04000098090000FE0200000005000000090000000300009D05000081090000F90200000006000000090000000300007006000069090000F30200000007000000090000000300004307000052090000EE020000000800000009000000030000170800003B090000E8020000000900000009000000030000EA08000024090000E3020000000A00000009000000030000BD0900000D090000DD020000000B00000009000000030000900A0000F5080000D8020000000C00000009000000030000630B0000DE080000D2020000000D00000009000000030000360C0000C7080000CC020000000E00000009000000030000090D0000B0080000C7020000000F00000009000000030000DD0D000099080000C1020000001000000009000000030000B00E000081080000BC02000000000000000A000000030000A7010000130B00001603000000010000000A0000000300007A020000FC0A00001103000000020000000A0000000300004E030000E40A00000B03000000030000000A00000003000021040000CD0A00000603000000040000000A000000030000F5040000B50A00000103000000050000000A000000030000C80500009E0A0000FB02000000060000000A0000000300009B060000860A0000F602000000070000000A0000000300006F0700006E0A0000F002000000080000000A00000003000042080000570A0000EB02000000090000000A000000030000150900003F0A0000E5020000000A0000000A000000030000E9090000280A0000E0020000000B0000000A000000030000BC0A0000100A0000DA020000000C0000000A0000000300008F0B0000F8090000D5020000000D0000000A000000030000630C0000E1090000D0020000000E0000000A000000030000360D0000C9090000CA020000000F0000000A000000030000090E0000B2090000C502000000100000000A000000030000DD0E00009A090000BF02000000000000000B000000030000D1010000320C00001803000000010000000B000000030000A40200001A0C00001203000000020000000B00000003000078030000020C00000D03000000030000000B0000000300004C040000EA0B00000803000000040000000B0000000300001F050000D20B00000303000000050000000B000000030000F3050000BA0B0000FD02000000060000000B000000030000C6060000A20B0000F802000000070000000B0000000300009A0700008A0B0000F302000000080000000B0000000300006D080000730B0000ED02000000090000000B000000030000410900005B0B0000E8020000000A0000000B000000030000140A0000430B0000E3020000000B0000000B000000030000E80A00002B0B0000DD020000000C0000000B000000030000BC0B0000130B0000D8020000000D0000000B0000000300008F0C0000FB0A0000D3020000000E0000000B000000030000630D0000E30A0000CD020000000F0000000B000000030000360E0000CB0A0000C802000000100000000B0000000300000A0F0000B30A0000C302000000000000000C000000030000FB010000510D00001903000000010000000C000000030000CE020000380D00001403000000020000000C000000030000A2030000200D00000F03000000030000000C00000003000076040000080D00000A03000000040000000C0000000300004A050000F00C00000503000000050000000C0000000300001D060000D70C0000FF02000000060000000C000000030000F1060000BF0C0000FA02000000070000000C000000030000C5070000A70C0000F502000000080000000C000000030000990800008E0C0000F002000000090000000C0000000300006D090000760C0000EB020000000A0000000C000000030000400A00005E0C0000E5020000000B0000000C000000030000140B0000450C0000E0020000000C0000000C000000030000E80B00002D0C0000DB020000000D0000000C000000030000BC0C0000150C0000D6020000000E0000000C0000000300008F0D0000FC0B0000D1020000000F0000000C000000030000630E0000E40B0000CB02000000100000000C000000030000370F0000CC0B0000C602000000000000000D000000030000240200006F0E00001B03000000010000000D000000030000F8020000570E00001603000000020000000D000000030000CC0300003E0E00001103000000030000000D000000030000A0040000250E00000C03000000040000000D000000030000740500000D0E00000703000000050000000D00000003000048060000F40D00000203000000060000000D0000000300001C070000DB0D0000FC02000000070000000D000000030000F0070000C30D0000F702000000080000000D000000030000C4080000AA0D0000F202000000090000000D00000003000098090000910D0000ED020000000A0000000D0000000300006C0A0000790D0000E8020000000B0000000D000000030000400B0000600D0000E3020000000C0000000D000000030000140C0000470D0000DE020000000D0000000D000000030000E80C00002F0D0000D9020000000E0000000D000000030000BC0D0000160D0000D4020000000F0000000D000000030000900E0000FD0C0000CF02000000100000000D000000030000640F0000E50C0000CA02000000000000000E0000000300004E0200008E0F00001C03000000010000000E00000003000022030000750F00001803000000020000000E000000030000F60300005C0F00001303000000030000000E000000030000CB040000430F00000E03000000040000000E0000000300009F0500002A0F00000903000000050000000E00000003000073060000110F00000403000000060000000E00000003000047070000F80E0000FF02000000070000000E0000000300001B080000DF0E0000FA02000000080000000E000000030000F0080000C60E0000F502000000090000000E000000030000C4090000AD0E0000F0020000000A0000000E000000030000980A0000940E0000EB020000000B0000000E0000000300006C0B00007B0E0000E6020000000C0000000E000000030000400C0000620E0000E1020000000D0000000E000000030000150D0000490E0000DC020000000E0000000E000000030000E90D00002F0E0000D7020000000F0000000E000000030000BD0E0000160E0000D202000000100000000E000000030000910F0000FD0D0000CD02000000000000000F00000003000078020000FF0F00001E03000000010000000F0000000300004C030000FF0F00001903000000020000000F00000003000021040000FF0F00001403000000030000000F000000030000F5040000FF0F00001003000000040000000F000000030000C9050000FF0F00000B03000000050000000F0000000300009E060000FF0F00000603000000060000000F00000003000072070000FF0F00000103000000070000000F00000003000047080000FB0F0000FC02000000080000000F0000000300001B090000E10F0000F702000000090000000F000000030000EF090000C80F0000F2020000000A0000000F000000030000C40A0000AF0F0000EE020000000B0000000F000000030000980B0000950F0000E9020000000C0000000F0000000300006D0C00007C0F0000E4020000000D0000000F000000030000410D0000620F0000DF020000000E0000000F000000030000150E0000490F0000DA020000000F0000000F000000030000EA0E0000300F0000D502000000100000000F000000030000BE0F0000160F0000D1020000000000000010000000030000A2020000FF0F00002003000000010000001000000003000076030000FF0F00001B0300000002000000100000000300004B040000FF0F0000160300000003000000100000000300001F050000FF0F000011030000000400000010000000030000F4050000FF0F00000D030000000500000010000000030000C9060000FF0F0000080300000006000000100000000300009D070000FF0F00000303000000070000001000000003000072080000FF0F0000FF02000000080000001000000003000046090000FF0F0000FA0200000009000000100000000300001B0A0000FF0F0000F5020000000A00000010000000030000F00A0000FF0F0000F0020000000B00000010000000030000C40B0000FF0F0000EC020000000C00000010000000030000990C0000FF0F0000E7020000000D000000100000000300006D0D0000FF0F0000E2020000000E00000010000000030000420E0000FF0F0000DD020000000F00000010000000030000170F0000FF0F0000D9020000001000000010000000030000EB0F0000FF0F0000D402000000000000000000000004000008000000000000000A040000000100000000000000040000D90000000000000003040000000200000000000000040000AB01000000000000FD0300000003000000000000000400007C02000000000000F60300000004000000000000000400004E03000000000000F00300000005000000000000000400002004000000000000E9030000000600000000000000040000F104000000000000E3030000000700000000000000040000C305000000000000DC0300000008000000000000000400009406000000000000D60300000009000000000000000400006607000000000000CF030000000A000000000000000400003708000000000000C9030000000B000000000000000400000909000000000000C3030000000C00000000000000040000DB09000000000000BC030000000D00000000000000040000AC0A000000000000B6030000000E000000000000000400007E0B000000000000AF030000000F000000000000000400004F0C000000000000A9030000001000000000000000040000210D000000000000A203000000000000000100000004000032000000F70000000B04000000010000000100000004000003010000E300000005040000000200000001000000040000D5010000CF000000FF030000000300000001000000040000A7020000BB000000F803000000040000000100000004000079030000A7000000F20300000005000000010000000400004A04000093000000EC0300000006000000010000000400001C0500007F000000E5030000000700000001000000040000EE0500006B000000DF030000000800000001000000040000C006000057000000D80300000009000000010000000400009107000043000000D2030000000A00000001000000040000630800002F000000CC030000000B00000001000000040000350900001B000000C5030000000C00000001000000040000070A000007000000BF030000000D00000001000000040000D80A000000000000B9030000000E00000001000000040000AA0B000000000000B2030000000F000000010000000400007C0C000000000000AC0300000010000000010000000400004E0D000000000000A50300000000000000020000000400005B000000150200000D0400000001000000020000000400002D0100000102000007040000000200000002000000040000FF010000ED01000001040000000300000002000000040000D1020000D8010000FA030000000400000002000000040000A3030000C4010000F403000000050000000200000004000075040000B0010000EE030000000600000002000000040000470500009B010000E70300000007000000020000000400001906000087010000E1030000000800000002000000040000EB06000073010000DB030000000900000002000000040000BD0700005E010000D5030000000A000000020000000400008F0800004A010000CE030000000B000000020000000400006109000036010000C8030000000C00000002000000040000330A000021010000C2030000000D00000002000000040000050B00000D010000BC030000000E00000002000000040000D60B0000F9000000B5030000000F00000002000000040000A80C0000E4000000AF0300000010000000020000000400007A0D0000D0000000A903000000000000000300000004000085000000340300000F040000000100000003000000040000570100001F03000009040000000200000003000000040000290200000B03000002040000000300000003000000040000FC020000F6020000FC030000000400000003000000040000CE030000E1020000F6030000000500000003000000040000A0040000CC020000F003000000060000000300000004000072050000B8020000EA03000000070000000300000004000044060000A3020000E4030000000800000003000000040000160700008E020000DD030000000900000003000000040000E80700007A020000D7030000000A00000003000000040000BA08000065020000D1030000000B000000030000000400008C09000050020000CB030000000C000000030000000400005F0A00003C020000C5030000000D00000003000000040000310B000027020000BF030000000E00000003000000040000030C000012020000B8030000000F00000003000000040000D50C0000FD010000B2030000001000000003000000040000A70D0000E9010000AC030000000000000004000000040000AF0000005304000011040000000100000004000000040000810100003E0400000A0400000002000000040000000400005402000028040000040400000003000000040000000400002603000013040000FE030000000400000004000000040000000400000004000000040000000500000004000000040000CA040000E9030000F20300000006000000040000000400009D050000D4030000EC0300000007000000040000000400006F060000BF030000E603000000080000000400000004000041070000AA030000E00300000009000000040000000400001408000095030000DA030000000A00000004000000040000E608000080030000D4030000000B00000004000000040000B80900006B030000CE030000000C000000040000000400008B0A000056030000C8030000000D000000040000000400005D0B000041030000C2030000000E000000040000000400002F0C00002C030000BC030000000F00000004000000040000010D000017030000B5030000001000000004000000040000D40D000002030000AF030000000000000005000000040000D90000007105000012040000000100000005000000040000AB0100005C0500000C0400000002000000050000000400007E0200004605000006040000000300000005000000040000500300003105000000040000000400000005000000040000230400001C050000FA030000000500000005000000040000F504000006050000F4030000000600000005000000040000C8050000F1040000EE0300000007000000050000000400009A060000DB040000E80300000008000000050000000400006D070000C6040000E20300000009000000050000000400003F080000B0040000DC030000000A00000005000000040000120900009B040000D7030000000B00000005000000040000E409000085040000D1030000000C00000005000000040000B70A000070040000CB030000000D00000005000000040000890B00005B040000C5030000000E000000050000000400005C0C000045040000BF030000000F000000050000000400002E0D000030040000B9030000001000000005000000040000000E00001A040000B3030000000000000006000000040000030100009006000014040000000100000006000000040000D50100007A0600000E040000000200000006000000040000A802000064060000080400000003000000060000000400007B0300004F060000020400000004000000060000000400004D04000039060000FC0300000005000000060000000400002005000023060000F7030000000600000006000000040000F30500000D060000F1030000000700000006000000040000C5060000F7050000EB03000000080000000600000004000098070000E2050000E50300000009000000060000000400006B080000CC050000DF030000000A000000060000000400003D090000B6050000D9030000000B00000006000000040000100A0000A0050000D3030000000C00000006000000040000E30A00008A050000CD030000000D00000006000000040000B50B000075050000C8030000000E00000006000000040000880C00005F050000C2030000000F000000060000000400005B0D000049050000BC0300000010000000060000000400002D0E000033050000B60300000000000000070000000400002C010000AF07000016040000000100000007000000040000FF0100009807000010040000000200000007000000040000D2020000820700000A040000000300000007000000040000A50300006C070000040400000004000000070000000400007804000056070000FF0300000005000000070000000400004B05000040070000F90300000006000000070000000400001E0600002A070000F3030000000700000007000000040000F006000013070000ED030000000800000007000000040000C3070000FD060000E703000000090000000700000004000096080000E7060000E2030000000A0000000700000004000069090000D1060000DC030000000B000000070000000400003C0A0000BB060000D6030000000C000000070000000400000F0B0000A5060000D0030000000D00000007000000040000E10B00008E060000CB030000000E00000007000000040000B40C000078060000C5030000000F00000007000000040000870D000062060000BF0300000010000000070000000400005A0E00004C060000B903000000000000000800000004000056010000CD0800001704000000010000000800000004000029020000B708000012040000000200000008000000040000FC020000A00800000C040000000300000008000000040000CF0300008A08000006040000000400000008000000040000A20400007308000001040000000500000008000000040000750500005D080000FB0300000006000000080000000400004806000046080000F50300000007000000080000000400001B07000030080000F0030000000800000008000000040000EE07000019080000EA030000000900000008000000040000C208000002080000E4030000000A0000000800000004000095090000EC070000DF030000000B00000008000000040000680A0000D5070000D9030000000C000000080000000400003B0B0000BF070000D3030000000D000000080000000400000E0C0000A8070000CE030000000E00000008000000040000E10C000092070000C8030000000F00000008000000040000B40D00007B070000C2030000001000000008000000040000870E000065070000BD03000000000000000900000004000080010000EC0900001904000000010000000900000004000053020000D50900001304000000020000000900000004000027030000BE0900000E040000000300000009000000040000FA030000A709000008040000000400000009000000040000CD0400009009000003040000000500000009000000040000A005000079090000FD0300000006000000090000000400007306000063090000F8030000000700000009000000040000470700004C090000F20300000008000000090000000400001A08000035090000EC030000000900000009000000040000ED0800001E090000E7030000000A00000009000000040000C009000007090000E1030000000B00000009000000040000930A0000F0080000DC030000000C00000009000000040000670B0000D9080000D6030000000D000000090000000400003A0C0000C2080000D1030000000E000000090000000400000D0D0000AB080000CB030000000F00000009000000040000E00D000094080000C6030000001000000009000000040000B30E00007E080000C003000000000000000A000000040000AA0100000B0B00001B04000000010000000A0000000400007D020000F30A00001504000000020000000A00000004000051030000DC0A00001004000000030000000A00000004000024040000C50A00000A04000000040000000A000000040000F7040000AE0A00000504000000050000000A000000040000CB050000960A0000FF03000000060000000A0000000400009E0600007F0A0000FA03000000070000000A00000004000072070000680A0000F403000000080000000A00000004000045080000500A0000EF03000000090000000A00000004000018090000390A0000EA030000000A0000000A000000040000EC090000220A0000E4030000000B0000000A000000040000BF0A00000B0A0000DF030000000C0000000A000000040000930B0000F3090000D9030000000D0000000A000000040000660C0000DC090000D4030000000E0000000A000000040000390D0000C5090000CE030000000F0000000A0000000400000D0E0000AE090000C903000000100000000A000000040000E00E000096090000C303000000000000000B000000040000D4010000290C00001C04000000010000000B000000040000A7020000120C00001704000000020000000B0000000400007B030000FA0B00001204000000030000000B0000000400004E040000E20B00000C04000000040000000B00000004000022050000CB0B00000704000000050000000B000000040000F6050000B30B00000204000000060000000B000000040000C90600009C0B0000FC03000000070000000B0000000400009D070000840B0000F703000000080000000B000000040000700800006C0B0000F203000000090000000B00000004000044090000550B0000EC030000000A0000000B000000040000170A00003D0B0000E7030000000B0000000B000000040000EB0A0000250B0000E1030000000C0000000B000000040000BF0B00000E0B0000DC030000000D0000000B000000040000920C0000F60A0000D7030000000E0000000B000000040000660D0000DE0A0000D1030000000F0000000B000000040000390E0000C70A0000CC03000000100000000B0000000400000D0F0000AF0A0000C703000000000000000C000000040000FE010000480D00001E04000000010000000C000000040000D1020000300D00001904000000020000000C000000040000A5030000180D00001404000000030000000C00000004000079040000000D00000E04000000040000000C0000000400004D050000E80C00000904000000050000000C00000004000020060000D00C00000404000000060000000C000000040000F4060000B80C0000FF03000000070000000C000000040000C8070000A00C0000F903000000080000000C0000000400009C080000880C0000F403000000090000000C0000000400006F090000700C0000EF030000000A0000000C000000040000430A0000580C0000E9030000000B0000000C000000040000170B0000400C0000E4030000000C0000000C000000040000EB0B0000280C0000DF030000000D0000000C000000040000BE0C0000100C0000DA030000000E0000000C000000040000920D0000F80B0000D4030000000F0000000C000000040000660E0000E00B0000CF03000000100000000C0000000400003A0F0000C80B0000CA03000000000000000D00000004000027020000670E00002004000000010000000D000000040000FB0200004E0E00001B04000000020000000D000000040000CF030000360E00001604000000030000000D000000040000A30400001E0E00001004000000040000000D00000004000077050000050E00000B04000000050000000D0000000400004B060000ED0D00000604000000060000000D0000000400001F070000D40D00000104000000070000000D000000040000F3070000BC0D0000FC03000000080000000D000000040000C7080000A40D0000F703000000090000000D0000000400009B0900008B0D0000F1030000000A0000000D0000000400006F0A0000730D0000EC030000000B0000000D000000040000430B00005B0D0000E7030000000C0000000D000000040000170C0000420D0000E2030000000D0000000D000000040000EB0C00002A0D0000DD030000000E0000000D000000040000BE0D0000110D0000D8030000000F0000000D000000040000920E0000F90C0000D203000000100000000D000000040000660F0000E10C0000CD03000000000000000E00000004000051020000850F00002204000000010000000E000000040000250300006D0F00001D04000000020000000E000000040000F9030000540F00001704000000030000000E000000040000CE0400003B0F00001204000000040000000E000000040000A2050000220F00000D04000000050000000E000000040000760600000A0F00000804000000060000000E0000000400004A070000F10E00000304000000070000000E0000000400001E080000D80E0000FE03000000080000000E000000040000F2080000BF0E0000F903000000090000000E000000040000C6090000A70E0000F4030000000A0000000E0000000400009A0A00008E0E0000EF030000000B0000000E0000000400006E0B0000750E0000EA030000000C0000000E000000040000430C00005C0E0000E5030000000D0000000E000000040000170D0000440E0000E0030000000E0000000E000000040000EB0D00002B0E0000DB030000000F0000000E000000040000BF0E0000120E0000D603000000100000000E000000040000930F0000F90D0000D003000000000000000F0000000400007B020000FF0F00002304000000010000000F0000000400004F030000FF0F00001E04000000020000000F00000004000024040000FF0F00001904000000030000000F000000040000F8040000FF0F00001404000000040000000F000000040000CC050000FF0F00000F04000000050000000F000000040000A1060000FF0F00000A04000000060000000F00000004000075070000FF0F00000604000000070000000F00000004000049080000F40F00000104000000080000000F0000000400001D090000DB0F0000FC03000000090000000F000000040000F2090000C20F0000F7030000000A0000000F000000040000C60A0000A90F0000F2030000000B0000000F0000000400009A0B0000900F0000ED030000000C0000000F0000000400006F0C0000770F0000E8030000000D0000000F000000040000430D00005E0F0000E3030000000E0000000F000000040000170E0000450F0000DE030000000F0000000F000000040000EB0E00002B0F0000D903000000100000000F000000040000C00F0000120F0000D4030000000000000010000000040000A5020000FF0F00002504000000010000001000000004000079030000FF0F0000200400000002000000100000000400004E040000FF0F00001B04000000030000001000000004000022050000FF0F000016040000000400000010000000040000F7050000FF0F000012040000000500000010000000040000CB060000FF0F00000D040000000600000010000000040000A0070000FF0F00000804000000070000001000000004000074080000FF0F00000304000000080000001000000004000049090000FF0F0000FE0300000009000000100000000400001D0A0000FF0F0000F9030000000A00000010000000040000F20A0000FF0F0000F4030000000B00000010000000040000C60B0000FF0F0000EF030000000C000000100000000400009B0C0000FF0F0000EB030000000D000000100000000400006F0D0000FF0F0000E6030000000E00000010000000040000440E0000FF0F0000E1030000000F00000010000000040000180F0000FF0F0000DC030000001000000010000000040000ED0F0000FF0F0000D70300000000000000000000000500000A000000000000000D050000000100000000000000050000DC0000000000000006050000000200000000000000050000AD01000000000000000500000003000000000000000500007F02000000000000FA0400000004000000000000000500005103000000000000F30400000005000000000000000500002304000000000000ED040000000600000000000000050000F504000000000000E7040000000700000000000000050000C705000000000000E00400000008000000000000000500009906000000000000DA0400000009000000000000000500006B07000000000000D4040000000A000000000000000500003C08000000000000CE040000000B000000000000000500000E09000000000000C7040000000C00000000000000050000E009000000000000C1040000000D00000000000000050000B20A000000000000BB040000000E00000000000000050000840B000000000000B4040000000F00000000000000050000560C000000000000AE040000001000000000000000050000280D000000000000A804000000000000000100000005000034000000EE0000000E05000000010000000100000005000006010000DA00000008050000000200000001000000050000D8010000C600000002050000000300000001000000050000AA020000B3000000FC0400000004000000010000000500007C0300009F000000F60400000005000000010000000500004E0400008B000000EF0400000006000000010000000500002005000078000000E9040000000700000001000000050000F205000064000000E3040000000800000001000000050000C406000051000000DD040000000900000001000000050000960700003D000000D6040000000A000000010000000500006808000029000000D0040000000B000000010000000500003A09000016000000CA040000000C000000010000000500000C0A000002000000C4040000000D00000001000000050000DE0A000000000000BE040000000E00000001000000050000B00B000000000000B7040000000F00000001000000050000820C000000000000B1040000001000000001000000050000540D000000000000AB0400000000000000020000000500005E0000000C0200001005000000010000000200000005000030010000F80100000A05000000020000000200000005000002020000E401000004050000000300000002000000050000D4020000D0010000FE040000000400000002000000050000A6030000BC010000F804000000050000000200000005000078040000A8010000F20400000006000000020000000500004B05000094010000EB0400000007000000020000000500001D06000080010000E5040000000800000002000000050000EF0600006C010000DF040000000900000002000000050000C107000058010000D9040000000A000000020000000500009308000044010000D3040000000B000000020000000500006509000030010000CD040000000C00000002000000050000380A00001C010000C7040000000D000000020000000500000A0B000008010000C0040000000E00000002000000050000DC0B0000F4000000BA040000000F00000002000000050000AE0C0000E0000000B4040000001000000002000000050000800D0000CC000000AE040000000000000003000000050000870000002B030000120500000001000000030000000500005A010000170300000C0500000002000000030000000500002C0200000203000006050000000300000003000000050000FE020000EE02000000050000000400000003000000050000D1030000DA020000FA040000000500000003000000050000A3040000C5020000F404000000060000000300000005000075050000B1020000EE040000000700000003000000050000480600009C020000E80400000008000000030000000500001A07000088020000E2040000000900000003000000050000EC07000074020000DC040000000A00000003000000050000BF0800005F020000D6040000000B00000003000000050000910900004B020000D0040000000C00000003000000050000630A000037020000C9040000000D00000003000000050000360B000022020000C3040000000E00000003000000050000080C00000E020000BD040000000F00000003000000050000DA0C0000F9010000B7040000001000000003000000050000AD0D0000E5010000B1040000000000000004000000050000B10000004A0400001405000000010000000400000005000084010000350400000E050000000200000004000000050000560200002004000008050000000300000004000000050000290300000C04000002050000000400000004000000050000FB030000F7030000FC040000000500000004000000050000CE040000E2030000F6040000000600000004000000050000A0050000CD030000F004000000070000000400000005000073060000B9030000EA04000000080000000400000005000045070000A4030000E4040000000900000004000000050000180800008F030000DE040000000A00000004000000050000EA0800007A030000D8040000000B00000004000000050000BD09000066030000D2040000000C000000040000000500008F0A000051030000CC040000000D00000004000000050000620B00003C030000C6040000000E00000004000000050000340C000027030000C0040000000F00000004000000050000070D000013030000BA040000001000000004000000050000D90D0000FE020000B4040000000000000005000000050000DB0000006805000016050000000100000005000000050000AE0100005305000010050000000200000005000000050000810200003E0500000A0500000003000000050000000500005303000029050000040500000004000000050000000500002604000014050000FE040000000500000005000000050000000500000005000000050000000600000005000000050000CB050000EA040000F30400000007000000050000000500009E060000D5040000ED04000000080000000500000005000070070000C0040000E704000000090000000500000005000043080000AA040000E1040000000A000000050000000500001609000095040000DB040000000B00000005000000050000E809000080040000D5040000000C00000005000000050000BB0A00006B040000CF040000000D000000050000000500008E0B000056040000C9040000000E00000005000000050000600C000041040000C3040000000F00000005000000050000330D00002C040000BD040000001000000005000000050000060E000017040000B8040000000000000006000000050000050100008706000018050000000100000006000000050000D80100007206000012050000000200000006000000050000AB0200005C0600000C0500000003000000060000000500007E0300004706000006050000000400000006000000050000500400003106000001050000000500000006000000050000230500001C060000FB040000000600000006000000050000F605000006060000F5040000000700000006000000050000C9060000F1050000EF0400000008000000060000000500009C070000DB050000E90400000009000000060000000500006E080000C6050000E3040000000A0000000600000005000041090000B0050000DE040000000B00000006000000050000140A00009B050000D8040000000C00000006000000050000E70A000085050000D2040000000D00000006000000050000BA0B000070050000CC040000000E000000060000000500008C0C00005A050000C6040000000F000000060000000500005F0D000045050000C0040000001000000006000000050000320E00002F050000BB0400000000000000070000000500002F010000A60700001A050000000100000007000000050000020200009007000014050000000200000007000000050000D50200007A0700000E050000000300000007000000050000A803000064070000080500000004000000070000000500007B0400004E070000030500000005000000070000000500004E05000039070000FD0400000006000000070000000500002106000023070000F7040000000700000007000000050000F40600000D070000F1040000000800000007000000050000C7070000F7060000EC0400000009000000070000000500009A080000E1060000E6040000000A000000070000000500006D090000CB060000E0040000000B00000007000000050000400A0000B5060000DB040000000C00000007000000050000130B0000A0060000D5040000000D00000007000000050000E50B00008A060000CF040000000E00000007000000050000B80C000074060000C9040000000F000000070000000500008B0D00005E060000C40400000010000000070000000500005E0E000048060000BE04000000000000000800000005000059010000C50800001C0500000001000000080000000500002C020000AE08000016050000000200000008000000050000FF0200009808000010050000000300000008000000050000D2030000820800000B050000000400000008000000050000A50400006C080000050500000005000000080000000500007805000055080000FF0400000006000000080000000500004C0600003F080000FA0400000007000000080000000500001F07000029080000F4040000000800000008000000050000F207000013080000EE040000000900000008000000050000C5080000FD070000E9040000000A0000000800000005000098090000E6070000E3040000000B000000080000000500006B0A0000D0070000DD040000000C000000080000000500003E0B0000BA070000D8040000000D00000008000000050000110C0000A4070000D2040000000E00000008000000050000E40C00008D070000CC040000000F00000008000000050000B80D000077070000C70400000010000000080000000500008B0E000061070000C104000000000000000900000005000083010000E30900001D05000000010000000900000005000056020000CD0900001805000000020000000900000005000029030000B609000012050000000300000009000000050000FD0300009F0900000D050000000400000009000000050000D00400008909000007050000000500000009000000050000A30500007209000002050000000600000009000000050000760600005C090000FC0400000007000000090000000500004A07000045090000F60400000008000000090000000500001D0800002E090000F1040000000900000009000000050000F008000018090000EB040000000A00000009000000050000C409000001090000E6040000000B00000009000000050000970A0000EB080000E0040000000C000000090000000500006A0B0000D4080000DA040000000D000000090000000500003D0C0000BE080000D5040000000E00000009000000050000110D0000A7080000CF040000000F00000009000000050000E40D000090080000CA040000001000000009000000050000B70E00007A080000C404000000000000000A000000050000AD010000020B00001F05000000010000000A00000005000080020000EB0A00001A05000000020000000A00000005000054030000D40A00001405000000030000000A00000005000027040000BD0A00000F05000000040000000A000000050000FA040000A60A00000905000000050000000A000000050000CE0500008F0A00000405000000060000000A000000050000A1060000780A0000FE04000000070000000A00000005000075070000610A0000F904000000080000000A000000050000480800004A0A0000F304000000090000000A0000000500001C090000330A0000EE040000000A0000000A000000050000EF0900001C0A0000E8040000000B0000000A000000050000C20A0000050A0000E3040000000C0000000A000000050000960B0000EE090000DD040000000D0000000A000000050000690C0000D7090000D8040000000E0000000A0000000500003D0D0000C0090000D2040000000F0000000A000000050000100E0000A9090000CD04000000100000000A000000050000E30E000093090000C704000000000000000B000000050000D7010000210C00002105000000010000000B000000050000AA020000090C00001C05000000020000000B0000000500007E030000F20B00001605000000030000000B00000005000051040000DB0B00001105000000040000000B00000005000025050000C30B00000B05000000050000000B000000050000F9050000AC0B00000605000000060000000B000000050000CC060000950B00000105000000070000000B000000050000A00700007D0B0000FB04000000080000000B00000005000073080000660B0000F604000000090000000B000000050000470900004F0B0000F0040000000A0000000B0000000500001A0A0000370B0000EB040000000B0000000B000000050000EE0A0000200B0000E6040000000C0000000B000000050000C20B0000090B0000E0040000000D0000000B000000050000950C0000F10A0000DB040000000E0000000B000000050000690D0000DA0A0000D5040000000F0000000B0000000500003C0E0000C30A0000D004000000100000000B000000050000100F0000AB0A0000CA04000000000000000C000000050000010200003F0D00002305000000010000000C000000050000D4020000280D00001E05000000020000000C000000050000A8030000100D00001805000000030000000C0000000500007C040000F80C00001305000000040000000C0000000500004F050000E00C00000E05000000050000000C00000005000023060000C90C00000805000000060000000C000000050000F7060000B10C00000305000000070000000C000000050000CB070000990C0000FE04000000080000000C0000000500009E080000820C0000F804000000090000000C000000050000720900006A0C0000F3040000000A0000000C000000050000460A0000520C0000EE040000000B0000000C0000000500001A0B00003B0C0000E8040000000C0000000C000000050000ED0B0000230C0000E3040000000D0000000C000000050000C10C00000B0C0000DE040000000E0000000C000000050000950D0000F30B0000D8040000000F0000000C000000050000690E0000DC0B0000D304000000100000000C0000000500003C0F0000C40B0000CE04000000000000000D0000000500002A0200005E0E00002505000000010000000D000000050000FE020000460E00002005000000020000000D000000050000D20300002E0E00001A05000000030000000D000000050000A6040000160E00001505000000040000000D0000000500007A050000FE0D00001005000000050000000D0000000500004E060000E60D00000B05000000060000000D00000005000022070000CE0D00000505000000070000000D000000050000F6070000B50D00000005000000080000000D000000050000CA0800009D0D0000FB04000000090000000D0000000500009D090000850D0000F6040000000A0000000D000000050000710A00006D0D0000F0040000000B0000000D000000050000450B0000550D0000EB040000000C0000000D000000050000190C00003D0D0000E6040000000D0000000D000000050000ED0C0000250D0000E0040000000E0000000D000000050000C10D00000D0D0000DB040000000F0000000D000000050000950E0000F50C0000D604000000100000000D000000050000690F0000DD0C0000D104000000000000000E000000050000540200007D0F00002705000000010000000E00000005000028030000640F00002205000000020000000E000000050000FC0300004C0F00001C05000000030000000E000000050000D0040000330F00001705000000040000000E000000050000A50500001B0F00001205000000050000000E00000005000079060000020F00000D05000000060000000E0000000500004D070000EA0E00000805000000070000000E00000005000021080000D20E00000205000000080000000E000000050000F5080000B90E0000FD04000000090000000E000000050000C9090000A10E0000F8040000000A0000000E0000000500009D0A0000880E0000F3040000000B0000000E000000050000710B0000700E0000EE040000000C0000000E000000050000450C0000570E0000E9040000000D0000000E000000050000190D00003F0E0000E3040000000E0000000E000000050000ED0D0000270E0000DE040000000F0000000E000000050000C10E00000E0E0000D904000000100000000E000000050000950F0000F60D0000D404000000000000000F0000000500007E020000FF0F00002905000000010000000F00000005000052030000FF0F00002405000000020000000F00000005000027040000FF0F00001E05000000030000000F000000050000FB040000FF0F00001905000000040000000F000000050000CF050000FF0F00001405000000050000000F000000050000A3060000FF0F00000F05000000060000000F00000005000077070000FF0F00000A05000000070000000F0000000500004C080000EE0F00000505000000080000000F00000005000020090000D50F00000005000000090000000F000000050000F4090000BC0F0000FB040000000A0000000F000000050000C80A0000A30F0000F6040000000B0000000F0000000500009C0B00008A0F0000F1040000000C0000000F000000050000710C0000720F0000EB040000000D0000000F000000050000450D0000590F0000E6040000000E0000000F000000050000190E0000400F0000E1040000000F0000000F000000050000ED0E0000270F0000DC04000000100000000F000000050000C10F00000E0F0000D7040000000000000010000000050000A8020000FF0F00002B0500000001000000100000000500007D030000FF0F00002505000000020000001000000005000051040000FF0F00002005000000030000001000000005000025050000FF0F00001B050000000400000010000000050000FA050000FF0F000016050000000500000010000000050000CE060000FF0F000011050000000600000010000000050000A2070000FF0F00000C05000000070000001000000005000077080000FF0F0000070500000008000000100000000500004B090000FF0F0000020500000009000000100000000500001F0A0000FF0F0000FD040000000A00000010000000050000F40A0000FF0F0000F8040000000B00000010000000050000C80B0000FF0F0000F3040000000C000000100000000500009C0C0000FF0F0000EE040000000D00000010000000050000710D0000FF0F0000E9040000000E00000010000000050000450E0000FF0F0000E4040000000F00000010000000050000190F0000FF0F0000DF040000001000000010000000050000EE0F0000FF0F0000DA0400000000000000000000000600000C0000000000000010060000000100000000000000060000DE0000000000000009060000000200000000000000060000B001000000000000030600000003000000000000000600008202000000000000FD0500000004000000000000000600005403000000000000F70500000005000000000000000600002704000000000000F1050000000600000000000000060000F904000000000000EB050000000700000000000000060000CB05000000000000E50500000008000000000000000600009D06000000000000DE0500000009000000000000000600006F07000000000000D8050000000A000000000000000600004108000000000000D2050000000B000000000000000600001409000000000000CC050000000C00000000000000060000E609000000000000C6050000000D00000000000000060000B80A000000000000C0050000000E000000000000000600008A0B000000000000BA050000000F000000000000000600005C0C000000000000B40500000010000000000000000600002E0D000000000000AD05000000000000000100000006000036000000E50000001206000000010000000100000006000008010000D10000000C060000000200000001000000060000DA010000BE00000005060000000300000001000000060000AD020000AB000000FF0500000004000000010000000600007F03000097000000F90500000005000000010000000600005104000084000000F30500000006000000010000000600002405000071000000ED050000000700000001000000060000F60500005E000000E7050000000800000001000000060000C80600004A000000E10500000009000000010000000600009A07000037000000DB050000000A000000010000000600006D08000024000000D5050000000B000000010000000600003F09000010000000CF050000000C00000001000000060000110A000000000000C9050000000D00000001000000060000E40A000000000000C3050000000E00000001000000060000B60B000000000000BD050000000F00000001000000060000880C000000000000B60500000010000000010000000600005A0D000000000000B005000000000000000200000006000060000000030200001406000000010000000200000006000032010000F00100000E06000000020000000200000006000005020000DC01000008060000000300000002000000060000D7020000C801000002060000000400000002000000060000A9030000B5010000FC0500000005000000020000000600007C040000A1010000F60500000006000000020000000600004E0500008D010000F0050000000700000002000000060000210600007A010000EA050000000800000002000000060000F306000066010000E3050000000900000002000000060000C607000052010000DD050000000A00000002000000060000980800003F010000D7050000000B000000020000000600006A0900002B010000D1050000000C000000020000000600003D0A000017010000CB050000000D000000020000000600000F0B000004010000C5050000000E00000002000000060000E20B0000F0000000BF050000000F00000002000000060000B40C0000DC000000B9050000001000000002000000060000860D0000C9000000B30500000000000000030000000600008A00000022030000160600000001000000030000000600005C0100000E030000100600000002000000030000000600002F020000FA0200000A06000000030000000300000006000001030000E602000004060000000400000003000000060000D4030000D2020000FE050000000500000003000000060000A6040000BE020000F805000000060000000300000006000079050000AA020000F20500000007000000030000000600004C06000096020000EC0500000008000000030000000600001E07000082020000E6050000000900000003000000060000F10700006E020000E0050000000A00000003000000060000C30800005A020000DA050000000B000000030000000600009609000046020000D4050000000C00000003000000060000680A000032020000CE050000000D000000030000000600003B0B00001E020000C8050000000E000000030000000600000D0C000009020000C2050000000F00000003000000060000E00C0000F5010000BC050000001000000003000000060000B30D0000E1010000B6050000000000000004000000060000B40000004104000018060000000100000004000000060000860100002C0400001206000000020000000400000006000059020000180400000C0600000003000000040000000600002C0300000404000006060000000400000004000000060000FE030000EF03000000060000000500000004000000060000D1040000DB030000FA050000000600000004000000060000A4050000C6030000F405000000070000000400000006000076060000B2030000EE050000000800000004000000060000490700009D030000E90500000009000000040000000600001C08000089030000E3050000000A00000004000000060000EE08000075030000DD050000000B00000004000000060000C109000060030000D7050000000C00000004000000060000940A00004C030000D1050000000D00000004000000060000670B000037030000CB050000000E00000004000000060000390C000023030000C5050000000F000000040000000600000C0D00000F030000BF050000001000000004000000060000DF0D0000FA020000B9050000000000000005000000060000DE000000600500001A060000000100000005000000060000B00100004B0500001406000000020000000500000006000083020000360500000E060000000300000005000000060000560300002105000008060000000400000005000000060000290400000C05000002060000000500000005000000060000FC040000F8040000FD050000000600000005000000060000CF050000E3040000F7050000000700000005000000060000A1060000CE040000F105000000080000000500000006000074070000B9040000EB05000000090000000500000006000047080000A4040000E5050000000A000000050000000600001A09000090040000DF050000000B00000005000000060000ED0900007B040000DA050000000C00000005000000060000BF0A000066040000D4050000000D00000005000000060000920B000051040000CE050000000E00000005000000060000650C00003C040000C8050000000F00000005000000060000380D000028040000C20500000010000000050000000600000B0E000013040000BC050000000000000006000000060000080100007E0600001C060000000100000006000000060000DB0100006906000016060000000200000006000000060000AE0200005406000010060000000300000006000000060000800300003F0600000A060000000400000006000000060000530400002A060000050600000005000000060000000600002605000014060000FF050000000600000006000000060000000600000006000000060000000700000006000000060000CC060000EA050000F30500000008000000060000000600009F070000D5050000EE05000000090000000600000006000072080000C0050000E8050000000A0000000600000006000045090000AB050000E2050000000B00000006000000060000180A000095050000DC050000000C00000006000000060000EB0A000080050000D6050000000D00000006000000060000BE0B00006B050000D1050000000E00000006000000060000910C000056050000CB050000000F00000006000000060000640D000041050000C5050000001000000006000000060000370E00002C050000BF050000000000000007000000060000320100009D0700001E060000000100000007000000060000050200008707000018060000000200000007000000060000D80200007207000012060000000300000007000000060000AB0300005C0700000D0600000004000000070000000600007E0400004707000007060000000500000007000000060000510500003107000001060000000600000007000000060000240600001C070000FB050000000700000007000000060000F706000006070000F6050000000800000007000000060000CA070000F1060000F00500000009000000070000000600009D080000DB060000EA050000000A0000000700000006000070090000C6060000E5050000000B00000007000000060000430A0000B0060000DF050000000C00000007000000060000160B00009B060000D9050000000D00000007000000060000EA0B000085060000D3050000000E00000007000000060000BD0C00006F060000CE050000000F00000007000000060000900D00005A060000C8050000001000000007000000060000630E000044060000C20500000000000000080000000600005C010000BC080000200600000001000000080000000600002F020000A60800001A060000000200000008000000060000020300009008000014060000000300000008000000060000D50300007A0800000F060000000400000008000000060000A804000064080000090600000005000000080000000600007C0500004E080000030600000006000000080000000600004F06000038080000FE0500000007000000080000000600002207000022080000F8050000000800000008000000060000F50700000C080000F3050000000900000008000000060000C8080000F7070000ED050000000A000000080000000600009C090000E1070000E7050000000B000000080000000600006F0A0000CB070000E2050000000C00000008000000060000420B0000B5070000DC050000000D00000008000000060000150C00009F070000D6050000000E00000008000000060000E80C000089070000D1050000000F00000008000000060000BC0D000073070000CB0500000010000000080000000600008F0E00005D070000C505000000000000000900000006000086010000DA0900002206000000010000000900000006000059020000C40900001C0600000002000000090000000600002C030000AE09000017060000000300000009000000060000000400009809000011060000000400000009000000060000D3040000810900000B060000000500000009000000060000A60500006B090000060600000006000000090000000600007A06000055090000000600000007000000090000000600004D0700003E090000FB0500000008000000090000000600002008000028090000F5050000000900000009000000060000F408000012090000EF050000000A00000009000000060000C7090000FC080000EA050000000B000000090000000600009A0A0000E5080000E4050000000C000000090000000600006D0B0000CF080000DF050000000D00000009000000060000410C0000B9080000D9050000000E00000009000000060000140D0000A3080000D3050000000F00000009000000060000E70D00008C080000CE050000001000000009000000060000BB0E000076080000C805000000000000000A000000060000B0010000F90A00002406000000010000000A00000006000083020000E20A00001E06000000020000000A00000006000056030000CC0A00001906000000030000000A0000000600002A040000B50A00001306000000040000000A000000060000FD0400009F0A00000E06000000050000000A000000060000D1050000880A00000806000000060000000A000000060000A4060000710A00000306000000070000000A000000060000780700005B0A0000FD05000000080000000A0000000600004B080000440A0000F805000000090000000A0000000600001F0900002D0A0000F2050000000A0000000A000000060000F2090000170A0000EC050000000B0000000A000000060000C60A0000000A0000E7050000000C0000000A000000060000990B0000E9090000E1050000000D0000000A0000000600006C0C0000D3090000DC050000000E0000000A000000060000400D0000BC090000D6050000000F0000000A000000060000130E0000A5090000D105000000100000000A000000060000E70E00008F090000CB05000000000000000B000000060000DA010000180C00002606000000010000000B000000060000AD020000010C00002006000000020000000B00000006000081030000EA0B00001B06000000030000000B00000006000054040000D30B00001506000000040000000B00000006000028050000BC0B00001006000000050000000B000000060000FB050000A50B00000A06000000060000000B000000060000CF0600008E0B00000506000000070000000B000000060000A3070000770B00000006000000080000000B00000006000076080000600B0000FA05000000090000000B0000000600004A090000490B0000F5050000000A0000000B0000000600001D0A0000320B0000EF050000000B0000000B000000060000F10A00001B0B0000EA050000000C0000000B000000060000C50B0000040B0000E4050000000D0000000B000000060000980C0000ED0A0000DF050000000E0000000B0000000600006C0D0000D60A0000D9050000000F0000000B0000000600003F0E0000BE0A0000D405000000100000000B000000060000130F0000A70A0000CE05000000000000000C00000006000004020000370D00002806000000010000000C000000060000D70200001F0D00002206000000020000000C000000060000AB030000080D00001D06000000030000000C0000000600007F040000F00C00001806000000040000000C00000006000052050000D90C00001206000000050000000C00000006000026060000C20C00000D06000000060000000C000000060000FA060000AA0C00000706000000070000000C000000060000CE070000930C00000206000000080000000C000000060000A10800007B0C0000FD05000000090000000C00000006000075090000640C0000F7050000000A0000000C000000060000490A00004D0C0000F2050000000B0000000C0000000600001C0B0000350C0000EC050000000C0000000C000000060000F00B00001E0C0000E7050000000D0000000C000000060000C40C0000060C0000E1050000000E0000000C000000060000980D0000EF0B0000DC050000000F0000000C0000000600006B0E0000D80B0000D705000000100000000C0000000600003F0F0000C00B0000D105000000000000000D0000000600002E020000550E00002A06000000010000000D000000060000010300003E0E00002506000000020000000D000000060000D5030000260E00001F06000000030000000D000000060000A90400000E0E00001A06000000040000000D0000000600007D050000F60D00001406000000050000000D00000006000051060000DE0D00000F06000000060000000D00000006000025070000C70D00000A06000000070000000D000000060000F8070000AF0D00000406000000080000000D000000060000CC080000970D0000FF05000000090000000D000000060000A00900007F0D0000FA050000000A0000000D000000060000740A0000680D0000F4050000000B0000000D000000060000480B0000500D0000EF050000000C0000000D0000000600001C0C0000380D0000EA050000000D0000000D000000060000EF0C0000200D0000E4050000000E0000000D000000060000C30D0000090D0000DF050000000F0000000D000000060000970E0000F10C0000DA05000000100000000D0000000600006B0F0000D90C0000D405000000000000000E00000006000058020000740F00002C06000000010000000E0000000600002B0300005C0F00002706000000020000000E000000060000FF030000440F00002106000000030000000E000000060000D30400002C0F00001C06000000040000000E000000060000A7050000130F00001706000000050000000E0000000600007B060000FB0E00001106000000060000000E0000000600004F070000E30E00000C06000000070000000E00000006000023080000CB0E00000706000000080000000E000000060000F7080000B30E00000206000000090000000E000000060000CB0900009B0E0000FC050000000A0000000E0000000600009F0A0000830E0000F7050000000B0000000E000000060000730B00006A0E0000F2050000000C0000000E000000060000470C0000520E0000EC050000000D0000000E0000000600001B0D00003A0E0000E7050000000E0000000E000000060000EF0D0000220E0000E2050000000F0000000E000000060000C30E00000A0E0000DD05000000100000000E000000060000970F0000F20D0000D705000000000000000F00000006000081020000FF0F00002E06000000010000000F00000006000056030000FF0F00002906000000020000000F0000000600002A040000FF0F00002306000000030000000F000000060000FE040000FF0F00001E06000000040000000F000000060000D2050000FF0F00001906000000050000000F000000060000A6060000FF0F00001406000000060000000F0000000600007A070000FF0F00000F06000000070000000F0000000600004E080000E70F00000906000000080000000F00000006000022090000CF0F00000406000000090000000F000000060000F6090000B60F0000FF050000000A0000000F000000060000CA0A00009E0F0000FA050000000B0000000F0000000600009F0B0000850F0000F4050000000C0000000F000000060000730C00006D0F0000EF050000000D0000000F000000060000470D0000540F0000EA050000000E0000000F0000000600001B0E00003C0F0000E5050000000F0000000F000000060000EF0E0000230F0000DF05000000100000000F000000060000C30F00000B0F0000DA050000000000000010000000060000AB020000FF0F00003006000000010000001000000006000080030000FF0F00002B06000000020000001000000006000054040000FF0F00002606000000030000001000000006000028050000FF0F000020060000000400000010000000060000FC050000FF0F00001B060000000500000010000000060000D1060000FF0F000016060000000600000010000000060000A5070000FF0F00001106000000070000001000000006000079080000FF0F00000C0600000008000000100000000600004D090000FF0F000007060000000900000010000000060000220A0000FF0F000001060000000A00000010000000060000F60A0000FF0F0000FC050000000B00000010000000060000CA0B0000FF0F0000F7050000000C000000100000000600009E0C0000FF0F0000F2050000000D00000010000000060000720D0000FF0F0000ED050000000E00000010000000060000470E0000FF0F0000E8050000000F000000100000000600001B0F0000FF0F0000E2050000001000000010000000060000EF0F0000FF0F0000DD0500000000000000000000000700000E0000000000000013070000000100000000000000070000E0000000000000000D070000000200000000000000070000B301000000000000070700000003000000000000000700008502000000000000010700000004000000000000000700005803000000000000FB0600000005000000000000000700002A04000000000000F5060000000600000000000000070000FD04000000000000EF060000000700000000000000070000CF05000000000000E9060000000800000000000000070000A106000000000000E30600000009000000000000000700007407000000000000DD060000000A000000000000000700004608000000000000D7060000000B000000000000000700001909000000000000D1060000000C00000000000000070000EB09000000000000CB060000000D00000000000000070000BE0A000000000000C5060000000E00000000000000070000900B000000000000BF060000000F00000000000000070000630C000000000000B9060000001000000000000000070000350D000000000000B306000000000000000100000007000038000000DC000000150700000001000000010000000700000A010000C90000000F070000000200000001000000070000DD010000B600000009070000000300000001000000070000B0020000A3000000030700000004000000010000000700008203000090000000FD060000000500000001000000070000550400007D000000F7060000000600000001000000070000270500006A000000F1060000000700000001000000070000FA05000057000000EB060000000800000001000000070000CC06000044000000E50600000009000000010000000700009F07000031000000DF060000000A00000001000000070000710800001E000000D9060000000B00000001000000070000440900000B000000D3060000000C00000001000000070000170A000000000000CE060000000D00000001000000070000E90A000000000000C8060000000E00000001000000070000BC0B000000000000C2060000000F000000010000000700008E0C000000000000BC060000001000000001000000070000610D000000000000B606000000000000000200000007000062000000FB0100001707000000010000000200000007000035010000E70100001107000000020000000200000007000007020000D40100000B070000000300000002000000070000DA020000C001000005070000000400000002000000070000AD030000AD010000FF0600000005000000020000000700007F0400009A010000F90600000006000000020000000700005205000086010000F40600000007000000020000000700002506000073010000EE060000000800000002000000070000F706000060010000E8060000000900000002000000070000CA0700004C010000E2060000000A000000020000000700009D08000039010000DC060000000B000000020000000700006F09000026010000D6060000000C00000002000000070000420A000012010000D0060000000D00000002000000070000150B0000FF000000CA060000000E00000002000000070000E70B0000EC000000C4060000000F00000002000000070000BA0C0000D8000000BF0600000010000000020000000700008D0D0000C5000000B90600000000000000030000000700008C00000019030000190700000001000000030000000700005F010000060300001307000000020000000300000007000032020000F20200000D07000000030000000300000007000004030000DE02000008070000000400000003000000070000D7030000CA02000002070000000500000003000000070000AA040000B7020000FC0600000006000000030000000700007D050000A3020000F60600000007000000030000000700004F0600008F020000F0060000000800000003000000070000220700007B020000EA060000000900000003000000070000F507000068020000E4060000000A00000003000000070000C808000054020000DF060000000B000000030000000700009A09000040020000D9060000000C000000030000000700006D0A00002D020000D3060000000D00000003000000070000400B000019020000CD060000000E00000003000000070000130C000005020000C7060000000F00000003000000070000E50C0000F1010000C1060000001000000003000000070000B80D0000DE010000BB060000000000000004000000070000B6000000380400001B0700000001000000040000000700008901000024040000150700000002000000040000000700005C02000010040000100700000003000000040000000700002F030000FC0300000A07000000040000000400000007000002040000E803000004070000000500000004000000070000D4040000D3030000FE060000000600000004000000070000A7050000BF030000F80600000007000000040000000700007A060000AB030000F30600000008000000040000000700004D07000097030000ED0600000009000000040000000700002008000083030000E7060000000A00000004000000070000F30800006F030000E1060000000B00000004000000070000C60900005B030000DB060000000C00000004000000070000980A000047030000D6060000000D000000040000000700006B0B000033030000D0060000000E000000040000000700003E0C00001F030000CA060000000F00000004000000070000110D00000B030000C4060000001000000004000000070000E40D0000F6020000BE060000000000000005000000070000E0000000570500001D070000000100000005000000070000B30100004205000018070000000200000005000000070000860200002E0500001207000000030000000500000007000059030000190500000C0700000004000000050000000700002C0400000505000006070000000500000005000000070000FF040000F004000001070000000600000005000000070000D2050000DC040000FB060000000700000005000000070000A5060000C7040000F506000000080000000500000007000078070000B3040000EF0600000009000000050000000700004B0800009E040000EA060000000A000000050000000700001E0900008A040000E4060000000B00000005000000070000F109000076040000DE060000000C00000005000000070000C40A000061040000D8060000000D00000005000000070000970B00004D040000D2060000000E000000050000000700006A0C000038040000CD060000000F000000050000000700003D0D000024040000C7060000001000000005000000070000100E00000F040000C10600000000000000060000000700000A0100007506000020070000000100000006000000070000DD010000610600001A070000000200000006000000070000B00200004C0600001407000000030000000600000007000083030000370600000E0700000004000000060000000700005604000022060000090700000005000000060000000700002A0500000D06000003070000000600000006000000070000FD050000F8050000FD060000000700000006000000070000D0060000E4050000F8060000000800000006000000070000A3070000CF050000F206000000090000000600000007000076080000BA050000EC060000000A0000000600000007000049090000A5050000E6060000000B000000060000000700001C0A000090050000E1060000000C00000006000000070000EF0A00007B050000DB060000000D00000006000000070000C20B000066050000D5060000000E00000006000000070000950C000052050000CF060000000F00000006000000070000680D00003D050000CA0600000010000000060000000700003B0E000028050000C4060000000000000007000000070000340100009407000022070000000100000007000000070000070200007F0700001C070000000200000007000000070000DB0200006A07000016070000000300000007000000070000AE0300005507000011070000000400000007000000070000810400003F0700000B070000000500000007000000070000540500002A07000005070000000600000007000000070000270600001507000000070000000700000007000000070000000700000007000000070000000800000007000000070000CE070000EA060000F4060000000900000007000000070000A1080000D5060000EF060000000A0000000700000007000074090000C0060000E9060000000B00000007000000070000470A0000AB060000E3060000000C000000070000000700001A0B000096060000DE060000000D00000007000000070000EE0B000080060000D8060000000E00000007000000070000C10C00006B060000D2060000000F00000007000000070000940D000056060000CC060000001000000007000000070000670E000041060000C70600000000000000080000000700005E010000B308000024070000000100000008000000070000320200009D0800001E070000000200000008000000070000050300008808000019070000000300000008000000070000D80300007208000013070000000400000008000000070000AB0400005D0800000D0700000005000000080000000700007F0500004708000008070000000600000008000000070000520600003108000002070000000700000008000000070000250700001C080000FC060000000800000008000000070000F907000006080000F7060000000900000008000000070000CC080000F1070000F1060000000A000000080000000700009F090000DB070000EC060000000B00000008000000070000720A0000C5070000E6060000000C00000008000000070000460B0000B0070000E0060000000D00000008000000070000190C00009A070000DB060000000E00000008000000070000EC0C000085070000D5060000000F00000008000000070000BF0D00006F070000CF060000001000000008000000070000930E000059070000CA06000000000000000900000007000088010000D2090000260700000001000000090000000700005C020000BC090000210700000002000000090000000700002F030000A60900001B070000000300000009000000070000020400009009000015070000000400000009000000070000D60400007A09000010070000000500000009000000070000A9050000640900000A0700000006000000090000000700007D0600004E090000050700000007000000090000000700005007000038090000FF0600000008000000090000000700002308000022090000F9060000000900000009000000070000F70800000C090000F4060000000A00000009000000070000CA090000F6080000EE060000000B000000090000000700009E0A0000E0080000E8060000000C00000009000000070000710B0000CA080000E3060000000D00000009000000070000440C0000B4080000DD060000000E00000009000000070000180D00009E080000D8060000000F00000009000000070000EB0D000088080000D2060000001000000009000000070000BE0E000072080000CC06000000000000000A000000070000B2010000F00A00002807000000010000000A00000007000086020000DA0A00002307000000020000000A00000007000059030000C40A00001D07000000030000000A0000000700002D040000AD0A00001807000000040000000A00000007000000050000970A00001207000000050000000A000000070000D4050000810A00000D07000000060000000A000000070000A70600006A0A00000707000000070000000A0000000700007B070000540A00000107000000080000000A0000000700004E0800003E0A0000FC06000000090000000A00000007000022090000270A0000F6060000000A0000000A000000070000F5090000110A0000F1060000000B0000000A000000070000C90A0000FB090000EB060000000C0000000A0000000700009C0B0000E4090000E6060000000D0000000A000000070000700C0000CE090000E0060000000E0000000A000000070000430D0000B8090000DA060000000F0000000A000000070000170E0000A1090000D506000000100000000A000000070000EA0E00008B090000CF06000000000000000B000000070000DC0100000F0C00002B07000000010000000B000000070000B0020000F80B00002507000000020000000B00000007000084030000E20B00001F07000000030000000B00000007000057040000CB0B00001A07000000040000000B0000000700002B050000B40B00001407000000050000000B000000070000FE0500009E0B00000F07000000060000000B000000070000D2060000870B00000907000000070000000B000000070000A6070000700B00000407000000080000000B00000007000079080000590B0000FE06000000090000000B0000000700004D090000430B0000F9060000000A0000000B000000070000200A00002C0B0000F3060000000B0000000B000000070000F40A0000150B0000EE060000000C0000000B000000070000C80B0000FF0A0000E8060000000D0000000B0000000700009B0C0000E80A0000E3060000000E0000000B0000000700006F0D0000D10A0000DD060000000F0000000B000000070000420E0000BA0A0000D806000000100000000B000000070000160F0000A40A0000D206000000000000000C000000070000070200002E0D00002D07000000010000000C000000070000DA020000170D00002707000000020000000C000000070000AE030000000D00002207000000030000000C00000007000082040000E90C00001C07000000040000000C00000007000055050000D10C00001707000000050000000C00000007000029060000BA0C00001107000000060000000C000000070000FD060000A30C00000C07000000070000000C000000070000D00700008C0C00000607000000080000000C000000070000A4080000750C00000107000000090000000C000000070000780900005E0C0000FB060000000A0000000C0000000700004B0A0000470C0000F6060000000B0000000C0000000700001F0B0000300C0000F0060000000C0000000C000000070000F30B0000190C0000EB060000000D0000000C000000070000C70C0000020C0000E5060000000E0000000C0000000700009A0D0000EB0B0000E0060000000F0000000C0000000700006E0E0000D30B0000DA06000000100000000C000000070000420F0000BC0B0000D506000000000000000D000000070000310200004D0E00002F07000000010000000D00000007000004030000350E00002907000000020000000D000000070000D80300001E0E00002407000000030000000D000000070000AC040000060E00001F07000000040000000D00000007000080050000EF0D00001907000000050000000D00000007000054060000D70D00001407000000060000000D00000007000027070000C00D00000E07000000070000000D000000070000FB070000A80D00000907000000080000000D000000070000CF080000910D00000307000000090000000D000000070000A3090000790D0000FE060000000A0000000D000000070000770A0000620D0000F8060000000B0000000D0000000700004A0B00004A0D0000F3060000000C0000000D0000000700001E0C0000330D0000EE060000000D0000000D000000070000F20C00001C0D0000E8060000000E0000000D000000070000C60D0000040D0000E3060000000F0000000D000000070000990E0000ED0C0000DD06000000100000000D0000000700006D0F0000D50C0000D806000000000000000E0000000700005B0200006B0F00003107000000010000000E0000000700002F030000530F00002C07000000020000000E000000070000020400003C0F00002607000000030000000E000000070000D6040000240F00002107000000040000000E000000070000AA0500000C0F00001B07000000050000000E0000000700007E060000F40E00001607000000060000000E00000007000052070000DC0E00001107000000070000000E00000007000026080000C40E00000B07000000080000000E000000070000FA080000AD0E00000607000000090000000E000000070000CE090000950E000000070000000A0000000E000000070000A20A00007D0E0000FB060000000B0000000E000000070000760B0000650E0000F6060000000C0000000E000000070000490C00004D0E0000F0060000000D0000000E0000000700001D0D0000350E0000EB060000000E0000000E000000070000F10D00001E0E0000E5060000000F0000000E000000070000C50E0000060E0000E006000000100000000E000000070000990F0000EE0D0000DB06000000000000000F00000007000085020000FF0F00003307000000010000000F00000007000059030000FF0F00002E07000000020000000F0000000700002D040000FF0F00002907000000030000000F00000007000001050000FF0F00002307000000040000000F000000070000D5050000FF0F00001E07000000050000000F000000070000A9060000FF0F00001807000000060000000F0000000700007D070000F90F00001307000000070000000F00000007000051080000E10F00000E07000000080000000F00000007000025090000C80F00000807000000090000000F000000070000F9090000B00F000003070000000A0000000F000000070000CD0A0000980F0000FE060000000B0000000F000000070000A10B0000800F0000F8060000000C0000000F000000070000750C0000670F0000F3060000000D0000000F000000070000490D00004F0F0000EE060000000E0000000F0000000700001D0E0000370F0000E8060000000F0000000F000000070000F10E00001F0F0000E306000000100000000F000000070000C50F0000070F0000DD060000000000000010000000070000AF020000FF0F00003507000000010000001000000007000083030000FF0F00003007000000020000001000000007000057040000FF0F00002B0700000003000000100000000700002B050000FF0F000025070000000400000010000000070000FF050000FF0F000020070000000500000010000000070000D3060000FF0F00001B070000000600000010000000070000A7070000FF0F0000150700000007000000100000000700007B080000FF0F00001007000000080000001000000007000050090000FF0F00000B070000000900000010000000070000240A0000FF0F000006070000000A00000010000000070000F80A0000FF0F000000070000000B00000010000000070000CC0B0000FF0F0000FB060000000C00000010000000070000A00C0000FF0F0000F6060000000D00000010000000070000740D0000FF0F0000F0060000000E00000010000000070000480E0000FF0F0000EB060000000F000000100000000700001C0F0000FF0F0000E6060000001000000010000000070000F00F0000FF0F0000E0060000000000000000000000080000100000000000000015080000000100000000000000080000E30000000000000010080000000200000000000000080000B5010000000000000A0800000003000000000000000800008802000000000000040800000004000000000000000800005B03000000000000FE0700000005000000000000000800002E04000000000000F80700000006000000000000000800000005000000000000F3070000000700000000000000080000D305000000000000ED070000000800000000000000080000A606000000000000E70700000009000000000000000800007907000000000000E1070000000A000000000000000800004B08000000000000DB070000000B000000000000000800001E09000000000000D6070000000C00000000000000080000F109000000000000D0070000000D00000000000000080000C40A000000000000CA070000000E00000000000000080000960B000000000000C4070000000F00000000000000080000690C000000000000BE0700000010000000000000000800003C0D000000000000B90700000000000000010000000800003A000000D3000000180800000001000000010000000800000D010000C000000012080000000200000001000000080000E0010000AE0000000C080000000300000001000000080000B20200009B000000060800000004000000010000000800008503000088000000010800000005000000010000000800005804000076000000FB0700000006000000010000000800002B05000063000000F5070000000700000001000000080000FE05000050000000EF070000000800000001000000080000D10600003E000000EA070000000900000001000000080000A30700002B000000E4070000000A000000010000000800007608000018000000DE070000000B000000010000000800004909000006000000D8070000000C000000010000000800001C0A000000000000D2070000000D00000001000000080000EF0A000000000000CD070000000E00000001000000080000C20B000000000000C7070000000F00000001000000080000940C000000000000C1070000001000000001000000080000670D000000000000BB07000000000000000200000008000064000000F20100001A08000000010000000200000008000037010000DF010000140800000002000000020000000800000A020000CC0100000F080000000300000002000000080000DD020000B901000009080000000400000002000000080000B0030000A6010000030800000005000000020000000800008304000092010000FD070000000600000002000000080000560500007F010000F8070000000700000002000000080000280600006C010000F2070000000800000002000000080000FB06000059010000EC070000000900000002000000080000CE07000046010000E6070000000A00000002000000080000A108000033010000E1070000000B000000020000000800007409000020010000DB070000000C00000002000000080000470A00000D010000D5070000000D000000020000000800001A0B0000FA000000CF070000000E00000002000000080000ED0B0000E7000000C9070000000F00000002000000080000C00C0000D4000000C4070000001000000002000000080000930D0000C1000000BE0700000000000000030000000800008E000000100300001C08000000010000000300000008000061010000FD0200001708000000020000000300000008000034020000EA0200001108000000030000000300000008000007030000D60200000B080000000400000003000000080000DA030000C302000006080000000500000003000000080000AD040000AF02000000080000000600000003000000080000800500009C020000FA0700000007000000030000000800005306000089020000F40700000008000000030000000800002607000075020000EF070000000900000003000000080000F907000062020000E9070000000A00000003000000080000CC0800004E020000E3070000000B000000030000000800009F0900003B020000DD070000000C00000003000000080000720A000028020000D8070000000D00000003000000080000450B000014020000D2070000000E00000003000000080000180C000001020000CC070000000F00000003000000080000EB0C0000ED010000C6070000001000000003000000080000BE0D0000DA010000C1070000000000000004000000080000B80000002F0400001F0800000001000000040000000800008B0100001B040000190800000002000000040000000800005F020000080400001308000000030000000400000008000032030000F40300000E08000000040000000400000008000005040000E003000008080000000500000004000000080000D8040000CC03000002080000000600000004000000080000AB050000B8030000FC0700000007000000040000000800007E060000A5030000F70700000008000000040000000800005107000091030000F1070000000900000004000000080000240800007D030000EB070000000A00000004000000080000F708000069030000E6070000000B00000004000000080000CA09000056030000E0070000000C000000040000000800009D0A000042030000DA070000000D00000004000000080000700B00002E030000D4070000000E00000004000000080000430C00001A030000CF070000000F00000004000000080000160D000007030000C9070000001000000004000000080000E90D0000F3020000C3070000000000000005000000080000E30000004E05000021080000000100000005000000080000B60100003A0500001B0800000002000000050000000800008902000026050000160800000003000000050000000800005C03000011050000100800000004000000050000000800002F040000FD0400000A08000000050000000500000008000002050000E904000005080000000600000005000000080000D5050000D5040000FF070000000700000005000000080000A8060000C1040000F90700000008000000050000000800007C070000AD040000F40700000009000000050000000800004F08000099040000EE070000000A000000050000000800002209000084040000E8070000000B00000005000000080000F509000070040000E2070000000C00000005000000080000C80A00005C040000DD070000000D000000050000000800009B0B000048040000D7070000000E000000050000000800006E0C000034040000D1070000000F00000005000000080000420D000020040000CC070000001000000005000000080000150E00000B040000C60700000000000000060000000800000D0100006D06000023080000000100000006000000080000E0010000580600001E080000000200000006000000080000B30200004406000018080000000300000006000000080000860300002F060000120800000004000000060000000800005A0400001A0600000D0800000005000000060000000800002D050000060600000708000000060000000600000008000000060000F105000001080000000700000006000000080000D3060000DD050000FC070000000800000006000000080000A6070000C8050000F60700000009000000060000000800007A080000B4050000F0070000000A000000060000000800004D0900009F050000EB070000000B00000006000000080000200A00008B050000E5070000000C00000006000000080000F30A000076050000DF070000000D00000006000000080000C60B000062050000DA070000000E000000060000000800009A0C00004D050000D4070000000F000000060000000800006D0D000039050000CE070000001000000006000000080000400E000024050000C9070000000000000007000000080000370100008B070000260800000001000000070000000800000A0200007607000020080000000200000007000000080000DD020000620700001B080000000300000007000000080000B10300004D0700001508000000040000000700000008000084040000380700000F08000000050000000700000008000057050000230700000A0800000006000000070000000800002B0600000E07000004080000000700000007000000080000FE060000F9060000FE070000000800000007000000080000D1070000E4060000F9070000000900000007000000080000A4080000CF060000F3070000000A0000000700000008000078090000BA060000ED070000000B000000070000000800004B0A0000A5060000E8070000000C000000070000000800001E0B000091060000E2070000000D00000007000000080000F20B00007C060000DC070000000E00000007000000080000C50C000067060000D7070000000F00000007000000080000980D000052060000D10700000010000000070000000800006B0E00003D060000CB07000000000000000800000008000061010000AA0800002808000000010000000800000008000034020000950800002308000000020000000800000008000008030000800800001D080000000300000008000000080000DB0300006A08000017080000000400000008000000080000AE040000550800001208000000050000000800000008000082050000400800000C080000000600000008000000080000550600002A08000006080000000700000008000000080000290700001508000001080000000800000008000000080000000800000008000000080000000900000008000000080000CF080000EB070000F5070000000A00000008000000080000A3090000D5070000F0070000000B00000008000000080000760A0000C0070000EA070000000C00000008000000080000490B0000AB070000E5070000000D000000080000000800001D0C000095070000DF070000000E00000008000000080000F00C000080070000D9070000000F00000008000000080000C30D00006B070000D4070000001000000008000000080000970E000056070000CE0700000000000000090000000800008B010000C90900002B0800000001000000090000000800005F020000B309000025080000000200000009000000080000320300009E0900001F08000000030000000900000008000005040000880900001A080000000400000009000000080000D90400007209000014080000000500000009000000080000AC0500005D0900000E080000000600000009000000080000800600004709000009080000000700000009000000080000530700003109000003080000000800000009000000080000270800001C090000FE070000000900000009000000080000FA08000006090000F8070000000A00000009000000080000CE090000F0080000F2070000000B00000009000000080000A10A0000DB080000ED070000000C00000009000000080000740B0000C5080000E7070000000D00000009000000080000480C0000AF080000E1070000000E000000090000000800001B0D00009A080000DC070000000F00000009000000080000EF0D000084080000D6070000001000000009000000080000C20E00006E080000D107000000000000000A000000080000B5010000E80A00002D08000000010000000A00000008000089020000D20A00002708000000020000000A0000000800005C030000BC0A00002208000000030000000A00000008000030040000A60A00001C08000000040000000A000000080000030500008F0A00001608000000050000000A000000080000D7050000790A00001108000000060000000A000000080000AA060000630A00000B08000000070000000A0000000800007E0700004D0A00000608000000080000000A00000008000051080000370A00000008000000090000000A00000008000025090000210A0000FA070000000A0000000A000000080000F80900000B0A0000F5070000000B0000000A000000080000CC0A0000F5090000EF070000000C0000000A0000000800009F0B0000DF090000EA070000000D0000000A000000080000730C0000C9090000E4070000000E0000000A000000080000460D0000B3090000DF070000000F0000000A0000000800001A0E00009D090000D907000000100000000A000000080000EE0E000087090000D307000000000000000B000000080000DF010000060C00002F08000000010000000B000000080000B3020000F00B00002A08000000020000000B00000008000087030000DA0B00002408000000030000000B0000000800005A040000C30B00001E08000000040000000B0000000800002E050000AD0B00001908000000050000000B00000008000001060000960B00001308000000060000000B000000080000D5060000800B00000E08000000070000000B000000080000A90700006A0B00000808000000080000000B0000000800007C080000530B00000308000000090000000B000000080000500900003D0B0000FD070000000A0000000B000000080000230A0000260B0000F7070000000B0000000B000000080000F70A0000100B0000F2070000000C0000000B000000080000CB0B0000F90A0000EC070000000D0000000B0000000800009E0C0000E30A0000E7070000000E0000000B000000080000720D0000CD0A0000E1070000000F0000000B000000080000450E0000B60A0000DC07000000100000000B000000080000190F0000A00A0000D607000000000000000C0000000800000A020000250D00003208000000010000000C000000080000DD0200000E0D00002C08000000020000000C000000080000B1030000F80C00002608000000030000000C00000008000085040000E10C00002108000000040000000C00000008000058050000CA0C00001B08000000050000000C0000000800002C060000B30C00001608000000060000000C000000080000000700009C0C00001008000000070000000C000000080000D3070000860C00000B08000000080000000C000000080000A70800006F0C00000508000000090000000C0000000800007B090000580C000000080000000A0000000C0000000800004E0A0000410C0000FA070000000B0000000C000000080000220B00002A0C0000F4070000000C0000000C000000080000F60B0000140C0000EF070000000D0000000C000000080000C90C0000FD0B0000E9070000000E0000000C0000000800009D0D0000E60B0000E4070000000F0000000C000000080000710E0000CF0B0000DE07000000100000000C000000080000440F0000B90B0000D907000000000000000D00000008000034020000440E00003408000000010000000D000000080000070300002D0E00002E08000000020000000D000000080000DB030000160E00002908000000030000000D000000080000AF040000FE0D00002308000000040000000D00000008000083050000E70D00001E08000000050000000D00000008000056060000D00D00001808000000060000000D0000000800002A070000B90D00001308000000070000000D000000080000FE070000A20D00000D08000000080000000D000000080000D20800008B0D00000808000000090000000D000000080000A5090000730D000002080000000A0000000D000000080000790A00005C0D0000FD070000000B0000000D0000000800004D0B0000450D0000F7070000000C0000000D000000080000210C00002E0D0000F1070000000D0000000D000000080000F40C0000170D0000EC070000000E0000000D000000080000C80D0000000D0000E6070000000F0000000D0000000800009C0E0000E80C0000E107000000100000000D000000080000700F0000D10C0000DB07000000000000000E0000000800005E020000630F00003608000000010000000E000000080000320300004B0F00003108000000020000000E00000008000005040000340F00002B08000000030000000E000000080000D90400001C0F00002608000000040000000E000000080000AD050000040F00002008000000050000000E00000008000081060000ED0E00001B08000000060000000E00000008000055070000D50E00001508000000070000000E00000008000029080000BE0E00001008000000080000000E000000080000FC080000A60E00000A08000000090000000E000000080000D00900008F0E000005080000000A0000000E000000080000A40A0000770E0000FF070000000B0000000E000000080000780B0000600E0000FA070000000C0000000E0000000800004C0C0000480E0000F4070000000D0000000E0000000800001F0D0000310E0000EF070000000E0000000E000000080000F30D0000190E0000E9070000000F0000000E000000080000C70E0000020E0000E407000000100000000E0000000800009B0F0000EA0D0000DE07000000000000000F00000008000088020000FF0F00003908000000010000000F0000000800005C030000FF0F00003308000000020000000F00000008000030040000FF0F00002E08000000030000000F00000008000004050000FF0F00002808000000040000000F000000080000D8050000FF0F00002308000000050000000F000000080000AB060000FF0F00001D08000000060000000F0000000800007F070000F20F00001808000000070000000F00000008000053080000DA0F00001208000000080000000F00000008000027090000C20F00000D08000000090000000F000000080000FB090000AA0F000007080000000A0000000F000000080000CF0A0000920F000002080000000B0000000F000000080000A30B00007A0F0000FC070000000C0000000F000000080000770C0000620F0000F7070000000D0000000F0000000800004B0D00004A0F0000F1070000000E0000000F0000000800001F0E0000330F0000EC070000000F0000000F000000080000F20E00001B0F0000E607000000100000000F000000080000C60F0000030F0000E1070000000000000010000000080000B2020000FF0F00003B08000000010000001000000008000086030000FF0F0000350800000002000000100000000800005A040000FF0F0000300800000003000000100000000800002E050000FF0F00002A08000000040000001000000008000002060000FF0F000025080000000500000010000000080000D6060000FF0F000020080000000600000010000000080000AA070000FF0F00001A0800000007000000100000000800007E080000FF0F00001508000000080000001000000008000052090000FF0F00000F080000000900000010000000080000260A0000FF0F00000A080000000A00000010000000080000FA0A0000FF0F000004080000000B00000010000000080000CE0B0000FF0F0000FF070000000C00000010000000080000A20C0000FF0F0000F9070000000D00000010000000080000760D0000FF0F0000F4070000000E000000100000000800004A0E0000FF0F0000EE070000000F000000100000000800001E0F0000FF0F0000E9070000001000000010000000080000F20F0000FF0F0000E3070000000000000000000000090000120000000000000018090000000100000000000000090000E50000000000000013090000000200000000000000090000B8010000000000000D0900000003000000000000000900008B02000000000000080900000004000000000000000900005E03000000000000020900000005000000000000000900003104000000000000FC0800000006000000000000000900000405000000000000F7080000000700000000000000090000D705000000000000F1080000000800000000000000090000AA06000000000000EB0800000009000000000000000900007D07000000000000E6080000000A000000000000000900005008000000000000E0080000000B000000000000000900002309000000000000DA080000000C00000000000000090000F609000000000000D5080000000D00000000000000090000CA0A000000000000CF080000000E000000000000000900009D0B000000000000C9080000000F00000000000000090000700C000000000000C4080000001000000000000000090000430D000000000000BE0800000000000000010000000900003C000000CA0000001B0900000001000000010000000900000F010000B800000015090000000200000001000000090000E2010000A500000010090000000300000001000000090000B5020000930000000A0900000004000000010000000900008803000081000000040900000005000000010000000900005C0400006E000000FF0800000006000000010000000900002F0500005C000000F9080000000700000001000000090000020600004A000000F3080000000800000001000000090000D506000037000000EE080000000900000001000000090000A807000025000000E8080000000A000000010000000900007B08000013000000E3080000000B000000010000000900004E09000000000000DD080000000C00000001000000090000210A000000000000D7080000000D00000001000000090000F40A000000000000D2080000000E00000001000000090000C80B000000000000CC080000000F000000010000000900009B0C000000000000C60800000010000000010000000900006E0D000000000000C108000000000000000200000009000066000000E90100001D09000000010000000200000009000039010000D6010000180900000002000000020000000900000D020000C301000012090000000300000002000000090000E0020000B10100000D090000000400000002000000090000B30300009E01000007090000000500000002000000090000860400008B010000010900000006000000020000000900005905000079010000FC0800000007000000020000000900002C06000066010000F60800000008000000020000000900000007000053010000F0080000000900000002000000090000D307000040010000EB080000000A00000002000000090000A60800002E010000E5080000000B00000002000000090000790900001B010000DF080000000C000000020000000900004C0A000008010000DA080000000D000000020000000900001F0B0000F6000000D4080000000E00000002000000090000F20B0000E3000000CF080000000F00000002000000090000C60C0000D0000000C9080000001000000002000000090000990D0000BE000000C308000000000000000300000009000091000000070300002009000000010000000300000009000064010000F40200001A09000000020000000300000009000037020000E1020000150900000003000000030000000900000A030000CE0200000F090000000400000003000000090000DD030000BB02000009090000000500000003000000090000B1040000A8020000040900000006000000030000000900008405000095020000FE0800000007000000030000000900005706000082020000F80800000008000000030000000900002A0700006F020000F3080000000900000003000000090000FD0700005C020000ED080000000A00000003000000090000D108000049020000E8080000000B00000003000000090000A409000036020000E2080000000C00000003000000090000770A000023020000DC080000000D000000030000000900004A0B000010020000D7080000000E000000030000000900001D0C0000FC010000D1080000000F00000003000000090000F10C0000E9010000CB080000001000000003000000090000C40D0000D6010000C6080000000000000004000000090000BB00000026040000220900000001000000040000000900008E010000130400001D09000000020000000400000009000061020000FF0300001709000000030000000400000009000035030000EC0300001109000000040000000400000009000008040000D80300000C090000000500000004000000090000DB040000C503000006090000000600000004000000090000AE050000B203000001090000000700000004000000090000820600009E030000FB080000000800000004000000090000550700008B030000F50800000009000000040000000900002808000077030000F0080000000A00000004000000090000FB08000064030000EA080000000B00000004000000090000CF09000050030000E4080000000C00000004000000090000A20A00003D030000DF080000000D00000004000000090000750B000029030000D9080000000E00000004000000090000480C000016030000D4080000000F000000040000000900001C0D000002030000CE080000001000000004000000090000EF0D0000EF020000C8080000000000000005000000090000E50000004505000025090000000100000005000000090000B8010000310500001F0900000002000000050000000900008C0200001D0500001A0900000003000000050000000900005F030000090500001409000000040000000500000009000032040000F60400000E09000000050000000500000009000005050000E204000009090000000600000005000000090000D9050000CE04000003090000000700000005000000090000AC060000BA040000FD0800000008000000050000000900007F070000A6040000F80800000009000000050000000900005308000093040000F2080000000A00000005000000090000260900007F040000ED080000000B00000005000000090000F90900006B040000E7080000000C00000005000000090000CD0A000057040000E1080000000D00000005000000090000A00B000043040000DC080000000E00000005000000090000730C00002F040000D6080000000F00000005000000090000460D00001C040000D00800000010000000050000000900001A0E000008040000CB0800000000000000060000000900000F0100006406000027090000000100000006000000090000E30100005006000022090000000200000006000000090000B60200003B0600001C0900000003000000060000000900008903000027060000160900000004000000060000000900005D040000130600001109000000050000000600000009000030050000FF0500000B09000000060000000600000009000003060000EB05000006090000000700000006000000090000D7060000D605000000090000000800000006000000090000AA070000C2050000FA0800000009000000060000000900007D080000AE050000F5080000000A00000006000000090000510900009A050000EF080000000B00000006000000090000240A000085050000E9080000000C00000006000000090000F70A000071050000E4080000000D00000006000000090000CB0B00005D050000DE080000000E000000060000000900009E0C000049050000D9080000000F00000006000000090000710D000035050000D3080000001000000006000000090000450E000020050000CD08000000000000000700000009000039010000830700002A0900000001000000070000000900000D0200006E07000024090000000200000007000000090000E0020000590700001F090000000300000007000000090000B403000045070000190900000004000000070000000900008704000030070000130900000005000000070000000900005A0500001C0700000E0900000006000000070000000900002E060000070700000809000000070000000700000009000001070000F206000002090000000800000007000000090000D5070000DE060000FD080000000900000007000000090000A8080000C9060000F7080000000A000000070000000900007B090000B5060000F2080000000B000000070000000900004F0A0000A0060000EC080000000C00000007000000090000220B00008C060000E6080000000D00000007000000090000F60B000077060000E1080000000E00000007000000090000C90C000062060000DB080000000F000000070000000900009C0D00004E060000D5080000001000000007000000090000700E000039060000D008000000000000000800000009000064010000A10800002C090000000100000008000000090000370200008C080000270900000002000000080000000900000B0300007708000021090000000300000008000000090000DE030000620800001B090000000400000008000000090000B10400004D0800001609000000050000000800000009000085050000380800001009000000060000000800000009000058060000240800000B0900000007000000080000000900002C0700000F08000005090000000800000008000000090000FF070000FA070000FF080000000900000008000000090000D3080000E5070000FA080000000A00000008000000090000A6090000D0070000F4080000000B000000080000000900007A0A0000BB070000EE080000000C000000080000000900004D0B0000A6070000E9080000000D00000008000000090000200C000091070000E3080000000E00000008000000090000F40C00007C070000DE080000000F00000008000000090000C70D000067070000D80800000010000000080000000900009B0E000052070000D20800000000000000090000000900008E010000C00900002F09000000010000000900000009000061020000AB0900002909000000020000000900000009000035030000950900002409000000030000000900000009000008040000800900001E090000000400000009000000090000DC0400006B09000018090000000500000009000000090000AF050000550900001309000000060000000900000009000083060000400900000D090000000700000009000000090000560700002B090000070900000008000000090000000900002A0800001509000002090000000900000009000000090000FF080000FF080000FF080000000A00000009000000090000D1090000EB080000F7080000000B00000009000000090000A40A0000D5080000F1080000000C00000009000000090000780B0000C0080000EB080000000D000000090000000900004B0C0000AB080000E6080000000E000000090000000900001F0D000095080000E0080000000F00000009000000090000F20D000080080000DA080000001000000009000000090000C60E00006B080000D508000000000000000A000000090000B8010000DF0A00003109000000010000000A0000000900008C020000C90A00002C09000000020000000A0000000900005F030000B30A00002609000000030000000A000000090000330400009E0A00002009000000040000000A00000009000006050000880A00001B09000000050000000A000000090000DA050000720A00001509000000060000000A000000090000AD0600005D0A00001009000000070000000A00000009000081070000470A00000A09000000080000000A00000009000054080000310A00000409000000090000000A000000090000280900001B0A0000FF080000000A0000000A000000090000FC090000060A0000F9080000000B0000000A000000090000CF0A0000F0090000F3080000000C0000000A000000090000A30B0000DA090000EE080000000D0000000A000000090000760C0000C4090000E8080000000E0000000A0000000900004A0D0000AF090000E3080000000F0000000A0000000900001D0E000099090000DD08000000100000000A000000090000F10E000083090000D708000000000000000B000000090000E2010000FE0B00003409000000010000000B000000090000B6020000E80B00002E09000000020000000B00000009000089030000D10B00002909000000030000000B0000000900005D040000BB0B00002309000000040000000B00000009000031050000A50B00001D09000000050000000B000000090000040600008F0B00001809000000060000000B000000090000D8060000790B00001209000000070000000B000000090000AB070000630B00000C09000000080000000B0000000900007F0800004D0B00000709000000090000000B00000009000053090000370B000001090000000A0000000B000000090000260A0000210B0000FC080000000B0000000B000000090000FA0A00000B0B0000F6080000000C0000000B000000090000CD0B0000F40A0000F0080000000D0000000B000000090000A10C0000DE0A0000EB080000000E0000000B000000090000750D0000C80A0000E5080000000F0000000B000000090000480E0000B20A0000DF08000000100000000B0000000900001C0F00009C0A0000DA08000000000000000C0000000900000D0200001C0D00003609000000010000000C000000090000E0020000060D00003109000000020000000C000000090000B4030000EF0C00002B09000000030000000C00000009000087040000D90C00002509000000040000000C0000000900005B050000C20C00002009000000050000000C0000000900002F060000AC0C00001A09000000060000000C00000009000002070000960C00001509000000070000000C000000090000D60700007F0C00000F09000000080000000C000000090000AA080000690C00000909000000090000000C0000000900007D090000520C000004090000000A0000000C000000090000510A00003C0C0000FE080000000B0000000C000000090000250B0000250C0000F8080000000C0000000C000000090000F80B00000F0C0000F3080000000D0000000C000000090000CC0C0000F80B0000ED080000000E0000000C000000090000A00D0000E20B0000E8080000000F0000000C000000090000730E0000CB0B0000E208000000100000000C000000090000470F0000B50B0000DC08000000000000000D000000090000370200003B0E00003909000000010000000D0000000900000A030000240E00003309000000020000000D000000090000DE0300000D0E00002E09000000030000000D000000090000B2040000F70D00002809000000040000000D00000009000086050000E00D00002209000000050000000D00000009000059060000C90D00001D09000000060000000D0000000900002D070000B20D00001709000000070000000D000000090000010800009B0D00001109000000080000000D000000090000D4080000840D00000C09000000090000000D000000090000A80900006D0D000006090000000A0000000D0000000900007C0A0000570D000001090000000B0000000D0000000900004F0B0000400D0000FB080000000C0000000D000000090000230C0000290D0000F5080000000D0000000D000000090000F70C0000120D0000F0080000000E0000000D000000090000CB0D0000FB0C0000EA080000000F0000000D0000000900009E0E0000E40C0000E508000000100000000D000000090000720F0000CD0C0000DF08000000000000000E000000090000610200005A0F00003B09000000010000000E00000009000035030000430F00003609000000020000000E000000090000080400002B0F00003009000000030000000E000000090000DC040000140F00002A09000000040000000E000000090000B0050000FD0E00002509000000050000000E00000009000084060000E60E00001F09000000060000000E00000009000057070000CF0E00001A09000000070000000E0000000900002B080000B70E00001409000000080000000E000000090000FF080000A00E00000E09000000090000000E000000090000D3090000890E000009090000000A0000000E000000090000A60A0000720E000003090000000B0000000E0000000900007A0B00005A0E0000FD080000000C0000000E0000000900004E0C0000430E0000F8080000000D0000000E000000090000220D00002C0E0000F2080000000E0000000E000000090000F50D0000150E0000ED080000000F0000000E000000090000C90E0000FD0D0000E708000000100000000E0000000900009D0F0000E60D0000E108000000000000000F0000000900008B020000FF0F00003E09000000010000000F0000000900005F030000FF0F00003809000000020000000F00000009000033040000FF0F00003309000000030000000F00000009000007050000FF0F00002D09000000040000000F000000090000DA050000FF0F00002709000000050000000F000000090000AE060000FF0F00002209000000060000000F00000009000082070000EB0F00001C09000000070000000F00000009000056080000D30F00001609000000080000000F0000000900002A090000BC0F00001109000000090000000F000000090000FD090000A40F00000B090000000A0000000F000000090000D10A00008D0F000006090000000B0000000F000000090000A50B0000750F000000090000000C0000000F000000090000790C00005D0F0000FA080000000D0000000F0000000900004D0D0000460F0000F5080000000E0000000F000000090000200E00002E0F0000EF080000000F0000000F000000090000F40E0000160F0000EA08000000100000000F000000090000C80F0000FF0E0000E4080000000000000010000000090000B5020000FF0F00004009000000010000001000000009000089030000FF0F00003B0900000002000000100000000900005D040000FF0F00003509000000030000001000000009000031050000FF0F00002F09000000040000001000000009000005060000FF0F00002A090000000500000010000000090000D9060000FF0F000024090000000600000010000000090000AC070000FF0F00001F09000000070000001000000009000080080000FF0F00001909000000080000001000000009000054090000FF0F000013090000000900000010000000090000280A0000FF0F00000E090000000A00000010000000090000FC0A0000FF0F000008090000000B00000010000000090000D00B0000FF0F000003090000000C00000010000000090000A40C0000FF0F0000FD080000000D00000010000000090000770D0000FF0F0000F7080000000E000000100000000900004B0E0000FF0F0000F2080000000F000000100000000900001F0F0000FF0F0000EC080000001000000010000000090000F30F0000FF0F0000E60800000000000000000000000A000014000000000000001B0A00000001000000000000000A0000E700000000000000160A00000002000000000000000A0000BB01000000000000100A00000003000000000000000A00008E020000000000000B0A00000004000000000000000A00006103000000000000050A00000005000000000000000A00003504000000000000000A00000006000000000000000A00000805000000000000FB0900000007000000000000000A0000DB05000000000000F50900000008000000000000000A0000AF06000000000000F00900000009000000000000000A00008207000000000000EA090000000A000000000000000A00005508000000000000E5090000000B000000000000000A00002909000000000000DF090000000C000000000000000A0000FC09000000000000DA090000000D000000000000000A0000CF0A000000000000D4090000000E000000000000000A0000A30B000000000000CF090000000F000000000000000A0000760C000000000000C90900000010000000000000000A0000490D000000000000C40900000000000000010000000A00003E000000C10000001E0A00000001000000010000000A000012010000AF000000190A00000002000000010000000A0000E50100009D000000130A00000003000000010000000A0000B80200008B0000000E0A00000004000000010000000A00008C03000079000000080A00000005000000010000000A00005F04000067000000030A00000006000000010000000A00003205000055000000FD0900000007000000010000000A00000606000043000000F80900000008000000010000000A0000D906000031000000F20900000009000000010000000A0000AD0700001F000000ED090000000A000000010000000A0000800800000D000000E7090000000B000000010000000A00005309000000000000E2090000000C000000010000000A0000270A000000000000DC090000000D000000010000000A0000FA0A000000000000D7090000000E000000010000000A0000CD0B000000000000D1090000000F000000010000000A0000A10C000000000000CC0900000010000000010000000A0000740D000000000000C60900000000000000020000000A000069000000E0010000210A00000001000000020000000A00003C010000CD0100001B0A00000002000000020000000A00000F020000BB010000160A00000003000000020000000A0000E3020000A9010000100A00000004000000020000000A0000B6030000960100000B0A00000005000000020000000A00008904000084010000050A00000006000000020000000A00005D05000072010000000A00000007000000020000000A0000300600005F010000FA0900000008000000020000000A0000040700004D010000F50900000009000000020000000A0000D70700003A010000EF090000000A000000020000000A0000AA08000028010000EA090000000B000000020000000A00007E09000016010000E4090000000C000000020000000A0000510A000003010000DF090000000D000000020000000A0000250B0000F1000000D9090000000E000000020000000A0000F80B0000DF000000D4090000000F000000020000000A0000CB0C0000CC000000CE0900000010000000020000000A00009F0D0000BA000000C90900000000000000030000000A000093000000FF020000230A00000001000000030000000A000066010000EC0200001E0A00000002000000030000000A00003A020000D9020000180A00000003000000030000000A00000D030000C6020000130A00000004000000030000000A0000E0030000B40200000D0A00000005000000030000000A0000B4040000A1020000080A00000006000000030000000A0000870500008E020000020A00000007000000030000000A00005B0600007B020000FD0900000008000000030000000A00002E07000069020000F70900000009000000030000000A00000208000056020000F2090000000A000000030000000A0000D508000043020000EC090000000B000000030000000A0000A809000030020000E7090000000C000000030000000A00007C0A00001E020000E1090000000D000000030000000A00004F0B00000B020000DB090000000E000000030000000A0000230C0000F8010000D6090000000F000000030000000A0000F60C0000E5010000D00900000010000000030000000A0000C90D0000D3010000CB0900000000000000040000000A0000BD0000001D040000260A00000001000000040000000A0000910100000A040000200A00000002000000040000000A000064020000F70300001B0A00000003000000040000000A000037030000E4030000150A00000004000000040000000A00000B040000D1030000100A00000005000000040000000A0000DE040000BE0300000A0A00000006000000040000000A0000B2050000AB030000050A00000007000000040000000A00008506000097030000FF0900000008000000040000000A00005907000084030000FA0900000009000000040000000A00002C08000071030000F4090000000A000000040000000A0000000900005E030000EF090000000B000000040000000A0000D30900004B030000E9090000000C000000040000000A0000A60A000038030000E3090000000D000000040000000A00007A0B000025030000DE090000000E000000040000000A00004D0C000012030000D8090000000F000000040000000A0000210D0000FE020000D30900000010000000040000000A0000F40D0000EB020000CD0900000000000000050000000A0000E70000003C050000290A00000001000000050000000A0000BB01000029050000230A00000002000000050000000A00008E020000150500001D0A00000003000000050000000A00006203000002050000180A00000004000000050000000A000035040000EE040000120A00000005000000050000000A000009050000DB0400000D0A00000006000000050000000A0000DC050000C7040000070A00000007000000050000000A0000B0060000B4040000020A00000008000000050000000A000083070000A0040000FC0900000009000000050000000A0000570800008D040000F7090000000A000000050000000A00002A09000079040000F1090000000B000000050000000A0000FE09000066040000EB090000000C000000050000000A0000D10A000052040000E6090000000D000000050000000A0000A40B00003F040000E0090000000E000000050000000A0000780C00002B040000DB090000000F000000050000000A00004B0D000018040000D50900000010000000050000000A00001F0E000004040000D00900000000000000060000000A0000120100005B0600002B0A00000001000000060000000A0000E501000047060000260A00000002000000060000000A0000B902000033060000200A00000003000000060000000A00008C0300001F0600001B0A00000004000000060000000A0000600400000B060000150A00000005000000060000000A000033050000F70500000F0A00000006000000060000000A000007060000E40500000A0A00000007000000060000000A0000DA060000D0050000040A00000008000000060000000A0000AE070000BC050000FF0900000009000000060000000A000081080000A8050000F9090000000A000000060000000A00005509000094050000F3090000000B000000060000000A0000280A000080050000EE090000000C000000060000000A0000FC0A00006C050000E8090000000D000000060000000A0000CF0B000058050000E3090000000E000000060000000A0000A30C000045050000DD090000000F000000060000000A0000760D000031050000D80900000010000000060000000A00004A0E00001D050000D20900000000000000070000000A00003C0100007A0700002E0A00000001000000070000000A00001002000065070000280A00000002000000070000000A0000E302000051070000230A00000003000000070000000A0000B70300003D0700001D0A00000004000000070000000A00008A04000029070000180A00000005000000070000000A00005E05000014070000120A00000006000000070000000A000031060000000700000C0A00000007000000070000000A000005070000EC060000070A00000008000000070000000A0000D8070000D8060000010A00000009000000070000000A0000AC080000C3060000FC090000000A000000070000000A00007F090000AF060000F6090000000B000000070000000A0000530A00009B060000F0090000000C000000070000000A0000260B000086060000EB090000000D000000070000000A0000FA0B000072060000E5090000000E000000070000000A0000CD0C00005E060000E0090000000F000000070000000A0000A10D00004A060000DA0900000010000000070000000A0000740E000035060000D40900000000000000080000000A00006601000098080000310A00000001000000080000000A00003A020000840800002B0A00000002000000080000000A00000D0300006F080000250A00000003000000080000000A0000E10300005B080000200A00000004000000080000000A0000B4040000460800001A0A00000005000000080000000A00008805000031080000140A00000006000000080000000A00005C0600001D0800000F0A00000007000000080000000A00002F07000008080000090A00000008000000080000000A000003080000F3070000040A00000009000000080000000A0000D6080000DF070000FE090000000A000000080000000A0000AA090000CA070000F8090000000B000000080000000A00007D0A0000B5070000F3090000000C000000080000000A0000510B0000A1070000ED090000000D000000080000000A0000240C00008C070000E8090000000E000000080000000A0000F80C000077070000E2090000000F000000080000000A0000CB0D000063070000DC0900000010000000080000000A00009F0E00004E070000D70900000000000000090000000A000091010000B7090000330A00000001000000090000000A000064020000A20900002E0A00000002000000090000000A0000380300008D090000280A00000003000000090000000A00000B04000078090000220A00000004000000090000000A0000DF040000630900001D0A00000005000000090000000A0000B20500004E090000170A00000006000000090000000A00008606000039090000110A00000007000000090000000A00005A070000240900000C0A00000008000000090000000A00002D0800000F090000060A00000009000000090000000A000001090000FA080000000A0000000A000000090000000A0000D4090000E5080000FB090000000B000000090000000A0000A80A0000D0080000F5090000000C000000090000000A00007B0B0000BB080000F0090000000D000000090000000A00004F0C0000A6080000EA090000000E000000090000000A0000220D000091080000E4090000000F000000090000000A0000F60D00007C080000DF0900000010000000090000000A0000CA0E000067080000D909000000000000000A0000000A0000BB010000D60A0000360A000000010000000A0000000A00008E020000C10A0000300A000000020000000A0000000A000062030000AB0A00002B0A000000030000000A0000000A000036040000960A0000250A000000040000000A0000000A000009050000800A00001F0A000000050000000A0000000A0000DD0500006B0A00001A0A000000060000000A0000000A0000B0060000560A0000140A000000070000000A0000000A000084070000400A00000E0A000000080000000A0000000A0000580800002B0A0000090A000000090000000A0000000A00002B090000150A0000030A0000000A0000000A0000000A0000FF090000FF090000FF090000000B0000000A0000000A0000D20A0000EB090000F8090000000C0000000A0000000A0000A60B0000D5090000F2090000000D0000000A0000000A0000790C0000C0090000EC090000000E0000000A0000000A00004D0D0000AA090000E7090000000F0000000A0000000A0000210E000095090000E109000000100000000A0000000A0000F40E000080090000DB09000000000000000B0000000A0000E5010000F50B0000390A000000010000000B0000000A0000B9020000DF0B0000330A000000020000000B0000000A00008C030000C90B00002D0A000000030000000B0000000A000060040000B30B0000280A000000040000000B0000000A0000340500009E0B0000220A000000050000000B0000000A000007060000880B00001C0A000000060000000B0000000A0000DB060000720B0000160A000000070000000B0000000A0000AE0700005C0B0000110A000000080000000B0000000A000082080000470B00000B0A000000090000000B0000000A000056090000310B0000050A0000000A0000000B0000000A0000290A00001B0B0000000A0000000B0000000B0000000A0000FD0A0000050B0000FA090000000C0000000B0000000A0000D00B0000EF0A0000F4090000000D0000000B0000000A0000A40C0000DA0A0000EF090000000E0000000B0000000A0000780D0000C40A0000E9090000000F0000000B0000000A00004B0E0000AE0A0000E309000000100000000B0000000A00001F0F0000980A0000DE09000000000000000C0000000A000010020000140D00003B0A000000010000000C0000000A0000E3020000FD0C0000350A000000020000000C0000000A0000B7030000E70C0000300A000000030000000C0000000A00008A040000D10C00002A0A000000040000000C0000000A00005E050000BB0C0000240A000000050000000C0000000A000032060000A50C00001F0A000000060000000C0000000A0000050700008F0C0000190A000000070000000C0000000A0000D9070000780C0000130A000000080000000C0000000A0000AD080000620C00000E0A000000090000000C0000000A0000800900004C0C0000080A0000000A0000000C0000000A0000540A0000360C0000020A0000000B0000000C0000000A0000270B0000200C0000FD090000000C0000000C0000000A0000FB0B00000A0C0000F7090000000D0000000C0000000A0000CF0C0000F30B0000F1090000000E0000000C0000000A0000A20D0000DD0B0000EB090000000F0000000C0000000A0000760E0000C70B0000E609000000100000000C0000000A00004A0F0000B10B0000E009000000000000000D0000000A00003A020000320E00003E0A000000010000000D0000000A00000D0300001C0E0000380A000000020000000D0000000A0000E1030000050E0000320A000000030000000D0000000A0000B5040000EF0D00002D0A000000040000000D0000000A000088050000D80D0000270A000000050000000D0000000A00005C060000C20D0000210A000000060000000D0000000A000030070000AB0D00001C0A000000070000000D0000000A000003080000950D0000160A000000080000000D0000000A0000D70800007E0D0000100A000000090000000D0000000A0000AB090000670D00000A0A0000000A0000000D0000000A00007E0A0000510D0000050A0000000B0000000D0000000A0000520B00003A0D0000FF090000000C0000000D0000000A0000260C0000240D0000F9090000000D0000000D0000000A0000F90C00000D0D0000F4090000000E0000000D0000000A0000CD0D0000F70C0000EE090000000F0000000D0000000A0000A10E0000E00C0000E809000000100000000D0000000A0000740F0000CA0C0000E209000000000000000E0000000A000064020000510F0000400A000000010000000E0000000A0000380300003A0F00003B0A000000020000000E0000000A00000B040000230F0000350A000000030000000E0000000A0000DF0400000C0F00002F0A000000040000000E0000000A0000B3050000F60E00002A0A000000050000000E0000000A000086060000DF0E0000240A000000060000000E0000000A00005A070000C80E00001E0A000000070000000E0000000A00002E080000B10E0000180A000000080000000E0000000A0000020900009A0E0000130A000000090000000E0000000A0000D5090000830E00000D0A0000000A0000000E0000000A0000A90A00006C0E0000070A0000000B0000000E0000000A00007D0B0000550E0000010A0000000C0000000E0000000A0000500C00003E0E0000FC090000000D0000000E0000000A0000240D0000270E0000F6090000000E0000000E0000000A0000F80D0000100E0000F0090000000F0000000E0000000A0000CB0E0000F90D0000EB09000000100000000E0000000A00009F0F0000E20D0000E509000000000000000F0000000A00008E020000FF0F0000430A000000010000000F0000000A000062030000FF0F00003D0A000000020000000F0000000A000036040000FF0F0000380A000000030000000F0000000A00000A050000FF0F0000320A000000040000000F0000000A0000DD050000FF0F00002C0A000000050000000F0000000A0000B1060000FB0F0000260A000000060000000F0000000A000085070000E40F0000210A000000070000000F0000000A000058080000CD0F00001B0A000000080000000F0000000A00002C090000B60F0000150A000000090000000F0000000A0000000A00009E0F00000F0A0000000A0000000F0000000A0000D30A0000870F00000A0A0000000B0000000F0000000A0000A70B0000700F0000040A0000000C0000000F0000000A00007B0C0000580F0000FE090000000D0000000F0000000A00004E0D0000410F0000F8090000000E0000000F0000000A0000220E00002A0F0000F3090000000F0000000F0000000A0000F60E0000120F0000ED09000000100000000F0000000A0000CA0F0000FB0E0000E70900000000000000100000000A0000B9020000FF0F0000460A00000001000000100000000A00008C030000FF0F0000400A00000002000000100000000A000060040000FF0F00003A0A00000003000000100000000A000034050000FF0F0000340A00000004000000100000000A000008060000FF0F00002F0A00000005000000100000000A0000DB060000FF0F0000290A00000006000000100000000A0000AF070000FF0F0000230A00000007000000100000000A000083080000FF0F00001D0A00000008000000100000000A000056090000FF0F0000180A00000009000000100000000A00002A0A0000FF0F0000120A0000000A000000100000000A0000FE0A0000FF0F00000C0A0000000B000000100000000A0000D20B0000FF0F0000060A0000000C000000100000000A0000A50C0000FF0F0000010A0000000D000000100000000A0000790D0000FF0F0000FB090000000E000000100000000A00004D0E0000FF0F0000F5090000000F000000100000000A0000210F0000FF0F0000EF0900000010000000100000000A0000F40F0000FF0F0000E90900000000000000000000000B000016000000000000001E0B00000001000000000000000B0000EA00000000000000190B00000002000000000000000B0000BD01000000000000140B00000003000000000000000B000091020000000000000E0B00000004000000000000000B00006503000000000000090B00000005000000000000000B00003804000000000000040B00000006000000000000000B00000C05000000000000FE0A00000007000000000000000B0000DF05000000000000F90A00000008000000000000000B0000B306000000000000F40A00000009000000000000000B00008707000000000000EF0A0000000A000000000000000B00005A08000000000000E90A0000000B000000000000000B00002E09000000000000E40A0000000C000000000000000B0000020A000000000000DF0A0000000D000000000000000B0000D50A000000000000D90A0000000E000000000000000B0000A90B000000000000D40A0000000F000000000000000B00007D0C000000000000CF0A00000010000000000000000B0000500D000000000000C90A00000000000000010000000B000040000000B8000000210B00000001000000010000000B000014010000A60000001C0B00000002000000010000000B0000E801000095000000160B00000003000000010000000B0000BB02000083000000110B00000004000000010000000B00008F030000710000000C0B00000005000000010000000B00006304000060000000060B00000006000000010000000B0000360500004E000000010B00000007000000010000000B00000A0600003C000000FC0A00000008000000010000000B0000DD0600002B000000F60A00000009000000010000000B0000B107000019000000F10A0000000A000000010000000B00008508000008000000EC0A0000000B000000010000000B00005809000000000000E60A0000000C000000010000000B00002C0A000000000000E10A0000000D000000010000000B0000000B000000000000DC0A0000000E000000010000000B0000D30B000000000000D60A0000000F000000010000000B0000A70C000000000000D10A00000010000000010000000B00007B0D000000000000CC0A00000000000000020000000B00006B000000D7010000240B00000001000000020000000B00003E010000C50100001F0B00000002000000020000000B000012020000B3010000190B00000003000000020000000B0000E6020000A1010000140B00000004000000020000000B0000B90300008F0100000E0B00000005000000020000000B00008D0400007D010000090B00000006000000020000000B0000610500006B010000040B00000007000000020000000B00003406000059010000FE0A00000008000000020000000B00000807000047010000F90A00000009000000020000000B0000DB07000035010000F30A0000000A000000020000000B0000AF08000023010000EE0A0000000B000000020000000B00008309000010010000E90A0000000C000000020000000B0000560A0000FE000000E30A0000000D000000020000000B00002A0B0000EC000000DE0A0000000E000000020000000B0000FE0B0000DA000000D90A0000000F000000020000000B0000D10C0000C8000000D30A00000010000000020000000B0000A50D0000B6000000CE0A00000000000000030000000B000095000000F6020000270B00000001000000030000000B000069010000E3020000210B00000002000000030000000B00003C020000D10200001C0B00000003000000030000000B000010030000BE020000160B00000004000000030000000B0000E4030000AC020000110B00000005000000030000000B0000B70400009A0200000C0B00000006000000030000000B00008B05000087020000060B00000007000000030000000B00005F06000075020000010B00000008000000030000000B00003207000062020000FB0A00000009000000030000000B00000608000050020000F60A0000000A000000030000000B0000D90800003D020000F10A0000000B000000030000000B0000AD0900002B020000EB0A0000000C000000030000000B0000810A000019020000E60A0000000D000000030000000B0000540B000006020000E00A0000000E000000030000000B0000280C0000F4010000DB0A0000000F000000030000000B0000FC0C0000E1010000D50A00000010000000030000000B0000CF0D0000CF010000D00A00000000000000040000000B0000BF000000140400002A0B00000001000000040000000B00009301000002040000240B00000002000000040000000B000067020000EF0300001F0B00000003000000040000000B00003A030000DC030000190B00000004000000040000000B00000E040000C9030000140B00000005000000040000000B0000E2040000B60300000E0B00000006000000040000000B0000B5050000A4030000090B00000007000000040000000B00008906000091030000030B00000008000000040000000B00005D0700007E030000FE0A00000009000000040000000B0000300800006B030000F80A0000000A000000040000000B00000409000058030000F30A0000000B000000040000000B0000D709000046030000EE0A0000000C000000040000000B0000AB0A000033030000E80A0000000D000000040000000B00007F0B000020030000E30A0000000E000000040000000B0000520C00000D030000DD0A0000000F000000040000000B0000260D0000FA020000D80A00000010000000040000000B0000FA0D0000E8020000D20A00000000000000050000000B0000EA000000330500002C0B00000001000000050000000B0000BD01000020050000270B00000002000000050000000B0000910200000D050000210B00000003000000050000000B000065030000FA0400001C0B00000004000000050000000B000038040000E7040000160B00000005000000050000000B00000C050000D3040000110B00000006000000050000000B0000E0050000C00400000B0B00000007000000050000000B0000B3060000AD040000060B00000008000000050000000B0000870700009A040000000B00000009000000050000000B00005B08000087040000FB0A0000000A000000050000000B00002E09000073040000F50A0000000B000000050000000B0000020A000060040000F00A0000000C000000050000000B0000D50A00004D040000EA0A0000000D000000050000000B0000A90B00003A040000E50A0000000E000000050000000B00007D0C000027040000DF0A0000000F000000050000000B0000500D000014040000DA0A00000010000000050000000B0000240E000000040000D40A00000000000000060000000B000014010000520600002F0B00000001000000060000000B0000E80100003E0600002A0B00000002000000060000000B0000BB0200002B060000240B00000003000000060000000B00008F030000170600001F0B00000004000000060000000B00006304000004060000190B00000005000000060000000B000036050000F0050000130B00000006000000060000000B00000A060000DD0500000E0B00000007000000060000000B0000DE060000C9050000080B00000008000000060000000B0000B1070000B6050000030B00000009000000060000000B000085080000A2050000FD0A0000000A000000060000000B0000580900008E050000F80A0000000B000000060000000B00002C0A00007B050000F20A0000000C000000060000000B0000000B000067050000ED0A0000000D000000060000000B0000D30B000054050000E70A0000000E000000060000000B0000A70C000040050000E20A0000000F000000060000000B00007B0D00002D050000DC0A00000010000000060000000B00004E0E000019050000D70A00000000000000070000000B00003F01000071070000320B00000001000000070000000B0000120200005D0700002C0B00000002000000070000000B0000E602000049070000270B00000003000000070000000B0000B903000035070000210B00000004000000070000000B00008D040000210700001C0B00000005000000070000000B0000610500000D070000160B00000006000000070000000B000034060000F9060000110B00000007000000070000000B000008070000E50600000B0B00000008000000070000000B0000DC070000D1060000050B00000009000000070000000B0000AF080000BD060000000B0000000A000000070000000B000083090000A9060000FA0A0000000B000000070000000B0000560A000095060000F50A0000000C000000070000000B00002A0B000081060000EF0A0000000D000000070000000B0000FE0B00006E060000EA0A0000000E000000070000000B0000D10C00005A060000E40A0000000F000000070000000B0000A50D000046060000DE0A00000010000000070000000B0000790E000032060000D90A00000000000000080000000B00006901000090080000350B00000001000000080000000B00003D0200007B0800002F0B00000002000000080000000B000010030000670800002A0B00000003000000080000000B0000E403000053080000240B00000004000000080000000B0000B70400003E0800001E0B00000005000000080000000B00008B0500002A080000190B00000006000000080000000B00005F06000016080000130B00000007000000080000000B000032070000010800000D0B00000008000000080000000B000006080000ED070000080B00000009000000080000000B0000DA080000D9070000020B0000000A000000080000000B0000AD090000C4070000FD0A0000000B000000080000000B0000810A0000B0070000F70A0000000C000000080000000B0000540B00009C070000F10A0000000D000000080000000B0000280C000087070000EC0A0000000E000000080000000B0000FC0C000073070000E60A0000000F000000080000000B0000CF0D00005F070000E10A00000010000000080000000B0000A30E00004A070000DB0A00000000000000090000000B000093010000AE090000380B00000001000000090000000B0000670200009A090000320B00000002000000090000000B00003B030000850900002C0B00000003000000090000000B00000E04000070090000270B00000004000000090000000B0000E20400005C090000210B00000005000000090000000B0000B5050000470900001B0B00000006000000090000000B00008906000032090000160B00000007000000090000000B00005D0700001D090000100B00000008000000090000000B000030080000090900000A0B00000009000000090000000B000004090000F4080000050B0000000A000000090000000B0000D8090000DF080000FF0A0000000B000000090000000B0000AB0A0000CB080000F90A0000000C000000090000000B00007F0B0000B6080000F40A0000000D000000090000000B0000520C0000A1080000EE0A0000000E000000090000000B0000260D00008C080000E80A0000000F000000090000000B0000FA0D000078080000E30A00000010000000090000000B0000CD0E000063080000DD0A000000000000000A0000000B0000BE010000CD0A00003A0B000000010000000A0000000B000091020000B80A0000350B000000020000000A0000000B000065030000A30A00002F0B000000030000000A0000000B0000390400008E0A0000290B000000040000000A0000000B00000C050000790A0000240B000000050000000A0000000B0000E0050000640A00001E0B000000060000000A0000000B0000B30600004F0A0000180B000000070000000A0000000B0000870700003A0A0000130B000000080000000A0000000B00005B080000250A00000D0B000000090000000A0000000B00002E0900000F0A0000070B0000000A0000000A0000000B0000020A0000FA090000020B0000000B0000000A0000000B0000D50A0000E5090000FC0A0000000C0000000A0000000B0000A90B0000D0090000F60A0000000D0000000A0000000B00007D0C0000BB090000F00A0000000E0000000A0000000B0000500D0000A6090000EB0A0000000F0000000A0000000B0000240E000091090000E50A000000100000000A0000000B0000F80E00007C090000DF0A000000000000000B0000000B0000E8010000EC0B00003D0B000000010000000B0000000B0000BC020000D70B0000370B000000020000000B0000000B00008F030000C10B0000320B000000030000000B0000000B000063040000AC0B00002C0B000000040000000B0000000B000037050000960B0000260B000000050000000B0000000B00000A060000810B0000210B000000060000000B0000000B0000DE0600006B0B00001B0B000000070000000B0000000B0000B1070000560B0000150B000000080000000B0000000B000085080000400B00000F0B000000090000000B0000000B0000590900002B0B00000A0B0000000A0000000B0000000B00002C0A0000150B0000040B0000000B0000000B0000000B0000FF0A0000FF0A0000FF0A0000000C0000000B0000000B0000D30B0000EA0A0000F80A0000000D0000000B0000000B0000A70C0000D50A0000F30A0000000E0000000B0000000B00007B0D0000BF0A0000ED0A0000000F0000000B0000000B00004E0E0000AA0A0000E70A000000100000000B0000000B0000220F0000940A0000E20A000000000000000C0000000B0000130200000B0D0000400B000000010000000C0000000B0000E6020000F50C00003A0B000000020000000C0000000B0000BA030000DF0C0000340B000000030000000C0000000B00008D040000C90C00002F0B000000040000000C0000000B000061050000B30C0000290B000000050000000C0000000B0000350600009E0C0000230B000000060000000C0000000B000008070000880C00001D0B000000070000000C0000000B0000DC070000720C0000180B000000080000000C0000000B0000AF0800005C0C0000120B000000090000000C0000000B000083090000460C00000C0B0000000A0000000C0000000B0000570A0000300C0000060B0000000B0000000C0000000B00002A0B00001A0C0000010B0000000C0000000C0000000B0000FE0B0000050C0000FB0A0000000D0000000C0000000B0000D10C0000EF0B0000F50A0000000E0000000C0000000B0000A50D0000D90B0000EF0A0000000F0000000C0000000B0000790E0000C30B0000EA0A000000100000000C0000000B00004C0F0000AD0B0000E40A000000000000000D0000000B00003D0200002A0E0000430B000000010000000D0000000B000010030000130E00003D0B000000020000000D0000000B0000E4030000FD0D0000370B000000030000000D0000000B0000B8040000E70D0000310B000000040000000D0000000B00008B050000D10D00002C0B000000050000000D0000000B00005F060000BA0D0000260B000000060000000D0000000B000033070000A40D0000200B000000070000000D0000000B0000060800008E0D00001A0B000000080000000D0000000B0000DA080000780D0000140B000000090000000D0000000B0000AD090000610D00000F0B0000000A0000000D0000000B0000810A00004B0D0000090B0000000B0000000D0000000B0000550B0000350D0000030B0000000C0000000D0000000B0000280C00001F0D0000FD0A0000000D0000000D0000000B0000FC0C0000080D0000F70A0000000E0000000D0000000B0000CF0D0000F20C0000F20A0000000F0000000D0000000B0000A30E0000DC0C0000EC0A000000100000000D0000000B0000770F0000C60C0000E60A000000000000000E0000000B000067020000490F0000460B000000010000000E0000000B00003B030000320F0000400B000000020000000E0000000B00000E0400001B0F00003A0B000000030000000E0000000B0000E2040000050F0000340B000000040000000E0000000B0000B6050000EE0E00002E0B000000050000000E0000000B000089060000D70E0000280B000000060000000E0000000B00005D070000C10E0000230B000000070000000E0000000B000030080000AA0E00001D0B000000080000000E0000000B000004090000930E0000170B000000090000000E0000000B0000D80900007D0E0000110B0000000A0000000E0000000B0000AB0A0000660E00000B0B0000000B0000000E0000000B00007F0B0000500E0000050B0000000C0000000E0000000B0000520C0000390E0000000B0000000D0000000E0000000B0000260D0000220E0000FA0A0000000E0000000E0000000B0000FA0D00000C0E0000F40A0000000F0000000E0000000B0000CD0E0000F50D0000EE0A000000100000000E0000000B0000A10F0000DE0D0000E80A000000000000000F0000000B000092020000FF0F0000480B000000010000000F0000000B000065030000FF0F0000430B000000020000000F0000000B000039040000FF0F00003D0B000000030000000F0000000B00000C050000FF0F0000370B000000040000000F0000000B0000E0050000FF0F0000310B000000050000000F0000000B0000B4060000F40F00002B0B000000060000000F0000000B000087070000DD0F0000250B000000070000000F0000000B00005B080000C60F00001F0B000000080000000F0000000B00002E090000AF0F0000190B000000090000000F0000000B0000020A0000980F0000140B0000000A0000000F0000000B0000D60A0000810F00000E0B0000000B0000000F0000000B0000A90B00006A0F0000080B0000000C0000000F0000000B00007D0C0000530F0000020B0000000D0000000F0000000B0000500D00003C0F0000FC0A0000000E0000000F0000000B0000240E0000250F0000F60A0000000F0000000F0000000B0000F80E00000E0F0000F00A000000100000000F0000000B0000CB0F0000F70E0000EA0A00000000000000100000000B0000BC020000FF0F00004B0B00000001000000100000000B000090030000FF0F0000450B00000002000000100000000B000063040000FF0F00003F0B00000003000000100000000B000037050000FF0F0000390B00000004000000100000000B00000A060000FF0F0000340B00000005000000100000000B0000DE060000FF0F00002E0B00000006000000100000000B0000B2070000FF0F0000280B00000007000000100000000B000085080000FF0F0000220B00000008000000100000000B000059090000FF0F00001C0B00000009000000100000000B00002C0A0000FF0F0000160B0000000A000000100000000B0000000B0000FF0F0000100B0000000B000000100000000B0000D40B0000FF0F00000A0B0000000C000000100000000B0000A70C0000FF0F0000040B0000000D000000100000000B00007B0D0000FF0F0000FE0A0000000E000000100000000B00004E0E0000FF0F0000F80A0000000F000000100000000B0000220F0000FF0F0000F20A00000010000000100000000B0000F60F0000FF0F0000ED0A00000000000000000000000C00001800000000000000210C00000001000000000000000C0000EC000000000000001C0C00000002000000000000000C0000C001000000000000170C00000003000000000000000C00009402000000000000120C00000004000000000000000C000068030000000000000D0C00000005000000000000000C00003C04000000000000080C00000006000000000000000C00001005000000000000020C00000007000000000000000C0000E405000000000000FD0B00000008000000000000000C0000B706000000000000F80B00000009000000000000000C00008B07000000000000F30B0000000A000000000000000C00005F08000000000000EE0B0000000B000000000000000C00003309000000000000E90B0000000C000000000000000C0000070A000000000000E40B0000000D000000000000000C0000DB0A000000000000DE0B0000000E000000000000000C0000AF0B000000000000D90B0000000F000000000000000C0000830C000000000000D40B00000010000000000000000C0000570D000000000000CF0B00000000000000010000000C000042000000AF000000240C00000001000000010000000C0000160100009E0000001F0C00000002000000010000000C0000EA0100008C0000001A0C00000003000000010000000C0000BE0200007B000000150C00000004000000010000000C0000920300006A0000000F0C00000005000000010000000C000066040000580000000A0C00000006000000010000000C00003A05000047000000050C00000007000000010000000C00000E06000036000000000C00000008000000010000000C0000E206000025000000FB0B00000009000000010000000C0000B607000013000000F50B0000000A000000010000000C00008A08000002000000F00B0000000B000000010000000C00005D09000000000000EB0B0000000C000000010000000C0000310A000000000000E60B0000000D000000010000000C0000050B000000000000E10B0000000E000000010000000C0000D90B000000000000DB0B0000000F000000010000000C0000AD0C000000000000D60B00000010000000010000000C0000810D000000000000D10B00000000000000020000000C00006D000000CE010000270C00000001000000020000000C000041010000BC010000220C00000002000000020000000C000015020000AA0100001D0C00000003000000020000000C0000E902000099010000170C00000004000000020000000C0000BC03000087010000120C00000005000000020000000C000090040000750100000D0C00000006000000020000000C00006405000064010000080C00000007000000020000000C00003806000052010000020C00000008000000020000000C00000C07000040010000FD0B00000009000000020000000C0000E00700002F010000F80B0000000A000000020000000C0000B40800001D010000F30B0000000B000000020000000C0000880900000B010000ED0B0000000C000000020000000C00005B0A0000F9000000E80B0000000D000000020000000C00002F0B0000E8000000E30B0000000E000000020000000C0000030C0000D6000000DE0B0000000F000000020000000C0000D70C0000C4000000D80B00000010000000020000000C0000AB0D0000B3000000D30B00000000000000030000000C000097000000ED0200002A0C00000001000000030000000C00006B010000DB020000250C00000002000000030000000C00003F020000C9020000200C00000003000000030000000C000013030000B60200001A0C00000004000000030000000C0000E7030000A4020000150C00000005000000030000000C0000BB04000092020000100C00000006000000030000000C00008E050000800200000A0C00000007000000030000000C0000620600006E020000050C00000008000000030000000C0000360700005C020000000C00000009000000030000000C00000A0800004A020000FA0B0000000A000000030000000C0000DE08000038020000F50B0000000B000000030000000C0000B209000026020000F00B0000000C000000030000000C0000860A000014020000EA0B0000000D000000030000000C0000590B000002020000E50B0000000E000000030000000C00002D0C0000EF010000E00B0000000F000000030000000C0000010D0000DD010000DA0B00000010000000030000000C0000D50D0000CB010000D50B00000000000000040000000C0000C20000000C0400002D0C00000001000000040000000C000096010000F9030000280C00000002000000040000000C000069020000E7030000220C00000003000000040000000C00003D030000D40300001D0C00000004000000040000000C000011040000C2030000180C00000005000000040000000C0000E5040000AF030000120C00000006000000040000000C0000B90500009D0300000D0C00000007000000040000000C00008D0600008A030000080C00000008000000040000000C00006007000078030000020C00000009000000040000000C00003408000065030000FD0B0000000A000000040000000C00000809000053030000F70B0000000B000000040000000C0000DC09000040030000F20B0000000C000000040000000C0000B00A00002E030000ED0B0000000D000000040000000C0000840B00001B030000E70B0000000E000000040000000C0000570C000009030000E20B0000000F000000040000000C00002B0D0000F6020000DD0B00000010000000040000000C0000FF0D0000E4020000D70B00000000000000050000000C0000EC0000002A050000300C00000001000000050000000C0000C0010000180500002B0C00000002000000050000000C00009402000005050000250C00000003000000050000000C000068030000F2040000200C00000004000000050000000C00003B040000DF0400001A0C00000005000000050000000C00000F050000CC040000150C00000006000000050000000C0000E3050000B9040000100C00000007000000050000000C0000B7060000A60400000A0C00000008000000050000000C00008B07000094040000050C00000009000000050000000C00005E08000081040000FF0B0000000A000000050000000C0000320900006E040000FA0B0000000B000000050000000C0000060A00005B040000F40B0000000C000000050000000C0000DA0A000048040000EF0B0000000D000000050000000C0000AE0B000035040000EA0B0000000E000000050000000C0000810C000022040000E40B0000000F000000050000000C0000550D00000F040000DF0B00000010000000050000000C0000290E0000FD030000D90B00000000000000060000000C00001701000049060000330C00000001000000060000000C0000EB010000360600002E0C00000002000000060000000C0000BE02000023060000280C00000003000000060000000C0000920300000F060000230C00000004000000060000000C000066040000FC0500001D0C00000005000000060000000C00003A050000E9050000180C00000006000000060000000C00000D060000D6050000120C00000007000000060000000C0000E1060000C20500000D0C00000008000000060000000C0000B5070000AF050000070C00000009000000060000000C0000890800009C050000020C0000000A000000060000000C00005C09000089050000FC0B0000000B000000060000000C0000300A000076050000F70B0000000C000000060000000C0000040B000062050000F10B0000000D000000060000000C0000D80B00004F050000EC0B0000000E000000060000000C0000AB0C00003C050000E60B0000000F000000060000000C00007F0D000029050000E10B00000010000000060000000C0000530E000015050000DB0B00000000000000070000000C00004101000068070000360C00000001000000070000000C00001502000054070000300C00000002000000070000000C0000E9020000410700002B0C00000003000000070000000C0000BC0300002D070000250C00000004000000070000000C0000900400001A070000200C00000005000000070000000C000064050000060700001A0C00000006000000070000000C000038060000F2060000150C00000007000000070000000C00000B070000DF0600000F0C00000008000000070000000C0000DF070000CB0600000A0C00000009000000070000000C0000B3080000B7060000040C0000000A000000070000000C000087090000A4060000FF0B0000000B000000070000000C00005A0A000090060000F90B0000000C000000070000000C00002E0B00007C060000F30B0000000D000000070000000C0000020C000069060000EE0B0000000E000000070000000C0000D50C000055060000E80B0000000F000000070000000C0000A90D000042060000E30B00000010000000070000000C00007D0E00002E060000DD0B00000000000000080000000C00006C01000087080000390C00000001000000080000000C00003F02000073080000330C00000002000000080000000C0000130300005F0800002E0C00000003000000080000000C0000E70300004B080000280C00000004000000080000000C0000BA04000037080000230C00000005000000080000000C00008E050000230800001D0C00000006000000080000000C0000620600000F080000170C00000007000000080000000C000036070000FB070000120C00000008000000080000000C000009080000E70700000C0C00000009000000080000000C0000DD080000D3070000070C0000000A000000080000000C0000B1090000BF070000010C0000000B000000080000000C0000840A0000AB070000FB0B0000000C000000080000000C0000580B000097070000F60B0000000D000000080000000C00002C0C000083070000F00B0000000E000000080000000C0000000D00006F070000EB0B0000000F000000080000000C0000D30D00005B070000E50B00000010000000080000000C0000A70E000047070000DF0B00000000000000090000000C000096010000A60900003C0C00000001000000090000000C00006A02000091090000360C00000002000000090000000C00003D0300007D090000310C00000003000000090000000C000011040000680900002B0C00000004000000090000000C0000E504000054090000250C00000005000000090000000C0000B805000040090000200C00000006000000090000000C00008C0600002B0900001A0C00000007000000090000000C00006007000017090000140C00000008000000090000000C000034080000020900000F0C00000009000000090000000C000007090000EE080000090C0000000A000000090000000C0000DB090000DA080000030C0000000B000000090000000C0000AF0A0000C5080000FE0B0000000C000000090000000C0000820B0000B1080000F80B0000000D000000090000000C0000560C00009C080000F20B0000000E000000090000000C00002A0D000088080000ED0B0000000F000000090000000C0000FD0D000074080000E70B00000010000000090000000C0000D10E00005F080000E10B000000000000000A0000000C0000C1010000C50A00003F0C000000010000000A0000000C000094020000B00A0000390C000000020000000A0000000C0000680300009B0A0000330C000000030000000A0000000C00003C040000860A00002E0C000000040000000A0000000C00000F050000710A0000280C000000050000000A0000000C0000E30500005D0A0000220C000000060000000A0000000C0000B6060000480A00001D0C000000070000000A0000000C00008A070000330A0000170C000000080000000A0000000C00005E0800001E0A0000110C000000090000000A0000000C000031090000090A00000B0C0000000A0000000A0000000C0000050A0000F5090000060C0000000B0000000A0000000C0000D90A0000E0090000000C0000000C0000000A0000000C0000AC0B0000CB090000FA0B0000000D0000000A0000000C0000800C0000B6090000F50B0000000E0000000A0000000C0000540D0000A1090000EF0B0000000F0000000A0000000C0000270E00008D090000E90B000000100000000A0000000C0000FB0E000078090000E30B000000000000000B0000000C0000EB010000E30B0000420C000000010000000B0000000C0000BF020000CE0B00003C0C000000020000000B0000000C000092030000B90B0000360C000000030000000B0000000C000066040000A40B0000310C000000040000000B0000000C00003A0500008F0B00002B0C000000050000000B0000000C00000D060000790B0000250C000000060000000B0000000C0000E1060000640B00001F0C000000070000000B0000000C0000B40700004F0B0000190C000000080000000B0000000C0000880800003A0B0000140C000000090000000B0000000C00005C090000250B00000E0C0000000A0000000B0000000C00002F0A0000100B0000080C0000000B0000000B0000000C0000030B0000FA0A0000020C0000000C0000000B0000000C0000D60B0000E50A0000FD0B0000000D0000000B0000000C0000AA0C0000D00A0000F70B0000000E0000000B0000000C00007E0D0000BB0A0000F10B0000000F0000000B0000000C0000510E0000A60A0000EB0B000000100000000B0000000C0000250F0000910A0000E50B000000000000000C0000000C000016020000020D0000450C000000010000000C0000000C0000E9020000ED0C00003F0C000000020000000C0000000C0000BD030000D70C0000390C000000030000000C0000000C000090040000C20C0000330C000000040000000C0000000C000064050000AC0C00002D0C000000050000000C0000000C000037060000960C0000280C000000060000000C0000000C00000B070000810C0000220C000000070000000C0000000C0000DF0700006B0C00001C0C000000080000000C0000000C0000B2080000560C0000160C000000090000000C0000000C000086090000400C0000100C0000000A0000000C0000000C0000590A00002B0C00000A0C0000000B0000000C0000000C00002D0B0000150C0000050C0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B0000000D0000000C0000000C0000D40C0000EA0B0000F90B0000000E0000000C0000000C0000A80D0000D40B0000F30B0000000F0000000C0000000C00007B0E0000BF0B0000ED0B000000100000000C0000000C00004F0F0000A90B0000E70B000000000000000D0000000C000040020000210E0000480C000000010000000D0000000C0000140300000B0E0000420C000000020000000D0000000C0000E7030000F50D00003C0C000000030000000D0000000C0000BB040000DF0D0000360C000000040000000D0000000C00008E050000C90D0000300C000000050000000D0000000C000062060000B30D00002A0C000000060000000D0000000C0000350700009D0D0000240C000000070000000D0000000C000009080000870D00001F0C000000080000000D0000000C0000DC080000710D0000190C000000090000000D0000000C0000B00900005C0D0000130C0000000A0000000D0000000C0000840A0000460D00000D0C0000000B0000000D0000000C0000570B0000300D0000070C0000000C0000000D0000000C00002B0C00001A0D0000010C0000000D0000000D0000000C0000FE0C0000040D0000FB0B0000000E0000000D0000000C0000D20D0000EE0C0000F50B0000000F0000000D0000000C0000A50E0000D80C0000EF0B000000100000000D0000000C0000790F0000C20C0000EA0B000000000000000E0000000C00006A020000400F00004B0C000000010000000E0000000C00003E0300002A0F0000450C000000020000000E0000000C000011040000130F00003F0C000000030000000E0000000C0000E5040000FD0E0000390C000000040000000E0000000C0000B9050000E70E0000330C000000050000000E0000000C00008C060000D00E00002D0C000000060000000E0000000C000060070000BA0E0000270C000000070000000E0000000C000033080000A40E0000210C000000080000000E0000000C0000070900008D0E00001B0C000000090000000E0000000C0000DA090000770E0000150C0000000A0000000E0000000C0000AE0A0000610E00000F0C0000000B0000000E0000000C0000810B00004A0E0000090C0000000C0000000E0000000C0000550C0000340E0000030C0000000D0000000E0000000C0000280D00001E0E0000FD0B0000000E0000000E0000000C0000FC0D0000070E0000F70B0000000F0000000E0000000C0000CF0E0000F10D0000F10B000000100000000E0000000C0000A30F0000DB0D0000EC0B000000000000000F0000000C000095020000FF0F00004E0C000000010000000F0000000C000068030000FF0F0000480C000000020000000F0000000C00003C040000FF0F0000420C000000030000000F0000000C00000F050000FF0F00003C0C000000040000000F0000000C0000E3050000FF0F0000360C000000050000000F0000000C0000B6060000ED0F0000300C000000060000000F0000000C00008A070000D60F00002A0C000000070000000F0000000C00005D080000C00F0000240C000000080000000F0000000C000031090000A90F00001E0C000000090000000F0000000C0000040A0000920F0000180C0000000A0000000F0000000C0000D80A00007C0F0000120C0000000B0000000F0000000C0000AB0B0000650F00000C0C0000000C0000000F0000000C00007F0C00004E0F0000060C0000000D0000000F0000000C0000520D0000370F0000000C0000000E0000000F0000000C0000260E0000210F0000FA0B0000000F0000000F0000000C0000F90E00000A0F0000F40B000000100000000F0000000C0000CD0F0000F30E0000EE0B00000000000000100000000C0000BF020000FF0F0000510C00000001000000100000000C000093030000FF0F00004B0C00000002000000100000000C000066040000FF0F0000450C00000003000000100000000C00003A050000FF0F00003E0C00000004000000100000000C00000D060000FF0F0000380C00000005000000100000000C0000E1060000FF0F0000320C00000006000000100000000C0000B4070000FF0F00002C0C00000007000000100000000C000088080000FF0F0000260C00000008000000100000000C00005B090000FF0F0000200C00000009000000100000000C00002F0A0000FF0F00001A0C0000000A000000100000000C0000020B0000FF0F0000140C0000000B000000100000000C0000D50B0000FF0F00000E0C0000000C000000100000000C0000A90C0000FF0F0000080C0000000D000000100000000C00007C0D0000FF0F0000020C0000000E000000100000000C0000500E0000FF0F0000FC0B0000000F000000100000000C0000230F0000FF0F0000F60B00000010000000100000000C0000F70F0000FF0F0000F00B00000000000000000000000D00001A00000000000000240D00000001000000000000000D0000EE000000000000001F0D00000002000000000000000D0000C2010000000000001A0D00000003000000000000000D00009702000000000000150D00000004000000000000000D00006B03000000000000100D00000005000000000000000D00003F040000000000000B0D00000006000000000000000D00001305000000000000060D00000007000000000000000D0000E805000000000000010D00000008000000000000000D0000BC06000000000000FC0C00000009000000000000000D00009007000000000000F70C0000000A000000000000000D00006408000000000000F20C0000000B000000000000000D00003909000000000000EE0C0000000C000000000000000D00000D0A000000000000E90C0000000D000000000000000D0000E10A000000000000E40C0000000E000000000000000D0000B50B000000000000DF0C0000000F000000000000000D00008A0C000000000000DA0C00000010000000000000000D00005E0D000000000000D50C00000000000000010000000D000045000000A6000000270D00000001000000010000000D00001901000095000000220D00000002000000010000000D0000ED010000840000001D0D00000003000000010000000D0000C102000073000000180D00000004000000010000000D00009503000062000000130D00000005000000010000000D000069040000510000000E0D00000006000000010000000D00003E05000040000000090D00000007000000010000000D0000120600002F000000040D00000008000000010000000D0000E60600001E000000FF0C00000009000000010000000D0000BA0700000D000000FA0C0000000A000000010000000D00008E08000000000000F50C0000000B000000010000000D00006309000000000000F00C0000000C000000010000000D0000370A000000000000EB0C0000000D000000010000000D00000B0B000000000000E60C0000000E000000010000000D0000DF0B000000000000E10C0000000F000000010000000D0000B30C000000000000DC0C00000010000000010000000D0000870D000000000000D70C00000000000000020000000D00006F000000C50100002A0D00000001000000020000000D000043010000B4010000250D00000002000000020000000D000017020000A2010000200D00000003000000020000000D0000EB020000910100001B0D00000004000000020000000D0000C00300007F010000160D00000005000000020000000D0000940400006E010000110D00000006000000020000000D0000680500005D0100000C0D00000007000000020000000D00003C0600004B010000070D00000008000000020000000D0000100700003A010000010D00000009000000020000000D0000E407000029010000FC0C0000000A000000020000000D0000B808000017010000F70C0000000B000000020000000D00008C09000006010000F20C0000000C000000020000000D0000610A0000F4000000ED0C0000000D000000020000000D0000350B0000E3000000E80C0000000E000000020000000D0000090C0000D2000000E30C0000000F000000020000000D0000DD0C0000C0000000DE0C00000010000000020000000D0000B10D0000AF000000D80C00000000000000030000000D00009A000000E40200002E0D00000001000000030000000D00006E010000D2020000280D00000002000000030000000D000042020000C0020000230D00000003000000030000000D000016030000AF0200001E0D00000004000000030000000D0000EA0300009D020000190D00000005000000030000000D0000BE0400008B020000140D00000006000000030000000D000092050000790200000E0D00000007000000030000000D00006606000067020000090D00000008000000030000000D00003A07000056020000040D00000009000000030000000D00000E08000044020000FF0C0000000A000000030000000D0000E208000032020000FA0C0000000B000000030000000D0000B609000020020000F40C0000000C000000030000000D00008A0A00000F020000EF0C0000000D000000030000000D00005F0B0000FD010000EA0C0000000E000000030000000D0000330C0000EB010000E50C0000000F000000030000000D0000070D0000D9010000DF0C00000010000000030000000D0000DB0D0000C8010000DA0C00000000000000040000000D0000C400000003040000310D00000001000000040000000D000098010000F10300002B0D00000002000000040000000D00006C020000DE030000260D00000003000000040000000D000040030000CC030000210D00000004000000040000000D000014040000BA0300001C0D00000005000000040000000D0000E8040000A8030000160D00000006000000040000000D0000BC05000096030000110D00000007000000040000000D000090060000840300000C0D00000008000000040000000D00006407000071030000060D00000009000000040000000D0000380800005F030000010D0000000A000000040000000D00000C0900004D030000FC0C0000000B000000040000000D0000E00900003B030000F70C0000000C000000040000000D0000B40A000029030000F10C0000000D000000040000000D0000880B000017030000EC0C0000000E000000040000000D00005C0C000005030000E70C0000000F000000040000000D0000300D0000F2020000E10C00000010000000040000000D0000040E0000E0020000DC0C00000000000000050000000D0000EF00000022050000340D00000001000000050000000D0000C30100000F0500002E0D00000002000000050000000D000097020000FC040000290D00000003000000050000000D00006B030000EA040000240D00000004000000050000000D00003F040000D70400001E0D00000005000000050000000D000012050000C5040000190D00000006000000050000000D0000E6050000B2040000140D00000007000000050000000D0000BA060000A00400000E0D00000008000000050000000D00008E0700008D040000090D00000009000000050000000D0000620800007B040000040D0000000A000000050000000D00003609000068040000FE0C0000000B000000050000000D00000A0A000056040000F90C0000000C000000050000000D0000DE0A000043040000F30C0000000D000000050000000D0000B20B000031040000EE0C0000000E000000050000000D0000860C00001E040000E90C0000000F000000050000000D00005A0D00000B040000E30C00000010000000050000000D00002E0E0000F9030000DE0C00000000000000060000000D00001901000040060000370D00000001000000060000000D0000ED0100002D060000320D00000002000000060000000D0000C10200001B0600002C0D00000003000000060000000D00009503000008060000270D00000004000000060000000D000069040000F5050000210D00000005000000060000000D00003D050000E20500001C0D00000006000000060000000D000011060000CF050000160D00000007000000060000000D0000E5060000BC050000110D00000008000000060000000D0000B8070000A90500000B0D00000009000000060000000D00008C08000096050000060D0000000A000000060000000D00006009000083050000010D0000000B000000060000000D0000340A000070050000FB0C0000000C000000060000000D0000080B00005D050000F60C0000000D000000060000000D0000DC0B00004A050000F00C0000000E000000060000000D0000B00C000037050000EB0C0000000F000000060000000D0000840D000024050000E50C00000010000000060000000D0000580E000012050000E00C00000000000000070000000D0000440100005F0700003A0D00000001000000070000000D0000180200004C070000350D00000002000000070000000D0000EB020000390700002F0D00000003000000070000000D0000BF030000250700002A0D00000004000000070000000D00009304000012070000240D00000005000000070000000D000067050000FF0600001E0D00000006000000070000000D00003B060000EB060000190D00000007000000070000000D00000F070000D8060000130D00000008000000070000000D0000E3070000C50600000E0D00000009000000070000000D0000B6080000B1060000080D0000000A000000070000000D00008A0900009E060000030D0000000B000000070000000D00005E0A00008B060000FD0C0000000C000000070000000D0000320B000077060000F80C0000000D000000070000000D0000060C000064060000F20C0000000E000000070000000D0000DA0C000051060000ED0C0000000F000000070000000D0000AD0D00003E060000E70C00000010000000070000000D0000810E00002A060000E20C00000000000000080000000D00006E0100007E0800003D0D00000001000000080000000D0000420200006A080000380D00000002000000080000000D00001603000057080000320D00000003000000080000000D0000EA030000430800002C0D00000004000000080000000D0000BD0400002F080000270D00000005000000080000000D0000910500001C080000210D00000006000000080000000D000065060000080800001C0D00000007000000080000000D000039070000F4070000160D00000008000000080000000D00000D080000E0070000100D00000009000000080000000D0000E0080000CD0700000B0D0000000A000000080000000D0000B4090000B9070000050D0000000B000000080000000D0000880A0000A5070000000D0000000C000000080000000D00005C0B000092070000FA0C0000000D000000080000000D0000300C00007E070000F40C0000000E000000080000000D0000030D00006A070000EF0C0000000F000000080000000D0000D70D000057070000E90C00000010000000080000000D0000AB0E000043070000E40C00000000000000090000000D0000990100009D090000400D00000001000000090000000D00006D020000890900003B0D00000002000000090000000D00004003000075090000350D00000003000000090000000D000014040000610900002F0D00000004000000090000000D0000E80400004D0900002A0D00000005000000090000000D0000BC05000038090000240D00000006000000090000000D00008F060000240900001E0D00000007000000090000000D00006307000010090000190D00000008000000090000000D000037080000FC080000130D00000009000000090000000D00000A090000E80800000D0D0000000A000000090000000D0000DE090000D4080000080D0000000B000000090000000D0000B20A0000C0080000020D0000000C000000090000000D0000860B0000AC080000FC0C0000000D000000090000000D0000590C000098080000F70C0000000E000000090000000D00002D0D000084080000F10C0000000F000000090000000D0000010E000070080000EB0C00000010000000090000000D0000D50E00005B080000E60C000000000000000A0000000D0000C3010000BC0A0000430D000000010000000A0000000D000097020000A70A00003E0D000000020000000A0000000D00006B030000930A0000380D000000030000000A0000000D00003E0400007E0A0000320D000000040000000A0000000D0000120500006A0A00002C0D000000050000000A0000000D0000E6050000550A0000270D000000060000000A0000000D0000B9060000410A0000210D000000070000000A0000000D00008D0700002C0A00001B0D000000080000000A0000000D000061080000180A0000150D000000090000000A0000000D000035090000030A0000100D0000000A0000000A0000000D0000080A0000EF0900000A0D0000000B0000000A0000000D0000DC0A0000DB090000040D0000000C0000000A0000000D0000B00B0000C6090000FE0C0000000D0000000A0000000D0000830C0000B2090000F90C0000000E0000000A0000000D0000570D00009D090000F30C0000000F0000000A0000000D00002B0E000089090000ED0C000000100000000A0000000D0000FE0E000074090000E70C000000000000000B0000000D0000EE010000DB0B0000470D000000010000000B0000000D0000C2020000C60B0000410D000000020000000B0000000D000095030000B10B00003B0D000000030000000B0000000D0000690400009C0B0000350D000000040000000B0000000D00003C050000870B00002F0D000000050000000B0000000D000010060000720B0000290D000000060000000B0000000D0000E40600005D0B0000240D000000070000000B0000000D0000B7070000490B00001E0D000000080000000B0000000D00008B080000340B0000180D000000090000000B0000000D00005F0900001F0B0000120D0000000A0000000B0000000D0000320A00000A0B00000C0D0000000B0000000B0000000D0000060B0000F50A0000060D0000000C0000000B0000000D0000D90B0000E00A0000010D0000000D0000000B0000000D0000AD0C0000CB0A0000FB0C0000000E0000000B0000000D0000810D0000B60A0000F50C0000000F0000000B0000000D0000540E0000A20A0000EF0C000000100000000B0000000D0000280F00008D0A0000E90C000000000000000C0000000D000018020000F90C00004A0D000000010000000C0000000D0000EC020000E40C0000440D000000020000000C0000000D0000C0030000CF0C00003E0D000000030000000C0000000D000093040000BA0C0000380D000000040000000C0000000D000067050000A40C0000320D000000050000000C0000000D00003A0600008F0C00002C0D000000060000000C0000000D00000E0700007A0C0000260D000000070000000C0000000D0000E1070000650C0000200D000000080000000C0000000D0000B50800004F0C00001A0D000000090000000C0000000D0000890900003A0C0000150D0000000A0000000C0000000D00005C0A0000250C00000F0D0000000B0000000C0000000D0000300B0000100C0000090D0000000C0000000C0000000D0000030C0000FA0B0000030D0000000D0000000C0000000D0000D70C0000E50B0000FD0C0000000E0000000C0000000D0000AA0D0000D00B0000F70C0000000F0000000C0000000D00007E0E0000BB0B0000F10C000000100000000C0000000D0000520F0000A50B0000EB0C000000000000000D0000000D000043020000180E00004D0D000000010000000D0000000D000017030000030E0000470D000000020000000D0000000D0000EA030000ED0D0000410D000000030000000D0000000D0000BE040000D70D00003B0D000000040000000D0000000D000091050000C20D0000350D000000050000000D0000000D000065060000AC0D00002F0D000000060000000D0000000D000038070000960D0000290D000000070000000D0000000D00000C080000810D0000230D000000080000000D0000000D0000DF0800006B0D00001D0D000000090000000D0000000D0000B3090000560D0000170D0000000A0000000D0000000D0000860A0000400D0000110D0000000B0000000D0000000D00005A0B00002A0D00000B0D0000000C0000000D0000000D00002D0C0000150D0000050D0000000D0000000D0000000D0000FF0C0000FF0C0000FF0C0000000E0000000D0000000D0000D40D0000E90C0000F90C0000000F0000000D0000000D0000A80E0000D40C0000F30C000000100000000D0000000D00007B0F0000BE0C0000ED0C000000000000000E0000000D00006E020000370F0000500D000000010000000E0000000D000041030000210F00004A0D000000020000000E0000000D0000140400000B0F0000440D000000030000000E0000000D0000E8040000F50E00003E0D000000040000000E0000000D0000BB050000DF0E0000380D000000050000000E0000000D00008F060000C90E0000320D000000060000000E0000000D000062070000B30E00002C0D000000070000000E0000000D0000360800009D0E0000250D000000080000000E0000000D000009090000870E00001F0D000000090000000E0000000D0000DD090000710E0000190D0000000A0000000E0000000D0000B00A00005B0E0000130D0000000B0000000E0000000D0000840B0000450E00000D0D0000000C0000000E0000000D0000570C00002F0E0000070D0000000D0000000E0000000D00002A0D0000190E0000010D0000000E0000000E0000000D0000FE0D0000030E0000FB0C0000000F0000000E0000000D0000D10E0000ED0D0000F50C000000100000000E0000000D0000A50F0000D70D0000EF0C000000000000000F0000000D000098020000FF0F0000530D000000010000000F0000000D00006C030000FF0F00004D0D000000020000000F0000000D00003F040000FF0F0000470D000000030000000F0000000D000012050000FF0F0000410D000000040000000F0000000D0000E6050000FC0F00003A0D000000050000000F0000000D0000B9060000E60F0000340D000000060000000F0000000D00008C070000D00F00002E0D000000070000000F0000000D000060080000B90F0000280D000000080000000F0000000D000033090000A30F0000220D000000090000000F0000000D0000070A00008C0F00001C0D0000000A0000000F0000000D0000DA0A0000760F0000160D0000000B0000000F0000000D0000AD0B00005F0F00000F0D0000000C0000000F0000000D0000810C0000490F0000090D0000000D0000000F0000000D0000540D0000330F0000030D0000000E0000000F0000000D0000280E00001C0F0000FD0C0000000F0000000F0000000D0000FB0E0000060F0000F70C000000100000000F0000000D0000CE0F0000EF0E0000F10C00000000000000100000000D0000C3020000FF0F0000560D00000001000000100000000D000096030000FF0F0000500D00000002000000100000000D000069040000FF0F00004A0D00000003000000100000000D00003D050000FF0F0000440D00000004000000100000000D000010060000FF0F00003D0D00000005000000100000000D0000E3060000FF0F0000370D00000006000000100000000D0000B7070000FF0F0000310D00000007000000100000000D00008A080000FF0F00002B0D00000008000000100000000D00005D090000FF0F0000240D00000009000000100000000D0000310A0000FF0F00001E0D0000000A000000100000000D0000040B0000FF0F0000180D0000000B000000100000000D0000D70B0000FF0F0000120D0000000C000000100000000D0000AB0C0000FF0F00000C0D0000000D000000100000000D00007E0D0000FF0F0000050D0000000E000000100000000D0000510E0000FF0F0000FF0C0000000F000000100000000D0000250F0000FF0F0000F90C00000010000000100000000D0000F80F0000FF0F0000F30C00000000000000000000000E00001C00000000000000270E00000001000000000000000E0000F100000000000000220E00000002000000000000000E0000C5010000000000001E0E00000003000000000000000E00009A02000000000000190E00000004000000000000000E00006E03000000000000140E00000005000000000000000E000043040000000000000F0E00000006000000000000000E000017050000000000000A0E00000007000000000000000E0000EC05000000000000060E00000008000000000000000E0000C006000000000000010E00000009000000000000000E00009507000000000000FC0D0000000A000000000000000E00006908000000000000F70D0000000B000000000000000E00003E09000000000000F20D0000000C000000000000000E0000120A000000000000ED0D0000000D000000000000000E0000E70A000000000000E90D0000000E000000000000000E0000BB0B000000000000E40D0000000F000000000000000E0000900C000000000000DF0D00000010000000000000000E0000650D000000000000DA0D00000000000000010000000E0000470000009D0000002A0E00000001000000010000000E00001B0100008D000000260E00000002000000010000000E0000F00100007C000000210E00000003000000010000000E0000C40200006B0000001C0E00000004000000010000000E0000980300005B000000170E00000005000000010000000E00006D0400004A000000120E00000006000000010000000E000041050000390000000D0E00000007000000010000000E00001606000029000000080E00000008000000010000000E0000EA06000018000000030E00000009000000010000000E0000BF07000007000000FE0D0000000A000000010000000E00009308000000000000F90D0000000B000000010000000E00006809000000000000F50D0000000C000000010000000E00003C0A000000000000F00D0000000D000000010000000E0000110B000000000000EB0D0000000E000000010000000E0000E50B000000000000E60D0000000F000000010000000E0000B90C000000000000E10D00000010000000010000000E00008E0D000000000000DC0D00000000000000020000000E000071000000BC0100002E0E00000001000000020000000E000046010000AB010000290E00000002000000020000000E00001A0200009A010000240E00000003000000020000000E0000EE020000890100001F0E00000004000000020000000E0000C3030000780100001A0E00000005000000020000000E00009704000067010000150E00000006000000020000000E00006B05000056010000100E00000007000000020000000E000040060000450100000B0E00000008000000020000000E00001407000034010000060E00000009000000020000000E0000E907000023010000010E0000000A000000020000000E0000BD08000012010000FC0D0000000B000000020000000E00009109000001010000F70D0000000C000000020000000E0000660A0000F0000000F20D0000000D000000020000000E00003A0B0000DE000000ED0D0000000E000000020000000E00000E0C0000CD000000E80D0000000F000000020000000E0000E30C0000BC000000E30D00000010000000020000000E0000B70D0000AB000000DE0D00000000000000030000000E00009C000000DB020000310E00000001000000030000000E000070010000C90200002C0E00000002000000030000000E000044020000B8020000270E00000003000000030000000E000019030000A7020000220E00000004000000030000000E0000ED030000950200001D0E00000005000000030000000E0000C104000084020000180E00000006000000030000000E00009605000072020000120E00000007000000030000000E00006A060000610200000D0E00000008000000030000000E00003E0700004F020000080E00000009000000030000000E0000120800003E020000030E0000000A000000030000000E0000E70800002D020000FE0D0000000B000000030000000E0000BB0900001B020000F90D0000000C000000030000000E00008F0A00000A020000F40D0000000D000000030000000E0000640B0000F8010000EF0D0000000E000000030000000E0000380C0000E7010000EA0D0000000F000000030000000E00000C0D0000D5010000E50D00000010000000030000000E0000E00D0000C4010000DF0D00000000000000040000000E0000C7000000FA030000340E00000001000000040000000E00009B010000E80300002F0E00000002000000040000000E00006F020000D60300002A0E00000003000000040000000E000043030000C4030000250E00000004000000040000000E000017040000B20300001F0E00000005000000040000000E0000EC040000A10300001A0E00000006000000040000000E0000C00500008F030000150E00000007000000040000000E0000940600007D030000100E00000008000000040000000E0000680700006B0300000B0E00000009000000040000000E00003C08000059030000060E0000000A000000040000000E00001109000048030000000E0000000B000000040000000E0000E509000036030000FB0D0000000C000000040000000E0000B90A000024030000F60D0000000D000000040000000E00008D0B000012030000F10D0000000E000000040000000E0000610C000000030000EC0D0000000F000000040000000E0000360D0000EE020000E60D00000010000000040000000E00000A0E0000DD020000E10D00000000000000050000000E0000F100000019050000380E00000001000000050000000E0000C501000006050000320E00000002000000050000000E000099020000F40400002D0E00000003000000050000000E00006E030000E2040000280E00000004000000050000000E000042040000D0040000220E00000005000000050000000E000016050000BE0400001D0E00000006000000050000000E0000EA050000AB040000180E00000007000000050000000E0000BE06000099040000130E00000008000000050000000E000092070000870400000D0E00000009000000050000000E00006608000075040000080E0000000A000000050000000E00003A09000063040000030E0000000B000000050000000E00000E0A000050040000FD0D0000000C000000050000000E0000E30A00003E040000F80D0000000D000000050000000E0000B70B00002C040000F30D0000000E000000050000000E00008B0C00001A040000ED0D0000000F000000050000000E00005F0D000007040000E80D00000010000000050000000E0000330E0000F5030000E30D00000000000000060000000E00001C010000380600003B0E00000001000000060000000E0000F001000025060000350E00000002000000060000000E0000C402000012060000300E00000003000000060000000E000098030000000600002B0E00000004000000060000000E00006C040000ED050000250E00000005000000060000000E000040050000DA050000200E00000006000000060000000E000014060000C80500001A0E00000007000000060000000E0000E8060000B5050000150E00000008000000060000000E0000BC070000A3050000100E00000009000000060000000E000090080000900500000A0E0000000A000000060000000E0000640900007D050000050E0000000B000000060000000E0000380A00006B050000000E0000000C000000060000000E00000C0B000058050000FA0D0000000D000000060000000E0000E00B000046050000F50D0000000E000000060000000E0000B40C000033050000EF0D0000000F000000060000000E0000880D000020050000EA0D00000010000000060000000E00005C0E00000E050000E50D00000000000000070000000E000046010000560700003E0E00000001000000070000000E00001A02000043070000390E00000002000000070000000E0000EE02000030070000330E00000003000000070000000E0000C20300001D0700002E0E00000004000000070000000E0000960400000A070000280E00000005000000070000000E00006A050000F7060000230E00000006000000070000000E00003E060000E40600001D0E00000007000000070000000E000012070000D1060000180E00000008000000070000000E0000E6070000BE060000120E00000009000000070000000E0000BA080000AB0600000D0E0000000A000000070000000E00008E09000098060000070E0000000B000000070000000E0000620A000085060000020E0000000C000000070000000E0000360B000072060000FC0D0000000D000000070000000E00000A0C00005F060000F70D0000000E000000070000000E0000DE0C00004C060000F10D0000000F000000070000000E0000B20D000039060000EC0D00000010000000070000000E0000860E000026060000E60D00000000000000080000000E00007101000075080000410E00000001000000080000000E000045020000620800003C0E00000002000000080000000E0000190300004E080000360E00000003000000080000000E0000ED0300003B080000310E00000004000000080000000E0000C1040000280800002B0E00000005000000080000000E00009405000014080000250E00000006000000080000000E00006806000001080000200E00000007000000080000000E00003C070000EE0700001A0E00000008000000080000000E000010080000DA070000150E00000009000000080000000E0000E4080000C70700000F0E0000000A000000080000000E0000B8090000B30700000A0E0000000B000000080000000E00008C0A0000A0070000040E0000000C000000080000000E00005F0B00008D070000FE0D0000000D000000080000000E0000330C000079070000F90D0000000E000000080000000E0000070D000066070000F30D0000000F000000080000000E0000DB0D000052070000EE0D00000010000000080000000E0000AF0E00003F070000E80D00000000000000090000000E00009C01000094090000450E00000001000000090000000E00006F020000800900003F0E00000002000000090000000E0000430300006D090000390E00000003000000090000000E00001704000059090000340E00000004000000090000000E0000EB040000450900002E0E00000005000000090000000E0000BF05000031090000280E00000006000000090000000E0000920600001D090000230E00000007000000090000000E0000660700000A0900001D0E00000008000000090000000E00003A080000F6080000170E00000009000000090000000E00000E090000E2080000120E0000000A000000090000000E0000E2090000CE0800000C0E0000000B000000090000000E0000B50A0000BB080000060E0000000C000000090000000E0000890B0000A7080000000E0000000D000000090000000E00005D0C000093080000FB0D0000000E000000090000000E0000310D00007F080000F50D0000000F000000090000000E0000040E00006B080000EF0D00000010000000090000000E0000D80E000058080000EA0D000000000000000A0000000E0000C6010000B30A0000480E000000010000000A0000000E00009A0200009F0A0000420E000000020000000A0000000E00006E0300008B0A00003C0E000000030000000A0000000E000041040000760A0000370E000000040000000A0000000E000015050000620A0000310E000000050000000A0000000E0000E90500004E0A00002B0E000000060000000A0000000E0000BD0600003A0A0000250E000000070000000A0000000E000090070000260A00001F0E000000080000000A0000000E000064080000120A00001A0E000000090000000A0000000E000038090000FD090000140E0000000A0000000A0000000E00000B0A0000E90900000E0E0000000B0000000A0000000E0000DF0A0000D5090000080E0000000C0000000A0000000E0000B30B0000C1090000030E0000000D0000000A0000000E0000860C0000AD090000FD0D0000000E0000000A0000000E00005A0D000099090000F70D0000000F0000000A0000000E00002E0E000084090000F10D000000100000000A0000000E0000020F000070090000EB0D000000000000000B0000000E0000F1010000D20B00004B0E000000010000000B0000000E0000C4020000BD0B0000450E000000020000000B0000000E000098030000A90B00003F0E000000030000000B0000000E00006C040000940B00003A0E000000040000000B0000000E00003F050000800B0000340E000000050000000B0000000E0000130600006B0B00002E0E000000060000000B0000000E0000E7060000570B0000280E000000070000000B0000000E0000BA070000420B0000220E000000080000000B0000000E00008E0800002D0B00001C0E000000090000000B0000000E000062090000190B0000160E0000000A0000000B0000000E0000350A0000040B0000100E0000000B0000000B0000000E0000090B0000F00A00000B0E0000000C0000000B0000000E0000DC0B0000DB0A0000050E0000000D0000000B0000000E0000B00C0000C70A0000FF0D0000000E0000000B0000000E0000840D0000B20A0000F90D0000000F0000000B0000000E0000570E00009D0A0000F30D000000100000000B0000000E00002B0F0000890A0000ED0D000000000000000C0000000E00001B020000F10C00004F0E000000010000000C0000000E0000EF020000DC0C0000490E000000020000000C0000000E0000C3030000C70C0000430E000000030000000C0000000E000096040000B20C00003D0E000000040000000C0000000E00006A0500009D0C0000370E000000050000000C0000000E00003D060000880C0000310E000000060000000C0000000E000011070000730C00002B0E000000070000000C0000000E0000E40700005E0C0000250E000000080000000C0000000E0000B8080000490C00001F0E000000090000000C0000000E00008B090000340C0000190E0000000A0000000C0000000E00005F0A00001F0C0000130E0000000B0000000C0000000E0000320B00000A0C00000D0E0000000C0000000C0000000E0000060C0000F50B0000070E0000000D0000000C0000000E0000DA0C0000E00B0000010E0000000E0000000C0000000E0000AD0D0000CB0B0000FB0D0000000F0000000C0000000E0000810E0000B70B0000F50D000000100000000C0000000E0000540F0000A20B0000EF0D000000000000000D0000000E000046020000100E0000520E000000010000000D0000000E00001A030000FA0D00004C0E000000020000000D0000000E0000ED030000E50D0000460E000000030000000D0000000E0000C0040000D00D0000400E000000040000000D0000000E000094050000BA0D0000390E000000050000000D0000000E000067060000A50D0000330E000000060000000D0000000E00003B070000900D00002D0E000000070000000D0000000E00000E0800007A0D0000270E000000080000000D0000000E0000E2080000650D0000210E000000090000000D0000000E0000B5090000500D00001B0E0000000A0000000D0000000E0000890A00003A0D0000150E0000000B0000000D0000000E00005C0B0000250D00000F0E0000000C0000000D0000000E0000300C0000100D0000090E0000000D0000000D0000000E0000030D0000FA0C0000030E0000000E0000000D0000000E0000D70D0000E50C0000FD0D0000000F0000000D0000000E0000AA0E0000D00C0000F70D000000100000000D0000000E00007D0F0000BA0C0000F10D000000000000000E0000000E0000710200002E0F0000550E000000010000000E0000000E000044030000190F00004F0E000000020000000E0000000E000017040000030F0000490E000000030000000E0000000E0000EB040000ED0E0000430E000000040000000E0000000E0000BE050000D80E00003C0E000000050000000E0000000E000092060000C20E0000360E000000060000000E0000000E000065070000AC0E0000300E000000070000000E0000000E000038080000960E00002A0E000000080000000E0000000E00000C090000810E0000240E000000090000000E0000000E0000DF0900006B0E00001E0E0000000A0000000E0000000E0000B30A0000550E0000170E0000000B0000000E0000000E0000860B00003F0E0000110E0000000C0000000E0000000E0000590C00002A0E00000B0E0000000D0000000E0000000E00002D0D0000140E0000050E0000000E0000000E0000000E0000FF0D0000FF0D0000FF0D0000000F0000000E0000000E0000D30E0000E90D0000F80D000000100000000E0000000E0000A70F0000D30D0000F20D000000000000000F0000000E00009B020000FF0F0000580E000000010000000F0000000E00006F030000FF0F0000520E000000020000000F0000000E000042040000FF0F00004C0E000000030000000F0000000E000015050000FF0F0000460E000000040000000F0000000E0000E9050000F50F00003F0E000000050000000F0000000E0000BC060000DF0F0000390E000000060000000F0000000E00008F070000C90F0000330E000000070000000F0000000E000062080000B30F00002C0E000000080000000F0000000E0000360900009C0F0000260E000000090000000F0000000E0000090A0000860F0000200E0000000A0000000F0000000E0000DC0A0000700F00001A0E0000000B0000000F0000000E0000B00B00005A0F0000130E0000000C0000000F0000000E0000830C0000440F00000D0E0000000D0000000F0000000E0000560D00002E0F0000070E0000000E0000000F0000000E00002A0E0000180F0000010E0000000F0000000F0000000E0000FD0E0000020F0000FA0D000000100000000F0000000E0000D00F0000EB0E0000F40D00000000000000100000000E0000C6020000FF0F00005C0E00000001000000100000000E000099030000FF0F0000550E00000002000000100000000E00006C040000FF0F00004F0E00000003000000100000000E000040050000FF0F0000490E00000004000000100000000E000013060000FF0F0000420E00000005000000100000000E0000E6060000FF0F00003C0E00000006000000100000000E0000B9070000FF0F0000350E00000007000000100000000E00008C080000FF0F00002F0E00000008000000100000000E000060090000FF0F0000290E00000009000000100000000E0000330A0000FF0F0000220E0000000A000000100000000E0000060B0000FF0F00001C0E0000000B000000100000000E0000D90B0000FF0F0000160E0000000C000000100000000E0000AD0C0000FF0F00000F0E0000000D000000100000000E0000800D0000FF0F0000090E0000000E000000100000000E0000530E0000FF0F0000020E0000000F000000100000000E0000260F0000FF0F0000FC0D00000010000000100000000E0000F90F0000FF0F0000F60D00000000000000000000000F00001E000000000000002A0F00000001000000000000000F0000F300000000000000250F00000002000000000000000F0000C801000000000000210F00000003000000000000000F00009D020000000000001C0F00000004000000000000000F00007103000000000000180F00000005000000000000000F00004604000000000000130F00000006000000000000000F00001B050000000000000E0F00000007000000000000000F0000F0050000000000000A0F00000008000000000000000F0000C506000000000000050F00000009000000000000000F00009A07000000000000000F0000000A000000000000000F00006E08000000000000FC0E0000000B000000000000000F00004309000000000000F70E0000000C000000000000000F0000180A000000000000F20E0000000D000000000000000F0000ED0A000000000000EE0E0000000E000000000000000F0000C20B000000000000E90E0000000F000000000000000F0000960C000000000000E50E00000010000000000000000F00006B0D000000000000E00E00000000000000010000000F000049000000940000002E0F00000001000000010000000F00001E01000084000000290F00000002000000010000000F0000F201000074000000240F00000003000000010000000F0000C7020000630000001F0F00000004000000010000000F00009C030000530000001B0F00000005000000010000000F00007004000043000000160F00000006000000010000000F00004505000032000000110F00000007000000010000000F00001A060000220000000C0F00000008000000010000000F0000EF06000012000000080F00000009000000010000000F0000C307000001000000030F0000000A000000010000000F00009808000000000000FE0E0000000B000000010000000F00006D09000000000000F90E0000000C000000010000000F0000410A000000000000F40E0000000D000000010000000F0000160B000000000000F00E0000000E000000010000000F0000EB0B000000000000EB0E0000000F000000010000000F0000C00C000000000000E60E00000010000000010000000F0000940D000000000000E10E00000000000000020000000F000073000000B3010000310F00000001000000020000000F000048010000A20100002C0F00000002000000020000000F00001D02000092010000270F00000003000000020000000F0000F102000081010000220F00000004000000020000000F0000C6030000700100001D0F00000005000000020000000F00009B04000060010000190F00000006000000020000000F00006F0500004F010000140F00000007000000020000000F0000440600003E0100000F0F00000008000000020000000F0000180700002D0100000A0F00000009000000020000000F0000ED0700001D010000050F0000000A000000020000000F0000C20800000C010000000F0000000B000000020000000F000096090000FB000000FB0E0000000C000000020000000F00006B0A0000EB000000F60E0000000D000000020000000F00003F0B0000DA000000F20E0000000E000000020000000F0000140C0000C9000000ED0E0000000F000000020000000F0000E90C0000B8000000E80E00000010000000020000000F0000BD0D0000A8000000E30E00000000000000030000000F00009E000000D2020000340F00000001000000030000000F000073010000C10200002F0F00000002000000030000000F000047020000B00200002A0F00000003000000030000000F00001C0300009F020000250F00000004000000030000000F0000F00300008E020000200F00000005000000030000000F0000C50400007C0200001B0F00000006000000030000000F0000990500006B020000160F00000007000000030000000F00006E0600005A020000110F00000008000000030000000F000042070000490200000C0F00000009000000030000000F00001708000038020000080F0000000A000000030000000F0000EB08000027020000030F0000000B000000030000000F0000C009000016020000FE0E0000000C000000030000000F0000940A000005020000F90E0000000D000000030000000F0000690B0000F4010000F40E0000000E000000030000000F00003D0C0000E3010000EF0E0000000F000000030000000F0000120D0000D1010000EA0E00000010000000030000000F0000E60D0000C0010000E50E00000000000000040000000F0000C9000000F1030000380F00000001000000040000000F00009D010000DF030000330F00000002000000040000000F000072020000CE0300002E0F00000003000000040000000F000046030000BC030000290F00000004000000040000000F00001A040000AB030000230F00000005000000040000000F0000EF040000990300001E0F00000006000000040000000F0000C305000088030000190F00000007000000040000000F00009806000076030000140F00000008000000040000000F00006C070000650300000F0F00000009000000040000000F000040080000530300000A0F0000000A000000040000000F00001509000042030000050F0000000B000000040000000F0000E909000030030000000F0000000C000000040000000F0000BE0A00001F030000FB0E0000000D000000040000000F0000920B00000D030000F50E0000000E000000040000000F0000660C0000FC020000F00E0000000F000000040000000F00003B0D0000EA020000EB0E00000010000000040000000F00000F0E0000D9020000E60E00000000000000050000000F0000F4000000100500003B0F00000001000000050000000F0000C8010000FE040000360F00000002000000050000000F00009C020000EC040000310F00000003000000050000000F000070030000DA0400002C0F00000004000000050000000F000045040000C8040000260F00000005000000050000000F000019050000B6040000210F00000006000000050000000F0000ED050000A40400001C0F00000007000000050000000F0000C206000093040000170F00000008000000050000000F00009607000081040000110F00000009000000050000000F00006A0800006F0400000C0F0000000A000000050000000F00003E0900005D040000070F0000000B000000050000000F0000130A00004B040000020F0000000C000000050000000F0000E70A000039040000FD0E0000000D000000050000000F0000BB0B000027040000F70E0000000E000000050000000F0000900C000015040000F20E0000000F000000050000000F0000640D000003040000ED0E00000010000000050000000F0000380E0000F2030000E80E00000000000000060000000F00001E0100002F0600003F0F00000001000000060000000F0000F20100001C060000390F00000002000000060000000F0000C70200000A060000340F00000003000000060000000F00009B030000F80500002F0F00000004000000060000000F00006F040000E6050000290F00000005000000060000000F000043050000D3050000240F00000006000000060000000F000017060000C10500001F0F00000007000000060000000F0000EC060000AF050000190F00000008000000060000000F0000C00700009C050000140F00000009000000060000000F0000940800008A0500000F0F0000000A000000060000000F00006809000078050000090F0000000B000000060000000F00003C0A000066050000040F0000000C000000060000000F0000100B000053050000FF0E0000000D000000060000000F0000E50B000041050000F90E0000000E000000060000000F0000B90C00002F050000F40E0000000F000000060000000F00008D0D00001C050000EF0E00000010000000060000000F0000610E00000A050000E90E00000000000000070000000F0000490100004E070000420F00000001000000070000000F00001D0200003B0700003D0F00000002000000070000000F0000F102000028070000370F00000003000000070000000F0000C503000016070000320F00000004000000070000000F000099040000030700002C0F00000005000000070000000F00006D050000F0060000270F00000006000000070000000F000041060000DD060000210F00000007000000070000000F000015070000CB0600001C0F00000008000000070000000F0000EA070000B8060000160F00000009000000070000000F0000BE080000A5060000110F0000000A000000070000000F000092090000930600000C0F0000000B000000070000000F0000660A000080060000060F0000000C000000070000000F00003A0B00006D060000010F0000000D000000070000000F00000E0C00005B060000FB0E0000000E000000070000000F0000E20C000048060000F60E0000000F000000070000000F0000B60D000035060000F00E00000010000000070000000F00008A0E000023060000EB0E00000000000000080000000F0000740100006C080000460F00000001000000080000000F00004802000059080000400F00000002000000080000000F00001C030000460800003A0F00000003000000080000000F0000F003000033080000350F00000004000000080000000F0000C4040000200800002F0F00000005000000080000000F0000970500000D0800002A0F00000006000000080000000F00006B060000FA070000240F00000007000000080000000F00003F070000E70700001F0F00000008000000080000000F000013080000D4070000190F00000009000000080000000F0000E7080000C1070000130F0000000A000000080000000F0000BB090000AE0700000E0F0000000B000000080000000F00008F0A00009B070000080F0000000C000000080000000F0000630B000088070000030F0000000D000000080000000F0000370C000075070000FD0E0000000E000000080000000F00000B0D000061070000F80E0000000F000000080000000F0000DF0D00004E070000F20E00000010000000080000000F0000B30E00003B070000EC0E00000000000000090000000F00009E0100008B090000490F00000001000000090000000F00007202000078090000430F00000002000000090000000F000046030000640900003E0F00000003000000090000000F00001A04000051090000380F00000004000000090000000F0000EE0400003D090000320F00000005000000090000000F0000C20500002A0900002D0F00000006000000090000000F00009506000017090000270F00000007000000090000000F00006907000003090000210F00000008000000090000000F00003D080000F00800001B0F00000009000000090000000F000011090000DC080000160F0000000A000000090000000F0000E5090000C9080000100F0000000B000000090000000F0000B90A0000B50800000A0F0000000C000000090000000F00008D0B0000A2080000050F0000000D000000090000000F0000600C00008E080000FF0E0000000E000000090000000F0000340D00007B080000F90E0000000F000000090000000F0000080E000067080000F40E00000010000000090000000F0000DC0E000054080000EE0E000000000000000A0000000F0000C9010000AA0A00004C0F000000010000000A0000000F00009D020000960A0000470F000000020000000A0000000F000071030000830A0000410F000000030000000A0000000F0000440400006F0A00003B0F000000040000000A0000000F0000180500005B0A0000350F000000050000000A0000000F0000EC050000470A00002F0F000000060000000A0000000F0000C0060000330A00002A0F000000070000000A0000000F0000930700001F0A0000240F000000080000000A0000000F0000670800000B0A00001E0F000000090000000A0000000F00003B090000F8090000180F0000000A0000000A0000000F00000E0A0000E4090000120F0000000B0000000A0000000F0000E20A0000D00900000D0F0000000C0000000A0000000F0000B60B0000BC090000070F0000000D0000000A0000000F00008A0C0000A8090000010F0000000E0000000A0000000F00005D0D000094090000FB0E0000000F0000000A0000000F0000310E000080090000F50E000000100000000A0000000F0000050F00006D090000EF0E000000000000000B0000000F0000F4010000C90B0000500F000000010000000B0000000F0000C7020000B50B00004A0F000000020000000B0000000F00009B030000A10B0000440F000000030000000B0000000F00006F0400008C0B00003E0F000000040000000B0000000F000042050000780B0000380F000000050000000B0000000F000016060000640B0000320F000000060000000B0000000F0000EA060000500B00002C0F000000070000000B0000000F0000BD0700003B0B0000260F000000080000000B0000000F000091080000270B0000200F000000090000000B0000000F000064090000130B00001B0F0000000A0000000B0000000F0000380A0000FF0A0000150F0000000B0000000B0000000F00000C0B0000EA0A00000F0F0000000C0000000B0000000F0000DF0B0000D60A0000090F0000000D0000000B0000000F0000B30C0000C20A0000030F0000000E0000000B0000000F0000870D0000AE0A0000FD0E0000000F0000000B0000000F00005A0E0000990A0000F70E000000100000000B0000000F00002E0F0000850A0000F10E000000000000000C0000000F00001E020000E80C0000530F000000010000000C0000000F0000F2020000D30C00004D0F000000020000000C0000000F0000C6030000BF0C0000470F000000030000000C0000000F000099040000AA0C0000410F000000040000000C0000000F00006D050000950C00003B0F000000050000000C0000000F000040060000810C0000350F000000060000000C0000000F0000140700006C0C00002F0F000000070000000C0000000F0000E7070000580C0000290F000000080000000C0000000F0000BB080000430C0000230F000000090000000C0000000F00008E0900002E0C00001D0F0000000A0000000C0000000F0000620A00001A0C0000170F0000000B0000000C0000000F0000350B0000050C0000110F0000000C0000000C0000000F0000090C0000F00B00000B0F0000000D0000000C0000000F0000DC0C0000DC0B0000050F0000000E0000000C0000000F0000B00D0000C70B0000FF0E0000000F0000000C0000000F0000830E0000B20B0000F90E000000100000000C0000000F0000570F00009E0B0000F30E000000000000000D0000000F000049020000070E0000570F000000010000000D0000000F00001D030000F20D0000510F000000020000000D0000000F0000F0030000DD0D00004A0F000000030000000D0000000F0000C3040000C80D0000440F000000040000000D0000000F000097050000B30D00003E0F000000050000000D0000000F00006A0600009E0D0000380F000000060000000D0000000F00003E070000890D0000320F000000070000000D0000000F000011080000740D00002C0F000000080000000D0000000F0000E40800005F0D0000250F000000090000000D0000000F0000B80900004A0D00001F0F0000000A0000000D0000000F00008B0A0000350D0000190F0000000B0000000D0000000F00005F0B0000200D0000130F0000000C0000000D0000000F0000320C00000A0D00000D0F0000000D0000000D0000000F0000060D0000F50C0000070F0000000E0000000D0000000F0000D90D0000E00C0000000F0000000F0000000D0000000F0000AC0E0000CB0C0000FA0E000000100000000D0000000F0000800F0000B60C0000F40E000000000000000E0000000F000074020000260F00005A0F000000010000000E0000000F000047030000100F0000540F000000020000000E0000000F00001A040000FB0E00004E0F000000030000000E0000000F0000EE040000E60E0000470F000000040000000E0000000F0000C1050000D00E0000410F000000050000000E0000000F000094060000BB0E00003B0F000000060000000E0000000F000068070000A50E0000350F000000070000000E0000000F00003B080000900E00002E0F000000080000000E0000000F00000E0900007A0E0000280F000000090000000E0000000F0000E2090000650E0000220F0000000A0000000E0000000F0000B50A00004F0E00001B0F0000000B0000000E0000000F0000880B00003A0E0000150F0000000C0000000E0000000F00005C0C0000250E00000F0F0000000D0000000E0000000F00002F0D00000F0E0000090F0000000E0000000E0000000F0000020E0000FA0D0000020F0000000F0000000E0000000F0000D50E0000E40D0000FC0E000000100000000E0000000F0000A90F0000CF0D0000F60E000000000000000F0000000F00009F020000FF0F00005E0F000000010000000F0000000F000072030000FF0F0000570F000000020000000F0000000F000045040000FF0F0000510F000000030000000F0000000F000018050000FF0F00004A0F000000040000000F0000000F0000EB050000ED0F0000440F000000050000000F0000000F0000BF060000D80F00003E0F000000060000000F0000000F000092070000C20F0000370F000000070000000F0000000F000065080000AC0F0000310F000000080000000F0000000F000038090000960F00002A0F000000090000000F0000000F00000B0A0000800F0000240F0000000A0000000F0000000F0000DF0A00006A0F00001E0F0000000B0000000F0000000F0000B20B0000550F0000170F0000000C0000000F0000000F0000850C00003F0F0000110F0000000D0000000F0000000F0000580D0000290F00000A0F0000000E0000000F0000000F00002B0E0000130F0000040F0000000F0000000F0000000F0000FF0E0000FF0E0000FF0E000000100000000F0000000F0000D20F0000E80E0000F70E00000000000000100000000F0000C9020000FF0F0000610F00000001000000100000000F00009C030000FF0F00005B0F00000002000000100000000F00006F040000FF0F0000540F00000003000000100000000F000043050000FF0F00004E0F00000004000000100000000F000016060000FF0F0000470F00000005000000100000000F0000E9060000FF0F0000400F00000006000000100000000F0000BC070000FF0F00003A0F00000007000000100000000F00008F080000FF0F0000330F00000008000000100000000F000062090000FF0F00002D0F00000009000000100000000F0000350A0000FF0F0000260F0000000A000000100000000F0000080B0000FF0F0000200F0000000B000000100000000F0000DB0B0000FF0F0000190F0000000C000000100000000F0000AE0C0000FF0F0000130F0000000D000000100000000F0000810D0000FF0F00000C0F0000000E000000100000000F0000550E0000FF0F0000060F0000000F000000100000000F0000280F0000FF0F0000FF0E00000010000000100000000F0000FB0F0000FF0F0000F90E00000000000000000000001000002000000000000000FF0F0000000100000000000000100000F500000000000000FF0F0000000200000000000000100000CA01000000000000FF0F0000000300000000000000100000A002000000000000FF0F00000004000000000000001000007503000000000000FF0F00000005000000000000001000004A04000000000000FF0F00000006000000000000001000001F05000000000000FF0F0000000700000000000000100000F405000000000000FF0F0000000800000000000000100000C906000000000000FF0F00000009000000000000001000009E07000000000000FF0F0000000A000000000000001000007308000000000000FF0F0000000B000000000000001000004809000000000000FC0F0000000C000000000000001000001E0A000000000000F70F0000000D00000000000000100000F30A000000000000F30F0000000E00000000000000100000C80B000000000000EE0F0000000F000000000000001000009D0C000000000000EA0F0000001000000000000000100000720D000000000000E50F00000000000000010000001000004B0000008B000000FF0F0000000100000001000000100000200100007B000000FF0F0000000200000001000000100000F50100006B000000FF0F0000000300000001000000100000CA0200005B000000FF0F00000004000000010000001000009F0300004B000000FF0F0000000500000001000000100000740400003B000000FF0F0000000600000001000000100000490500002B000000FF0F00000007000000010000001000001E0600001B000000FF0F0000000800000001000000100000F30600000B000000FF0F0000000900000001000000100000C807000000000000FF0F0000000A000000010000001000009D08000000000000FF0F0000000B000000010000001000007209000000000000FE0F0000000C00000001000000100000470A000000000000F90F0000000D000000010000001000001C0B000000000000F50F0000000E00000001000000100000F10B000000000000F00F0000000F00000001000000100000C60C000000000000EC0F00000010000000010000001000009B0D000000000000E70F000000000000000200000010000076000000AA010000FF0F00000001000000020000001000004B0100009A010000FF0F00000002000000020000001000001F02000089010000FF0F0000000300000002000000100000F402000079010000FF0F0000000400000002000000100000C903000069010000FF0F00000005000000020000001000009E04000058010000FF0F00000006000000020000001000007305000048010000FF0F00000007000000020000001000004806000038010000FF0F00000008000000020000001000001D07000027010000FF0F0000000900000002000000100000F107000017010000FF0F0000000A00000002000000100000C608000006010000FF0F0000000B000000020000001000009B090000F6000000FF0F0000000C00000002000000100000700A0000E6000000FB0F0000000D00000002000000100000450B0000D5000000F70F0000000E000000020000001000001A0C0000C5000000F20F0000000F00000002000000100000EE0C0000B4000000ED0F0000001000000002000000100000C30D0000A4000000E80F0000000000000003000000100000A0000000C9020000FF0F000000010000000300000010000075010000B8020000FF0F00000002000000030000001000004A020000A8020000FF0F00000003000000030000001000001F03000097020000FF0F0000000400000003000000100000F303000086020000FF0F0000000500000003000000100000C804000075020000FF0F00000006000000030000001000009D05000064020000FF0F00000007000000030000001000007106000054020000FF0F00000008000000030000001000004607000043020000FF0F00000009000000030000001000001B08000032020000FF0F0000000A00000003000000100000F008000021020000FF0F0000000B00000003000000100000C409000011020000FF0F0000000C00000003000000100000990A000000020000FD0F0000000D000000030000001000006E0B0000EF010000F80F0000000E00000003000000100000430C0000DE010000F30F0000000F00000003000000100000170D0000CD010000EF0F0000001000000003000000100000EC0D0000BD010000EA0F0000000000000004000000100000CB000000E8030000FF0F0000000100000004000000100000A0010000D7030000FF0F000000020000000400000010000074020000C6030000FF0F000000030000000400000010000049030000B4030000FF0F00000004000000040000001000001E040000A3030000FF0F0000000500000004000000100000F204000092030000FF0F0000000600000004000000100000C705000081030000FF0F00000007000000040000001000009B06000070030000FF0F0000000800000004000000100000700700005F030000FF0F0000000900000004000000100000440800004D030000FF0F0000000A00000004000000100000190900003C030000FF0F0000000B00000004000000100000EE0900002B030000FF0F0000000C00000004000000100000C20A00001A030000FF0F0000000D00000004000000100000970B000009030000FA0F0000000E000000040000001000006B0C0000F8020000F50F0000000F00000004000000100000400D0000E6020000F00F0000001000000004000000100000150E0000D5020000EB0F0000000000000005000000100000F600000007050000FF0F0000000100000005000000100000CA010000F5040000FF0F00000002000000050000001000009F020000E4040000FF0F000000030000000500000010000073030000D2040000FF0F000000040000000500000010000048040000C1040000FF0F00000005000000050000001000001C050000AF040000FF0F0000000600000005000000100000F10500009D040000FF0F0000000700000005000000100000C50600008C040000FF0F00000008000000050000001000009A0700007A040000FF0F00000009000000050000001000006E08000069040000FF0F0000000A000000050000001000004309000057040000FF0F0000000B00000005000000100000170A000046040000FF0F0000000C00000005000000100000EB0A000034040000FF0F0000000D00000005000000100000C00B000023040000FC0F0000000E00000005000000100000940C000011040000F70F0000000F00000005000000100000690D0000FF030000F20F00000010000000050000001000003D0E0000EE030000EC0F00000000000000060000001000002101000026060000FF0F0000000100000006000000100000F501000014060000FF0F0000000200000006000000100000C902000002060000FF0F00000003000000060000001000009E030000F0050000FF0F000000040000000600000010000072040000DE050000FF0F000000050000000600000010000046050000CC050000FF0F00000006000000060000001000001B060000BA050000FF0F0000000700000006000000100000EF060000A8050000FF0F0000000800000006000000100000C307000096050000FF0F00000009000000060000001000009808000084050000FF0F0000000A000000060000001000006C09000072050000FF0F0000000B00000006000000100000400A000060050000FF0F0000000C00000006000000100000150B00004E050000FF0F0000000D00000006000000100000E90B00003C050000FE0F0000000E00000006000000100000BD0C00002A050000F80F0000000F00000006000000100000910D000018050000F30F0000001000000006000000100000660E000006050000EE0F00000000000000070000001000004C01000045070000FF0F00000001000000070000001000002002000032070000FF0F0000000200000007000000100000F402000020070000FF0F0000000300000007000000100000C80300000E070000FF0F00000004000000070000001000009C040000FB060000FF0F000000050000000700000010000070050000E9060000FF0F000000060000000700000010000045060000D7060000FF0F000000070000000700000010000019070000C4060000FF0F0000000800000007000000100000ED070000B2060000FF0F0000000900000007000000100000C10800009F060000FF0F0000000A00000007000000100000950900008D060000FF0F0000000B000000070000001000006A0A00007B060000FF0F0000000C000000070000001000003E0B000068060000FF0F0000000D00000007000000100000120C000056060000FF0F0000000E00000007000000100000E60C000044060000FA0F0000000F00000007000000100000BA0D000031060000F50F00000010000000070000001000008E0E00001F060000EF0F00000000000000080000001000007601000064080000FF0F00000001000000080000001000004A02000051080000FF0F00000002000000080000001000001E0300003E080000FF0F0000000300000008000000100000F20300002B080000FF0F0000000400000008000000100000C704000019080000FF0F00000005000000080000001000009B05000006080000FF0F00000006000000080000001000006F060000F3070000FF0F000000070000000800000010000043070000E0070000FF0F000000080000000800000010000017080000CE070000FF0F0000000900000008000000100000EB080000BB070000FF0F0000000A00000008000000100000BF090000A8070000FF0F0000000B00000008000000100000930A000095070000FF0F0000000C00000008000000100000670B000083070000FF0F0000000D000000080000001000003B0C000070070000FF0F0000000E000000080000001000000F0D00005D070000FC0F0000000F00000008000000100000E30D00004A070000F60F0000001000000008000000100000B70E000038070000F10F0000000000000009000000100000A101000083090000FF0F0000000100000009000000100000750200006F090000FF0F0000000200000009000000100000490300005C090000FF0F00000003000000090000001000001D04000049090000FF0F0000000400000009000000100000F104000036090000FF0F0000000500000009000000100000C505000023090000FF0F00000006000000090000001000009906000010090000FF0F00000007000000090000001000006C070000FC080000FF0F000000080000000900000010000040080000E9080000FF0F000000090000000900000010000014090000D6080000FF0F0000000A00000009000000100000E8090000C3080000FF0F0000000B00000009000000100000BC0A0000B0080000FF0F0000000C00000009000000100000900B00009D080000FF0F0000000D00000009000000100000640C00008A080000FF0F0000000E00000009000000100000380D000076080000FD0F0000000F000000090000001000000C0E000063080000F80F0000001000000009000000100000E00E000050080000F20F000000000000000A000000100000CC010000A10A0000FF0F000000010000000A000000100000A00200008E0A0000FF0F000000020000000A000000100000730300007A0A0000FF0F000000030000000A00000010000047040000670A0000FF0F000000040000000A0000001000001B050000530A0000FF0F000000050000000A000000100000EF050000400A0000FF0F000000060000000A000000100000C30600002C0A0000FF0F000000070000000A00000010000096070000190A0000FF0F000000080000000A0000001000006A080000050A0000FF0F000000090000000A0000001000003E090000F2090000FF0F0000000A0000000A000000100000120A0000DE090000FF0F0000000B0000000A000000100000E50A0000CA090000FF0F0000000C0000000A000000100000B90B0000B7090000FF0F0000000D0000000A0000001000008D0C0000A3090000FF0F0000000E0000000A000000100000610D000090090000FF0F0000000F0000000A000000100000340E00007C090000F90F000000100000000A000000100000080F000069090000F30F000000000000000B000000100000F7010000C00B0000FF0F000000010000000B000000100000CA020000AC0B0000FF0F000000020000000B0000001000009E030000980B0000FF0F000000030000000B00000010000072040000850B0000FF0F000000040000000B00000010000045050000710B0000FF0F000000050000000B000000100000190600005D0B0000FF0F000000060000000B000000100000ED060000490B0000FF0F000000070000000B000000100000C0070000350B0000FF0F000000080000000B00000010000094080000210B0000FF0F000000090000000B000000100000670900000D0B0000FF0F0000000A0000000B0000001000003B0A0000F90A0000FF0F0000000B0000000B0000001000000F0B0000E50A0000FF0F0000000C0000000B000000100000E20B0000D10A0000FF0F0000000D0000000B000000100000B60C0000BD0A0000FF0F0000000E0000000B0000001000008A0D0000A90A0000FF0F0000000F0000000B0000001000005D0E0000950A0000FB0F000000100000000B000000100000310F0000810A0000F50F000000000000000C00000010000021020000DF0C0000FF0F000000010000000C000000100000F5020000CB0C0000FF0F000000020000000C000000100000C8030000B70C0000FF0F000000030000000C0000001000009C040000A20C0000FF0F000000040000000C0000001000006F0500008E0C0000FF0F000000050000000C000000100000430600007A0C0000FF0F000000060000000C00000010000016070000650C0000FF0F000000070000000C000000100000EA070000510C0000FF0F000000080000000C000000100000BD0800003D0C0000FF0F000000090000000C00000010000091090000280C0000FF0F0000000A0000000C000000100000640A0000140C0000FF0F0000000B0000000C000000100000380B0000000C0000FF0F0000000C0000000C0000001000000C0C0000EB0B0000FF0F0000000D0000000C000000100000DF0C0000D70B0000FF0F0000000E0000000C000000100000B30D0000C30B0000FF0F0000000F0000000C000000100000860E0000AE0B0000FC0F000000100000000C0000001000005A0F00009A0B0000F60F000000000000000D0000001000004C020000FE0D0000FF0F000000010000000D00000010000020030000E90D0000FF0F000000020000000D000000100000F3030000D50D0000FF0F000000030000000D000000100000C6040000C00D0000FF0F000000040000000D0000001000009A050000AB0D0000FF0F000000050000000D0000001000006D060000970D0000FF0F000000060000000D00000010000040070000820D0000FF0F000000070000000D000000100000140800006D0D0000FF0F000000080000000D000000100000E7080000580D0000FF0F000000090000000D000000100000BB090000440D0000FF0F0000000A0000000D0000001000008E0A00002F0D0000FF0F0000000B0000000D000000100000610B00001A0D0000FF0F0000000C0000000D000000100000350C0000050D0000FF0F0000000D0000000D000000100000080D0000F10C0000FF0F0000000E0000000D000000100000DB0D0000DC0C0000FF0F0000000F0000000D000000100000AF0E0000C70C0000FE0F000000100000000D000000100000820F0000B20C0000F80F000000000000000E000000100000770200001D0F0000FF0F000000010000000E0000001000004A030000080F0000FF0F000000020000000E0000001000001D040000F30E0000FF0F000000030000000E000000100000F1040000DE0E0000FF0F000000040000000E000000100000C4050000C90E0000FF0F000000050000000E00000010000097060000B30E0000FF0F000000060000000E0000001000006A0700009E0E0000FF0F000000070000000E0000001000003E080000890E0000FF0F000000080000000E00000010000011090000740E0000FF0F000000090000000E000000100000E40900005F0E0000FF0F0000000A0000000E000000100000B70A00004A0E0000FF0F0000000B0000000E0000001000008B0B0000350E0000FF0F0000000C0000000E0000001000005E0C0000200E0000FF0F0000000D0000000E000000100000310D00000A0E0000FF0F0000000E0000000E000000100000040E0000F50D0000FF0F0000000F0000000E000000100000D80E0000E00D0000FF0F000000100000000E000000100000AB0F0000CB0D0000F90F000000000000000F000000100000A2020000FF0F0000FF0F000000010000000F00000010000075030000FF0F0000FF0F000000020000000F00000010000048040000FF0F0000FF0F000000030000000F0000001000001B050000FB0F0000FF0F000000040000000F000000100000EE050000E60F0000FF0F000000050000000F000000100000C1060000D00F0000FF0F000000060000000F00000010000094070000BB0F0000FF0F000000070000000F00000010000067080000A50F0000FF0F000000080000000F0000001000003B090000900F0000FF0F000000090000000F0000001000000E0A00007A0F0000FF0F0000000A0000000F000000100000E10A0000650F0000FF0F0000000B0000000F000000100000B40B00004F0F0000FF0F0000000C0000000F000000100000870C00003A0F0000FF0F0000000D0000000F0000001000005A0D0000240F0000FF0F0000000E0000000F0000001000002D0E00000F0F0000FF0F0000000F0000000F000000100000000F0000F90E0000FF0F000000100000000F000000100000D30F0000E40E0000FA0F0000000000000010000000100000CD020000FF0F0000FF0F0000000100000010000000100000A0030000FF0F0000FF0F000000020000001000000010000073040000FF0F0000FF0F000000030000001000000010000045050000FF0F0000FF0F000000040000001000000010000018060000FF0F0000FF0F0000000500000010000000100000EB060000FF0F0000FF0F0000000600000010000000100000BE070000FF0F0000FF0F000000070000001000000010000091080000FF0F0000FF0F000000080000001000000010000064090000FF0F0000FF0F0000000900000010000000100000370A0000FF0F0000FF0F0000000A000000100000001000000A0B0000FF0F0000FF0F0000000B00000010000000100000DD0B0000FF0F0000FF0F0000000C00000010000000100000B00C0000FF0F0000FF0F0000000D00000010000000100000830D0000FF0F0000FF0F0000000E00000010000000100000560E0000FF0F0000FF0F0000000F00000010000000100000290F0000FF0F0000FF0F0000001000000010000000100000FF0F0000FF0F0000FF0F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000410300000000000000000000000800000000000000000000830600000000000000000000000C00000000000000000000C40900000000000000000000001000000000000000000000060D00000000000000000000000000000004000000000000A60000007604000002000000000400000004000000000000EC0300001D0400000000000000080000000400000000000032070000C303000000000000000C00000004000000000000780A00006A03000000000000001000000004000000000000BE0D000010030000000000000000000000080000000000004C010000F108000007000000000400000008000000000000960400009108000000000000000800000008000000000000E10700003208000000000000000C000000080000000000002C0B0000D307000000000000001000000008000000000000770E0000740700000000000000000000000C000000000000F20100006B0D00000B00000000040000000C00000000000041050000060D00000000000000080000000C00000000000090080000A10C000000000000000C0000000C000000000000E00B00003C0C00000000000000100000000C0000000000002F0F0000D70B00000000000000000000001000000000000098020000FF0F00000F000000000400000010000000000000EC050000FF0F0000000000000008000000100000000000003F090000FF0F000000000000000C00000010000000000000930C0000FF0F000000000000001000000010000000000000E70F0000FF0F00000000000000000000000000000004000008000000000000000A0400000004000000000000000400004E03000000000000F00300000008000000000000000400009406000000000000D6030000000C00000000000000040000DB09000000000000BC030000001000000000000000040000210D000000000000A2030000000000000004000000040000AF000000530400001104000000040000000400000004000000040000000400000004000000080000000400000004000041070000AA030000E0030000000C000000040000000400008B0A000056030000C8030000001000000004000000040000D40D000002030000AF03000000000000000800000004000056010000CD08000017040000000400000008000000040000A20400007308000001040000000800000008000000040000EE07000019080000EA030000000C000000080000000400003B0B0000BF070000D3030000001000000008000000040000870E000065070000BD03000000000000000C000000040000FE010000480D00001E04000000040000000C0000000400004D050000E80C00000904000000080000000C0000000400009C080000880C0000F4030000000C0000000C000000040000EB0B0000280C0000DF03000000100000000C0000000400003A0F0000C80B0000CA030000000000000010000000040000A5020000FF0F000025040000000400000010000000040000F7050000FF0F00001204000000080000001000000004000049090000FF0F0000FE030000000C000000100000000400009B0C0000FF0F0000EB030000001000000010000000040000ED0F0000FF0F0000D70300000000000000000000000800001000000000000000150800000004000000000000000800005B03000000000000FE070000000800000000000000080000A606000000000000E7070000000C00000000000000080000F109000000000000D00700000010000000000000000800003C0D000000000000B9070000000000000004000000080000B80000002F0400001F08000000040000000400000008000005040000E0030000080800000008000000040000000800005107000091030000F1070000000C000000040000000800009D0A000042030000DA070000001000000004000000080000E90D0000F3020000C307000000000000000800000008000061010000AA08000028080000000400000008000000080000AE0400005508000012080000000800000008000000080000000800000008000000080000000C00000008000000080000490B0000AB070000E5070000001000000008000000080000970E000056070000CE07000000000000000C0000000800000A020000250D00003208000000040000000C00000008000058050000CA0C00001B08000000080000000C000000080000A70800006F0C000005080000000C0000000C000000080000F60B0000140C0000EF07000000100000000C000000080000440F0000B90B0000D9070000000000000010000000080000B2020000FF0F00003B08000000040000001000000008000002060000FF0F00002508000000080000001000000008000052090000FF0F00000F080000000C00000010000000080000A20C0000FF0F0000F9070000001000000010000000080000F20F0000FF0F0000E30700000000000000000000000C00001800000000000000210C00000004000000000000000C000068030000000000000D0C00000008000000000000000C0000B706000000000000F80B0000000C000000000000000C0000070A000000000000E40B00000010000000000000000C0000570D000000000000CF0B00000000000000040000000C0000C20000000C0400002D0C00000004000000040000000C000011040000C2030000180C00000008000000040000000C00006007000078030000020C0000000C000000040000000C0000B00A00002E030000ED0B00000010000000040000000C0000FF0D0000E4020000D70B00000000000000080000000C00006C01000087080000390C00000004000000080000000C0000BA04000037080000230C00000008000000080000000C000009080000E70700000C0C0000000C000000080000000C0000580B000097070000F60B00000010000000080000000C0000A70E000047070000DF0B000000000000000C0000000C000016020000020D0000450C000000040000000C0000000C000064050000AC0C00002D0C000000080000000C0000000C0000B2080000560C0000160C0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B000000100000000C0000000C00004F0F0000A90B0000E70B00000000000000100000000C0000BF020000FF0F0000510C00000004000000100000000C00000D060000FF0F0000380C00000008000000100000000C00005B090000FF0F0000200C0000000C000000100000000C0000A90C0000FF0F0000080C00000010000000100000000C0000F70F0000FF0F0000F00B00000000000000000000001000002000000000000000FF0F00000004000000000000001000007503000000000000FF0F0000000800000000000000100000C906000000000000FF0F0000000C000000000000001000001E0A000000000000F70F0000001000000000000000100000720D000000000000E50F0000000000000004000000100000CB000000E8030000FF0F00000004000000040000001000001E040000A3030000FF0F0000000800000004000000100000700700005F030000FF0F0000000C00000004000000100000C20A00001A030000FF0F0000001000000004000000100000150E0000D5020000EB0F00000000000000080000001000007601000064080000FF0F0000000400000008000000100000C704000019080000FF0F000000080000000800000010000017080000CE070000FF0F0000000C00000008000000100000670B000083070000FF0F0000001000000008000000100000B70E000038070000F10F000000000000000C00000010000021020000DF0C0000FF0F000000040000000C0000001000006F0500008E0C0000FF0F000000080000000C000000100000BD0800003D0C0000FF0F0000000C0000000C0000001000000C0C0000EB0B0000FF0F000000100000000C0000001000005A0F00009A0B0000F60F0000000000000010000000100000CD020000FF0F0000FF0F000000040000001000000010000018060000FF0F0000FF0F000000080000001000000010000064090000FF0F0000FF0F0000000C00000010000000100000B00C0000FF0F0000FF0F0000001000000010000000100000FF0F0000FF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000500000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000002C0000003C00000048000000520000005B000000630000006A00000071000000770000007D00000082000000880000008D00000091000000960000009B0000009F000000A3000000A7000000AB000000AF000000B3000000B6000000BA000000BD000000C1000000C4000000C7000000CB000000CE000000D1000000D4000000D7000000DA000000DD000000DF000000E2000000E5000000E8000000EA000000ED000000F0000000F2000000F5000000F7000000FA000000FC000000FF000000010100000301000006010000080100000A0100000D0100000F010000110100001301000016010000180100001A0100001C0100001E01000020010000220100002401000026010000280100002A0100002C0100002E01000030010000320100003401000036010000380100003A0100003C0100003E0100003F01000041010000430100004501000047010000480100004A0100004C0100004E0100004F01000051010000530100005501000056010000580100005A0100005B0100005D0100005F0100006001000062010000640100006501000067010000680100006A0100006B0100006D0100006F010000700100007201000073010000750100007601000078010000790100007B0100007C0100007E0100007F010000810100008201000084010000850100008701000088010000890100008B0100008C0100008E0100008F010000910100009201000093010000950100009601000097010000990100009A0100009C0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A6010000A8010000A9010000AA010000AB010000AD010000AE010000AF010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BB010000BC010000BD010000BE010000C0010000C1010000C2010000C3010000C4010000C6010000C7010000C8010000C9010000CA010000CC010000CD010000CE010000CF010000D0010000D2010000D3010000D4010000D5010000D6010000D7010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003F02000040020000410200004202000043020000440200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004C0200004D0200004E0200004F0200005002000051020000520200005302000053020000540200005502000056020000570200005802000059020000590200005A0200005B0200005C0200005D0200005E0200005F0200005F02000060020000610200006202000063020000640200006502000065020000660200006702000068020000690200006A0200006A0200006B0200006C0200006D0200006E0200006F0200006F0200007002000071020000720200007302000073020000740200007502000076020000770200007802000078020000790200007A0200007B0200007C0200007C0200007D0200007E0200007F020000800200008002000081020000820200008302000084020000840200008502000086020000870200008702000088020000890200008A0200008B0200008B0200008C0200008D0200008E0200008F0200008F020000900200009102000092020000920200009302000094020000950200009502000096020000970200009802000099020000990200009A0200009B0200009C0200009C0200009D0200009E0200009F0200009F020000A0020000A1020000A2020000A2020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B5020000B6020000B6020000B7020000B8020000B8020000B9020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C4020000C5020000C5020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CC020000CC020000CD020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D3020000D3020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E1020000E2020000E2020000E3020000E4020000E4020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000EA020000EA020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000EF020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FB020000FB020000FC020000FD020000FD020000FE020000FE020000FF020000000300000003000001030000020300000203000003030000040300000403000005030000050300000603000007030000070300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F030000100300001003000011030000110300001203000013030000130300001403000015030000150300001603000016030000170300001803000018030000190300001A0300001A0300001B0300001B0300001C0300001D0300001D0300001E0300001E0300001F03000020030000200300002103000021030000220300002303000023030000240300002503000025030000260300002603000027030000280300002803000029030000290300002A0300002B0300002B0300002C0300002C0300002D0300002E0300002E0300002F0300002F03000030030000310300003103000032030000320300003303000034030000340300003503000035030000360300003603000037030000380300003803000039030000390300003A0300003B0300003B0300003C0300003C0300003D0300003E0300003E0300003F0300003F03000040030000400300004103000042030000420300004303000043030000440300004403000045030000460300004603000047030000470300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004D0300004D0300004E0300004E0300004F0300004F03000050030000510300005103000052030000520300005303000053030000540300005503000055030000560300005603000057030000570300005803000058030000590300005A0300005A0300005B0300005B0300005C0300005C0300005D0300005E0300005E0300005F0300005F0300006003000060030000610300006103000062030000630300006303000064030000640300006503000065030000660300006603000067030000670300006803000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000072030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F030000800300008003000081030000810300008203000083030000830300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F030000900300009003000091030000910300009203000092030000930300009303000094030000940300009503000095030000960300009603000097030000970300009803000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D6030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E6030000E7030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EE030000EF030000EF030000F0030000F0030000F1030000F1030000F2030000F2030000F3030000F3030000F4030000F4030000F4030000F5030000F5030000F6030000F6030000F7030000F7030000F8030000F8030000F9030000F9030000FA030000FA030000FA030000FB030000FB030000FC030000FC030000FD030000FD030000FE030000FE030000FF030000FF030000000000002800000037000000430000004C000000540000005B00000062000000680000006E00000073000000780000007D00000082000000860000008A0000008E00000092000000960000009A0000009E000000A1000000A5000000A8000000AB000000AE000000B2000000B5000000B8000000BB000000BE000000C0000000C3000000C6000000C9000000CB000000CE000000D0000000D3000000D6000000D8000000DA000000DD000000DF000000E2000000E4000000E6000000E8000000EB000000ED000000EF000000F1000000F3000000F5000000F8000000FA000000FC000000FE00000000010000020100000401000006010000080100000A0100000B0100000D0100000F01000011010000130100001501000017010000180100001A0100001C0100001E0100001F01000021010000230100002501000026010000280100002A0100002B0100002D0100002F0100003001000032010000330100003501000037010000380100003A0100003B0100003D0100003E010000400100004201000043010000450100004601000048010000490100004B0100004C0100004D0100004F010000500100005201000053010000550100005601000057010000590100005A0100005C0100005D0100005E01000060010000610100006301000064010000650100006701000068010000690100006B0100006C0100006D0100006E01000070010000710100007201000074010000750100007601000077010000790100007A0100007B0100007C0100007E0100007F01000080010000810100008301000084010000850100008601000087010000890100008A0100008B0100008C0100008D0100008F0100009001000091010000920100009301000094010000960100009701000098010000990100009A0100009B0100009C0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FC010000FD010000FE010000FF0100000002000001020000020200000302000003020000040200000502000006020000070200000802000009020000090200000A0200000B0200000C0200000D0200000E0200000E0200000F0200001002000011020000120200001302000013020000140200001502000016020000170200001802000018020000190200001A0200001B0200001C0200001D0200001D0200001E0200001F020000200200002102000021020000220200002302000024020000250200002502000026020000270200002802000029020000290200002A0200002B0200002C0200002D0200002D0200002E0200002F020000300200003102000031020000320200003302000034020000340200003502000036020000370200003802000038020000390200003A0200003B0200003B0200003C0200003D0200003E0200003E0200003F020000400200004102000041020000420200004302000044020000440200004502000046020000470200004702000048020000490200004A0200004A0200004B0200004C0200004D0200004D0200004E0200004F02000050020000500200005102000052020000520200005302000054020000550200005502000056020000570200005802000058020000590200005A0200005A0200005B0200005C0200005D0200005D0200005E0200005F0200005F02000060020000610200006202000062020000630200006402000064020000650200006602000066020000670200006802000069020000690200006A0200006B0200006B0200006C0200006D0200006D0200006E0200006F0200006F02000070020000710200007202000072020000730200007402000074020000750200007602000076020000770200007802000078020000790200007A0200007A0200007B0200007C0200007C0200007D0200007E0200007E0200007F0200008002000080020000810200008202000082020000830200008402000084020000850200008602000086020000870200008802000088020000890200008A0200008A0200008B0200008C0200008C0200008D0200008E0200008E0200008F0200008F0200009002000091020000910200009202000093020000930200009402000095020000950200009602000097020000970200009802000098020000990200009A0200009A0200009B0200009C0200009C0200009D0200009E0200009E0200009F0200009F020000A0020000A1020000A1020000A2020000A3020000A3020000A4020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000A9020000A9020000AA020000AB020000AB020000AC020000AD020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B1020000B2020000B3020000B3020000B4020000B4020000B5020000B6020000B6020000B7020000B7020000B8020000B9020000B9020000BA020000BA020000BB020000BC020000BC020000BD020000BD020000BE020000BF020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C6020000C7020000C8020000C8020000C9020000C9020000CA020000CA020000CB020000CC020000CC020000CD020000CD020000CE020000CF020000CF020000D0020000D0020000D1020000D1020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E4020000E5020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000E9020000EA020000EA020000EB020000EB020000EC020000ED020000ED020000EE020000EE020000EF020000EF020000F0020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F4020000F5020000F5020000F6020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FB020000FB020000FC020000FC020000FD020000FD020000FE020000FF020000FF020000000300000003000001030000010300000203000002030000030300000303000004030000040300000503000005030000060300000703000007030000080300000803000009030000090300000A0300000A0300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000F0300000F030000100300001103000011030000120300001203000013030000130300001403000014030000150300001503000016030000160300001703000017030000180300001803000019030000190300001A0300001A0300001B0300001B0300001C0300001C0300001D0300001D0300001E0300001E0300001F0300001F030000200300002003000021030000220300002203000023030000230300002403000024030000250300002503000026030000260300002703000027030000280300002803000029030000290300002A0300002A0300002B0300002B0300002C0300002C0300002D0300002D0300002E0300002E0300002F0300002F03000030030000300300003103000031030000320300003203000033030000330300003403000034030000350300003503000036030000360300003703000037030000380300003803000039030000390300003A0300003A0300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003E0300003F0300003F03000040030000400300004103000041030000420300004203000043030000430300004403000044030000450300004503000046030000460300004703000047030000480300004803000049030000490300004A0300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000050030000510300005103000052030000520300005303000053030000540300005403000054030000550300005503000056030000560300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005C0300005C0300005C0300005D0300005D0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000630300006303000063030000640300006403000065030000650300006603000066030000670300006703000068030000680300006903000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000072030000730300007303000073030000740300007403000075030000750300007603000076030000770300007703000078030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F03000080030000800300008003000081030000810300008203000082030000830300008303000084030000840300008403000085030000850300008603000086030000870300008703000088030000880300008803000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F0300008F03000090030000900300009103000091030000920300009203000092030000930300009303000094030000940300009503000095030000960300009603000096030000970300009703000098030000980300009903000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A5030000A6030000A6030000A7030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AD030000AE030000AE030000AF030000000000002B0000003B00000047000000510000005A00000062000000690000006F000000750000007B00000081000000860000008B0000009000000094000000990000009D000000A1000000A5000000A9000000AD000000B0000000B4000000B7000000BB000000BE000000C2000000C5000000C8000000CB000000CE000000D1000000D4000000D7000000DA000000DD000000DF000000E2000000E5000000E7000000EA000000ED000000EF000000F2000000F4000000F7000000F9000000FB000000FE00000000010000020100000501000007010000090100000C0100000E01000010010000120100001401000016010000180100001A0100001D0100001F01000021010000230100002501000027010000290100002A0100002C0100002E01000030010000320100003401000036010000380100003A0100003B0100003D0100003F0100004101000043010000440100004601000048010000490100004B0100004D0100004F0100005001000052010000540100005501000057010000590100005A0100005C0100005D0100005F0100006101000062010000640100006501000067010000680100006A0100006C0100006D0100006F010000700100007201000073010000750100007601000078010000790100007A0100007C0100007D0100007F010000800100008201000083010000850100008601000087010000890100008A0100008B0100008D0100008E01000090010000910100009201000094010000950100009601000098010000990100009A0100009C0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A6010000A7010000A9010000AA010000AB010000AC010000AE010000AF010000B0010000B1010000B3010000B4010000B5010000B6010000B8010000B9010000BA010000BB010000BC010000BE010000BF010000C0010000C1010000C2010000C4010000C5010000C6010000C7010000C8010000C9010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F02000010020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F02000020020000210200002202000023020000240200002502000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F02000030020000310200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003F0200004002000041020000420200004202000043020000440200004502000046020000470200004802000048020000490200004A0200004B0200004C0200004D0200004E0200004F0200004F0200005002000051020000520200005302000054020000540200005502000056020000570200005802000059020000590200005A0200005B0200005C0200005D0200005E0200005E0200005F0200006002000061020000620200006302000063020000640200006502000066020000670200006802000068020000690200006A0200006B0200006C0200006C0200006D0200006E0200006F020000700200007002000071020000720200007302000074020000740200007502000076020000770200007802000078020000790200007A0200007B0200007B0200007C0200007D0200007E0200007F0200007F020000800200008102000082020000820200008302000084020000850200008602000086020000870200008802000089020000890200008A0200008B0200008C0200008C0200008D0200008E0200008F0200008F020000900200009102000092020000920200009302000094020000950200009502000096020000970200009802000098020000990200009A0200009B0200009B0200009C0200009D0200009E0200009E0200009F020000A0020000A1020000A1020000A2020000A3020000A3020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B5020000B5020000B6020000B7020000B7020000B8020000B9020000BA020000BA020000BB020000BC020000BC020000BD020000BE020000BE020000BF020000C0020000C1020000C1020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CB020000CC020000CD020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D2020000D3020000D4020000D4020000D5020000D6020000D6020000D7020000D8020000D8020000D9020000DA020000DA020000DB020000DC020000DC020000DD020000DE020000DE020000DF020000DF020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E5020000E5020000E6020000E7020000E7020000E8020000E9020000E9020000EA020000EB020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000F0020000F0020000F1020000F2020000F2020000F3020000F4020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FB020000FC020000FC020000FD020000FE020000FE020000FF02000000030000000300000103000001030000020300000303000003030000040300000403000005030000060300000603000007030000080300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F03000010030000100300001103000011030000120300001303000013030000140300001403000015030000160300001603000017030000170300001803000019030000190300001A0300001A0300001B0300001C0300001C0300001D0300001D0300001E0300001F0300001F03000020030000200300002103000022030000220300002303000023030000240300002403000025030000260300002603000027030000270300002803000029030000290300002A0300002A0300002B0300002C0300002C0300002D0300002D0300002E0300002E0300002F0300003003000030030000310300003103000032030000330300003303000034030000340300003503000035030000360300003703000037030000380300003803000039030000390300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003F0300003F0300004003000040030000410300004103000042030000420300004303000044030000440300004503000045030000460300004603000047030000480300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000050030000510300005203000052030000530300005303000054030000540300005503000055030000560300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005C0300005D0300005D0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000630300006403000064030000650300006503000066030000660300006703000067030000680300006803000069030000690300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000073030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007C0300007D0300007E0300007E0300007F0300007F03000080030000800300008103000081030000820300008203000083030000830300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F030000900300009103000091030000920300009203000093030000930300009403000094030000950300009503000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000B9030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CC030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E5030000E6030000E6030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EA030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EF030000EF030000EF030000F0030000F0030000F1030000F1030000F2030000F2030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000005000000050000000500000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="3" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="sRGB" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" ColorGamut="srgb" DynamicRange="sdr" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ </Disp_Modes>
+ <Luts NumLuts="1">
+ <Lut Type="0" NumPackets="41">ECFFFFFF0000803F936F163FDA1AB13DEDFFFFFF0000803F87501D3FB9530A3EEEFFFFFF0000803FAAEE213FD1912C3EEFFFFFFF0000803F8CBC283F8C82603EF0FFFFFF0000803F473C2D3FD1E9813EF1FFFFFF0000803F5C02343FFE0E9D3EF2FFFFFF0000803F6E6E383FE04DAF3EF3FFFFFF0000803F31093F3F3C16CB3EF4FFFFFF0000803F3960433F73BDDD3EF5FFFFFF0000803F91D5493F6519FA3EF6FFFFFF0000803F840E4E3F957E063FF7FFFFFF0000803F1B62543FCEDF143FF8FFFFFF0000803F828C583F90871E3FF9FFFFFF0000803FF2B65E3F1A182D3FFAFFFFFF0000803FE7C4623FABCE363FFBFFFFFF0000803FD7BE683F8E5A453FFCFFFFFF0000803F41B66C3FD6194F3FFDFFFFFF0000803F1E8A723F8AAC5D3FFEFFFFFF0000803F516B763F6475673FFFFFFFFF0000803F8A227C3FB41E763F000000000000803F0000803F0000803F01000000836B723F6189773F0000803F02000000BF0C6A3F484E723F0000803F03000000CD945E3F191E6B3F0000803F04000000B988573FEFAB663F0000803F0500000084D44D3F5E81603F0000803F0600000045D9473FEBAA5C3F0000803F07000000CA883F3F2651573F0000803F080000005C593A3FADFB533F0000803F09000000802D333F05514F3F0000803F0A00000083C02E3FC3624C3F0000803F0B0000005986283FE04C483F0000803F0C0000008C9D243F18B3453F0000803F0D000000431C1F3F8909423F0000803F0E000000ABB21B3FE4C03F3F0000803F0F0000003DD4163FC07A3C3F0000803F1000000009C0133FE4683A3F0000803F110000008A740F3FF27B373F0000803F1200000039B80C3FCB9D353F0000803F130000005DDE083FBAF9323F0000803F140000009467063F3448313F0000803F</Lut>
+ </Luts>
+</Calib_Data>
diff --git a/config/qdcm_calib_data_nt35597_cmd_mode_dsi_truly_panel_with_DSC.xml b/config/qdcm_calib_data_nt35597_cmd_mode_dsi_truly_panel_with_DSC.xml
new file mode 100644
index 0000000..73c51fe
--- /dev/null
+++ b/config/qdcm_calib_data_nt35597_cmd_mode_dsi_truly_panel_with_DSC.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" ?>
+<!--
+Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+-->
+<Calib_Data>
+ <Disp_Modes NumModes="4" DefaultMode="0">
+ <Mode ModeID="0" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="native" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="native">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="1" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="HDR" NumOfFeatures="15" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="hdr" ColorGamut="dcip3" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000D90000000000000000000000000200000000000000000000B201000000000000000000000003000000000000000000008C02000000000000000000000004000000000000000000006503000000000000000000000005000000000000000000003F0400000000000000000000000600000000000000000000190500000000000000000000000700000000000000000000F30500000000000000000000000800000000000000000000CD0600000000000000000000000900000000000000000000A60700000000000000000000000A000000000000000000007F0800000000000000000000000B00000000000000000000580900000000000000000000000C00000000000000000000310A00000000000000000000000D00000000000000000000080B00000000000000000000000E00000000000000000000DF0B00000000000000000000000F00000000000000000000B60C000000000000000000000010000000000000000000008B0D00000000000000000000000000000001000000000000270000002A01000000000000000100000001000000000000FF0000001301000000000000000200000001000000000000D8010000FE00000000000000000300000001000000000000B2020000E8000000000000000004000000010000000000008B030000D40000000000000000050000000100000000000065040000C0000000000000000006000000010000000000003F050000AD00000000000000000700000001000000000000180600009A00000000000000000800000001000000000000F20600008800000000000000000900000001000000000000CB0700007700000000000000000A00000001000000000000A40800006600000000000000000B000000010000000000007D0900005500000000000000000C00000001000000000000550A00004500000000000000000D000000010000000000002D0B00003600000000000000000E00000001000000000000030C00002700000000000000000F00000001000000000000DA0C00001900000000000000001000000001000000000000AF0D00000B000000000000000000000000020000000000004E0000005102000000000000000100000002000000000000270100003A02000000000000000200000002000000000000FF0100002302000000000000000300000002000000000000D90200000E02000000000000000400000002000000000000B2030000F9010000000000000005000000020000000000008B040000E40100000000000000060000000200000000000065050000D0010000000000000007000000020000000000003E060000BD0100000000000000080000000200000000000018070000AB01000000000000000900000002000000000000F10700009901000000000000000A00000002000000000000CA0800008701000000000000000B00000002000000000000A20900007601000000000000000C000000020000000000007A0A00006601000000000000000D00000002000000000000520B00005601000000000000000E00000002000000000000290C00004701000000000000000F00000002000000000000FF0C00003801000000000000001000000002000000000000D40D00002A010000000000000000000000030000000000007700000075030000000000000001000000030000000000004F0100005D03000000000000000200000003000000000000270200004603000000000000000300000003000000000000000300003003000000000000000400000003000000000000DA0300001A03000000000000000500000003000000000000B304000006030000000000000006000000030000000000008C050000F10200000000000000070000000300000000000066060000DE020000000000000008000000030000000000003F070000CA0200000000000000090000000300000000000018080000B802000000000000000A00000003000000000000F1080000A602000000000000000B00000003000000000000C90900009402000000000000000C00000003000000000000A10A00008402000000000000000D00000003000000000000780B00007302000000000000000E000000030000000000004F0C00006302000000000000000F00000003000000000000240D00005402000000000000001000000003000000000000F90D00004502000000000000000000000004000000000000A00000009704000000000000000100000004000000000000780100007E04000000000000000200000004000000000000500200006704000000000000000300000004000000000000290300005004000000000000000400000004000000000000020400003A04000000000000000500000004000000000000DB0400002504000000000000000600000004000000000000B505000010040000000000000007000000040000000000008E060000FC0300000000000000080000000400000000000067070000E80300000000000000090000000400000000000040080000D503000000000000000A0000000400000000000018090000C203000000000000000B00000004000000000000F0090000B003000000000000000C00000004000000000000C80A00009F03000000000000000D000000040000000000009F0B00008E03000000000000000E00000004000000000000750C00007E03000000000000000F000000040000000000004B0D00006E03000000000000001000000004000000000000200E00005F03000000000000000000000005000000000000CA000000B705000000000000000100000005000000000000A20100009E050000000000000002000000050000000000007A0200008605000000000000000300000005000000000000530300006F050000000000000004000000050000000000002C0400005805000000000000000500000005000000000000040500004205000000000000000600000005000000000000DE0500002D05000000000000000700000005000000000000B706000018050000000000000008000000050000000000008F070000040500000000000000090000000500000000000068080000F004000000000000000A0000000500000000000040090000DD04000000000000000B00000005000000000000180A0000CB04000000000000000C00000005000000000000F00A0000B904000000000000000D00000005000000000000C70B0000A704000000000000000E000000050000000000009D0C00009604000000000000000F00000005000000000000720D00008604000000000000001000000005000000000000470E00007604000000000000000000000006000000000000F4000000D506000000000000000100000006000000000000CC010000BC06000000000000000200000006000000000000A4020000A4060000000000000003000000060000000000007D0300008C060000000000000004000000060000000000005504000075060000000000000005000000060000000000002E0500005E06000000000000000600000006000000000000070600004806000000000000000700000006000000000000E00600003306000000000000000800000006000000000000B90700001E06000000000000000900000006000000000000910800000A06000000000000000A0000000600000000000069090000F705000000000000000B00000006000000000000410A0000E405000000000000000C00000006000000000000180B0000D105000000000000000D00000006000000000000EF0B0000BF05000000000000000E00000006000000000000C50C0000AE05000000000000000F000000060000000000009A0D00009D050000000000000010000000060000000000006F0E00008C0500000000000000000000000700000000000020010000F307000000000000000100000007000000000000F7010000DA07000000000000000200000007000000000000CF020000C107000000000000000300000007000000000000A7030000A807000000000000000400000007000000000000800400009107000000000000000500000007000000000000590500007A070000000000000006000000070000000000003106000063070000000000000007000000070000000000000A0700004D07000000000000000800000007000000000000E20700003807000000000000000900000007000000000000BB0800002307000000000000000A00000007000000000000930900000F07000000000000000B000000070000000000006A0A0000FC06000000000000000C00000007000000000000410B0000E906000000000000000D00000007000000000000180C0000D606000000000000000E00000007000000000000EE0C0000C406000000000000000F00000007000000000000C30D0000B306000000000000001000000007000000000000970E0000A2060000000000000000000000080000000000004B010000110900000000000000010000000800000000000023020000F708000000000000000200000008000000000000FA020000DD08000000000000000300000008000000000000D3030000C408000000000000000400000008000000000000AB040000AC080000000000000005000000080000000000008305000095080000000000000006000000080000000000005C0600007E080000000000000007000000080000000000003407000067080000000000000008000000080000000000000D0800005208000000000000000900000008000000000000E50800003C08000000000000000A00000008000000000000BD0900002808000000000000000B00000008000000000000940A00001408000000000000000C000000080000000000006B0B00000008000000000000000D00000008000000000000410C0000ED07000000000000000E00000008000000000000170D0000DB07000000000000000F00000008000000000000EC0D0000C907000000000000001000000008000000000000C00E0000B707000000000000000000000009000000000000770100002F0A0000000000000001000000090000000000004F020000140A00000000000000020000000900000000000026030000FA09000000000000000300000009000000000000FE030000E109000000000000000400000009000000000000D6040000C809000000000000000500000009000000000000AF050000B0090000000000000006000000090000000000008706000098090000000000000007000000090000000000005F0700008209000000000000000800000009000000000000370800006B090000000000000009000000090000000000000F0900005609000000000000000A00000009000000000000E70900004009000000000000000B00000009000000000000BE0A00002C09000000000000000C00000009000000000000950B00001809000000000000000D000000090000000000006B0C00000409000000000000000E00000009000000000000400D0000F108000000000000000F00000009000000000000150E0000DF08000000000000001000000009000000000000E90E0000CD0800000000000000000000000A000000000000A40100004D0B00000000000000010000000A0000000000007B020000320B00000000000000020000000A00000000000052030000180B00000000000000030000000A0000000000002A040000FE0A00000000000000040000000A00000000000002050000E40A00000000000000050000000A000000000000DA050000CC0A00000000000000060000000A000000000000B2060000B40A00000000000000070000000A0000000000008A0700009C0A00000000000000080000000A00000000000062080000860A00000000000000090000000A0000000000003A0900006F0A000000000000000A0000000A000000000000110A00005A0A000000000000000B0000000A000000000000E80A0000450A000000000000000C0000000A000000000000BF0B0000300A000000000000000D0000000A000000000000950C00001C0A000000000000000E0000000A0000000000006A0D0000090A000000000000000F0000000A0000000000003F0E0000F60900000000000000100000000A000000000000130F0000E30900000000000000000000000B000000000000D00100006D0C00000000000000010000000B000000000000A7020000510C00000000000000020000000B0000000000007E030000360C00000000000000030000000B000000000000560400001C0C00000000000000040000000B0000000000002E050000020C00000000000000050000000B00000000000006060000E90B00000000000000060000000B000000000000DE060000D00B00000000000000070000000B000000000000B5070000B90B00000000000000080000000B0000000000008D080000A10B00000000000000090000000B000000000000650900008A0B000000000000000A0000000B0000000000003C0A0000740B000000000000000B0000000B000000000000130B00005F0B000000000000000C0000000B000000000000E90B00004A0B000000000000000D0000000B000000000000BF0C0000350B000000000000000E0000000B000000000000940D0000210B000000000000000F0000000B000000000000690E00000D0B00000000000000100000000B0000000000003C0F0000FA0A00000000000000000000000C000000000000FD0100008F0D00000000000000010000000C000000000000D3020000720D00000000000000020000000C000000000000AB030000570D00000000000000030000000C000000000000820400003C0D00000000000000040000000C0000000000005A050000210D00000000000000050000000C00000000000031060000080D00000000000000060000000C00000000000009070000EF0C00000000000000070000000C000000000000E1070000D60C00000000000000080000000C000000000000B8080000BE0C00000000000000090000000C00000000000090090000A70C000000000000000A0000000C000000000000670A0000900C000000000000000B0000000C0000000000003E0B00007A0C000000000000000C0000000C000000000000140C0000650C000000000000000D0000000C000000000000E90C0000500C000000000000000E0000000C000000000000BE0D00003B0C000000000000000F0000000C000000000000930E0000270C00000000000000100000000C000000000000660F0000130C00000000000000000000000D00000000000029020000B20E00000000000000010000000D00000000000000030000950E00000000000000020000000D000000000000D7030000790E00000000000000030000000D000000000000AE0400005E0E00000000000000040000000D00000000000085050000430E00000000000000050000000D0000000000005D060000290E00000000000000060000000D000000000000350700000F0E00000000000000070000000D0000000000000C080000F60D00000000000000080000000D000000000000E4080000DE0D00000000000000090000000D000000000000BB090000C60D000000000000000A0000000D000000000000920A0000AF0D000000000000000B0000000D000000000000680B0000980D000000000000000C0000000D0000000000003E0C0000820D000000000000000D0000000D000000000000140D00006C0D000000000000000E0000000D000000000000E90D0000570D000000000000000F0000000D000000000000BD0E0000430D00000000000000100000000D000000000000900F00002F0D00000000000000000000000E00000000000056020000D90F00000200000000010000000E0000000000002C030000BB0F00000000000000020000000E000000000000030400009F0F00000000000000030000000E000000000000DA040000820F00000000000000040000000E000000000000B1050000670F00000000000000050000000E000000000000890600004C0F00000000000000060000000E00000000000060070000320F00000000000000070000000E00000000000037080000190F00000000000000080000000E0000000000000F090000000F00000000000000090000000E000000000000E6090000E80E000000000000000A0000000E000000000000BC0A0000D00E000000000000000B0000000E000000000000930B0000B90E000000000000000C0000000E000000000000690C0000A20E000000000000000D0000000E0000000000003E0D00008C0E000000000000000E0000000E000000000000130E0000760E000000000000000F0000000E000000000000E60E0000610E00000000000000100000000E000000000000B90F00004C0E00000000000000000000000F00000000000082020000FF0F00000500000000010000000F00000000000058030000FF0F00000000000000020000000F0000000000002F040000FF0F00000000000000030000000F00000000000006050000FF0F00000000000000040000000F000000000000DD050000FF0F00000000000000050000000F000000000000B4060000FF0F00000000000000060000000F0000000000008B070000FF0F00000000000000070000000F00000000000062080000FF0F00000000000000080000000F0000000000003A090000FF0F00000000000000090000000F000000000000100A0000FF0F000000000000000A0000000F000000000000E70A0000F40F000000000000000B0000000F000000000000BD0B0000DC0F000000000000000C0000000F000000000000930C0000C50F000000000000000D0000000F000000000000680D0000AE0F000000000000000E0000000F0000000000003C0E0000980F000000000000000F0000000F000000000000100F0000830F00000000000000100000000F000000000000E30F00006D0F000000000000000000000010000000000000AE020000FF0F00000700000000010000001000000000000084030000FF0F0000000000000002000000100000000000005B040000FF0F00000000000000030000001000000000000031050000FF0F00000000000000040000001000000000000008060000FF0F000000000000000500000010000000000000DF060000FF0F000000000000000600000010000000000000B6070000FF0F0000000000000007000000100000000000008D080000FF0F00000000000000080000001000000000000064090000FF0F0000000000000009000000100000000000003B0A0000FF0F000000000000000A00000010000000000000110B0000FF0F000000000000000B00000010000000000000E70B0000FF0F000000000000000C00000010000000000000BD0C0000FF0F000000000000000D00000010000000000000920D0000FF0F000000000000000E00000010000000000000660E0000FF0F000000000000000F00000010000000000000390F0000FF0F000000000000001000000010000000000000FF0F0000FF0F000000000000000000000000000000010000030000000000000010010000000100000000000000010000DC0000000000000003010000000200000000000000010000B501000000000000F80000000003000000000000000100008E02000000000000EF0000000004000000000000000100006803000000000000E70000000005000000000000000100004204000000000000E00000000006000000000000000100001B05000000000000DA000000000700000000000000010000F505000000000000D5000000000800000000000000010000CF06000000000000D1000000000900000000000000010000A807000000000000CD000000000A000000000000000100008108000000000000CA000000000B000000000000000100005A09000000000000C8000000000C00000000000000010000320A000000000000C5000000000D000000000000000100000A0B000000000000C3000000000E00000000000000010000E10B000000000000C0000000000F00000000000000010000B70C000000000000BD0000000010000000000000000100008C0D000000000000BA0000000000000000010000000100002A000000190100000B0100000001000000010000000100000201000003010000FF000000000200000001000000010000DB010000ED000000F4000000000300000001000000010000B4020000D8000000EB0000000004000000010000000100008E030000C4000000E300000000050000000100000001000067040000B0000000DC000000000600000001000000010000410500009D000000D60000000007000000010000000100001A0600008A000000D2000000000800000001000000010000F406000078000000CE000000000900000001000000010000CD07000067000000CA000000000A00000001000000010000A608000056000000C7000000000B000000010000000100007E09000045000000C5000000000C00000001000000010000560A000036000000C2000000000D000000010000000100002E0B000026000000C0000000000E00000001000000010000050C000018000000BD000000000F00000001000000010000DB0C000009000000BB000000001000000001000000010000B00D000000000000B80000000000000000020000000100005100000040020000080100000001000000020000000100002A01000029020000FC0000000002000000020000000100000202000012020000F1000000000300000002000000010000DB020000FD010000E8000000000400000002000000010000B4030000E8010000E00000000005000000020000000100008E040000D4010000D900000000060000000200000001000067050000C0010000D400000000070000000200000001000041060000AD010000CF0000000008000000020000000100001A0700009A010000CB000000000900000002000000010000F307000088010000C8000000000A00000002000000010000CC08000077010000C5000000000B00000002000000010000A409000066010000C3000000000C000000020000000100007C0A000056010000C0000000000D00000002000000010000530B000046010000BE000000000E000000020000000100002A0C000037010000BC000000000F00000002000000010000FF0C000028010000B9000000001000000002000000010000D40D00001A010000B60000000000000000030000000100007A0000006303000006010000000100000003000000010000520100004C030000FA0000000002000000030000000100002A02000035030000EF000000000300000003000000010000030300001F030000E6000000000400000003000000010000DC03000009030000DE000000000500000003000000010000B5040000F5020000D80000000006000000030000000100008F050000E0020000D200000000070000000300000001000068060000CD020000CD00000000080000000300000001000041070000BA020000CA0000000009000000030000000100001A080000A7020000C6000000000A00000003000000010000F208000095020000C4000000000B00000003000000010000CA09000084020000C1000000000C00000003000000010000A20A000073020000BF000000000D00000003000000010000790B000063020000BD000000000E00000003000000010000500C000053020000BB000000000F00000003000000010000250D000044020000B8000000001000000003000000010000FA0D000035020000B5000000000000000004000000010000A300000085040000040100000001000000040000000100007B0100006D040000F80000000002000000040000000100005302000055040000EE0000000003000000040000000100002C0300003F040000E50000000004000000040000000100000504000029040000DD000000000500000004000000010000DE04000013040000D6000000000600000004000000010000B7050000FF030000D100000000070000000400000001000090060000EA030000CD00000000080000000400000001000069070000D7030000C900000000090000000400000001000041080000C4030000C6000000000A000000040000000100001A090000B1030000C3000000000B00000004000000010000F2090000A0030000C1000000000C00000004000000010000C90A00008E030000BF000000000D00000004000000010000A00B00007E030000BD000000000E00000004000000010000760C00006D030000BB000000000F000000040000000100004C0D00005D030000B8000000001000000004000000010000200E00004E030000B5000000000000000005000000010000CD000000A405000003010000000100000005000000010000A50100008C050000F70000000002000000050000000100007D02000074050000ED000000000300000005000000010000550300005D050000E40000000004000000050000000100002E04000046050000DC0000000005000000050000000100000705000030050000D6000000000600000005000000010000E00500001B050000D1000000000700000005000000010000B806000006050000CC00000000080000000500000001000091070000F2040000C90000000009000000050000000100006A080000DF040000C6000000000A0000000500000001000042090000CC040000C3000000000B000000050000000100001A0A0000BA040000C1000000000C00000005000000010000F10A0000A8040000BF000000000D00000005000000010000C80B000096040000BD000000000E000000050000000100009E0C000086040000BB000000000F00000005000000010000730D000075040000B9000000001000000005000000010000480E000066040000B6000000000000000006000000010000F7000000C306000003010000000100000006000000010000CF010000AA060000F7000000000200000006000000010000A702000091060000ED0000000003000000060000000100007F03000079060000E40000000004000000060000000100005804000062060000DC000000000500000006000000010000300500004C060000D60000000006000000060000000100000906000036060000D1000000000700000006000000010000E206000021060000CD000000000800000006000000010000BA0700000D060000C900000000090000000600000001000093080000F9050000C6000000000A000000060000000100006B090000E5050000C4000000000B00000006000000010000420A0000D2050000C2000000000C00000006000000010000190B0000C0050000C0000000000D00000006000000010000F00B0000AE050000BE000000000E00000006000000010000C60C00009D050000BC000000000F000000060000000100009B0D00008C050000BA0000000010000000060000000100006F0E00007C050000B800000000000000000700000001000022010000E007000003010000000100000007000000010000FA010000C7070000F7000000000200000007000000010000D2020000AE070000ED000000000300000007000000010000AA03000095070000E4000000000400000007000000010000820400007E070000DD0000000005000000070000000100005B05000067070000D70000000006000000070000000100003306000051070000D20000000007000000070000000100000C0700003B070000CE000000000800000007000000010000E407000026070000CA000000000900000007000000010000BC08000011070000C8000000000A0000000700000001000094090000FD060000C5000000000B000000070000000100006C0A0000EA060000C3000000000C00000007000000010000420B0000D7060000C2000000000D00000007000000010000190C0000C5060000C0000000000E00000007000000010000EF0C0000B3060000BE000000000F00000007000000010000C40D0000A2060000BC000000001000000007000000010000980E000091060000BA0000000000000000080000000100004E010000FD0800000401000000010000000800000001000025020000E3080000F8000000000200000008000000010000FD020000CA080000EE000000000300000008000000010000D5030000B1080000E5000000000400000008000000010000AD04000099080000DE0000000005000000080000000100008505000082080000D80000000006000000080000000100005E0600006B080000D30000000007000000080000000100003607000055080000CF0000000008000000080000000100000E0800003F080000CC000000000900000008000000010000E60800002A080000C9000000000A00000008000000010000BE09000016080000C7000000000B00000008000000010000950A000002080000C5000000000C000000080000000100006C0B0000EE070000C4000000000D00000008000000010000420C0000DC070000C2000000000E00000008000000010000180D0000C9070000C0000000000F00000008000000010000ED0D0000B7070000BE000000001000000008000000010000C10E0000A6070000BC0000000000000000090000000100007A0100001B0A00000501000000010000000900000001000051020000000A0000F900000000020000000900000001000029030000E6090000EF00000000030000000900000001000000040000CD090000E7000000000400000009000000010000D8040000B4090000E0000000000500000009000000010000B00500009D090000DA0000000006000000090000000100008906000085090000D5000000000700000009000000010000610700006F090000D10000000008000000090000000100003908000058090000CE0000000009000000090000000100001109000043090000CB000000000A00000009000000010000E80900002E090000C9000000000B00000009000000010000BF0A00001A090000C7000000000C00000009000000010000960B000006090000C6000000000D000000090000000100006C0C0000F2080000C4000000000E00000009000000010000410D0000DF080000C3000000000F00000009000000010000160E0000CD080000C1000000001000000009000000010000EA0E0000BB080000BF00000000000000000A000000010000A6010000390B00000601000000010000000A0000000100007D0200001E0B0000FB00000000020000000A00000001000054030000030B0000F100000000030000000A0000000100002C040000EA0A0000E900000000040000000A00000001000004050000D10A0000E200000000050000000A000000010000DC050000B80A0000DC00000000060000000A000000010000B4060000A00A0000D700000000070000000A0000000100008C070000890A0000D300000000080000000A00000001000064080000720A0000D000000000090000000A0000000100003B0900005C0A0000CE000000000A0000000A000000010000130A0000470A0000CC000000000B0000000A000000010000EA0A0000320A0000CA000000000C0000000A000000010000C00B00001E0A0000C9000000000D0000000A000000010000960C00000A0A0000C7000000000E0000000A0000000100006B0D0000F6090000C6000000000F0000000A000000010000400E0000E4090000C400000000100000000A000000010000130F0000D1090000C200000000000000000B000000010000D3010000580C00000801000000010000000B000000010000A90200003D0C0000FD00000000020000000B00000001000080030000220C0000F300000000030000000B00000001000058040000070C0000EB00000000040000000B00000001000030050000EE0B0000E400000000050000000B00000001000007060000D50B0000DE00000000060000000B000000010000DF060000BD0B0000D900000000070000000B000000010000B7070000A50B0000D600000000080000000B0000000100008F0800008E0B0000D300000000090000000B00000001000066090000770B0000D0000000000A0000000B0000000100003D0A0000610B0000CE000000000B0000000B000000010000140B00004C0B0000CD000000000C0000000B000000010000EA0B0000370B0000CC000000000D0000000B000000010000C00C0000220B0000CA000000000E0000000B000000010000950D00000F0B0000C9000000000F0000000B000000010000690E0000FB0A0000C700000000100000000B0000000100003D0F0000E80A0000C500000000000000000C000000010000FF010000790D00000A01000000010000000C000000010000D60200005D0D0000FF00000000020000000C000000010000AD030000420D0000F500000000030000000C00000001000084040000270D0000ED00000000040000000C0000000100005B0500000D0D0000E600000000050000000C00000001000033060000F30C0000E000000000060000000C0000000100000B070000DA0C0000DC00000000070000000C000000010000E2070000C20C0000D800000000080000000C000000010000BA080000AB0C0000D500000000090000000C00000001000091090000930C0000D3000000000A0000000C000000010000680A00007D0C0000D1000000000B0000000C0000000100003F0B0000670C0000D0000000000C0000000C000000010000150C0000520C0000CF000000000D0000000C000000010000EA0C00003D0C0000CE000000000E0000000C000000010000BF0D0000280C0000CC000000000F0000000C000000010000930E0000140C0000CB00000000100000000C000000010000660F0000010C0000C900000000000000000D0000000100002C0200009C0E00000C01000000010000000D00000001000002030000800E00000101000000020000000D000000010000D9030000640E0000F700000000030000000D000000010000B0040000480E0000EF00000000040000000D000000010000870500002E0E0000E800000000050000000D0000000100005F060000140E0000E300000000060000000D00000001000036070000FB0D0000DE00000000070000000D0000000100000E080000E20D0000DB00000000080000000D000000010000E5080000CA0D0000D800000000090000000D000000010000BC090000B20D0000D6000000000A0000000D000000010000930A00009B0D0000D4000000000B0000000D000000010000690B0000850D0000D3000000000C0000000D0000000100003F0C00006F0D0000D2000000000D0000000D000000010000140D0000590D0000D1000000000E0000000D000000010000E90D0000440D0000D0000000000F0000000D000000010000BD0E0000300D0000CF00000000100000000D000000010000900F00001C0D0000CD00000000000000000E00000001000058020000C20F00000E01000000010000000E0000000100002E030000A50F00000301000000020000000E00000001000005040000890F0000F900000000030000000E000000010000DC0400006D0F0000F100000000040000000E000000010000B3050000520F0000EB00000000050000000E0000000100008A060000370F0000E500000000060000000E000000010000610700001D0F0000E100000000070000000E00000001000039080000040F0000DE00000000080000000E00000001000010090000EB0E0000DB00000000090000000E000000010000E7090000D30E0000D9000000000A0000000E000000010000BD0A0000BC0E0000D8000000000B0000000E000000010000940B0000A50E0000D6000000000C0000000E000000010000690C00008E0E0000D5000000000D0000000E0000000100003F0D0000780E0000D4000000000E0000000E000000010000130E0000630E0000D3000000000F0000000E000000010000E70E00004E0E0000D200000000100000000E000000010000BA0F00003A0E0000D100000000000000000F00000001000084020000FF0F00001001000000010000000F0000000100005A030000FF0F00000501000000020000000F00000001000031040000FF0F0000FB00000000030000000F00000001000007050000FF0F0000F400000000040000000F000000010000DE050000FF0F0000ED00000000050000000F000000010000B6060000FF0F0000E800000000060000000F0000000100008D070000FF0F0000E400000000070000000F00000001000064080000FF0F0000E000000000080000000F0000000100003B090000FF0F0000DE00000000090000000F000000010000120A0000F80F0000DC000000000A0000000F000000010000E80A0000E00F0000DB000000000B0000000F000000010000BE0B0000C80F0000DA000000000C0000000F000000010000940C0000B10F0000D9000000000D0000000F000000010000690D00009B0F0000D8000000000E0000000F0000000100003D0E0000850F0000D7000000000F0000000F000000010000110F00006F0F0000D600000000100000000F000000010000E30F00005A0F0000D4000000000000000010000000010000B0020000FF0F00001201000000010000001000000001000086030000FF0F0000070100000002000000100000000100005C040000FF0F0000FE00000000030000001000000001000033050000FF0F0000F60000000004000000100000000100000A060000FF0F0000EF000000000500000010000000010000E1060000FF0F0000EA000000000600000010000000010000B8070000FF0F0000E60000000007000000100000000100008F080000FF0F0000E300000000080000001000000001000065090000FF0F0000E10000000009000000100000000100003C0A0000FF0F0000DF000000000A00000010000000010000120B0000FF0F0000DE000000000B00000010000000010000E80B0000FF0F0000DD000000000C00000010000000010000BD0C0000FF0F0000DC000000000D00000010000000010000920D0000FF0F0000DB000000000E00000010000000010000660E0000FF0F0000DA000000000F000000100000000100003A0F0000FF0F0000D9000000001000000010000000010000FF0F0000FF0F0000D800000000000000000000000002000005000000000000001E020000000100000000000000020000DE0000000000000011020000000200000000000000020000B701000000000000060200000003000000000000000200009002000000000000FD0100000004000000000000000200006903000000000000F40100000005000000000000000200004304000000000000ED0100000006000000000000000200001D05000000000000E7010000000700000000000000020000F605000000000000E2010000000800000000000000020000D006000000000000DE010000000900000000000000020000A907000000000000DA010000000A000000000000000200008208000000000000D7010000000B000000000000000200005A09000000000000D4010000000C00000000000000020000320A000000000000D1010000000D000000000000000200000A0B000000000000CE010000000E00000000000000020000E00B000000000000CC010000000F00000000000000020000B60C000000000000C90100000010000000000000000200008C0D000000000000C50100000000000000010000000200002C0000000E0100001A02000000010000000100000002000004010000F70000000D020000000200000001000000020000DD010000E100000002020000000300000001000000020000B6020000CC000000F90100000004000000010000000200008F030000B8000000F001000000050000000100000002000068040000A4000000E90100000006000000010000000200004205000091000000E30100000007000000010000000200001B0600007E000000DE010000000800000001000000020000F40600006C000000DA010000000900000001000000020000CE0700005B000000D7010000000A00000001000000020000A60800004A000000D3010000000B000000010000000200007F0900003A000000D1010000000C00000001000000020000560A00002A000000CE010000000D000000010000000200002E0B00001B000000CB010000000E00000001000000020000040C00000C000000C9010000000F00000001000000020000DA0C000000000000C6010000001000000001000000020000AF0D000000000000C30100000000000000020000000200005300000033020000160200000001000000020000000200002B0100001C0200000A0200000002000000020000000200000402000006020000FF010000000300000002000000020000DD020000F1010000F5010000000400000002000000020000B6030000DC010000ED0100000005000000020000000200008F040000C7010000E601000000060000000200000002000068050000B4010000E101000000070000000200000002000041060000A1010000DC0100000008000000020000000200001A0700008E010000D8010000000900000002000000020000F30700007C010000D4010000000A00000002000000020000CC0800006B010000D1010000000B00000002000000020000A40900005A010000CE010000000C000000020000000200007C0A00004A010000CC010000000D00000002000000020000530B00003A010000C9010000000E00000002000000020000290C00002B010000C7010000000F00000002000000020000FF0C00001D010000C4010000001000000002000000020000D40D00000E010000C10100000000000000030000000200007B0000005703000013020000000100000003000000020000530100003F030000070200000002000000030000000200002C02000028030000FC0100000003000000030000000200000403000012030000F3010000000400000003000000020000DD030000FD020000EB010000000500000003000000020000B6040000E8020000E40100000006000000030000000200008F050000D4020000DF01000000070000000300000002000068060000C0020000DA01000000080000000300000002000041070000AD020000D60100000009000000030000000200001A0800009B020000D2010000000A00000003000000020000F208000089020000CF010000000B00000003000000020000CA09000078020000CD010000000C00000003000000020000A20A000067020000CA010000000D00000003000000020000790B000057020000C8010000000E000000030000000200004F0C000047020000C6010000000F00000003000000020000250D000038020000C3010000001000000003000000020000F90D000029020000C0010000000000000004000000020000A400000077040000110200000001000000040000000200007C0100005F040000050200000002000000040000000200005402000048040000FA0100000003000000040000000200002D03000032040000F1010000000400000004000000020000060400001C040000E9010000000500000004000000020000DF04000006040000E3010000000600000004000000020000B8050000F2030000DD01000000070000000400000002000090060000DE030000D901000000080000000400000002000069070000CA030000D501000000090000000400000002000042080000B7030000D1010000000A000000040000000200001A090000A5030000CF010000000B00000004000000020000F209000093030000CC010000000C00000004000000020000C90A000082030000CA010000000D00000004000000020000A00B000071030000C8010000000E00000004000000020000760C000061030000C5010000000F000000040000000200004B0D000052030000C3010000001000000004000000020000200E000042030000C0010000000000000005000000020000CE0000009605000010020000000100000005000000020000A60100007E050000040200000002000000050000000200007E02000066050000F9010000000300000005000000020000560300004F050000F00100000004000000050000000200002F04000039050000E90100000005000000050000000200000805000023050000E2010000000600000005000000020000E00500000E050000DD010000000700000005000000020000B9060000F9040000D801000000080000000500000002000092070000E5040000D40100000009000000050000000200006A080000D2040000D1010000000A0000000500000002000042090000BF040000CE010000000B000000050000000200001A0A0000AD040000CC010000000C00000005000000020000F10A00009B040000CA010000000D00000005000000020000C70B00008A040000C8010000000E000000050000000200009D0C000079040000C6010000000F00000005000000020000730D000069040000C3010000001000000005000000020000470E000059040000C0010000000000000006000000020000F9000000B406000010020000000100000006000000020000D00100009B06000003020000000200000006000000020000A802000083060000F9010000000300000006000000020000800300006C060000F00100000004000000060000000200005904000055060000E8010000000500000006000000020000310500003E060000E20100000006000000060000000200000A06000029060000DD010000000700000006000000020000E206000014060000D8010000000800000006000000020000BB070000FF050000D501000000090000000600000002000093080000EB050000D2010000000A000000060000000200006B090000D8050000CF010000000B00000006000000020000420A0000C5050000CD010000000C00000006000000020000190B0000B3050000CB010000000D00000006000000020000F00B0000A1050000C9010000000E00000006000000020000C50C000090050000C7010000000F000000060000000200009A0D000080050000C40100000010000000060000000200006F0E00006F050000C201000000000000000700000002000024010000D10700000F020000000100000007000000020000FB010000B807000004020000000200000007000000020000D30200009F070000F9010000000300000007000000020000AB03000087070000F00100000004000000070000000200008304000070070000E90100000005000000070000000200005B05000059070000E30100000006000000070000000200003406000043070000DD0100000007000000070000000200000C0700002D070000D9010000000800000007000000020000E407000018070000D5010000000900000007000000020000BC08000004070000D2010000000A0000000700000002000094090000F0060000D0010000000B000000070000000200006B0A0000DD060000CE010000000C00000007000000020000420B0000CA060000CC010000000D00000007000000020000180C0000B8060000CA010000000E00000007000000020000EE0C0000A6060000C8010000000F00000007000000020000C30D000095060000C6010000001000000007000000020000970E000084060000C30100000000000000080000000200004F010000EE0800001002000000010000000800000002000026020000D408000004020000000200000008000000020000FE020000BB080000FA010000000300000008000000020000D6030000A2080000F1010000000400000008000000020000AE0400008B080000EA0100000005000000080000000200008605000073080000E30100000006000000080000000200005E0600005D080000DE0100000007000000080000000200003607000047080000DA0100000008000000080000000200000F08000031080000D7010000000900000008000000020000E60800001C080000D4010000000A00000008000000020000BE09000008080000D2010000000B00000008000000020000950A0000F4070000D0010000000C000000080000000200006C0B0000E1070000CE010000000D00000008000000020000420C0000CE070000CC010000000E00000008000000020000170D0000BC070000CA010000000F00000008000000020000EC0D0000AA070000C8010000001000000008000000020000C00E000099070000C60100000000000000090000000200007B0100000B0A00001102000000010000000900000002000052020000F10900000502000000020000000900000002000029030000D7090000FB01000000030000000900000002000001040000BE090000F2010000000400000009000000020000D9040000A6090000EB010000000500000009000000020000B10500008E090000E50100000006000000090000000200008906000077090000E00100000007000000090000000200006107000060090000DC010000000800000009000000020000390800004A090000D80100000009000000090000000200001109000035090000D6010000000A00000009000000020000E809000020090000D4010000000B00000009000000020000BF0A00000C090000D2010000000C00000009000000020000960B0000F8080000D0010000000D000000090000000200006B0C0000E5080000CE010000000E00000009000000020000410D0000D2080000CD010000000F00000009000000020000150E0000C0080000CB010000001000000009000000020000E90E0000AE080000C801000000000000000A000000020000A7010000290B00001202000000010000000A0000000200007E0200000E0B00000602000000020000000A00000002000055030000F40A0000FC01000000030000000A0000000200002D040000DA0A0000F401000000040000000A00000002000004050000C10A0000EC01000000050000000A000000020000DC050000A90A0000E701000000060000000A000000020000B4060000910A0000E201000000070000000A0000000200008C0700007A0A0000DE01000000080000000A00000002000064080000640A0000DA01000000090000000A0000000200003B0900004E0A0000D8010000000A0000000A000000020000120A0000390A0000D6010000000B0000000A000000020000E90A0000240A0000D4010000000C0000000A000000020000C00B0000100A0000D2010000000D0000000A000000020000950C0000FC090000D1010000000E0000000A0000000200006A0D0000E9090000CF010000000F0000000A0000000200003F0E0000D6090000CD01000000100000000A000000020000120F0000C4090000CB01000000000000000B000000020000D4010000480C00001302000000010000000B000000020000AA0200002C0C00000802000000020000000B00000002000081030000120C0000FE01000000030000000B00000002000059040000F70B0000F501000000040000000B00000002000030050000DE0B0000EE01000000050000000B00000002000008060000C50B0000E801000000060000000B000000020000E0060000AD0B0000E401000000070000000B000000020000B7070000960B0000E001000000080000000B0000000200008F0800007F0B0000DD01000000090000000B00000002000066090000680B0000DA010000000A0000000B0000000200003D0A0000530B0000D8010000000B0000000B000000020000140B00003D0B0000D7010000000C0000000B000000020000EA0B0000290B0000D5010000000D0000000B000000020000BF0C0000140B0000D4010000000E0000000B000000020000940D0000010B0000D2010000000F0000000B000000020000690E0000ED0A0000D101000000100000000B0000000200003C0F0000DB0A0000CE01000000000000000C00000002000000020000680D00001502000000010000000C000000020000D70200004C0D00000902000000020000000C000000020000AD030000310D00000002000000030000000C00000002000084040000170D0000F701000000040000000C0000000200005C050000FD0C0000F001000000050000000C00000002000033060000E30C0000EB01000000060000000C0000000200000B070000CB0C0000E601000000070000000C000000020000E2070000B30C0000E201000000080000000C000000020000BA0800009B0C0000DF01000000090000000C00000002000091090000840C0000DD010000000A0000000C000000020000680A00006E0C0000DB010000000B0000000C0000000200003E0B0000580C0000D9010000000C0000000C000000020000140C0000430C0000D8010000000D0000000C000000020000EA0C00002E0C0000D7010000000E0000000C000000020000BE0D00001A0C0000D5010000000F0000000C000000020000920E0000070C0000D401000000100000000C000000020000660F0000F30B0000D201000000000000000D0000000200002C0200008B0E00001602000000010000000D000000020000030300006F0E00000B02000000020000000D000000020000D9030000530E00000102000000030000000D000000020000B0040000380E0000F901000000040000000D000000020000880500001D0E0000F201000000050000000D0000000200005F060000040E0000ED01000000060000000D00000002000036070000EA0D0000E801000000070000000D0000000200000E080000D20D0000E501000000080000000D000000020000E5080000BA0D0000E201000000090000000D000000020000BC090000A30D0000E0010000000A0000000D000000020000930A00008C0D0000DE010000000B0000000D000000020000690B0000760D0000DC010000000C0000000D0000000200003F0C0000600D0000DB010000000D0000000D000000020000140D00004B0D0000DA010000000E0000000D000000020000E80D0000360D0000D9010000000F0000000D000000020000BC0E0000220D0000D701000000100000000D0000000200008F0F00000E0D0000D501000000000000000E00000002000059020000B00F00001802000000010000000E0000000200002F030000930F00000D02000000020000000E00000002000005040000770F00000302000000030000000E000000020000DC0400005C0F0000FB01000000040000000E000000020000B3050000410F0000F501000000050000000E0000000200008A060000260F0000EF01000000060000000E000000020000620700000D0F0000EB01000000070000000E00000002000039080000F40E0000E701000000080000000E00000002000010090000DB0E0000E401000000090000000E000000020000E7090000C30E0000E2010000000A0000000E000000020000BD0A0000AC0E0000E1010000000B0000000E000000020000930B0000950E0000DF010000000C0000000E000000020000690C00007F0E0000DE010000000D0000000E0000000200003E0D00006A0E0000DD010000000E0000000E000000020000120E0000540E0000DC010000000F0000000E000000020000E60E0000400E0000DB01000000100000000E000000020000B90F00002B0E0000D901000000000000000F00000002000085020000FF0F00001A02000000010000000F0000000200005B030000FF0F00000F02000000020000000F00000002000031040000FF0F00000502000000030000000F00000002000008050000FF0F0000FD01000000040000000F000000020000DF050000FF0F0000F701000000050000000F000000020000B6060000FF0F0000F101000000060000000F0000000200008D070000FF0F0000ED01000000070000000F00000002000064080000FF0F0000EA01000000080000000F0000000200003B090000FF0F0000E701000000090000000F000000020000110A0000E80F0000E5010000000A0000000F000000020000E80A0000D00F0000E4010000000B0000000F000000020000BE0B0000B80F0000E2010000000C0000000F000000020000930C0000A20F0000E1010000000D0000000F000000020000680D00008C0F0000E0010000000E0000000F0000000200003C0E0000760F0000DF010000000F0000000F000000020000100F0000610F0000DE01000000100000000F000000020000E20F00004C0F0000DC010000000000000010000000020000B1020000FF0F00001B02000000010000001000000002000087030000FF0F0000100200000002000000100000000200005D040000FF0F00000702000000030000001000000002000033050000FF0F0000FF0100000004000000100000000200000A060000FF0F0000F9010000000500000010000000020000E1060000FF0F0000F3010000000600000010000000020000B8070000FF0F0000EF0100000007000000100000000200008E080000FF0F0000EC01000000080000001000000002000065090000FF0F0000E90100000009000000100000000200003C0A0000FF0F0000E8010000000A00000010000000020000120B0000FF0F0000E6010000000B00000010000000020000E80B0000FF0F0000E5010000000C00000010000000020000BD0C0000FF0F0000E4010000000D00000010000000020000920D0000FF0F0000E3010000000E00000010000000020000660E0000FF0F0000E3010000000F00000010000000020000390F0000FF0F0000E1010000001000000010000000020000FF0F0000FF0F0000E001000000000000000000000003000006000000000000002C030000000100000000000000030000DF000000000000001F030000000200000000000000030000B7010000000000001303000000030000000000000003000090020000000000000A0300000004000000000000000300006A03000000000000010300000005000000000000000300004304000000000000FA0200000006000000000000000300001D05000000000000F3020000000700000000000000030000F605000000000000EE020000000800000000000000030000CF06000000000000EA020000000900000000000000030000A807000000000000E6020000000A000000000000000300008108000000000000E2020000000B000000000000000300005909000000000000DF020000000C00000000000000030000310A000000000000DC020000000D00000000000000030000080B000000000000D9020000000E00000000000000030000DF0B000000000000D6020000000F00000000000000030000B50C000000000000D30200000010000000000000000300008A0D000000000000CF0200000000000000010000000300002D000000050100002703000000010000000100000003000005010000EF0000001A030000000200000001000000030000DD010000D90000000F030000000300000001000000030000B6020000C4000000050300000004000000010000000300008F030000B0000000FD020000000500000001000000030000690400009C000000F60200000006000000010000000300004205000089000000EF0200000007000000010000000300001B06000077000000EA020000000800000001000000030000F406000065000000E6020000000900000001000000030000CD07000053000000E2020000000A00000001000000030000A608000043000000DF020000000B000000010000000300007E09000032000000DC020000000C00000001000000030000550A000023000000D9020000000D000000010000000300002D0B000014000000D6020000000E00000001000000030000030C000005000000D3020000000F00000001000000030000D90C000000000000D0020000001000000001000000030000AE0D000000000000CD020000000000000002000000030000540000002B020000230300000001000000020000000300002C010000140200001603000000020000000200000003000004020000FE0100000B030000000300000002000000030000DD020000E801000002030000000400000002000000030000B6030000D3010000F90200000005000000020000000300008F040000BF010000F202000000060000000200000003000068050000AC010000EC0200000007000000020000000300004106000099010000E70200000008000000020000000300001A07000086010000E3020000000900000002000000030000F307000074010000DF020000000A00000002000000030000CB08000063010000DC020000000B00000002000000030000A309000053010000D9020000000C000000020000000300007B0A000042010000D6020000000D00000002000000030000520B000033010000D4020000000E00000002000000030000280C000024010000D1020000000F00000002000000030000FD0C000015010000CE020000001000000002000000030000D20D000007010000CB0200000000000000030000000300007C0000004D030000200300000001000000030000000300005401000036030000130300000002000000030000000300002C0200001F030000080300000003000000030000000300000503000009030000FF020000000400000003000000030000DD030000F4020000F7020000000500000003000000030000B6040000DF020000F00200000006000000030000000300008F050000CB020000EA02000000070000000300000003000068060000B8020000E502000000080000000300000003000041070000A5020000E10200000009000000030000000300001908000093020000DD020000000A00000003000000030000F208000081020000DA020000000B00000003000000030000CA09000070020000D7020000000C00000003000000030000A10A00005F020000D5020000000D00000003000000030000780B00004F020000D2020000000E000000030000000300004E0C00003F020000D0020000000F00000003000000030000230D000030020000CD020000001000000003000000030000F80D000022020000CA020000000000000004000000030000A50000006E0400001E0300000001000000040000000300007D0100005604000011030000000200000004000000030000550200003F040000060300000003000000040000000300002D03000028040000FD0200000004000000040000000300000604000013040000F5020000000500000004000000030000DE040000FD030000EE020000000600000004000000030000B7050000E9030000E802000000070000000400000003000090060000D5030000E402000000080000000400000003000069070000C2030000DF02000000090000000400000003000041080000AF030000DC020000000A00000004000000030000190900009D030000D9020000000B00000004000000030000F10900008B030000D6020000000C00000004000000030000C80A00007A030000D4020000000D000000040000000300009E0B000069030000D2020000000E00000004000000030000740C000059030000CF020000000F000000040000000300004A0D00004A030000CC0200000010000000040000000300001E0E00003A030000C9020000000000000005000000030000CF0000008D0500001C030000000100000005000000030000A601000074050000100300000002000000050000000300007E0200005D050000050300000003000000050000000300005603000046050000FC0200000004000000050000000300002F0400002F050000F4020000000500000005000000030000070500001A050000ED020000000600000005000000030000E005000005050000E8020000000700000005000000030000B9060000F0040000E302000000080000000500000003000091070000DC040000DF02000000090000000500000003000069080000C9040000DC020000000A0000000500000003000041090000B6040000D9020000000B00000005000000030000190A0000A4040000D6020000000C00000005000000030000F00A000093040000D4020000000D00000005000000030000C60B000082040000D2020000000E000000050000000300009C0C000071040000CF020000000F00000005000000030000710D000061040000CD020000001000000005000000030000450E000051040000CA020000000000000006000000030000F9000000AA0600001B030000000100000006000000030000D1010000910600000F030000000200000006000000030000A802000079060000040300000003000000060000000300008003000062060000FB020000000400000006000000030000590400004B060000F30200000005000000060000000300003105000035060000ED020000000600000006000000030000090600001F060000E7020000000700000006000000030000E20600000A060000E3020000000800000006000000030000BA070000F6050000DF02000000090000000600000003000092080000E2050000DC020000000A000000060000000300006A090000CF050000D9020000000B00000006000000030000410A0000BC050000D7020000000C00000006000000030000180B0000AA050000D4020000000D00000006000000030000EE0B000099050000D2020000000E00000006000000030000C40C000088050000D0020000000F00000006000000030000990D000077050000CD0200000010000000060000000300006D0E000067050000CB02000000000000000700000003000024010000C70700001B030000000100000007000000030000FB010000AD0700000F030000000200000007000000030000D30200009507000004030000000300000007000000030000AB0300007D070000FB0200000004000000070000000300008304000065070000F40200000005000000070000000300005B0500004F070000ED0200000006000000070000000300003306000039070000E80200000007000000070000000300000C07000023070000E3020000000800000007000000030000E40700000F070000DF020000000900000007000000030000BC080000FA060000DC020000000A0000000700000003000093090000E7060000DA020000000B000000070000000300006A0A0000D4060000D8020000000C00000007000000030000410B0000C1060000D5020000000D00000007000000030000170C0000AF060000D3020000000E00000007000000030000ED0C00009D060000D1020000000F00000007000000030000C10D00008C060000CF020000001000000007000000030000950E00007C060000CC02000000000000000800000003000050010000E30800001B03000000010000000800000003000027020000C90800000F030000000200000008000000030000FE020000B008000005030000000300000008000000030000D603000098080000FC020000000400000008000000030000AE04000080080000F40200000005000000080000000300008605000069080000EE0200000006000000080000000300005E06000052080000E8020000000700000008000000030000360700003C080000E40200000008000000080000000300000E08000027080000E1020000000900000008000000030000E508000012080000DE020000000A00000008000000030000BD090000FE070000DB020000000B00000008000000030000940A0000EB070000D9020000000C000000080000000300006A0B0000D7070000D7020000000D00000008000000030000400C0000C5070000D5020000000E00000008000000030000160D0000B3070000D3020000000F00000008000000030000EA0D0000A1070000D1020000001000000008000000030000BE0E000090070000CE0200000000000000090000000300007B010000FF0900001B03000000010000000900000003000052020000E50900001003000000020000000900000003000029030000CC0900000503000000030000000900000003000001040000B3090000FC020000000400000009000000030000D90400009A090000F5020000000500000009000000030000B105000083090000EF020000000600000009000000030000890600006C090000EA0200000007000000090000000300006007000055090000E50200000008000000090000000300003808000040090000E2020000000900000009000000030000100900002A090000DF020000000A00000009000000030000E709000016090000DD020000000B00000009000000030000BE0A000002090000DB020000000C00000009000000030000940B0000EE080000D9020000000D000000090000000300006A0C0000DB080000D7020000000E000000090000000300003F0D0000C9080000D5020000000F00000009000000030000130E0000B7080000D3020000001000000009000000030000E70E0000A5080000D102000000000000000A000000030000A70100001D0B00001C03000000010000000A0000000300007E020000020B00001003000000020000000A00000003000055030000E80A00000603000000030000000A0000000300002C040000CE0A0000FE02000000040000000A00000003000004050000B60A0000F602000000050000000A000000030000DC0500009E0A0000F002000000060000000A000000030000B4060000860A0000EB02000000070000000A0000000300008B0700006F0A0000E702000000080000000A00000003000063080000590A0000E402000000090000000A0000000300003A090000430A0000E1020000000A0000000A000000030000110A00002E0A0000DF020000000B0000000A000000030000E80A00001A0A0000DD020000000C0000000A000000030000BE0B0000060A0000DB020000000D0000000A000000030000940C0000F2090000DA020000000E0000000A000000030000690D0000DF090000D8020000000F0000000A0000000300003D0E0000CD090000D602000000100000000A000000030000100F0000BB090000D302000000000000000B000000030000D40100003B0C00001D03000000010000000B000000030000AA020000200C00001203000000020000000B00000003000081030000050C00000803000000030000000B00000003000058040000EB0B0000FF02000000040000000B00000003000030050000D20B0000F802000000050000000B00000003000007060000BA0B0000F202000000060000000B000000030000DF060000A20B0000ED02000000070000000B000000030000B60700008A0B0000E902000000080000000B0000000300008E080000740B0000E602000000090000000B000000030000650900005D0B0000E3020000000A0000000B0000000300003C0A0000480B0000E1020000000B0000000B000000030000120B0000330B0000DF020000000C0000000B000000030000E80B00001E0B0000DE020000000D0000000B000000030000BE0C00000A0B0000DC020000000E0000000B000000030000930D0000F70A0000DB020000000F0000000B000000030000670E0000E40A0000D902000000100000000B0000000300003A0F0000D10A0000D602000000000000000C000000030000000200005B0D00001F03000000010000000C000000030000D60200003F0D00001303000000020000000C000000030000AD030000240D00000903000000030000000C000000030000840400000A0D00000103000000040000000C0000000300005B050000F00C0000FA02000000050000000C00000003000033060000D70C0000F402000000060000000C0000000300000A070000BF0C0000EF02000000070000000C000000030000E2070000A70C0000EB02000000080000000C000000030000B9080000900C0000E802000000090000000C00000003000090090000790C0000E6020000000A0000000C000000030000670A0000630C0000E4020000000B0000000C0000000300003D0B00004D0C0000E2020000000C0000000C000000030000130C0000380C0000E0020000000D0000000C000000030000E80C0000240C0000DF020000000E0000000C000000030000BD0D0000100C0000DD020000000F0000000C000000030000900E0000FC0B0000DC02000000100000000C000000030000640F0000E90B0000DA02000000000000000D0000000300002C0200007D0E00002003000000010000000D00000003000002030000610E00001403000000020000000D000000030000D9030000460E00000B03000000030000000D000000030000B00400002B0E00000203000000040000000D00000003000087050000110E0000FC02000000050000000D0000000300005E060000F70D0000F602000000060000000D00000003000035070000DE0D0000F102000000070000000D0000000300000D080000C60D0000ED02000000080000000D000000030000E4080000AE0D0000EA02000000090000000D000000030000BB090000970D0000E8020000000A0000000D000000030000910A0000800D0000E6020000000B0000000D000000030000670B00006A0D0000E5020000000C0000000D0000000300003D0C0000550D0000E3020000000D0000000D000000030000120D0000400D0000E2020000000E0000000D000000030000E70D00002B0D0000E1020000000F0000000D000000030000BA0E0000170D0000DF02000000100000000D0000000300008D0F0000040D0000DD02000000000000000E00000003000059020000A20F00002103000000010000000E0000000300002F030000860F00001603000000020000000E000000030000050400006A0F00000C03000000030000000E000000030000DC0400004E0F00000403000000040000000E000000030000B3050000340F0000FD02000000050000000E0000000300008A0600001A0F0000F802000000060000000E00000003000061070000000F0000F302000000070000000E00000003000038080000E70E0000F002000000080000000E0000000300000F090000CF0E0000ED02000000090000000E000000030000E5090000B80E0000EB020000000A0000000E000000030000BC0A0000A00E0000E9020000000B0000000E000000030000920B00008A0E0000E7020000000C0000000E000000030000670C0000740E0000E6020000000D0000000E0000000300003C0D00005F0E0000E5020000000E0000000E000000030000110E00004A0E0000E4020000000F0000000E000000030000E40E0000350E0000E202000000100000000E000000030000B70F0000210E0000E002000000000000000F00000003000085020000FF0F00002303000000010000000F0000000300005A030000FF0F00001703000000020000000F00000003000031040000FF0F00000E03000000030000000F00000003000007050000FF0F00000603000000040000000F000000030000DE050000FF0F0000FF02000000050000000F000000030000B5060000FF0F0000FA02000000060000000F0000000300008C070000FF0F0000F502000000070000000F00000003000063080000FF0F0000F202000000080000000F00000003000039090000F30F0000EF02000000090000000F000000030000100A0000DB0F0000ED020000000A0000000F000000030000E60A0000C40F0000EB020000000B0000000F000000030000BC0B0000AD0F0000EA020000000C0000000F000000030000910C0000960F0000E9020000000D0000000F000000030000660D0000800F0000E8020000000E0000000F0000000300003A0E00006B0F0000E7020000000F0000000F0000000300000E0F0000560F0000E502000000100000000F000000030000E00F0000410F0000E4020000000000000010000000030000B0020000FF0F00002403000000010000001000000003000086030000FF0F0000190300000002000000100000000300005C040000FF0F00000F03000000030000001000000003000032050000FF0F00000803000000040000001000000003000009060000FF0F000001030000000500000010000000030000E0060000FF0F0000FC020000000600000010000000030000B7070000FF0F0000F70200000007000000100000000300008D080000FF0F0000F402000000080000001000000003000064090000FF0F0000F10200000009000000100000000300003A0A0000FF0F0000EF020000000A00000010000000030000100B0000FF0F0000EE020000000B00000010000000030000E60B0000FF0F0000ED020000000C00000010000000030000BB0C0000FF0F0000EC020000000D00000010000000030000900D0000FF0F0000EB020000000E00000010000000030000640E0000FF0F0000EA020000000F00000010000000030000370F0000FF0F0000E8020000001000000010000000030000FF0F0000FF0F0000E7020000000000000000000000040000070000000000000038040000000100000000000000040000DF000000000000002B040000000200000000000000040000B7010000000000002004000000030000000000000004000090020000000000001504000000040000000000000004000069030000000000000D0400000005000000000000000400004304000000000000050400000006000000000000000400001C05000000000000FF030000000700000000000000040000F505000000000000F9030000000800000000000000040000CE06000000000000F4030000000900000000000000040000A707000000000000F0030000000A000000000000000400008008000000000000ED030000000B000000000000000400005809000000000000E9030000000C000000000000000400002F0A000000000000E6030000000D00000000000000040000070B000000000000E3030000000E00000000000000040000DD0B000000000000E0030000000F00000000000000040000B30C000000000000DC030000001000000000000000040000880D000000000000D80300000000000000010000000400002D000000000100003304000000010000000100000004000005010000EA00000026040000000200000001000000040000DD010000D40000001B040000000300000001000000040000B6020000C0000000110400000004000000010000000400008F030000AB000000080400000005000000010000000400006804000098000000010400000006000000010000000400004105000084000000FA0300000007000000010000000400001A06000072000000F5030000000800000001000000040000F306000060000000F0030000000900000001000000040000CC0700004F000000EC030000000A00000001000000040000A40800003E000000E9030000000B000000010000000400007C0900002E000000E5030000000C00000001000000040000540A00001E000000E2030000000D000000010000000400002B0B00000F000000E0030000000E00000001000000040000010C000001000000DC030000000F00000001000000040000D60C000000000000D9030000001000000001000000040000AB0D000000000000D503000000000000000200000004000054000000250200002F0400000001000000020000000400002C0100000F0200002204000000020000000200000004000004020000F901000017040000000300000002000000040000DD020000E30100000D040000000400000002000000040000B5030000CE010000040400000005000000020000000400008E040000BA010000FD03000000060000000200000004000067050000A7010000F70300000007000000020000000400004006000094010000F20300000008000000020000000400001907000081010000ED030000000900000002000000040000F107000070010000E9030000000A00000002000000040000CA0800005E010000E6030000000B00000002000000040000A20900004E010000E3030000000C00000002000000040000790A00003E010000E0030000000D00000002000000040000500B00002E010000DD030000000E00000002000000040000260C00001F010000DA030000000F00000002000000040000FB0C000011010000D7030000001000000002000000040000D00D000003010000D30300000000000000030000000400007C000000480300002C04000000010000000300000004000054010000300300001F0400000002000000030000000400002C0200001A0300001404000000030000000300000004000004030000040300000A040000000400000003000000040000DD030000EF02000002040000000500000003000000040000B6040000DA020000FA0300000006000000030000000400008E050000C6020000F403000000070000000300000004000067060000B3020000EF03000000080000000300000004000040070000A0020000EB030000000900000003000000040000180800008E020000E7030000000A00000003000000040000F00800007C020000E4030000000B00000003000000040000C80900006B020000E1030000000C000000030000000400009F0A00005A020000DE030000000D00000003000000040000760B00004A020000DB030000000E000000030000000400004C0C00003B020000D9030000000F00000003000000040000210D00002C020000D5030000001000000003000000040000F50D00001D020000D2030000000000000004000000040000A500000068040000290400000001000000040000000400007C010000500400001C0400000002000000040000000400005402000039040000110400000003000000040000000400002D0300002204000008040000000400000004000000040000050400000D04000000040000000500000004000000040000DE040000F8030000F9030000000600000004000000040000B6050000E3030000F30300000007000000040000000400008F060000CF030000EE03000000080000000400000004000067070000BC030000E903000000090000000400000004000040080000A9030000E6030000000A000000040000000400001709000097030000E2030000000B00000004000000040000EF09000086030000E0030000000C00000004000000040000C60A000075030000DD030000000D000000040000000400009C0B000064030000DA030000000E00000004000000040000720C000054030000D8030000000F00000004000000040000470D000045030000D50300000010000000040000000400001C0E000036030000D2030000000000000005000000040000CF0000008605000027040000000100000005000000040000A60100006E0500001B0400000002000000050000000400007E0200005605000010040000000300000005000000040000560300003F050000060400000004000000050000000400002E04000029050000FE0300000005000000050000000400000605000013050000F7030000000600000005000000040000DF050000FF040000F1030000000700000005000000040000B7060000EA040000ED03000000080000000500000004000090070000D6040000E803000000090000000500000004000068080000C3040000E5030000000A000000050000000400003F090000B1040000E2030000000B00000005000000040000170A00009F040000DF030000000C00000005000000040000EE0A00008D040000DD030000000D00000005000000040000C40B00007C040000DA030000000E000000050000000400009A0C00006C040000D8030000000F000000050000000400006F0D00005C040000D5030000001000000005000000040000430E00004C040000D2030000000000000006000000040000F9000000A306000026040000000100000006000000040000D00100008A06000019040000000200000006000000040000A8020000720600000F040000000300000006000000040000800300005B060000050400000004000000060000000400005804000044060000FD030000000500000006000000040000300500002E060000F70300000006000000060000000400000806000019060000F1030000000700000006000000040000E106000004060000EC030000000800000006000000040000B9070000F0050000E803000000090000000600000004000091080000DC050000E5030000000A0000000600000004000068090000C9050000E2030000000B000000060000000400003F0A0000B6050000DF030000000C00000006000000040000160B0000A4050000DD030000000D00000006000000040000EC0B000093050000DB030000000E00000006000000040000C20C000082050000D8030000000F00000006000000040000960D000072050000D60300000010000000060000000400006A0E000062050000D303000000000000000700000004000024010000BF07000025040000000100000007000000040000FB010000A607000019040000000200000007000000040000D20200008D0700000E040000000300000007000000040000AA0300007507000005040000000400000007000000040000820400005E070000FD0300000005000000070000000400005A05000048070000F70300000006000000070000000400003206000032070000F10300000007000000070000000400000A0700001D070000EC030000000800000007000000040000E207000008070000E9030000000900000007000000040000BA080000F4060000E5030000000A0000000700000004000091090000E0060000E2030000000B00000007000000040000680A0000CD060000E0030000000C000000070000000400003F0B0000BB060000DE030000000D00000007000000040000150C0000A9060000DC030000000E00000007000000040000EA0C000098060000D9030000000F00000007000000040000BF0D000087060000D7030000001000000007000000040000930E000076060000D40300000000000000080000000400004F010000DB0800002504000000010000000800000004000026020000C108000019040000000200000008000000040000FD020000A80800000E040000000300000008000000040000D50300009008000005040000000400000008000000040000AD04000078080000FE0300000005000000080000000400008505000061080000F70300000006000000080000000400005C0600004B080000F20300000007000000080000000400003407000035080000ED0300000008000000080000000400000C08000020080000E9030000000900000008000000040000E40800000C080000E6030000000A00000008000000040000BB090000F7070000E4030000000B00000008000000040000920A0000E4070000E1030000000C00000008000000040000680B0000D1070000DF030000000D000000080000000400003E0C0000BF070000DD030000000E00000008000000040000130D0000AD070000DB030000000F00000008000000040000E80D00009B070000D9030000001000000008000000040000BB0E00008B070000D60300000000000000090000000400007B010000F70900002504000000010000000900000004000052020000DD0900001904000000020000000900000004000029030000C30900000F04000000030000000900000004000000040000AB09000006040000000400000009000000040000D804000092090000FE030000000500000009000000040000AF0500007B090000F80300000006000000090000000400008706000064090000F30300000007000000090000000400005F0700004E090000EE0300000008000000090000000400003708000038090000EB0300000009000000090000000400000E09000023090000E8030000000A00000009000000040000E50900000F090000E5030000000B00000009000000040000BC0A0000FB080000E3030000000C00000009000000040000920B0000E8080000E1030000000D00000009000000040000680C0000D5080000DF030000000E000000090000000400003D0D0000C2080000DD030000000F00000009000000040000110E0000B0080000DB030000001000000009000000040000E40E00009F080000D803000000000000000A000000040000A7010000140B00002604000000010000000A0000000400007D020000F90A00001A04000000020000000A00000004000054030000DF0A00000F04000000030000000A0000000400002B040000C60A00000704000000040000000A00000004000003050000AD0A0000FF03000000050000000A000000040000DB050000950A0000F903000000060000000A000000040000B20600007E0A0000F403000000070000000A0000000400008A070000670A0000F003000000080000000A00000004000061080000510A0000EC03000000090000000A000000040000380900003C0A0000E9030000000A0000000A0000000400000F0A0000270A0000E7030000000B0000000A000000040000E60A0000130A0000E5030000000C0000000A000000040000BC0B0000FF090000E3030000000D0000000A000000040000910C0000EB090000E1030000000E0000000A000000040000660D0000D8090000DF030000000F0000000A0000000400003A0E0000C6090000DD03000000100000000A0000000400000E0F0000B4090000DB03000000000000000B000000040000D3010000320C00002604000000010000000B000000040000A9020000170C00001B04000000020000000B00000004000080030000FC0B00001004000000030000000B00000004000057040000E20B00000804000000040000000B0000000400002E050000C90B00000104000000050000000B00000004000006060000B10B0000FA03000000060000000B000000040000DD060000990B0000F503000000070000000B000000040000B5070000820B0000F103000000080000000B0000000400008C0800006C0B0000EE03000000090000000B00000004000063090000560B0000EB030000000A0000000B0000000400003A0A0000400B0000E9030000000B0000000B000000040000100B00002B0B0000E7030000000C0000000B000000040000E60B0000170B0000E5030000000D0000000B000000040000BC0C0000030B0000E4030000000E0000000B000000040000900D0000F00A0000E2030000000F0000000B000000040000640E0000DD0A0000E003000000100000000B000000040000370F0000CB0A0000DD03000000000000000C000000040000FF010000510D00002704000000010000000C000000040000D5020000360D00001C04000000020000000C000000040000AC0300001B0D00001204000000030000000C00000004000083040000010D00000904000000040000000C0000000400005A050000E70C00000204000000050000000C00000004000031060000CE0C0000FC03000000060000000C00000004000009070000B60C0000F703000000070000000C000000040000E00700009E0C0000F303000000080000000C000000040000B7080000870C0000F003000000090000000C0000000400008E090000710C0000ED030000000A0000000C000000040000650A00005B0C0000EB030000000B0000000C0000000400003B0B0000460C0000E9030000000C0000000C000000040000100C0000310C0000E8030000000D0000000C000000040000E60C00001D0C0000E6030000000E0000000C000000040000BA0D0000090C0000E4030000000F0000000C0000000400008E0E0000F60B0000E303000000100000000C000000040000610F0000E30B0000E003000000000000000D0000000400002B020000730E00002804000000010000000D00000004000001030000570E00001D04000000020000000D000000040000D80300003C0E00001304000000030000000D000000040000AF040000210E00000B04000000040000000D00000004000086050000070E00000404000000050000000D0000000400005D060000EE0D0000FE03000000060000000D00000004000034070000D50D0000F903000000070000000D0000000400000B080000BD0D0000F503000000080000000D000000040000E2080000A50D0000F203000000090000000D000000040000B90900008F0D0000EF030000000A0000000D0000000400008F0A0000780D0000ED030000000B0000000D000000040000650B0000620D0000EC030000000C0000000D0000000400003B0C00004D0D0000EA030000000D0000000D000000040000100D0000380D0000E9030000000E0000000D000000040000E40D0000240D0000E7030000000F0000000D000000040000B80E0000100D0000E603000000100000000D0000000400008A0F0000FD0C0000E303000000000000000E00000004000058020000980F00002904000000010000000E0000000400002D0300007B0F00001E04000000020000000E000000040000040400005F0F00001404000000030000000E000000040000DA040000440F00000C04000000040000000E000000040000B10500002A0F00000504000000050000000E00000004000088060000100F0000FF03000000060000000E0000000400005F070000F70E0000FB03000000070000000E00000004000036080000DE0E0000F703000000080000000E0000000400000D090000C60E0000F403000000090000000E000000040000E3090000AF0E0000F2030000000A0000000E000000040000BA0A0000980E0000F0030000000B0000000E000000040000900B0000820E0000EE030000000C0000000E000000040000650C00006C0E0000ED030000000D0000000E0000000400003A0D0000570E0000EC030000000E0000000E0000000400000E0E0000420E0000EA030000000F0000000E000000040000E10E00002E0E0000E903000000100000000E000000040000B40F00001A0E0000E703000000000000000F00000004000084020000FF0F00002B04000000010000000F00000004000059030000FF0F00001F04000000020000000F0000000400002F040000FF0F00001604000000030000000F00000004000006050000FF0F00000D04000000040000000F000000040000DC050000FF0F00000704000000050000000F000000040000B3060000FF0F00000104000000060000000F0000000400008A070000FF0F0000FD03000000070000000F00000004000061080000FF0F0000F903000000080000000F00000004000037090000EA0F0000F603000000090000000F0000000400000E0A0000D20F0000F4030000000A0000000F000000040000E40A0000BB0F0000F2030000000B0000000F000000040000BA0B0000A40F0000F1030000000C0000000F0000000400008F0C00008E0F0000F0030000000D0000000F000000040000640D0000780F0000EE030000000E0000000F000000040000380E0000630F0000ED030000000F0000000F0000000400000B0F00004E0F0000EC03000000100000000F000000040000DD0F00003A0F0000EA030000000000000010000000040000AF020000FF0F00002B04000000010000001000000004000085030000FF0F0000200400000002000000100000000400005B040000FF0F00001704000000030000001000000004000031050000FF0F00000F04000000040000001000000004000007060000FF0F000008040000000500000010000000040000DE060000FF0F000003040000000600000010000000040000B5070000FF0F0000FE0300000007000000100000000400008B080000FF0F0000FB03000000080000001000000004000062090000FF0F0000F8030000000900000010000000040000380A0000FF0F0000F6030000000A000000100000000400000E0B0000FF0F0000F4030000000B00000010000000040000E40B0000FF0F0000F3030000000C00000010000000040000B90C0000FF0F0000F2030000000D000000100000000400008D0D0000FF0F0000F1030000000E00000010000000040000610E0000FF0F0000F0030000000F00000010000000040000340F0000FF0F0000EE030000001000000010000000040000FF0F0000FF0F0000ED030000000000000000000000050000060000000000000044050000000100000000000000050000DE0000000000000036050000000200000000000000050000B7010000000000002B0500000003000000000000000500009002000000000000200500000004000000000000000500006803000000000000170500000005000000000000000500004204000000000000100500000006000000000000000500001B0500000000000009050000000700000000000000050000F40500000000000003050000000800000000000000050000CD06000000000000FE040000000900000000000000050000A507000000000000FA040000000A000000000000000500007E08000000000000F6040000000B000000000000000500005609000000000000F2040000000C000000000000000500002D0A000000000000EF040000000D00000000000000050000040B000000000000EC040000000E00000000000000050000DB0B000000000000E8040000000F00000000000000050000B00C000000000000E5040000001000000000000000050000850D000000000000E10400000000000000010000000500002C000000FE0000003E05000000010000000100000005000004010000E800000031050000000200000001000000050000DD010000D200000025050000000300000001000000050000B5020000BD0000001B0500000004000000010000000500008E030000A90000001305000000050000000100000005000067040000950000000B0500000006000000010000000500004005000082000000040500000007000000010000000500001906000070000000FF040000000800000001000000050000F10600005E000000FA040000000900000001000000050000CA0700004D000000F6040000000A00000001000000050000A20800003C000000F2040000000B000000010000000500007A0900002C000000EE040000000C00000001000000050000520A00001D000000EB040000000D00000001000000050000280B00000E000000E8040000000E00000001000000050000FE0B000000000000E5040000000F00000001000000050000D40C000000000000E1040000001000000001000000050000A80D000000000000DD04000000000000000200000005000054000000220200003A0500000001000000020000000500002B0100000C0200002D05000000020000000200000005000003020000F601000021050000000300000002000000050000DC020000E001000017050000000400000002000000050000B4030000CC0100000F0500000005000000020000000500008D040000B70100000705000000060000000200000005000066050000A4010000010500000007000000020000000500003F06000091010000FB040000000800000002000000050000170700007F010000F6040000000900000002000000050000F00700006D010000F2040000000A00000002000000050000C80800005C010000EF040000000B000000020000000500009F0900004C010000EB040000000C00000002000000050000770A00003C010000E8040000000D000000020000000500004D0B00002C010000E5040000000E00000002000000050000230C00001D010000E2040000000F00000002000000050000F90C00000F010000DF040000001000000002000000050000CD0D000001010000DB0400000000000000030000000500007C0000004403000036050000000100000003000000050000530100002D030000290500000002000000030000000500002B020000170300001E050000000300000003000000050000030300000103000014050000000400000003000000050000DC030000EC0200000B050000000500000003000000050000B4040000D7020000040500000006000000030000000500008D050000C3020000FE04000000070000000300000005000066060000B0020000F80400000008000000030000000500003E0700009D020000F4040000000900000003000000050000160800008B020000F0040000000A00000003000000050000EE08000079020000EC040000000B00000003000000050000C609000068020000E9040000000C000000030000000500009D0A000058020000E6040000000D00000003000000050000730B000048020000E3040000000E00000003000000050000490C000038020000E0040000000F000000030000000500001E0D00002A020000DD040000001000000003000000050000F20D00001B020000DA040000000000000004000000050000A400000064040000330500000001000000040000000500007C0100004C0400002705000000020000000400000005000054020000350400001B0500000003000000040000000500002C0300001F04000012050000000400000004000000050000040400000904000009050000000500000004000000050000DC040000F403000002050000000600000004000000050000B5050000E0030000FC0400000007000000040000000500008D060000CC030000F704000000080000000400000005000066070000B9030000F20400000009000000040000000500003E080000A6030000EE040000000A000000040000000500001509000094030000EB040000000B00000004000000050000ED09000083030000E8040000000C00000004000000050000C40A000072030000E5040000000D000000040000000500009A0B000061030000E2040000000E00000004000000050000700C000052030000DF040000000F00000004000000050000450D000042030000DC040000001000000004000000050000190E000033030000D9040000000000000005000000050000CE0000008105000031050000000100000005000000050000A501000069050000240500000002000000050000000500007D0200005205000019050000000300000005000000050000550300003B050000100500000004000000050000000500002D0400002505000007050000000500000005000000050000050500001005000000050000000600000005000000050000DD050000FB040000FA040000000700000005000000050000B6060000E7040000F50400000008000000050000000500008E070000D3040000F104000000090000000500000005000066080000C0040000ED040000000A000000050000000500003D090000AD040000EA040000000B00000005000000050000150A00009C040000E7040000000C00000005000000050000EB0A00008A040000E5040000000D00000005000000050000C10B000079040000E2040000000E00000005000000050000970C000069040000DF040000000F000000050000000500006C0D000059040000DC040000001000000005000000050000400E00004A040000D9040000000000000006000000050000F80000009E06000030050000000100000006000000050000CF0100008506000023050000000200000006000000050000A70200006E060000180500000003000000060000000500007E030000560600000F0500000004000000060000000500005604000040060000060500000005000000060000000500002F0500002A060000000500000006000000060000000500000706000015060000FA040000000700000006000000050000DF06000000060000F5040000000800000006000000050000B7070000EC050000F10400000009000000060000000500008F080000D8050000ED040000000A0000000600000005000066090000C5050000EA040000000B000000060000000500003D0A0000B3050000E7040000000C00000006000000050000140B0000A1050000E5040000000D00000006000000050000EA0B000090050000E2040000000E00000006000000050000BF0C00007F050000E0040000000F00000006000000050000940D00006F050000DD040000001000000006000000050000670E00005F050000D904000000000000000700000005000023010000BA0700002F050000000100000007000000050000FA010000A107000022050000000200000007000000050000D10200008807000017050000000300000007000000050000A9030000710700000E050000000400000007000000050000810400005A070000060500000005000000070000000500005905000043070000FF040000000600000007000000050000310600002E070000F90400000007000000070000000500000807000018070000F5040000000800000007000000050000E007000004070000F1040000000900000007000000050000B8080000F0060000ED040000000A000000070000000500008F090000DC060000EA040000000B00000007000000050000660A0000CA060000E8040000000C000000070000000500003C0B0000B7060000E5040000000D00000007000000050000120C0000A6060000E3040000000E00000007000000050000E70C000094060000E0040000000F00000007000000050000BC0D000083060000DE040000001000000007000000050000900E000073060000DB0400000000000000080000000500004E010000D50800002E05000000010000000800000005000025020000BC08000022050000000200000008000000050000FC020000A308000017050000000300000008000000050000D40300008B0800000E050000000400000008000000050000AB0400007308000006050000000500000008000000050000830500005C080000FF0400000006000000080000000500005B06000046080000FA0400000007000000080000000500003307000031080000F50400000008000000080000000500000A0800001C080000F1040000000900000008000000050000E208000007080000EE040000000A00000008000000050000B9090000F3070000EB040000000B00000008000000050000900A0000E0070000E9040000000C00000008000000050000660B0000CD070000E6040000000D000000080000000500003B0C0000BB070000E4040000000E00000008000000050000100D0000A9070000E2040000000F00000008000000050000E50D000098070000DF040000001000000008000000050000B80E000087070000DC0400000000000000090000000500007A010000F10900002E05000000010000000900000005000050020000D70900002205000000020000000900000005000027030000BE09000017050000000300000009000000050000FF030000A50900000E050000000400000009000000050000D60400008D09000006050000000500000009000000050000AE0500007609000000050000000600000009000000050000850600005F090000FA0400000007000000090000000500005D07000049090000F60400000008000000090000000500003508000034090000F20400000009000000090000000500000C0900001F090000EF040000000A00000009000000050000E30900000A090000EC040000000B00000009000000050000B90A0000F7080000EA040000000C000000090000000500008F0B0000E3080000E8040000000D00000009000000050000650C0000D1080000E6040000000E000000090000000500003A0D0000BE080000E4040000000F000000090000000500000E0E0000AD080000E1040000001000000009000000050000E10E00009B080000DE04000000000000000A000000050000A60100000D0B00002E05000000010000000A0000000500007C020000F30A00002205000000020000000A00000005000053030000D90A00001805000000030000000A0000000500002A040000C00A00000F05000000040000000A00000005000001050000A70A00000705000000050000000A000000050000D9050000900A00000105000000060000000A000000050000B0060000790A0000FB04000000070000000A00000005000088070000620A0000F704000000080000000A0000000500005F0800004C0A0000F304000000090000000A00000005000036090000370A0000F0040000000A0000000A0000000500000D0A0000220A0000EE040000000B0000000A000000050000E30A00000E0A0000EC040000000C0000000A000000050000B90B0000FA090000EA040000000D0000000A0000000500008F0C0000E7090000E8040000000E0000000A000000050000630D0000D4090000E6040000000F0000000A000000050000370E0000C2090000E304000000100000000A0000000500000B0F0000B0090000E104000000000000000B000000050000D20100002B0C00002F05000000010000000B000000050000A8020000100C00002305000000020000000B0000000500007F030000F60B00001805000000030000000B00000005000056040000DC0B00001005000000040000000B0000000500002D050000C30B00000805000000050000000B00000005000004060000AB0B00000205000000060000000B000000050000DB060000930B0000FD04000000070000000B000000050000B30700007C0B0000F804000000080000000B0000000500008A080000660B0000F504000000090000000B00000005000061090000500B0000F2040000000A0000000B000000050000380A00003B0B0000F0040000000B0000000B0000000500000E0B0000260B0000EE040000000C0000000B000000050000E40B0000120B0000EC040000000D0000000B000000050000B90C0000FF0A0000EA040000000E0000000B0000000500008D0D0000EB0A0000E8040000000F0000000B000000050000610E0000D90A0000E604000000100000000B000000050000340F0000C70A0000E304000000000000000C000000050000FE0100004A0D00002F05000000010000000C000000050000D40200002E0D00002305000000020000000C000000050000AB030000140D00001905000000030000000C00000005000081040000FA0C00001105000000040000000C00000005000058050000E10C00000905000000050000000C0000000500002F060000C80C00000305000000060000000C00000005000007070000B00C0000FE04000000070000000C000000050000DE070000980C0000FA04000000080000000C000000050000B5080000820C0000F704000000090000000C0000000500008C0900006B0C0000F4040000000A0000000C000000050000620A0000560C0000F2040000000B0000000C000000050000380B0000400C0000F0040000000C0000000C0000000500000E0C00002C0C0000EE040000000D0000000C000000050000E30C0000180C0000EC040000000E0000000C000000050000B70D0000040C0000EB040000000F0000000C0000000500008B0E0000F10B0000E904000000100000000C0000000500005E0F0000DE0B0000E604000000000000000D0000000500002A0200006B0E00003005000000010000000D000000050000000300004F0E00002405000000020000000D000000050000D6030000340E00001A05000000030000000D000000050000AD0400001A0E00001205000000040000000D00000005000084050000000E00000B05000000050000000D0000000500005B060000E70D00000505000000060000000D00000005000032070000CE0D00000005000000070000000D00000005000009080000B70D0000FC04000000080000000D000000050000E00800009F0D0000F804000000090000000D000000050000B6090000880D0000F6040000000A0000000D0000000500008D0A0000720D0000F4040000000B0000000D000000050000630B00005D0D0000F2040000000C0000000D000000050000380C0000480D0000F0040000000D0000000D0000000500000D0D0000330D0000EF040000000E0000000D000000050000E10D00001F0D0000ED040000000F0000000D000000050000B50E00000C0D0000EB04000000100000000D000000050000870F0000F80C0000E904000000000000000E000000050000560200008F0F00003105000000010000000E0000000500002C030000730F00002505000000020000000E00000005000002040000570F00001B05000000030000000E000000050000D90400003C0F00001305000000040000000E000000050000AF050000220F00000C05000000050000000E00000005000086060000090F00000605000000060000000E0000000500005D070000F00E00000105000000070000000E00000005000034080000D70E0000FD04000000080000000E0000000500000A090000C00E0000FA04000000090000000E000000050000E1090000A80E0000F8040000000A0000000E000000050000B70A0000920E0000F6040000000B0000000E0000000500008D0B00007C0E0000F4040000000C0000000E000000050000620C0000660E0000F3040000000D0000000E000000050000370D0000510E0000F1040000000E0000000E0000000500000B0E00003D0E0000F0040000000F0000000E000000050000DE0E0000290E0000EE04000000100000000E000000050000B10F0000150E0000EC04000000000000000F00000005000082020000FF0F00003105000000010000000F00000005000058030000FF0F00002605000000020000000F0000000500002E040000FF0F00001C05000000030000000F00000005000004050000FF0F00001405000000040000000F000000050000DA050000FF0F00000D05000000050000000F000000050000B1060000FF0F00000805000000060000000F00000005000088070000FF0F00000305000000070000000F0000000500005F080000FB0F0000FF04000000080000000F00000005000035090000E30F0000FC04000000090000000F0000000500000B0A0000CB0F0000FA040000000A0000000F000000050000E10A0000B40F0000F8040000000B0000000F000000050000B70B00009E0F0000F6040000000C0000000F0000000500008C0C0000880F0000F5040000000D0000000F000000050000610D0000720F0000F4040000000E0000000F000000050000350E00005D0F0000F2040000000F0000000F000000050000080F0000490F0000F104000000100000000F000000050000DA0F0000350F0000EF040000000000000010000000050000AE020000FF0F00003205000000010000001000000005000083030000FF0F00002705000000020000001000000005000059040000FF0F00001D0500000003000000100000000500002F050000FF0F00001505000000040000001000000005000005060000FF0F00000E050000000500000010000000050000DC060000FF0F000009050000000600000010000000050000B2070000FF0F00000405000000070000001000000005000089080000FF0F0000010500000008000000100000000500005F090000FF0F0000FE040000000900000010000000050000360A0000FF0F0000FC040000000A000000100000000500000B0B0000FF0F0000FA040000000B00000010000000050000E10B0000FF0F0000F9040000000C00000010000000050000B60C0000FF0F0000F7040000000D000000100000000500008A0D0000FF0F0000F6040000000E000000100000000500005E0E0000FF0F0000F5040000000F00000010000000050000310F0000FF0F0000F4040000001000000010000000050000FF0F0000FF0F0000F204000000000000000000000006000006000000000000004E060000000100000000000000060000DE0000000000000041060000000200000000000000060000B601000000000000350600000003000000000000000600008F020000000000002A060000000400000000000000060000670300000000000021060000000500000000000000060000400400000000000019060000000600000000000000060000190500000000000012060000000700000000000000060000F2050000000000000C060000000800000000000000060000CB0600000000000007060000000900000000000000060000A40700000000000003060000000A000000000000000600007C08000000000000FE050000000B000000000000000600005409000000000000FB050000000C000000000000000600002B0A000000000000F7050000000D00000000000000060000020B000000000000F4050000000E00000000000000060000D80B000000000000F0050000000F00000000000000060000AD0C000000000000EC050000001000000000000000060000820D000000000000E80500000000000000010000000600002C000000FD0000004906000000010000000100000006000004010000E70000003B060000000200000001000000060000DC010000D10000002F060000000300000001000000060000B4020000BD000000250600000004000000010000000600008D030000A80000001C0600000005000000010000000600006604000095000000140600000006000000010000000600003E050000820000000D060000000700000001000000060000170600007000000008060000000800000001000000060000F00600005E00000003060000000900000001000000060000C80700004D000000FE050000000A00000001000000060000A00800003C000000FA050000000B00000001000000060000780900002C000000F7050000000C000000010000000600004F0A00001D000000F3050000000D00000001000000060000260B00000E000000F0050000000E00000001000000060000FC0B000000000000EC050000000F00000001000000060000D10C000000000000E9050000001000000001000000060000A60D000000000000E40500000000000000020000000600005300000021020000440600000001000000020000000600002B0100000B0200003706000000020000000200000006000003020000F50100002B060000000300000002000000060000DB020000DF01000021060000000400000002000000060000B3030000CB010000180600000005000000020000000600008C040000B70100001006000000060000000200000006000064050000A30100000A0600000007000000020000000600003D0600009001000004060000000800000002000000060000160700007E010000FF050000000900000002000000060000EE0700006D010000FB050000000A00000002000000060000C60800005C010000F7050000000B000000020000000600009D0900004B010000F3050000000C00000002000000060000740A00003B010000F0050000000D000000020000000600004B0B00002C010000ED050000000E00000002000000060000210C00001D010000E9050000000F00000002000000060000F60C00000E010000E6050000001000000002000000060000CA0D000000010000E20500000000000000030000000600007B0000004303000040060000000100000003000000060000520100002B030000330600000002000000030000000600002A020000150300002706000000030000000300000006000002030000FF0200001D060000000400000003000000060000DB030000EA02000014060000000500000003000000060000B3040000D60200000D0600000006000000030000000600008B050000C20200000606000000070000000300000006000064060000AF020000010600000008000000030000000600003C0700009C020000FC050000000900000003000000060000140800008A020000F8050000000A00000003000000060000EC08000078020000F4050000000B00000003000000060000C309000068020000F1050000000C000000030000000600009A0A000057020000EE050000000D00000003000000060000710B000047020000EB050000000E00000003000000060000460C000038020000E7050000000F000000030000000600001B0D000029020000E4050000001000000003000000060000EF0D00001B020000E0050000000000000004000000060000A4000000620400003D0600000001000000040000000600007B0100004A040000300600000002000000040000000600005302000033040000240600000003000000040000000600002B0300001D0400001A060000000400000004000000060000030400000704000012060000000500000004000000060000DB040000F30300000A060000000600000004000000060000B3050000DE030000040600000007000000040000000600008C060000CB030000FF05000000080000000400000006000064070000B8030000FA0500000009000000040000000600003C080000A5030000F6050000000A000000040000000600001309000093030000F2050000000B00000004000000060000EB09000082030000EF050000000C00000004000000060000C10A000071030000EC050000000D00000004000000060000970B000061030000E9050000000E000000040000000600006D0C000051030000E6050000000F00000004000000060000420D000041030000E3050000001000000004000000060000160E000033030000DF050000000000000005000000060000CD0000007F0500003A060000000100000005000000060000A4010000670500002D0600000002000000050000000600007C02000050050000220600000003000000050000000600005403000039050000180600000004000000050000000600002C0400002305000010060000000500000005000000060000040500000E05000009060000000600000005000000060000DC050000F904000002060000000700000005000000060000B4060000E5040000FD0500000008000000050000000600008C070000D1040000F905000000090000000500000006000064080000BE040000F5050000000A000000050000000600003B090000AC040000F1050000000B00000005000000060000120A00009A040000EE050000000C00000005000000060000E90A000089040000EC050000000D00000005000000060000BF0B000078040000E9050000000E00000005000000060000940C000068040000E6050000000F00000005000000060000690D000058040000E30500000010000000050000000600003D0E000049040000DF050000000000000006000000060000F70000009B06000038060000000100000006000000060000CE010000820600002C060000000200000006000000060000A60200006B060000210600000003000000060000000600007D0300005406000017060000000400000006000000060000550400003D0600000F0600000005000000060000000600002D0500002706000007060000000600000006000000060000050600001206000001060000000700000006000000060000DD060000FE050000FC050000000800000006000000060000B5070000EA050000F80500000009000000060000000600008C080000D6050000F4050000000A0000000600000006000064090000C4050000F1050000000B000000060000000600003B0A0000B1050000EE050000000C00000006000000060000110B0000A0050000EB050000000D00000006000000060000E70B00008E050000E9050000000E00000006000000060000BC0C00007E050000E6050000000F00000006000000060000910D00006D050000E3050000001000000006000000060000640E00005E050000E005000000000000000700000006000022010000B607000037060000000100000007000000060000F90100009D0700002A060000000200000007000000060000D0020000850700001F060000000300000007000000060000A70300006E070000160600000004000000070000000600007F040000570700000E0600000005000000070000000600005705000040070000070600000006000000070000000600002F0600002B070000010600000007000000070000000600000707000016070000FC050000000800000007000000060000DE07000001070000F8050000000900000007000000060000B6080000EE060000F4050000000A000000070000000600008D090000DA060000F1050000000B00000007000000060000640A0000C8060000EE050000000C000000070000000600003A0B0000B5060000EC050000000D00000007000000060000100C0000A4060000E9050000000E00000007000000060000E50C000093060000E7050000000F00000007000000060000B90D000082060000E40500000010000000070000000600008C0E000072060000E10500000000000000080000000600004D010000D10800003606000000010000000800000006000024020000B80800002A060000000200000008000000060000FB0200009F0800001F060000000300000008000000060000D20300008708000016060000000400000008000000060000AA040000700800000E060000000500000008000000060000810500005908000007060000000600000008000000060000590600004308000001060000000700000008000000060000310700002E080000FC0500000008000000080000000600000808000019080000F8050000000900000008000000060000DF08000005080000F5050000000A00000008000000060000B6090000F1070000F2050000000B000000080000000600008D0A0000DE070000EF050000000C00000008000000060000630B0000CB070000ED050000000D00000008000000060000390C0000B9070000EA050000000E000000080000000600000E0D0000A7070000E8050000000F00000008000000060000E20D000096070000E5050000001000000008000000060000B50E000086070000E205000000000000000900000006000079010000EC090000360600000001000000090000000600004F020000D30900002906000000020000000900000006000026030000B90900001F060000000300000009000000060000FD030000A109000016060000000400000009000000060000D5040000890900000E060000000500000009000000060000AC0500007209000007060000000600000009000000060000840600005C090000010600000007000000090000000600005B07000046090000FD0500000008000000090000000600003208000030090000F90500000009000000090000000600000A0900001C090000F5050000000A00000009000000060000E009000008090000F3050000000B00000009000000060000B70A0000F4080000F0050000000C000000090000000600008D0B0000E1080000EE050000000D00000009000000060000620C0000CE080000EC050000000E00000009000000060000370D0000BC080000E9050000000F000000090000000600000B0E0000AB080000E7050000001000000009000000060000DE0E00009A080000E405000000000000000A000000060000A5010000080B00003606000000010000000A0000000600007B020000EE0A00002A06000000020000000A00000006000052030000D40A00001F06000000030000000A00000006000028040000BC0A00001606000000040000000A00000006000000050000A30A00000E06000000050000000A000000060000D70500008C0A00000806000000060000000A000000060000AE060000750A00000206000000070000000A000000060000860700005E0A0000FE05000000080000000A0000000600005D080000490A0000FA05000000090000000A00000006000034090000340A0000F7050000000A0000000A0000000600000B0A00001F0A0000F4050000000B0000000A000000060000E10A00000B0A0000F2050000000C0000000A000000060000B70B0000F7090000EF050000000D0000000A0000000600008C0C0000E4090000ED050000000E0000000A000000060000610D0000D2090000EB050000000F0000000A000000060000340E0000C0090000E905000000100000000A000000060000070F0000AE090000E605000000000000000B000000060000D1010000250C00003606000000010000000B000000060000A70200000B0C00002A06000000020000000B0000000600007D030000F10B00001F06000000030000000B00000006000054040000D70B00001606000000040000000B0000000600002B050000BF0B00000F06000000050000000B00000006000002060000A70B00000806000000060000000B000000060000D90600008F0B00000306000000070000000B000000060000B1070000780B0000FF05000000080000000B00000006000088080000620B0000FB05000000090000000B0000000600005E0900004D0B0000F8050000000A0000000B000000060000350A0000380B0000F6050000000B0000000B0000000600000B0B0000230B0000F3050000000C0000000B000000060000E10B00000F0B0000F1050000000D0000000B000000060000B60C0000FC0A0000EF050000000E0000000B0000000600008A0D0000E90A0000ED050000000F0000000B0000000600005E0E0000D60A0000EB05000000100000000B000000060000310F0000C40A0000E805000000000000000C000000060000FD010000440D00003606000000010000000C000000060000D3020000290D00002A06000000020000000C000000060000A90300000E0D00002006000000030000000C00000006000080040000F50C00001706000000040000000C00000006000056050000DC0C00001006000000050000000C0000000600002D060000C30C00000A06000000060000000C00000006000005070000AB0C00000406000000070000000C000000060000DC070000940C00000006000000080000000C000000060000B20800007D0C0000FD05000000090000000C00000006000089090000670C0000FA050000000A0000000C000000060000600A0000520C0000F7050000000B0000000C000000060000350B00003D0C0000F5050000000C0000000C0000000600000B0C0000280C0000F3050000000D0000000C000000060000E00C0000150C0000F2050000000E0000000C000000060000B40D0000010C0000F0050000000F0000000C000000060000880E0000EE0B0000EE05000000100000000C0000000600005A0F0000DC0B0000EB05000000000000000D00000006000029020000650E00003706000000010000000D000000060000FE020000490E00002B06000000020000000D000000060000D50300002E0E00002106000000030000000D000000060000AB040000140E00001806000000040000000D00000006000082050000FB0D00001106000000050000000D00000006000059060000E20D00000B06000000060000000D00000006000030070000CA0D00000606000000070000000D00000006000007080000B20D00000106000000080000000D000000060000DD0800009B0D0000FE05000000090000000D000000060000B4090000840D0000FB050000000A0000000D0000000600008A0A00006E0D0000F9050000000B0000000D000000060000600B0000590D0000F7050000000C0000000D000000060000350C0000440D0000F6050000000D0000000D0000000600000A0D0000300D0000F4050000000E0000000D000000060000DE0D00001C0D0000F2050000000F0000000D000000060000B10E0000090D0000F005000000100000000D000000060000840F0000F60C0000EE05000000000000000E00000006000055020000880F00003706000000010000000E0000000600002A0300006C0F00002B06000000020000000E00000006000000040000510F00002106000000030000000E000000060000D7040000370F00001906000000040000000E000000060000AD0500001D0F00001206000000050000000E00000006000084060000030F00000C06000000060000000E0000000600005B070000EA0E00000706000000070000000E00000006000031080000D20E00000306000000080000000E00000006000008090000BB0E00000006000000090000000E000000060000DE090000A40E0000FD050000000A0000000E000000060000B40A00008D0E0000FB050000000B0000000E0000000600008A0B0000780E0000F9050000000C0000000E0000000600005F0C0000620E0000F8050000000D0000000E000000060000340D00004D0E0000F6050000000E0000000E000000060000080E0000390E0000F5050000000F0000000E000000060000DB0E0000250E0000F305000000100000000E000000060000AD0F0000120E0000F005000000000000000F00000006000080020000FF0F00003806000000010000000F00000006000056030000FF0F00002C06000000020000000F0000000600002C040000FF0F00002206000000030000000F00000006000002050000FF0F00001A06000000040000000F000000060000D8050000FF0F00001306000000050000000F000000060000AF060000FF0F00000D06000000060000000F00000006000086070000FF0F00000806000000070000000F0000000600005C080000F60F00000406000000080000000F00000006000033090000DE0F00000106000000090000000F000000060000090A0000C70F0000FF050000000A0000000F000000060000DF0A0000B00F0000FD050000000B0000000F000000060000B40B0000990F0000FB050000000C0000000F000000060000890C0000840F0000FA050000000D0000000F0000000600005E0D00006E0F0000F8050000000E0000000F000000060000310E00005A0F0000F7050000000F0000000F000000060000040F0000450F0000F505000000100000000F000000060000D70F0000320F0000F3050000000000000010000000060000AC020000FF0F00003806000000010000001000000006000081030000FF0F00002C06000000020000001000000006000057040000FF0F0000230600000003000000100000000600002D050000FF0F00001B06000000040000001000000006000003060000FF0F000014060000000500000010000000060000DA060000FF0F00000E060000000600000010000000060000B0070000FF0F00000906000000070000001000000006000087080000FF0F0000060600000008000000100000000600005D090000FF0F000003060000000900000010000000060000330A0000FF0F000000060000000A00000010000000060000090B0000FF0F0000FF050000000B00000010000000060000DE0B0000FF0F0000FD050000000C00000010000000060000B30C0000FF0F0000FC050000000D00000010000000060000870D0000FF0F0000FB050000000E000000100000000600005B0E0000FF0F0000F9050000000F000000100000000600002E0F0000FF0F0000F8050000001000000010000000060000FF0F0000FF0F0000F6050000000000000000000000070000060000000000000058070000000100000000000000070000DE000000000000004A070000000200000000000000070000B6010000000000003E0700000003000000000000000700008E020000000000003307000000040000000000000007000067030000000000002A07000000050000000000000007000040040000000000002207000000060000000000000007000018050000000000001B070000000700000000000000070000F10500000000000015070000000800000000000000070000CA060000000000000F070000000900000000000000070000A2070000000000000A070000000A000000000000000700007A0800000000000006070000000B00000000000000070000520900000000000002070000000C00000000000000070000290A000000000000FE060000000D00000000000000070000000B000000000000FB060000000E00000000000000070000D60B000000000000F7060000000F00000000000000070000AB0C000000000000F30600000010000000000000000700007F0D000000000000EE0600000000000000010000000700002C000000FD0000005207000000010000000100000007000003010000E700000044070000000200000001000000070000DB010000D200000038070000000300000001000000070000B4020000BD0000002E0700000004000000010000000700008C030000A90000002507000000050000000100000007000065040000950000001D0700000006000000010000000700003D0500008200000016070000000700000001000000070000160600007000000010070000000800000001000000070000EE0600005E0000000A070000000900000001000000070000C70700004D00000006070000000A000000010000000700009F0800003D00000002070000000B00000001000000070000760900002D000000FE060000000C000000010000000700004D0A00001D000000FA060000000D00000001000000070000240B00000F000000F7060000000E00000001000000070000F90B000000000000F3060000000F00000001000000070000CF0C000000000000EF060000001000000001000000070000A30D000000000000EB06000000000000000200000007000053000000210200004D0700000001000000020000000700002A0100000A0200004007000000020000000200000007000002020000F501000034070000000300000002000000070000DA020000DF01000029070000000400000002000000070000B2030000CB010000200700000005000000020000000700008B040000B70100001807000000060000000200000007000063050000A3010000110700000007000000020000000700003C060000910100000C070000000800000002000000070000140700007F01000006070000000900000002000000070000EC0700006D01000002070000000A00000002000000070000C40800005C010000FE060000000B000000020000000700009B0900004C010000FA060000000C00000002000000070000720A00003C010000F7060000000D00000002000000070000490B00002C010000F3060000000E000000020000000700001E0C00001E010000F0060000000F00000002000000070000F30C00000F010000EC060000001000000002000000070000C70D000001010000E80600000000000000030000000700007B0000004203000049070000000100000003000000070000520100002B0300003B0700000002000000030000000700002A020000150300003007000000030000000300000007000001030000FF02000025070000000400000003000000070000DA030000EA0200001C070000000500000003000000070000B2040000D5020000150700000006000000030000000700008A050000C20200000E07000000070000000300000007000063060000AF020000080700000008000000030000000700003B0700009C02000003070000000900000003000000070000130800008A020000FF060000000A00000003000000070000EA08000079020000FB060000000B00000003000000070000C109000068020000F8060000000C00000003000000070000980A000058020000F4060000000D000000030000000700006E0B000048020000F1060000000E00000003000000070000440C000038020000EE060000000F00000003000000070000190D00002A020000EA060000001000000003000000070000ED0D00001B020000E6060000000000000004000000070000A300000061040000450700000001000000040000000700007A010000490400003807000000020000000400000007000052020000320400002C0700000003000000040000000700002A0300001C0400002207000000040000000400000007000002040000070400001A070000000500000004000000070000DA040000F203000012070000000600000004000000070000B2050000DE0300000C0700000007000000040000000700008A060000CA0300000607000000080000000400000007000062070000B7030000010700000009000000040000000700003A080000A5030000FD060000000A000000040000000700001109000093030000F9060000000B00000004000000070000E809000082030000F6060000000C00000004000000070000BF0A000071030000F3060000000D00000004000000070000950B000061030000EF060000000E000000040000000700006A0C000051030000EC060000000F000000040000000700003F0D000042030000E9060000001000000004000000070000130E000033030000E5060000000000000005000000070000CD0000007D05000043070000000100000005000000070000A401000065050000350700000002000000050000000700007B0200004E0500002A0700000003000000050000000700005303000038050000200700000004000000050000000700002A0400002205000017070000000500000005000000070000020500000D05000010070000000600000005000000070000DA050000F80400000A070000000700000005000000070000B2060000E4040000040700000008000000050000000700008A070000D1040000FF06000000090000000500000007000062080000BE040000FB060000000A0000000500000007000039090000AB040000F8060000000B00000005000000070000100A00009A040000F5060000000C00000005000000070000E70A000089040000F2060000000D00000005000000070000BC0B000078040000EF060000000E00000005000000070000920C000068040000EC060000000F00000005000000070000660D000058040000E80600000010000000050000000700003A0E000049040000E5060000000000000006000000070000F70000009906000040070000000100000006000000070000CE0100008106000033070000000200000006000000070000A502000069060000280700000003000000060000000700007C030000520600001E070000000400000006000000070000540400003C060000160700000005000000060000000700002C050000260600000F070000000600000006000000070000040600001106000008070000000700000006000000070000DB060000FD05000003070000000800000006000000070000B3070000E9050000FF0600000009000000060000000700008B080000D5050000FB060000000A0000000600000007000062090000C3050000F7060000000B00000006000000070000390A0000B1050000F4060000000C000000060000000700000F0B00009F050000F1060000000D00000006000000070000E50B00008E050000EE060000000E00000006000000070000BA0C00007D050000EB060000000F000000060000000700008E0D00006D050000E8060000001000000006000000070000610E00005E050000E506000000000000000700000007000021010000B40700003F070000000100000007000000070000F80100009B07000032070000000200000007000000070000CF0200008307000027070000000300000007000000070000A60300006C0700001D0700000004000000070000000700007E0400005507000015070000000500000007000000070000560500003F0700000E0700000006000000070000000700002D0600002907000008070000000700000007000000070000050700001407000002070000000800000007000000070000DC07000000070000FE060000000900000007000000070000B4080000EC060000FA060000000A000000070000000700008B090000D9060000F7060000000B00000007000000070000610A0000C7060000F4060000000C00000007000000070000380B0000B5060000F1060000000D000000070000000700000D0C0000A3060000EF060000000E00000007000000070000E20C000092060000EC060000000F00000007000000070000B60D000082060000E90600000010000000070000000700008A0E000071060000E50600000000000000080000000700004C010000CE0800003E07000000010000000800000007000023020000B508000031070000000200000008000000070000FA0200009D08000026070000000300000008000000070000D1030000850800001C070000000400000008000000070000A80400006E0800001407000000050000000800000007000080050000570800000D0700000006000000080000000700005706000041080000070700000007000000080000000700002F0700002C080000020700000008000000080000000700000608000017080000FE060000000900000008000000070000DD08000003080000FB060000000A00000008000000070000B4090000EF070000F7060000000B000000080000000700008B0A0000DC070000F5060000000C00000008000000070000610B0000CA070000F2060000000D00000008000000070000360C0000B8070000EF060000000E000000080000000700000B0D0000A7070000ED060000000F00000008000000070000DF0D000096070000EA060000001000000008000000070000B20E000085070000E706000000000000000900000007000078010000E90900003D0700000001000000090000000700004E020000CF0900003007000000020000000900000007000025030000B609000025070000000300000009000000070000FC0300009E0900001C070000000400000009000000070000D30400008709000014070000000500000009000000070000AA050000700900000D070000000600000009000000070000820600005909000007070000000700000009000000070000590700004409000003070000000800000009000000070000300800002E090000FF060000000900000009000000070000080900001A090000FB060000000A00000009000000070000DE09000006090000F8060000000B00000009000000070000B50A0000F2080000F6060000000C000000090000000700008A0B0000DF080000F3060000000D00000009000000070000600C0000CD080000F1060000000E00000009000000070000340D0000BB080000EE060000000F00000009000000070000080E0000AA080000EB060000001000000009000000070000DB0E000099080000E806000000000000000A000000070000A4010000040B00003C07000000010000000A0000000700007A020000EA0A00003007000000020000000A00000007000050030000D10A00002507000000030000000A00000007000027040000B80A00001C07000000040000000A000000070000FE040000A00A00001407000000050000000A000000070000D5050000890A00000E07000000060000000A000000070000AD060000720A00000807000000070000000A000000070000840700005C0A00000307000000080000000A0000000700005B080000460A0000FF06000000090000000A00000007000032090000310A0000FC060000000A0000000A000000070000080A00001D0A0000F9060000000B0000000A000000070000DF0A0000090A0000F7060000000C0000000A000000070000B40B0000F6090000F4060000000D0000000A000000070000890C0000E3090000F2060000000E0000000A0000000700005E0D0000D1090000F0060000000F0000000A000000070000310E0000BF090000ED06000000100000000A000000070000040F0000AD090000EA06000000000000000B000000070000CF010000210C00003C07000000010000000B000000070000A5020000070C00003007000000020000000B0000000700007C030000ED0B00002507000000030000000B00000007000053040000D40B00001C07000000040000000B00000007000029050000BB0B00001507000000050000000B00000007000001060000A30B00000E07000000060000000B000000070000D80600008C0B00000907000000070000000B000000070000AF070000750B00000407000000080000000B000000070000860800005F0B00000007000000090000000B0000000700005C0900004A0B0000FD060000000A0000000B000000070000330A0000350B0000FB060000000B0000000B000000070000090B0000210B0000F8060000000C0000000B000000070000DE0B00000D0B0000F6060000000D0000000B000000070000B30C0000FA0A0000F4060000000E0000000B000000070000870D0000E70A0000F2060000000F0000000B0000000700005B0E0000D50A0000EF06000000100000000B0000000700002E0F0000C30A0000ED06000000000000000C000000070000FB0100003F0D00003C07000000010000000C000000070000D1020000240D00003007000000020000000C000000070000A80300000A0D00002607000000030000000C0000000700007E040000F10C00001D07000000040000000C00000007000055050000D80C00001507000000050000000C0000000700002C060000BF0C00000F07000000060000000C00000007000003070000A80C00000A07000000070000000C000000070000DA070000910C00000507000000080000000C000000070000B00800007A0C00000207000000090000000C00000007000087090000640C0000FF060000000A0000000C0000000700005D0A00004F0C0000FC060000000B0000000C000000070000330B00003A0C0000FA060000000C0000000C000000070000080C0000260C0000F8060000000D0000000C000000070000DD0C0000130C0000F6060000000E0000000C000000070000B10D0000FF0B0000F4060000000F0000000C000000070000850E0000ED0B0000F206000000100000000C000000070000570F0000DA0B0000EF06000000000000000D00000007000027020000600E00003C07000000010000000D000000070000FD020000440E00003007000000020000000D000000070000D30300002A0E00002607000000030000000D000000070000AA040000100E00001D07000000040000000D00000007000080050000F60D00001607000000050000000D00000007000057060000DE0D00001007000000060000000D0000000700002E070000C60D00000B07000000070000000D00000007000005080000AE0D00000607000000080000000D000000070000DB080000970D00000307000000090000000D000000070000B2090000810D000000070000000A0000000D000000070000880A00006B0D0000FE060000000B0000000D0000000700005D0B0000560D0000FC060000000C0000000D000000070000330C0000410D0000FA060000000D0000000D000000070000070D00002D0D0000F8060000000E0000000D000000070000DB0D00001A0D0000F6060000000F0000000D000000070000AE0E0000070D0000F406000000100000000D000000070000810F0000F40C0000F106000000000000000E00000007000053020000830F00003D07000000010000000E00000007000029030000670F00003107000000020000000E000000070000FF0300004C0F00002707000000030000000E000000070000D5040000320F00001E07000000040000000E000000070000AB050000180F00001707000000050000000E00000007000082060000FF0E00001107000000060000000E00000007000059070000E60E00000C07000000070000000E0000000700002F080000CE0E00000807000000080000000E00000007000006090000B70E00000407000000090000000E000000070000DC090000A00E000002070000000A0000000E000000070000B20A00008A0E0000FF060000000B0000000E000000070000880B0000740E0000FD060000000C0000000E0000000700005D0C00005F0E0000FC060000000D0000000E000000070000310D00004B0E0000FA060000000E0000000E000000070000050E0000370E0000F8060000000F0000000E000000070000D80E0000230E0000F606000000100000000E000000070000AA0F0000100E0000F406000000000000000F0000000700007F020000FF0F00003D07000000010000000F00000007000054030000FF0F00003107000000020000000F0000000700002A040000FF0F00002707000000030000000F00000007000000050000FF0F00001F07000000040000000F000000070000D7050000FF0F00001807000000050000000F000000070000AD060000FF0F00001207000000060000000F00000007000084070000FF0F00000D07000000070000000F0000000700005A080000F20F00000907000000080000000F00000007000030090000DA0F00000607000000090000000F000000070000060A0000C30F000003070000000A0000000F000000070000DC0A0000AC0F000001070000000B0000000F000000070000B20B0000960F0000FF060000000C0000000F000000070000860C0000800F0000FE060000000D0000000F0000000700005B0D00006B0F0000FC060000000E0000000F0000000700002E0E0000570F0000FB060000000F0000000F000000070000010F0000430F0000F906000000100000000F000000070000D30F0000300F0000F7060000000000000010000000070000AB020000FF0F00003D07000000010000001000000007000080030000FF0F00003107000000020000001000000007000055040000FF0F0000270700000003000000100000000700002B050000FF0F00001F07000000040000001000000007000001060000FF0F000018070000000500000010000000070000D8060000FF0F000012070000000600000010000000070000AE070000FF0F00000E07000000070000001000000007000084080000FF0F00000A0700000008000000100000000700005A090000FF0F000007070000000900000010000000070000300A0000FF0F000004070000000A00000010000000070000060B0000FF0F000002070000000B00000010000000070000DB0B0000FF0F000001070000000C00000010000000070000B00C0000FF0F0000FF060000000D00000010000000070000840D0000FF0F0000FE060000000E00000010000000070000580E0000FF0F0000FD060000000F000000100000000700002A0F0000FF0F0000FB060000001000000010000000070000FC0F0000FF0F0000F9060000000000000000000000080000060000000000000061080000000100000000000000080000DE0000000000000053080000000200000000000000080000B601000000000000470800000003000000000000000800008E020000000000003C0800000004000000000000000800006703000000000000320800000005000000000000000800003F040000000000002A080000000600000000000000080000180500000000000022080000000700000000000000080000F0050000000000001C080000000800000000000000080000C90600000000000016080000000900000000000000080000A10700000000000011080000000A0000000000000008000079080000000000000D080000000B00000000000000080000510900000000000009080000000C00000000000000080000280A00000000000005080000000D00000000000000080000FE0A00000000000001080000000E00000000000000080000D40B000000000000FD070000000F00000000000000080000A90C000000000000F80700000010000000000000000800007D0D000000000000F40700000000000000010000000800002C000000FE0000005B08000000010000000100000008000004010000E80000004D080000000200000001000000080000DB010000D300000041080000000300000001000000080000B3020000BE000000360800000004000000010000000800008C030000AA0000002C0800000005000000010000000800006404000096000000240800000006000000010000000800003D050000830000001D080000000700000001000000080000150600007100000017080000000800000001000000080000ED0600006000000011080000000900000001000000080000C60700004F0000000D080000000A000000010000000800009D0800003E00000008080000000B00000001000000080000750900002E00000004080000000C000000010000000800004C0A00001F00000000080000000D00000001000000080000220B000010000000FC070000000E00000001000000080000F80B000001000000F9070000000F00000001000000080000CD0C000000000000F4070000001000000001000000080000A10D000000000000F00700000000000000020000000800005300000021020000550800000001000000020000000800002A0100000B0200004808000000020000000200000008000002020000F50100003C080000000300000002000000080000DA020000E001000031080000000400000002000000080000B2030000CB010000280800000005000000020000000800008A040000B70100002008000000060000000200000008000063050000A4010000190800000007000000020000000800003B0600009101000013080000000800000002000000080000130700007F0100000D080000000900000002000000080000EB0700006E01000009080000000A00000002000000080000C30800005D01000004080000000B000000020000000800009A0900004D01000000080000000C00000002000000080000710A00003D010000FD070000000D00000002000000080000470B00002E010000F9070000000E000000020000000800001C0C00001F010000F5070000000F00000002000000080000F10C000010010000F1070000001000000002000000080000C50D000003010000ED0700000000000000030000000800007B0000004203000051080000000100000003000000080000520100002B0300004308000000020000000300000008000029020000140300003708000000030000000300000008000001030000FF0200002D080000000400000003000000080000D9030000EA02000024080000000500000003000000080000B1040000D60200001C08000000060000000300000008000089050000C20200001508000000070000000300000008000062060000AF0200000F0800000008000000030000000800003A0700009C0200000A080000000900000003000000080000110800008B02000005080000000A00000003000000080000E90800007902000001080000000B00000003000000080000C009000068020000FE070000000C00000003000000080000970A000058020000FA070000000D000000030000000800006D0B000049020000F7070000000E00000003000000080000420C000039020000F3070000000F00000003000000080000170D00002B020000EF070000001000000003000000080000EA0D00001C020000EB070000000000000004000000080000A3000000600400004D0800000001000000040000000800007A0100004804000040080000000200000004000000080000520200003204000034080000000300000004000000080000290300001C0400002A080000000400000004000000080000010400000604000021080000000500000004000000080000D9040000F203000019080000000600000004000000080000B1050000DE0300001208000000070000000400000008000089060000CA0300000C08000000080000000400000008000061070000B70300000708000000090000000400000008000039080000A503000003080000000A000000040000000800001009000093030000FF070000000B00000004000000080000E709000082030000FB070000000C00000004000000080000BD0A000071030000F8070000000D00000004000000080000930B000061030000F5070000000E00000004000000080000680C000052030000F1070000000F000000040000000800003D0D000042030000EE070000001000000004000000080000110E000034030000EA070000000000000005000000080000CD0000007C0500004A080000000100000005000000080000A4010000640500003D0800000002000000050000000800007B0200004D050000310800000003000000050000000800005203000037050000270800000004000000050000000800002A040000210500001E080000000500000005000000080000020500000C05000016080000000600000005000000080000DA050000F704000010080000000700000005000000080000B1060000E40400000A08000000080000000500000008000089070000D00400000508000000090000000500000008000061080000BE04000001080000000A0000000500000008000038090000AB040000FD070000000B000000050000000800000F0A00009A040000FA070000000C00000005000000080000E50A000089040000F7070000000D00000005000000080000BB0B000078040000F4070000000E00000005000000080000900C000068040000F0070000000F00000005000000080000640D000059040000ED070000001000000005000000080000370E000049040000E9070000000000000006000000080000F70000009706000047080000000100000006000000080000CD0100007F0600003A080000000200000006000000080000A4020000680600002F0800000003000000060000000800007C0300005106000025080000000400000006000000080000530400003B0600001C0800000005000000060000000800002B050000250600001508000000060000000600000008000003060000100600000E080000000700000006000000080000DA060000FC05000009080000000800000006000000080000B2070000E80500000408000000090000000600000008000089080000D505000000080000000A0000000600000008000060090000C2050000FD070000000B00000006000000080000370A0000B0050000F9070000000C000000060000000800000D0B00009F050000F6070000000D00000006000000080000E30B00008E050000F3070000000E00000006000000080000B80C00007D050000F0070000000F000000060000000800008C0D00006D050000ED0700000010000000060000000800005F0E00005E050000E907000000000000000700000008000021010000B207000046080000000100000007000000080000F80100009907000039080000000200000007000000080000CF020000810700002D080000000300000007000000080000A60300006A070000230800000004000000070000000800007D040000530700001B080000000500000007000000080000550500003D070000140800000006000000070000000800002C060000280700000D080000000700000007000000080000040700001307000008080000000800000007000000080000DB070000FF06000004080000000900000007000000080000B2080000EB06000000080000000A0000000700000008000089090000D8060000FC070000000B00000007000000080000600A0000C6060000F9070000000C00000007000000080000360B0000B4060000F6070000000D000000070000000800000B0C0000A3060000F3070000000E00000007000000080000E00C000092060000F0070000000F00000007000000080000B40D000081060000ED070000001000000007000000080000870E000072060000EA0700000000000000080000000800004C010000CC0800004408000000010000000800000008000023020000B308000037080000000200000008000000080000F90200009A0800002C080000000300000008000000080000D00300008308000022080000000400000008000000080000A80400006C0800001A0800000005000000080000000800007F0500005508000013080000000600000008000000080000560600003F0800000D0800000007000000080000000800002E0700002A08000008080000000800000008000000080000050800001608000003080000000900000008000000080000DC0800000208000000080000000A00000008000000080000B3090000EE070000FC070000000B00000008000000080000890A0000DB070000F9070000000C000000080000000800005F0B0000C9070000F7070000000D00000008000000080000340C0000B7070000F4070000000E00000008000000080000090D0000A6070000F1070000000F00000008000000080000DD0D000095070000EE070000001000000008000000080000B00E000085070000EB07000000000000000900000008000078010000E6090000430800000001000000090000000800004E020000CD0900003608000000020000000900000008000024030000B40900002B080000000300000009000000080000FB0300009C09000022080000000400000009000000080000D2040000840900001A080000000500000009000000080000A90500006D0900001308000000060000000900000008000081060000570900000D0800000007000000090000000800005807000042090000080800000008000000090000000800002F0800002D09000004080000000900000009000000080000060900001809000000080000000A00000009000000080000DD09000004090000FD070000000B00000009000000080000B30A0000F1080000FA070000000C00000009000000080000880B0000DE080000F7070000000D000000090000000800005E0C0000CC080000F5070000000E00000009000000080000320D0000BA080000F2070000000F00000009000000080000060E0000A9080000EF070000001000000009000000080000D90E000098080000EC07000000000000000A000000080000A3010000010B00004208000000010000000A00000008000079020000E70A00003608000000020000000A00000008000050030000CE0A00002B08000000030000000A00000008000026040000B50A00002208000000040000000A000000080000FD0400009E0A00001A08000000050000000A000000080000D4050000860A00001308000000060000000A000000080000AB060000700A00000D08000000070000000A000000080000830700005A0A00000808000000080000000A0000000800005A080000440A00000408000000090000000A000000080000300900002F0A000001080000000A0000000A000000080000070A00001B0A0000FE070000000B0000000A000000080000DD0A0000070A0000FB070000000C0000000A000000080000B20B0000F4090000F9070000000D0000000A000000080000870C0000E2090000F6070000000E0000000A0000000800005C0D0000D0090000F4070000000F0000000A0000000800002F0E0000BE090000F107000000100000000A000000080000020F0000AD090000EE07000000000000000B000000080000CF0100001D0C00004208000000010000000B000000080000A5020000030C00003508000000020000000B0000000800007B030000E90B00002B08000000030000000B00000008000052040000D00B00002208000000040000000B00000008000028050000B80B00001A08000000050000000B000000080000FF050000A00B00001308000000060000000B000000080000D6060000890B00000D08000000070000000B000000080000AD070000730B00000908000000080000000B000000080000840800005D0B00000508000000090000000B0000000800005B090000480B000002080000000A0000000B000000080000310A0000330B0000FF070000000B0000000B000000080000070B00001F0B0000FC070000000C0000000B000000080000DC0B00000B0B0000FA070000000D0000000B000000080000B10C0000F80A0000F8070000000E0000000B000000080000850D0000E60A0000F5070000000F0000000B000000080000590E0000D40A0000F307000000100000000B0000000800002B0F0000C20A0000F007000000000000000C000000080000FB0100003B0D00004208000000010000000C000000080000D1020000200D00003508000000020000000C000000080000A7030000060D00002B08000000030000000C0000000800007D040000ED0C00002208000000040000000C00000008000054050000D40C00001A08000000050000000C0000000800002B060000BC0C00001408000000060000000C00000008000001070000A50C00000E08000000070000000C000000080000D80700008E0C00000A08000000080000000C000000080000AF080000780C00000608000000090000000C00000008000085090000620C000003080000000A0000000C0000000800005B0A00004D0C000000080000000B0000000C000000080000310B0000380C0000FE070000000C0000000C000000080000060C0000240C0000FC070000000D0000000C000000080000DB0C0000110C0000FA070000000E0000000C000000080000AF0D0000FE0B0000F7070000000F0000000C000000080000820E0000EB0B0000F507000000100000000C000000080000550F0000D90B0000F207000000000000000D000000080000270200005B0E00004108000000010000000D000000080000FC020000400E00003508000000020000000D000000080000D2030000250E00002B08000000030000000D000000080000A90400000C0E00002208000000040000000D0000000800007F050000F20D00001B08000000050000000D00000008000056060000DA0D00001408000000060000000D0000000800002C070000C20D00000F08000000070000000D00000008000003080000AB0D00000A08000000080000000D000000080000D9080000940D00000708000000090000000D000000080000B00900007E0D000004080000000A0000000D000000080000860A0000690D000001080000000B0000000D0000000800005B0B0000540D0000FF070000000C0000000D000000080000300C00003F0D0000FD070000000D0000000D000000080000050D00002B0D0000FB070000000E0000000D000000080000D90D0000180D0000F9070000000F0000000D000000080000AC0E0000050D0000F707000000100000000D0000000800007E0F0000F30C0000F407000000000000000E000000080000530200007E0F00004108000000010000000E00000008000028030000620F00003508000000020000000E000000080000FE030000470F00002B08000000030000000E000000080000D40400002D0F00002208000000040000000E000000080000AA050000130F00001B08000000050000000E00000008000081060000FB0E00001508000000060000000E00000008000057070000E20E00001008000000070000000E0000000800002E080000CB0E00000B08000000080000000E00000008000004090000B40E00000808000000090000000E000000080000DA0900009D0E000005080000000A0000000E000000080000B00A0000870E000003080000000B0000000E000000080000850B0000720E000001080000000C0000000E0000000800005A0C00005D0E0000FF070000000D0000000E0000000800002F0D0000490E0000FD070000000E0000000E000000080000030E0000350E0000FB070000000F0000000E000000080000D50E0000210E0000F907000000100000000E000000080000A80F00000F0E0000F707000000000000000F0000000800007E020000FF0F00004108000000010000000F00000008000053030000FF0F00003508000000020000000F00000008000029040000FF0F00002B08000000030000000F000000080000FF040000FF0F00002308000000040000000F000000080000D5050000FF0F00001B08000000050000000F000000080000AC060000FF0F00001508000000060000000F00000008000082070000FF0F00001008000000070000000F00000008000058080000ED0F00000C08000000080000000F0000000800002F090000D60F00000908000000090000000F000000080000040A0000BF0F000006080000000A0000000F000000080000DA0A0000A90F000004080000000B0000000F000000080000AF0B0000930F000002080000000C0000000F000000080000840C00007E0F000001080000000D0000000F000000080000580D0000690F0000FF070000000E0000000F0000000800002C0E0000550F0000FD070000000F0000000F000000080000FF0E0000410F0000FB07000000100000000F000000080000D10F00002E0F0000F9070000000000000010000000080000AA020000FF0F0000410800000001000000100000000800007F030000FF0F00003508000000020000001000000008000054040000FF0F00002B0800000003000000100000000800002A050000FF0F00002308000000040000001000000008000000060000FF0F00001C080000000500000010000000080000D6060000FF0F000016080000000600000010000000080000AC070000FF0F00001108000000070000001000000008000083080000FF0F00000D08000000080000001000000008000059090000FF0F00000A0800000009000000100000000800002E0A0000FF0F000008080000000A00000010000000080000040B0000FF0F000005080000000B00000010000000080000D90B0000FF0F000004080000000C00000010000000080000AE0C0000FF0F000002080000000D00000010000000080000820D0000FF0F000001080000000E00000010000000080000550E0000FF0F0000FF070000000F00000010000000080000280F0000FF0F0000FE070000001000000010000000080000FA0F0000FF0F0000FB070000000000000000000000090000080000000000000069090000000100000000000000090000DF000000000000005B090000000200000000000000090000B7010000000000004E0900000003000000000000000900008F0200000000000043090000000400000000000000090000670300000000000039090000000500000000000000090000400400000000000031090000000600000000000000090000180500000000000029090000000700000000000000090000F00500000000000023090000000800000000000000090000C9060000000000001D090000000900000000000000090000A10700000000000018090000000A00000000000000090000790800000000000013090000000B0000000000000009000050090000000000000F090000000C00000000000000090000270A0000000000000A090000000D00000000000000090000FD0A00000000000006090000000E00000000000000090000D30B00000000000002090000000F00000000000000090000A80C000000000000FD0800000010000000000000000900007C0D000000000000F90800000000000000010000000900002D000000FE0000006309000000010000000100000009000005010000E800000055090000000200000001000000090000DC010000D300000048090000000300000001000000090000B4020000BE0000003D0900000004000000010000000900008C030000AA0000003409000000050000000100000009000065040000970000002B0900000006000000010000000900003D050000840000002409000000070000000100000009000015060000720000001D090000000800000001000000090000ED0600006000000018090000000900000001000000090000C50700004F00000013090000000A000000010000000900009D0800003F0000000E090000000B00000001000000090000740900002F0000000A090000000C000000010000000900004B0A00002000000006090000000D00000001000000090000210B00001100000002090000000E00000001000000090000F70B000003000000FE080000000F00000001000000090000CB0C000000000000F90800000010000000010000000900009F0D000000000000F508000000000000000200000009000054000000210200005D0900000001000000020000000900002B0100000B0200004F09000000020000000200000009000003020000F501000043090000000300000002000000090000DA020000E001000038090000000400000002000000090000B2030000CB0100002E0900000005000000020000000900008B040000B70100002609000000060000000200000009000063050000A40100001F0900000007000000020000000900003B0600009201000019090000000800000002000000090000130700008001000013090000000900000002000000090000EB0700006E0100000E090000000A00000002000000090000C20800005D0100000A090000000B00000002000000090000990900004D01000006090000000C00000002000000090000700A00003D01000002090000000D00000002000000090000460B00002E010000FE080000000E000000020000000900001B0C000020010000FA080000000F00000002000000090000F00C000011010000F6080000001000000002000000090000C40D000004010000F10800000000000000030000000900007C0000004103000058090000000100000003000000090000530100002A0300004A0900000002000000030000000900002A020000140300003E09000000030000000300000009000002030000FE02000034090000000400000003000000090000DA030000EA0200002A090000000500000003000000090000B2040000D5020000220900000006000000030000000900008A050000C20200001B09000000070000000300000009000062060000AF02000015090000000800000003000000090000390700009C02000010090000000900000003000000090000110800008B0200000B090000000A00000003000000090000E80800007902000007090000000B00000003000000090000BF0900006902000003090000000C00000003000000090000960A000059020000FF080000000D000000030000000900006C0B000049020000FB080000000E00000003000000090000410C00003A020000F8080000000F00000003000000090000150D00002B020000F4080000001000000003000000090000E90D00001D020000EF080000000000000004000000090000A40000005F040000540900000001000000040000000900007B010000470400004609000000020000000400000009000052020000310400003A0900000003000000040000000900002A0300001B04000030090000000400000004000000090000010400000604000027090000000500000004000000090000D9040000F10300001F090000000600000004000000090000B1050000DD0300001809000000070000000400000009000089060000CA0300001209000000080000000400000009000061070000B70300000D09000000090000000400000009000038080000A503000008090000000A000000040000000900000F0900009303000004090000000B00000004000000090000E60900008203000000090000000C00000004000000090000BD0A000071030000FD080000000D00000004000000090000920B000061030000F9080000000E00000004000000090000670C000052030000F6080000000F000000040000000900003C0D000043030000F20800000010000000040000000900000F0E000034030000EE080000000000000005000000090000CE0000007B05000051090000000100000005000000090000A401000063050000430900000002000000050000000900007B0200004C0500003709000000030000000500000009000053030000360500002D0900000004000000050000000900002A0400002005000024090000000500000005000000090000020500000B0500001C090000000600000005000000090000DA050000F704000016090000000700000005000000090000B1060000E30400001009000000080000000500000009000089070000D00400000B09000000090000000500000009000060080000BD04000006090000000A0000000500000009000037090000AB04000002090000000B000000050000000900000E0A000099040000FF080000000C00000005000000090000E40A000088040000FB080000000D00000005000000090000BA0B000078040000F8080000000E000000050000000900008E0C000068040000F5080000000F00000005000000090000630D000059040000F1080000001000000005000000090000360E00004A040000ED080000000000000006000000090000F7000000950600004E090000000100000006000000090000CE0100007D06000040090000000200000006000000090000A502000066060000350900000003000000060000000900007C0300004F0600002B0900000004000000060000000900005304000039060000220900000005000000060000000900002B050000240600001A090000000600000006000000090000030600000F06000014090000000700000006000000090000DA060000FB0500000E090000000800000006000000090000B1070000E70500000909000000090000000600000009000089080000D405000005090000000A0000000600000009000060090000C205000001090000000B00000006000000090000360A0000B0050000FE080000000C000000060000000900000C0B00009E050000FB080000000D00000006000000090000E20B00008D050000F7080000000E00000006000000090000B60C00007D050000F4080000000F000000060000000900008A0D00006D050000F10800000010000000060000000900005E0E00005E050000ED08000000000000000700000009000022010000AF0700004C090000000100000007000000090000F8010000970700003E090000000200000007000000090000CF0200007F07000033090000000300000007000000090000A603000068070000290900000004000000070000000900007D0400005107000020090000000500000007000000090000550500003B070000190900000006000000070000000900002C060000260700001209000000070000000700000009000003070000120700000D090000000800000007000000090000DB070000FE06000008090000000900000007000000090000B2080000EA06000004090000000A0000000700000009000089090000D706000001090000000B000000070000000900005F0A0000C5060000FD080000000C00000007000000090000350B0000B3060000FA080000000D000000070000000900000A0C0000A2060000F7080000000E00000007000000090000DF0C000091060000F4080000000F00000007000000090000B30D000081060000F1080000001000000007000000090000860E000071060000ED0800000000000000080000000900004D010000C90800004A09000000010000000800000009000023020000B00800003D090000000200000008000000090000FA0200009808000031090000000300000008000000090000D00300008008000028090000000400000008000000090000A8040000690800001F0900000005000000080000000900007F0500005308000018090000000600000008000000090000560600003D080000120900000007000000080000000900002D070000280800000C090000000800000008000000090000040800001408000008090000000900000008000000090000DB0800000008000004090000000A00000008000000090000B2090000ED07000000090000000B00000008000000090000880A0000DA070000FD080000000C000000080000000900005E0B0000C8070000FA080000000D00000008000000090000330C0000B6070000F8080000000E00000008000000090000070D0000A5070000F5080000000F00000008000000090000DB0D000095070000F1080000001000000008000000090000AE0E000084070000EE08000000000000000900000009000078010000E3090000480900000001000000090000000900004E020000C90900003C09000000020000000900000009000024030000B109000030090000000300000009000000090000FB0300009909000027090000000400000009000000090000D2040000820900001E090000000500000009000000090000A90500006B09000017090000000600000009000000090000800600005509000011090000000700000009000000090000580700003F0900000C0900000008000000090000000900002F0800002B09000008090000000900000009000000090000050900001609000004090000000A00000009000000090000DC0900000309000001090000000B00000009000000090000B20A0000F0080000FE080000000C00000009000000090000870B0000DD080000FB080000000D000000090000000900005C0C0000CB080000F8080000000E00000009000000090000310D0000B9080000F6080000000F00000009000000090000040E0000A8080000F3080000001000000009000000090000D70E000098080000EF08000000000000000A000000090000A4010000FD0A00004709000000010000000A00000009000079020000E30A00003B09000000020000000A00000009000050030000CA0A00003009000000030000000A00000009000026040000B20A00002609000000040000000A000000090000FD0400009A0A00001E09000000050000000A000000090000D4050000830A00001709000000060000000A000000090000AB0600006D0A00001109000000070000000A00000009000082070000570A00000C09000000080000000A00000009000059080000420A00000809000000090000000A0000000900002F0900002D0A000004090000000A0000000A000000090000060A0000190A000001090000000B0000000A000000090000DC0A0000060A0000FF080000000C0000000A000000090000B10B0000F3090000FC080000000D0000000A000000090000860C0000E0090000F9080000000E0000000A0000000900005A0D0000CE090000F7080000000F0000000A0000000900002E0E0000BD090000F408000000100000000A000000090000000F0000AC090000F108000000000000000B000000090000CF010000190C00004709000000010000000B000000090000A5020000FF0B00003A09000000020000000B0000000900007B030000E50B00002F09000000030000000B00000009000052040000CD0B00002609000000040000000B00000009000028050000B40B00001E09000000050000000B000000090000FF0500009D0B00001709000000060000000B000000090000D6060000860B00001109000000070000000B000000090000AD070000700B00000D09000000080000000B000000090000830800005A0B00000909000000090000000B0000000900005A090000450B000005090000000A0000000B000000090000300A0000310B000002090000000B0000000B000000090000060B00001D0B000000090000000C0000000B000000090000DB0B0000090B0000FD080000000D0000000B000000090000B00C0000F70A0000FB080000000E0000000B000000090000840D0000E40A0000F8080000000F0000000B000000090000570E0000D20A0000F608000000100000000B0000000900002A0F0000C10A0000F308000000000000000C000000090000FB010000360D00004609000000010000000C000000090000D10200001C0D00003A09000000020000000C000000090000A7030000020D00002F09000000030000000C0000000900007D040000E90C00002609000000040000000C00000009000054050000D00C00001E09000000050000000C0000000900002A060000B80C00001709000000060000000C00000009000001070000A10C00001209000000070000000C000000090000D80700008A0C00000D09000000080000000C000000090000AE080000740C00000909000000090000000C000000090000840900005F0C000006090000000A0000000C0000000900005A0A00004A0C000003090000000B0000000C000000090000300B0000360C000001090000000C0000000C000000090000050C0000220C0000FF080000000D0000000C000000090000DA0C00000F0C0000FC080000000E0000000C000000090000AE0D0000FC0B0000FA080000000F0000000C000000090000810E0000EA0B0000F708000000100000000C000000090000530F0000D80B0000F508000000000000000D00000009000027020000560E00004609000000010000000D000000090000FC0200003B0E00003909000000020000000D000000090000D2030000210E00002F09000000030000000D000000090000A8040000070E00002609000000040000000D0000000900007F050000EE0D00001E09000000050000000D00000009000055060000D60D00001809000000060000000D0000000900002C070000BE0D00001209000000070000000D00000009000002080000A70D00000E09000000080000000D000000090000D9080000910D00000A09000000090000000D000000090000AF0900007B0D000007090000000A0000000D000000090000850A0000660D000004090000000B0000000D0000000900005A0B0000510D000002090000000C0000000D0000000900002F0C00003D0D000000090000000D0000000D000000090000040D0000290D0000FE080000000E0000000D000000090000D70D0000160D0000FC080000000F0000000D000000090000AA0E0000030D0000F908000000100000000D0000000900007C0F0000F10C0000F708000000000000000E00000009000053020000780F00004509000000010000000E000000090000280300005D0F00003909000000020000000E000000090000FE030000420F00002F09000000030000000E000000090000D4040000280F00002609000000040000000E000000090000AA0500000F0F00001E09000000050000000E00000009000080060000F60E00001809000000060000000E00000009000057070000DE0E00001309000000070000000E0000000900002D080000C70E00000F09000000080000000E00000009000003090000B00E00000B09000000090000000E000000090000D9090000990E000008090000000A0000000E000000090000AF0A0000840E000006090000000B0000000E000000090000840B00006F0E000003090000000C0000000E000000090000590C00005A0E000001090000000D0000000E0000000900002D0D0000460E000000090000000E0000000E000000090000010E0000320E0000FE080000000F0000000E000000090000D40E00001F0E0000FB08000000100000000E000000090000A60F00000D0E0000F908000000000000000F0000000900007E020000FF0F00004509000000010000000F00000009000053030000FF0F00003909000000020000000F00000009000029040000FF0F00002F09000000030000000F000000090000FF040000FF0F00002609000000040000000F000000090000D5050000FF0F00001F09000000050000000F000000090000AB060000FF0F00001809000000060000000F00000009000081070000FF0F00001309000000070000000F00000009000057080000E90F00000F09000000080000000F0000000900002E090000D20F00000C09000000090000000F000000090000030A0000BB0F000009090000000A0000000F000000090000D90A0000A50F000007090000000B0000000F000000090000AE0B00008F0F000005090000000C0000000F000000090000830C00007A0F000003090000000D0000000F000000090000570D0000660F000001090000000E0000000F0000000900002A0E0000520F0000FF080000000F0000000F000000090000FD0E00003E0F0000FD08000000100000000F000000090000CF0F00002B0F0000FB080000000000000010000000090000A9020000FF0F0000440900000001000000100000000900007E030000FF0F00003809000000020000001000000009000054040000FF0F00002E0900000003000000100000000900002A050000FF0F000026090000000400000010000000090000FF050000FF0F00001F090000000500000010000000090000D6060000FF0F000019090000000600000010000000090000AC070000FF0F00001409000000070000001000000009000082080000FF0F00001009000000080000001000000009000058090000FF0F00000C0900000009000000100000000900002D0A0000FF0F00000A090000000A00000010000000090000030B0000FF0F000008090000000B00000010000000090000D80B0000FF0F000006090000000C00000010000000090000AC0C0000FF0F000004090000000D00000010000000090000800D0000FF0F000003090000000E00000010000000090000540E0000FF0F000001090000000F00000010000000090000260F0000FF0F0000FF080000001000000010000000090000F80F0000FF0F0000FD0800000000000000000000000A00000A00000000000000710A00000001000000000000000A0000E100000000000000620A00000002000000000000000A0000B901000000000000550A00000003000000000000000A000091020000000000004A0A00000004000000000000000A00006903000000000000400A00000005000000000000000A00004104000000000000370A00000006000000000000000A00001A05000000000000300A00000007000000000000000A0000F205000000000000290A00000008000000000000000A0000CA06000000000000230A00000009000000000000000A0000A2070000000000001D0A0000000A000000000000000A00007908000000000000180A0000000B000000000000000A00005109000000000000140A0000000C000000000000000A0000270A0000000000000F0A0000000D000000000000000A0000FE0A0000000000000B0A0000000E000000000000000A0000D30B000000000000060A0000000F000000000000000A0000A80C000000000000020A00000010000000000000000A00007C0D000000000000FD0900000000000000010000000A000030000000FD0000006A0A00000001000000010000000A000007010000E80000005C0A00000002000000010000000A0000DE010000D20000004F0A00000003000000010000000A0000B6020000BE000000440A00000004000000010000000A00008E030000AA0000003A0A00000005000000010000000A00006604000096000000310A00000006000000010000000A00003E050000840000002A0A00000007000000010000000A00001606000071000000230A00000008000000010000000A0000EE060000600000001D0A00000009000000010000000A0000C60700004F000000180A0000000A000000010000000A00009E0800003F000000130A0000000B000000010000000A0000750900002F0000000F0A0000000C000000010000000A00004B0A00001F0000000A0A0000000D000000010000000A0000210B000011000000060A0000000E000000010000000A0000F70B000002000000020A0000000F000000010000000A0000CB0C000000000000FD0900000010000000010000000A00009F0D000000000000F80900000000000000020000000A00005600000020020000640A00000001000000020000000A00002D01000009020000560A00000002000000020000000A000005020000F4010000490A00000003000000020000000A0000DC020000DF0100003E0A00000004000000020000000A0000B4030000CA010000340A00000005000000020000000A00008C040000B70100002C0A00000006000000020000000A000064050000A3010000250A00000007000000020000000A00003C060000910100001E0A00000008000000020000000A0000140700007F010000180A00000009000000020000000A0000EC0700006E010000130A0000000A000000020000000A0000C30800005D0100000F0A0000000B000000020000000A00009A0900004D0100000A0A0000000C000000020000000A0000700A00003D010000060A0000000D000000020000000A0000460B00002E010000020A0000000E000000020000000A00001B0C00001F010000FE090000000F000000020000000A0000F00C000011010000FA0900000010000000020000000A0000C30D000003010000F50900000000000000030000000A00007E0000003F0300005F0A00000001000000030000000A00005501000028030000510A00000002000000030000000A00002C02000012030000440A00000003000000030000000A000003030000FD020000390A00000004000000030000000A0000DB030000E8020000300A00000005000000030000000A0000B3040000D4020000280A00000006000000030000000A00008B050000C1020000200A00000007000000030000000A000063060000AE0200001A0A00000008000000030000000A00003A0700009B020000150A00000009000000030000000A0000120800008A020000100A0000000A000000030000000A0000E9080000790200000B0A0000000B000000030000000A0000C009000068020000070A0000000C000000030000000A0000960A000058020000030A0000000D000000030000000A00006C0B000048020000FF090000000E000000030000000A0000410C000039020000FB090000000F000000030000000A0000150D00002B020000F70900000010000000030000000A0000E90D00001D020000F30900000000000000040000000A0000A60000005D0400005A0A00000001000000040000000A00007D010000450400004C0A00000002000000040000000A0000540200002F040000400A00000003000000040000000A00002B03000019040000360A00000004000000040000000A000003040000040400002C0A00000005000000040000000A0000DB040000EF030000240A00000006000000040000000A0000B2050000DB0300001D0A00000007000000040000000A00008A060000C8030000170A00000008000000040000000A000062070000B5030000120A00000009000000040000000A000039080000A30300000D0A0000000A000000040000000A00001009000092030000080A0000000B000000040000000A0000E709000081030000050A0000000C000000040000000A0000BD0A000070030000010A0000000D000000040000000A0000920B000060030000FD090000000E000000040000000A0000670C000051030000F9090000000F000000040000000A00003C0D000042030000F50900000010000000040000000A00000F0E000034030000F10900000000000000050000000A0000D000000078050000560A00000001000000050000000A0000A601000060050000490A00000002000000050000000A00007D0200004A0500003D0A00000003000000050000000A00005403000033050000320A00000004000000050000000A00002C0400001E050000290A00000005000000050000000A00000305000009050000210A00000006000000050000000A0000DB050000F50400001A0A00000007000000050000000A0000B2060000E1040000140A00000008000000050000000A00008A070000CE0400000F0A00000009000000050000000A000061080000BB0400000B0A0000000A000000050000000A000038090000A9040000060A0000000B000000050000000A00000E0A000098040000030A0000000C000000050000000A0000E40A000087040000FF090000000D000000050000000A0000BA0B000077040000FC090000000E000000050000000A00008E0C000067040000F8090000000F000000050000000A0000630D000058040000F40900000010000000050000000A0000360E000049040000F00900000000000000060000000A0000F900000092060000530A00000001000000060000000A0000D00100007A060000460A00000002000000060000000A0000A6020000630600003A0A00000003000000060000000A00007D0300004C060000300A00000004000000060000000A00005504000036060000270A00000005000000060000000A00002C050000210600001F0A00000006000000060000000A0000040600000C060000180A00000007000000060000000A0000DB060000F8050000120A00000008000000060000000A0000B2070000E50500000D0A00000009000000060000000A000089080000D2050000090A0000000A000000060000000A000060090000C0050000050A0000000B000000060000000A0000360A0000AE050000010A0000000C000000060000000A00000C0B00009D050000FE090000000D000000060000000A0000E20B00008C050000FB090000000E000000060000000A0000B60C00007C050000F7090000000F000000060000000A00008A0D00006C050000F40900000010000000060000000A00005D0E00005D050000F00900000000000000070000000A000024010000AC070000510A00000001000000070000000A0000FA01000093070000440A00000002000000070000000A0000D00200007C070000380A00000003000000070000000A0000A7030000650700002E0A00000004000000070000000A00007F0400004E070000250A00000005000000070000000A000056050000390700001D0A00000006000000070000000A00002D06000024070000170A00000007000000070000000A0000040700000F070000110A00000008000000070000000A0000DB070000FB0600000C0A00000009000000070000000A0000B2080000E8060000080A0000000A000000070000000A000089090000D5060000040A0000000B000000070000000A00005F0A0000C3060000010A0000000C000000070000000A0000350B0000B1060000FE090000000D000000070000000A00000A0C0000A0060000FA090000000E000000070000000A0000DF0C000090060000F7090000000F000000070000000A0000B20D000080060000F40900000010000000070000000A0000850E000070060000F00900000000000000080000000A00004F010000C50800004F0A00000001000000080000000A000025020000AC080000420A00000002000000080000000A0000FB02000094080000360A00000003000000080000000A0000D20300007D0800002C0A00000004000000080000000A0000A904000066080000240A00000005000000080000000A000080050000500800001C0A00000006000000080000000A0000570600003A080000160A00000007000000080000000A00002E07000026080000100A00000008000000080000000A000005080000110800000C0A00000009000000080000000A0000DC080000FE070000070A0000000A000000080000000A0000B2090000EA070000040A0000000B000000080000000A0000880A0000D8070000010A0000000C000000080000000A00005E0B0000C6070000FE090000000D000000080000000A0000330C0000B4070000FB090000000E000000080000000A0000070D0000A3070000F7090000000F000000080000000A0000DB0D000093070000F40900000010000000080000000A0000AE0E000083070000F00900000000000000090000000A00007A010000DE0900004D0A00000001000000090000000A000050020000C5090000400A00000002000000090000000A000026030000AD090000350A00000003000000090000000A0000FC030000950900002B0A00000004000000090000000A0000D30400007E090000230A00000005000000090000000A0000AA050000670900001B0A00000006000000090000000A00008106000051090000150A00000007000000090000000A0000580700003C090000100A00000008000000090000000A00002F080000270900000B0A00000009000000090000000A00000609000013090000070A0000000A000000090000000A0000DC09000000090000040A0000000B000000090000000A0000B20A0000ED080000010A0000000C000000090000000A0000870B0000DA080000FE090000000D000000090000000A00005C0C0000C9080000FB090000000E000000090000000A0000300D0000B7080000F8090000000F000000090000000A0000040E0000A6080000F50900000010000000090000000A0000D70E000096080000F109000000000000000A0000000A0000A5010000F80A00004C0A000000010000000A0000000A00007B020000DF0A00003F0A000000020000000A0000000A000051030000C60A0000340A000000030000000A0000000A000028040000AE0A00002A0A000000040000000A0000000A0000FE040000960A0000220A000000050000000A0000000A0000D50500007F0A00001B0A000000060000000A0000000A0000AC060000690A0000150A000000070000000A0000000A000083070000530A0000100A000000080000000A0000000A0000590800003E0A00000B0A000000090000000A0000000A0000300900002A0A0000080A0000000A0000000A0000000A0000060A0000160A0000040A0000000B0000000A0000000A0000DC0A0000030A0000010A0000000C0000000A0000000A0000B10B0000F0090000FF090000000D0000000A0000000A0000860C0000DE090000FC090000000E0000000A0000000A00005A0D0000CC090000F9090000000F0000000A0000000A00002D0E0000BA090000F609000000100000000A0000000A0000000F0000AA090000F309000000000000000B0000000A0000D1010000140C00004B0A000000010000000B0000000A0000A6020000FA0B00003E0A000000020000000B0000000A00007C030000E00B0000330A000000030000000B0000000A000053040000C80B00002A0A000000040000000B0000000A000029050000B00B0000210A000000050000000B0000000A000000060000990B00001B0A000000060000000B0000000A0000D7060000820B0000150A000000070000000B0000000A0000AD0700006C0B0000100A000000080000000B0000000A000084080000570B00000C0A000000090000000B0000000A00005A090000420B0000080A0000000A0000000B0000000A0000300A00002D0B0000050A0000000B0000000B0000000A0000060B00001A0B0000020A0000000C0000000B0000000A0000DB0B0000060B0000000A0000000D0000000B0000000A0000B00C0000F40A0000FD090000000E0000000B0000000A0000840D0000E20A0000FA090000000F0000000B0000000A0000570E0000D00A0000F809000000100000000B0000000A0000290F0000BF0A0000F409000000000000000C0000000A0000FC010000310D00004A0A000000010000000C0000000A0000D2020000160D00003D0A000000020000000C0000000A0000A8030000FD0C0000330A000000030000000C0000000A00007E040000E40C0000290A000000040000000C0000000A000054050000CB0C0000210A000000050000000C0000000A00002B060000B40C00001B0A000000060000000C0000000A0000020700009D0C0000150A000000070000000C0000000A0000D8070000860C0000100A000000080000000C0000000A0000AE080000700C00000C0A000000090000000C0000000A0000850900005B0C0000090A0000000A0000000C0000000A00005B0A0000460C0000060A0000000B0000000C0000000A0000300B0000320C0000030A0000000C0000000C0000000A0000050C00001F0C0000010A0000000D0000000C0000000A0000D90C00000C0C0000FE090000000E0000000C0000000A0000AD0D0000F90B0000FC090000000F0000000C0000000A0000800E0000E70B0000F909000000100000000C0000000A0000520F0000D50B0000F609000000000000000D0000000A000028020000500E0000490A000000010000000D0000000A0000FE020000350E00003D0A000000020000000D0000000A0000D30300001B0E0000320A000000030000000D0000000A0000A9040000020E0000290A000000040000000D0000000A000080050000E90D0000210A000000050000000D0000000A000056060000D10D00001B0A000000060000000D0000000A00002C070000B90D0000150A000000070000000D0000000A000003080000A20D0000100A000000080000000D0000000A0000D90800008C0D00000D0A000000090000000D0000000A0000AF090000770D0000090A0000000A0000000D0000000A0000850A0000620D0000070A0000000B0000000D0000000A00005A0B00004D0D0000040A0000000C0000000D0000000A00002F0C0000390D0000020A0000000D0000000D0000000A0000030D0000260D0000000A0000000E0000000D0000000A0000D70D0000130D0000FE090000000F0000000D0000000A0000AA0E0000000D0000FB09000000100000000D0000000A00007C0F0000EE0C0000F809000000000000000E0000000A000054020000710F0000480A000000010000000E0000000A000029030000560F00003C0A000000020000000E0000000A0000FF0300003C0F0000320A000000030000000E0000000A0000D4040000220F0000290A000000040000000E0000000A0000AB050000090F0000210A000000050000000E0000000A000081060000F10E00001B0A000000060000000E0000000A000057070000D90E0000150A000000070000000E0000000A00002D080000C20E0000110A000000080000000E0000000A000004090000AB0E00000D0A000000090000000E0000000A0000D9090000950E00000A0A0000000A0000000E0000000A0000AF0A00007F0E0000080A0000000B0000000E0000000A0000840B00006A0E0000050A0000000C0000000E0000000A0000590C0000560E0000030A0000000D0000000E0000000A00002D0D0000420E0000010A0000000E0000000E0000000A0000010E00002F0E0000FF090000000F0000000E0000000A0000D30E00001C0E0000FD09000000100000000E0000000A0000A50F00000A0E0000FA09000000000000000F0000000A00007F020000FF0F0000470A000000010000000F0000000A000054030000FF0F00003C0A000000020000000F0000000A00002A040000FF0F0000310A000000030000000F0000000A000000050000FF0F0000280A000000040000000F0000000A0000D5050000FF0F0000210A000000050000000F0000000A0000AC060000FF0F00001B0A000000060000000F0000000A000082070000FB0F0000160A000000070000000F0000000A000058080000E40F0000110A000000080000000F0000000A00002E090000CD0F00000E0A000000090000000F0000000A0000040A0000B60F00000B0A0000000A0000000F0000000A0000D90A0000A00F0000080A0000000B0000000F0000000A0000AE0B00008B0F0000060A0000000C0000000F0000000A0000830C0000760F0000040A0000000D0000000F0000000A0000570D0000620F0000030A0000000E0000000F0000000A00002A0E00004E0F0000010A0000000F0000000F0000000A0000FD0E00003B0F0000FF09000000100000000F0000000A0000CE0F0000280F0000FC0900000000000000100000000A0000AA020000FF0F0000470A00000001000000100000000A00007F030000FF0F00003B0A00000002000000100000000A000055040000FF0F0000310A00000003000000100000000A00002A050000FF0F0000280A00000004000000100000000A000000060000FF0F0000210A00000005000000100000000A0000D6060000FF0F00001B0A00000006000000100000000A0000AC070000FF0F0000160A00000007000000100000000A000082080000FF0F0000120A00000008000000100000000A000058090000FF0F00000E0A00000009000000100000000A00002D0A0000FF0F00000B0A0000000A000000100000000A0000030B0000FF0F0000090A0000000B000000100000000A0000D80B0000FF0F0000070A0000000C000000100000000A0000AC0C0000FF0F0000060A0000000D000000100000000A0000800D0000FF0F0000040A0000000E000000100000000A0000530E0000FF0F0000020A0000000F000000100000000A0000260F0000FF0F0000000A00000010000000100000000A0000F70F0000FF0F0000FE0900000000000000000000000B00000E00000000000000780B00000001000000000000000B0000E500000000000000690B00000002000000000000000B0000BC010000000000005C0B00000003000000000000000B00009402000000000000500B00000004000000000000000B00006C03000000000000460B00000005000000000000000B000044040000000000003D0B00000006000000000000000B00001C05000000000000350B00000007000000000000000B0000F5050000000000002E0B00000008000000000000000B0000CD06000000000000280B00000009000000000000000B0000A407000000000000220B0000000A000000000000000B00007C080000000000001D0B0000000B000000000000000B00005309000000000000180B0000000C000000000000000B0000290A000000000000130B0000000D000000000000000B0000FF0A0000000000000F0B0000000E000000000000000B0000D50B0000000000000A0B0000000F000000000000000B0000A90C000000000000050B00000010000000000000000B00007D0D000000000000000B00000000000000010000000B000034000000FB000000700B00000001000000010000000B00000A010000E5000000620B00000002000000010000000B0000E2010000D0000000550B00000003000000010000000B0000B9020000BB000000490B00000004000000010000000B000091030000A70000003F0B00000005000000010000000B00006904000094000000370B00000006000000010000000B000041050000810000002F0B00000007000000010000000B0000190600006F000000280B00000008000000010000000B0000F10600005E000000220B00000009000000010000000B0000C90700004D0000001C0B0000000A000000010000000B0000A00800003D000000170B0000000B000000010000000B0000770900002D000000130B0000000C000000010000000B00004D0A00001E0000000E0B0000000D000000010000000B0000230B00000F0000000A0B0000000E000000010000000B0000F80B000001000000050B0000000F000000010000000B0000CD0C000000000000010B00000010000000010000000B0000A00D000000000000FC0A00000000000000020000000B00005A0000001D0200006A0B00000001000000020000000B000031010000060200005C0B00000002000000020000000B000008020000F10100004F0B00000003000000020000000B0000E0020000DC010000440B00000004000000020000000B0000B7030000C80100003A0B00000005000000020000000B00008F040000B4010000310B00000006000000020000000B000067050000A10100002A0B00000007000000020000000B00003F0600008E010000230B00000008000000020000000B0000160700007D0100001D0B00000009000000020000000B0000EE0700006B010000180B0000000A000000020000000B0000C50800005B010000130B0000000B000000020000000B00009C0900004A0100000E0B0000000C000000020000000B0000720A00003B0100000A0B0000000D000000020000000B0000480B00002C010000060B0000000E000000020000000B00001D0C00001D010000020B0000000F000000020000000B0000F10C00000F010000FD0A00000010000000020000000B0000C50D000001010000F80A00000000000000030000000B0000820000003C030000640B00000001000000030000000B00005801000025030000560B00000002000000030000000B00002F0200000F0300004A0B00000003000000030000000B000007030000FA0200003F0B00000004000000030000000B0000DE030000E5020000350B00000005000000030000000B0000B6040000D10200002D0B00000006000000030000000B00008E050000BE020000250B00000007000000030000000B000065060000AB0200001F0B00000008000000030000000B00003D07000099020000190B00000009000000030000000B00001408000087020000140B0000000A000000030000000B0000EB080000760200000F0B0000000B000000030000000B0000C2090000650200000B0B0000000C000000030000000B0000980A000055020000070B0000000D000000030000000B00006E0B000046020000030B0000000E000000030000000B0000420C000037020000FF0A0000000F000000030000000B0000170D000028020000FA0A00000010000000030000000B0000EA0D00001A020000F50A00000000000000040000000B0000AA00000059040000600B00000001000000040000000B00008001000042040000520B00000002000000040000000B0000570200002B040000450B00000003000000040000000B00002F030000150400003B0B00000004000000040000000B00000604000000040000310B00000005000000040000000B0000DD040000EC030000290B00000006000000040000000B0000B5050000D8030000210B00000007000000040000000B00008D060000C50300001B0B00000008000000040000000B000064070000B2030000160B00000009000000040000000B00003B080000A0030000110B0000000A000000040000000B0000120900008F0300000C0B0000000B000000040000000B0000E90900007E030000080B0000000C000000040000000B0000BF0A00006E030000040B0000000D000000040000000B0000940B00005E030000000B0000000E000000040000000B0000690C00004E030000FC0A0000000F000000040000000B00003D0D000040030000F80A00000010000000040000000B0000100E000031030000F30A00000000000000050000000B0000D3000000740500005C0B00000001000000050000000B0000A90100005C0500004E0B00000002000000050000000B00008002000045050000420B00000003000000050000000B0000570300002F050000370B00000004000000050000000B00002E0400001A0500002E0B00000005000000050000000B00000605000005050000260B00000006000000050000000B0000DD050000F10400001F0B00000007000000050000000B0000B5060000DD040000180B00000008000000050000000B00008C070000CA040000130B00000009000000050000000B000063080000B80400000E0B0000000A000000050000000B00003A090000A60400000A0B0000000B000000050000000B0000100A000095040000060B0000000C000000050000000B0000E60A000084040000020B0000000D000000050000000B0000BB0B000074040000FF0A0000000E000000050000000B0000900C000064040000FB0A0000000F000000050000000B0000640D000055040000F70A00000010000000050000000B0000370E000046040000F20A00000000000000060000000B0000FD0000008D060000580B00000001000000060000000B0000D3010000760600004B0B00000002000000060000000B0000AA0200005E0600003F0B00000003000000060000000B00008003000048060000340B00000004000000060000000B000058040000320600002B0B00000005000000060000000B00002F0500001D060000230B00000006000000060000000B000006060000080600001C0B00000007000000060000000B0000DD060000F4050000160B00000008000000060000000B0000B5070000E1050000110B00000009000000060000000B00008B080000CE0500000C0B0000000A000000060000000B000062090000BC050000080B0000000B000000060000000B0000380A0000AA050000050B0000000C000000060000000B00000E0B000099050000010B0000000D000000060000000B0000E30B000089050000FD0A0000000E000000060000000B0000B80C000079050000FA0A0000000F000000060000000B00008B0D000069050000F60A00000010000000060000000B00005E0E00005A050000F20A00000000000000070000000B000027010000A6070000550B00000001000000070000000B0000FD0100008E070000480B00000002000000070000000B0000D3020000770700003C0B00000003000000070000000B0000AA03000060070000320B00000004000000070000000B0000810400004A070000290B00000005000000070000000B00005805000034070000210B00000006000000070000000B0000300600001F0700001A0B00000007000000070000000B0000070700000B070000150B00000008000000070000000B0000DE070000F7060000100B00000009000000070000000B0000B4080000E40600000B0B0000000A000000070000000B00008B090000D1060000070B0000000B000000070000000B0000610A0000BF060000040B0000000C000000070000000B0000370B0000AE060000000B0000000D000000070000000B00000C0C00009D060000FD0A0000000E000000070000000B0000E00C00008C060000F90A0000000F000000070000000B0000B40D00007C060000F60A00000010000000070000000B0000860E00006D060000F20A00000000000000080000000B000052010000BF080000530B00000001000000080000000B000028020000A7080000460B00000002000000080000000B0000FE0200008F0800003A0B00000003000000080000000B0000D503000077080000300B00000004000000080000000B0000AB04000061080000270B00000005000000080000000B0000820500004B080000200B00000006000000080000000B00005906000036080000190B00000007000000080000000B00003007000021080000130B00000008000000080000000B0000070800000D0800000F0B00000009000000080000000B0000DE080000F90700000A0B0000000A000000080000000B0000B4090000E6070000070B0000000B000000080000000B00008A0A0000D4070000030B0000000C000000080000000B0000600B0000C2070000000B0000000D000000080000000B0000340C0000B1070000FD0A0000000E000000080000000B0000090D0000A0070000FA0A0000000F000000080000000B0000DC0D00008F070000F60A00000010000000080000000B0000AF0E00007F070000F20A00000000000000090000000B00007D010000D8090000510B00000001000000090000000B000053020000BF090000440B00000002000000090000000B000029030000A7090000390B00000003000000090000000B0000FF0300008F0900002F0B00000004000000090000000B0000D604000078090000260B00000005000000090000000B0000AD050000620900001F0B00000006000000090000000B0000840600004C090000180B00000007000000090000000B00005A07000037090000130B00000008000000090000000B000031080000230900000E0B00000009000000090000000B0000080900000F0900000A0B0000000A000000090000000B0000DE090000FB080000060B0000000B000000090000000B0000B40A0000E9080000030B0000000C000000090000000B0000890B0000D6080000000B0000000D000000090000000B00005E0C0000C5080000FD0A0000000E000000090000000B0000320D0000B3080000FA0A0000000F000000090000000B0000050E0000A3080000F70A00000010000000090000000B0000D80E000092080000F30A000000000000000A0000000B0000A8010000F20A00004F0B000000010000000A0000000B00007E020000D80A0000430B000000020000000A0000000B000054030000C00A0000370B000000030000000A0000000B00002A040000A80A00002D0B000000040000000A0000000B000001050000900A0000250B000000050000000A0000000B0000D70500007A0A00001E0B000000060000000A0000000B0000AE060000640A0000180B000000070000000A0000000B0000850700004E0A0000120B000000080000000A0000000B00005B080000390A00000E0B000000090000000A0000000B000032090000250A00000A0B0000000A0000000A0000000B0000080A0000110A0000070B0000000B0000000A0000000B0000DD0A0000FE090000030B0000000C0000000A0000000B0000B30B0000EB090000010B0000000D0000000A0000000B0000870C0000D9090000FE0A0000000E0000000A0000000B00005B0D0000C8090000FB0A0000000F0000000A0000000B00002E0E0000B6090000F80A000000100000000A0000000B0000010F0000A6090000F40A000000000000000B0000000B0000D40100000D0C00004E0B000000010000000B0000000B0000A9020000F30B0000410B000000020000000B0000000B00007F030000DA0B0000360B000000030000000B0000000B000055040000C10B00002D0B000000040000000B0000000B00002C050000AA0B0000240B000000050000000B0000000B000002060000930B00001D0B000000060000000B0000000B0000D90600007C0B0000170B000000070000000B0000000B0000AF070000660B0000120B000000080000000B0000000B000086080000510B00000E0B000000090000000B0000000B00005C0900003C0B00000A0B0000000A0000000B0000000B0000320A0000280B0000070B0000000B0000000B0000000B0000070B0000150B0000040B0000000C0000000B0000000B0000DC0B0000020B0000010B0000000D0000000B0000000B0000B10C0000EF0A0000FF0A0000000E0000000B0000000B0000850D0000DD0A0000FC0A0000000F0000000B0000000B0000580E0000CC0A0000F90A000000100000000B0000000B00002A0F0000BB0A0000F60A000000000000000C0000000B0000FF010000290D00004D0B000000010000000C0000000B0000D50200000F0D0000400B000000020000000C0000000B0000AA030000F50C0000350B000000030000000C0000000B000080040000DD0C00002C0B000000040000000C0000000B000057050000C50C0000240B000000050000000C0000000B00002D060000AD0C00001D0B000000060000000C0000000B000004070000960C0000170B000000070000000C0000000B0000DA070000800C0000120B000000080000000C0000000B0000B00800006A0C00000E0B000000090000000C0000000B000086090000550C00000A0B0000000A0000000C0000000B00005C0A0000410C0000070B0000000B0000000C0000000B0000320B00002D0C0000050B0000000C0000000C0000000B0000060C0000190C0000020B0000000D0000000C0000000B0000DB0C0000070C0000000B0000000E0000000C0000000B0000AE0D0000F40B0000FD0A0000000F0000000C0000000B0000810E0000E20B0000FA0A000000100000000C0000000B0000530F0000D10B0000F70A000000000000000D0000000B00002B020000480E00004C0B000000010000000D0000000B0000000300002D0E00003F0B000000020000000D0000000B0000D6030000130E0000350B000000030000000D0000000B0000AC040000FA0D00002B0B000000040000000D0000000B000082050000E20D0000230B000000050000000D0000000B000058060000CA0D00001D0B000000060000000D0000000B00002E070000B30D0000170B000000070000000D0000000B0000050800009C0D0000120B000000080000000D0000000B0000DB080000860D00000E0B000000090000000D0000000B0000B1090000710D00000B0B0000000A0000000D0000000B0000860A00005C0D0000080B0000000B0000000D0000000B00005C0B0000470D0000060B0000000C0000000D0000000B0000300C0000340D0000030B0000000D0000000D0000000B0000050D0000200D0000010B0000000E0000000D0000000B0000D80D00000E0D0000FF0A0000000F0000000D0000000B0000AB0E0000FB0C0000FC0A000000100000000D0000000B00007D0F0000E90C0000F90A000000000000000E0000000B000057020000690F00004B0B000000010000000E0000000B00002C0300004E0F00003F0B000000020000000E0000000B000001040000340F0000340B000000030000000E0000000B0000D70400001A0F00002B0B000000040000000E0000000B0000AD050000020F0000230B000000050000000E0000000B000083060000E90E00001D0B000000060000000E0000000B000059070000D20E0000170B000000070000000E0000000B00002F080000BB0E0000120B000000080000000E0000000B000005090000A40E00000F0B000000090000000E0000000B0000DB0900008E0E00000C0B0000000A0000000E0000000B0000B10A0000790E0000090B0000000B0000000E0000000B0000860B0000640E0000060B0000000C0000000E0000000B00005A0C0000500E0000040B0000000D0000000E0000000B00002E0D00003D0E0000020B0000000E0000000E0000000B0000020E00002A0E0000000B0000000F0000000E0000000B0000D40E0000170E0000FE0A000000100000000E0000000B0000A60F0000050E0000FB0A000000000000000F0000000B000082020000FF0F00004A0B000000010000000F0000000B000057030000FF0F00003E0B000000020000000F0000000B00002C040000FF0F0000330B000000030000000F0000000B000002050000FF0F00002A0B000000040000000F0000000B0000D8050000FF0F0000230B000000050000000F0000000B0000AE060000FF0F00001C0B000000060000000F0000000B000084070000F40F0000170B000000070000000F0000000B00005A080000DC0F0000130B000000080000000F0000000B000030090000C60F00000F0B000000090000000F0000000B0000050A0000B00F00000C0B0000000A0000000F0000000B0000DB0A00009A0F0000090B0000000B0000000F0000000B0000AF0B0000850F0000070B0000000C0000000F0000000B0000840C0000700F0000050B0000000D0000000F0000000B0000580D00005C0F0000030B0000000E0000000F0000000B00002B0E0000490F0000010B0000000F0000000F0000000B0000FE0E0000360F0000FF0A000000100000000F0000000B0000CF0F0000230F0000FC0A00000000000000100000000B0000AD020000FF0F0000480B00000001000000100000000B000082030000FF0F00003D0B00000002000000100000000B000057040000FF0F0000320B00000003000000100000000B00002C050000FF0F00002A0B00000004000000100000000B000002060000FF0F0000220B00000005000000100000000B0000D8060000FF0F00001C0B00000006000000100000000B0000AE070000FF0F0000170B00000007000000100000000B000084080000FF0F0000130B00000008000000100000000B000059090000FF0F00000F0B00000009000000100000000B00002F0A0000FF0F00000C0B0000000A000000100000000B0000040B0000FF0F00000A0B0000000B000000100000000B0000D90B0000FF0F0000080B0000000C000000100000000B0000AD0C0000FF0F0000060B0000000D000000100000000B0000810D0000FF0F0000040B0000000E000000100000000B0000540E0000FF0F0000030B0000000F000000100000000B0000270F0000FF0F0000010B00000010000000100000000B0000F80F0000FF0F0000FE0A00000000000000000000000C000014000000000000007E0C00000001000000000000000C0000EB000000000000006F0C00000002000000000000000C0000C201000000000000610C00000003000000000000000C00009902000000000000560C00000004000000000000000C000071030000000000004B0C00000005000000000000000C00004904000000000000420C00000006000000000000000C000021050000000000003A0C00000007000000000000000C0000F905000000000000330C00000008000000000000000C0000D1060000000000002C0C00000009000000000000000C0000A907000000000000260C0000000A000000000000000C00008008000000000000210C0000000B000000000000000C000057090000000000001C0C0000000C000000000000000C00002D0A000000000000170C0000000D000000000000000C0000030B000000000000120C0000000E000000000000000C0000D80B0000000000000D0C0000000F000000000000000C0000AD0C000000000000080C00000010000000000000000C0000800D000000000000030C00000000000000010000000C000039000000F6000000760C00000001000000010000000C000010010000E0000000670C00000002000000010000000C0000E7010000CB0000005A0C00000003000000010000000C0000BE020000B60000004F0C00000004000000010000000C000096030000A2000000440C00000005000000010000000C00006E0400008F0000003B0C00000006000000010000000C0000460500007D000000330C00000007000000010000000C00001E0600006B0000002C0C00000008000000010000000C0000F506000059000000260C00000009000000010000000C0000CD07000048000000200C0000000A000000010000000C0000A4080000380000001B0C0000000B000000010000000C00007B09000028000000160C0000000C000000010000000C0000510A000019000000120C0000000D000000010000000C0000270B00000B0000000D0C0000000E000000010000000C0000FC0B000000000000080C0000000F000000010000000C0000D00C000000000000030C00000010000000010000000C0000A40D000000000000FE0B00000000000000020000000C000060000000170200006F0C00000001000000020000000C00003601000001020000610C00000002000000020000000C00000D020000EB010000540C00000003000000020000000C0000E5020000D7010000490C00000004000000020000000C0000BC030000C20100003F0C00000005000000020000000C000094040000AF010000360C00000006000000020000000C00006B0500009C0100002E0C00000007000000020000000C00004306000089010000270C00000008000000020000000C00001B07000078010000210C00000009000000020000000C0000F2070000660100001B0C0000000A000000020000000C0000C908000056010000160C0000000B000000020000000C0000A009000046010000120C0000000C000000020000000C0000760A0000360100000D0C0000000D000000020000000C00004B0B000027010000090C0000000E000000020000000C0000200C000019010000040C0000000F000000020000000C0000F40C00000B010000000C00000010000000020000000C0000C80D0000FD000000FA0B00000000000000030000000C000087000000360300006A0C00000001000000030000000C00005E0100001F0300005B0C00000002000000030000000C000034020000090300004F0C00000003000000030000000C00000C030000F4020000430C00000004000000030000000C0000E3030000DF020000390C00000005000000030000000C0000BB040000CC020000310C00000006000000030000000C000092050000B8020000290C00000007000000030000000C00006A060000A5020000220C00000008000000030000000C000041070000930200001D0C00000009000000030000000C00001808000082020000170C0000000A000000030000000C0000EF08000071020000120C0000000B000000030000000C0000C6090000600200000E0C0000000C000000030000000C00009C0A0000500200000A0C0000000D000000030000000C0000710B000041020000050C0000000E000000030000000C0000460C000032020000010C0000000F000000030000000C00001A0D000024020000FC0B00000010000000030000000C0000ED0D000016020000F80B00000000000000040000000C0000AF00000052040000650C00000001000000040000000C0000860100003B040000560C00000002000000040000000C00005C020000250400004A0C00000003000000040000000C0000330300000F0400003F0C00000004000000040000000C00000B040000FA030000350C00000005000000040000000C0000E2040000E60300002D0C00000006000000040000000C0000BA050000D2030000250C00000007000000040000000C000091060000BF0300001F0C00000008000000040000000C000068070000AD030000190C00000009000000040000000C00003F0800009B030000140C0000000A000000040000000C000016090000890300000F0C0000000B000000040000000C0000EC090000790300000B0C0000000C000000040000000C0000C20A000068030000070C0000000D000000040000000C0000970B000059030000030C0000000E000000040000000C00006C0C000049030000FF0B0000000F000000040000000C0000400D00003B030000FA0B00000010000000040000000C0000130E00002C030000F50B00000000000000050000000C0000D80000006D050000600C00000001000000050000000C0000AE01000056050000520C00000002000000050000000C0000850200003F050000460C00000003000000050000000C00005C030000290500003B0C00000004000000050000000C00003304000014050000320C00000005000000050000000C00000A050000FF040000290C00000006000000050000000C0000E2050000EB040000220C00000007000000050000000C0000B9060000D70400001C0C00000008000000050000000C000090070000C4040000160C00000009000000050000000C000067080000B2040000110C0000000A000000050000000C00003E090000A00400000D0C0000000B000000050000000C0000140A00008F040000090C0000000C000000050000000C0000EA0A00007F040000050C0000000D000000050000000C0000BF0B00006E040000010C0000000E000000050000000C0000930C00005F040000FD0B0000000F000000050000000C0000670D000050040000F90B00000010000000050000000C00003A0E000041040000F40B00000000000000060000000C000002010000860600005D0C00000001000000060000000C0000D80100006E0600004F0C00000002000000060000000C0000AE02000057060000430C00000003000000060000000C00008503000041060000380C00000004000000060000000C00005C0400002B0600002F0C00000005000000060000000C00003305000016060000270C00000006000000060000000C00000A060000020600001F0C00000007000000060000000C0000E2060000EE050000190C00000008000000060000000C0000B9070000DB050000140C00000009000000060000000C00008F080000C80500000F0C0000000A000000060000000C000066090000B60500000B0C0000000B000000060000000C00003C0A0000A4050000070C0000000C000000060000000C0000110B000093050000030C0000000D000000060000000C0000E60B000083050000FF0B0000000E000000060000000C0000BB0C000073050000FC0B0000000F000000060000000C00008E0D000064050000F80B00000010000000060000000C0000610E000055050000F30B00000000000000070000000C00002C0100009F070000590C00000001000000070000000C000002020000870700004C0C00000002000000070000000C0000D80200006F070000400C00000003000000070000000C0000AF03000059070000350C00000004000000070000000C000086040000420700002C0C00000005000000070000000C00005D0500002D070000240C00000006000000070000000C000034060000180700001D0C00000007000000070000000C00000B07000004070000170C00000008000000070000000C0000E2070000F0060000120C00000009000000070000000C0000B8080000DD0600000E0C0000000A000000070000000C00008F090000CB0600000A0C0000000B000000070000000C0000650A0000B9060000060C0000000C000000070000000C00003A0B0000A8060000020C0000000D000000070000000C00000F0C000097060000FF0B0000000E000000070000000C0000E30C000086060000FB0B0000000F000000070000000C0000B70D000077060000F70B00000010000000070000000C0000890E000067060000F30B00000000000000080000000C000057010000B7080000570C00000001000000080000000C00002C0200009F080000490C00000002000000080000000C000003030000870800003E0C00000003000000080000000C0000D903000070080000330C00000004000000080000000C0000B0040000590800002A0C00000005000000080000000C00008705000043080000230C00000006000000080000000C00005E0600002E0800001C0C00000007000000080000000C0000340700001A080000160C00000008000000080000000C00000B08000006080000110C00000009000000080000000C0000E2080000F20700000D0C0000000A000000080000000C0000B8090000E0070000090C0000000B000000080000000C00008E0A0000CD070000050C0000000C000000080000000C0000630B0000BC070000020C0000000D000000080000000C0000380C0000AA070000FE0B0000000E000000080000000C00000C0D00009A070000FB0B0000000F000000080000000C0000DF0D000089070000F70B00000010000000080000000C0000B20E00007A070000F30B00000000000000090000000C000082010000CF090000540C00000001000000090000000C000057020000B7090000470C00000002000000090000000C00002D0300009F0900003C0C00000003000000090000000C00000404000087090000320C00000004000000090000000C0000DA04000070090000290C00000005000000090000000C0000B10500005A090000210C00000006000000090000000C000088060000450900001B0C00000007000000090000000C00005E07000030090000150C00000008000000090000000C0000350800001B090000100C00000009000000090000000C00000B090000080900000C0C0000000A000000090000000C0000E1090000F4080000080C0000000B000000090000000C0000B70A0000E2080000050C0000000C000000090000000C00008C0B0000D0080000020C0000000D000000090000000C0000610C0000BE080000FF0B0000000E000000090000000C0000350D0000AD080000FB0B0000000F000000090000000C0000080E00009C080000F80B00000010000000090000000C0000DA0E00008C080000F40B000000000000000A0000000C0000AD010000E90A0000530C000000010000000A0000000C000082020000CF0A0000450C000000020000000A0000000C000058030000B70A00003A0C000000030000000A0000000C00002F0400009F0A0000300C000000040000000A0000000C000005050000880A0000280C000000050000000A0000000C0000DC050000710A0000200C000000060000000A0000000C0000B20600005C0A00001A0C000000070000000A0000000C000089070000460A0000140C000000080000000A0000000C00005F080000310A0000100C000000090000000A0000000C0000350900001D0A00000C0C0000000A0000000A0000000C00000B0A00000A0A0000080C0000000B0000000A0000000C0000E10A0000F7090000050C0000000C0000000A0000000C0000B60B0000E4090000020C0000000D0000000A0000000C00008A0C0000D2090000FF0B0000000E0000000A0000000C00005E0D0000C1090000FC0B0000000F0000000A0000000C0000310E0000B0090000F90B000000100000000A0000000C0000030F0000A0090000F50B000000000000000B0000000C0000D8010000030C0000510C000000010000000B0000000C0000AE020000E90B0000440C000000020000000B0000000C000084030000D10B0000390C000000030000000B0000000C00005A040000B80B00002F0C000000040000000B0000000C000030050000A10B0000270C000000050000000B0000000C0000060600008A0B00001F0C000000060000000B0000000C0000DD060000740B0000190C000000070000000B0000000C0000B30700005E0B0000140C000000080000000B0000000C00008A080000490B00000F0C000000090000000B0000000C000060090000340B00000C0C0000000A0000000B0000000C0000350A0000200B0000080C0000000B0000000B0000000C00000B0B00000D0B0000050C0000000C0000000B0000000C0000E00B0000FA0A0000020C0000000D0000000B0000000C0000B40C0000E80A0000000C0000000E0000000B0000000C0000880D0000D60A0000FD0B0000000F0000000B0000000C00005B0E0000C50A0000FA0B000000100000000B0000000C00002D0F0000B40A0000F60B000000000000000C0000000C0000040200001F0D00004F0C000000010000000C0000000C0000D9020000050D0000430C000000020000000C0000000C0000AF030000EC0C0000380C000000030000000C0000000C000085040000D30C00002E0C000000040000000C0000000C00005B050000BB0C0000260C000000050000000C0000000C000031060000A40C00001F0C000000060000000C0000000C0000080700008D0C0000190C000000070000000C0000000C0000DE070000770C0000140C000000080000000C0000000C0000B4080000620C00000F0C000000090000000C0000000C00008A0900004D0C00000C0C0000000A0000000C0000000C0000600A0000390C0000090C0000000B0000000C0000000C0000350B0000250C0000060C0000000C0000000C0000000C00000A0C0000120C0000030C0000000D0000000C0000000C0000DE0C0000FF0B0000010C0000000E0000000C0000000C0000B10D0000ED0B0000FE0B0000000F0000000C0000000C0000840E0000DB0B0000FB0B000000100000000C0000000C0000560F0000CA0B0000F80B000000000000000D0000000C0000300200003D0E00004E0C000000010000000D0000000C000005030000230E0000410C000000020000000D0000000C0000DA030000090E0000370C000000030000000D0000000C0000B0040000F00D00002D0C000000040000000D0000000C000086050000D80D0000250C000000050000000D0000000C00005C060000C00D00001E0C000000060000000D0000000C000032070000A90D0000180C000000070000000D0000000C000008080000930D0000140C000000080000000D0000000C0000DE0800007D0D0000100C000000090000000D0000000C0000B4090000680D00000C0C0000000A0000000D0000000C00008A0A0000530D0000090C0000000B0000000D0000000C00005F0B00003F0D0000060C0000000C0000000D0000000C0000340C00002C0D0000040C0000000D0000000D0000000C0000080D0000190D0000010C0000000E0000000D0000000C0000DB0D0000060D0000FF0B0000000F0000000D0000000C0000AE0E0000F40C0000FC0B000000100000000D0000000C00007F0F0000E20C0000F90B000000000000000E0000000C00005B0200005E0F00004D0C000000010000000E0000000C000030030000430F0000400C000000020000000E0000000C000005040000290F0000360C000000030000000E0000000C0000DB040000100F00002C0C000000040000000E0000000C0000B1050000F80E0000240C000000050000000E0000000C000087060000E00E00001E0C000000060000000E0000000C00005D070000C80E0000180C000000070000000E0000000C000033080000B10E0000140C000000080000000E0000000C0000090900009B0E0000100C000000090000000E0000000C0000DF090000860E00000C0C0000000A0000000E0000000C0000B40A0000710E0000090C0000000B0000000E0000000C0000890B00005C0E0000070C0000000C0000000E0000000C00005D0C0000480E0000050C0000000D0000000E0000000C0000310D0000350E0000030C0000000E0000000E0000000C0000050E0000220E0000000C0000000F0000000E0000000C0000D70E00000F0E0000FE0B000000100000000E0000000C0000A90F0000FD0D0000FB0B000000000000000F0000000C000086020000FF0F00004B0C000000010000000F0000000C00005B030000FF0F00003F0C000000020000000F0000000C000030040000FF0F0000350C000000030000000F0000000C000006050000FF0F00002B0C000000040000000F0000000C0000DC050000FF0F0000240C000000050000000F0000000C0000B1060000FF0F00001D0C000000060000000F0000000C000087070000EA0F0000180C000000070000000F0000000C00005D080000D30F0000130C000000080000000F0000000C000033090000BC0F0000100C000000090000000F0000000C0000090A0000A60F00000D0C0000000A0000000F0000000C0000DE0A0000910F00000A0C0000000B0000000F0000000C0000B30B00007C0F0000080C0000000C0000000F0000000C0000870C0000680F0000060C0000000D0000000F0000000C00005B0D0000540F0000030C0000000E0000000F0000000C00002E0E0000410F0000010C0000000F0000000F0000000C0000000F00002E0F0000FF0B000000100000000F0000000C0000D20F00001C0F0000FC0B00000000000000100000000C0000B1020000FF0F00004A0C00000001000000100000000C000086030000FF0F00003E0C00000002000000100000000C00005B040000FF0F0000330C00000003000000100000000C000030050000FF0F00002B0C00000004000000100000000C000006060000FF0F0000230C00000005000000100000000C0000DC060000FF0F00001D0C00000006000000100000000C0000B2070000FF0F0000170C00000007000000100000000C000087080000FF0F0000130C00000008000000100000000C00005D090000FF0F0000100C00000009000000100000000C0000320A0000FF0F00000D0C0000000A000000100000000C0000070B0000FF0F00000A0C0000000B000000100000000C0000DC0B0000FF0F0000080C0000000C000000100000000C0000B00C0000FF0F0000060C0000000D000000100000000C0000840D0000FF0F0000040C0000000E000000100000000C0000570E0000FF0F0000020C0000000F000000100000000C0000290F0000FF0F0000000C00000010000000100000000C0000FB0F0000FF0F0000FE0B00000000000000000000000D00001B00000000000000830D00000001000000000000000D0000F200000000000000740D00000002000000000000000D0000C901000000000000670D00000003000000000000000D0000A1020000000000005B0D00000004000000000000000D00007803000000000000500D00000005000000000000000D00005004000000000000470D00000006000000000000000D000028050000000000003E0D00000007000000000000000D00000006000000000000370D00000008000000000000000D0000D706000000000000300D00000009000000000000000D0000AF070000000000002A0D0000000A000000000000000D00008608000000000000240D0000000B000000000000000D00005D090000000000001F0D0000000C000000000000000D0000330A0000000000001A0D0000000D000000000000000D0000090B000000000000150D0000000E000000000000000D0000DE0B000000000000100D0000000F000000000000000D0000B20C0000000000000B0D00000010000000000000000D0000850D000000000000050D00000000000000010000000D000041000000EE0000007B0D00000001000000010000000D000017010000D80000006C0D00000002000000010000000D0000EE010000C30000005F0D00000003000000010000000D0000C6020000AE000000530D00000004000000010000000D00009D0300009B000000490D00000005000000010000000D00007504000087000000400D00000006000000010000000D00004D05000075000000370D00000007000000010000000D00002406000063000000300D00000008000000010000000D0000FC060000510000002A0D00000009000000010000000D0000D307000041000000240D0000000A000000010000000D0000AA080000310000001E0D0000000B000000010000000D00008109000021000000190D0000000C000000010000000D0000570A000012000000140D0000000D000000010000000D00002C0B000003000000100D0000000E000000010000000D0000010C0000000000000B0D0000000F000000010000000D0000D50C000000000000060D00000010000000010000000D0000A90D000000000000000D00000000000000020000000D0000670000000F020000740D00000001000000020000000D00003E010000F8010000660D00000002000000020000000D000015020000E3010000590D00000003000000020000000D0000EC020000CE0100004D0D00000004000000020000000D0000C3030000BA010000430D00000005000000020000000D00009B040000A60100003A0D00000006000000020000000D00007205000094010000320D00000007000000020000000D00004A060000810100002B0D00000008000000020000000D00002107000070010000240D00000009000000020000000D0000F80700005E0100001F0D0000000A000000020000000D0000CF0800004E010000190D0000000B000000020000000D0000A60900003E010000140D0000000C000000020000000D00007C0A00002E010000100D0000000D000000020000000D0000510B00001F0100000B0D0000000E000000020000000D0000260C000011010000060D0000000F000000020000000D0000FA0C000003010000010D00000010000000020000000D0000CD0D0000F6000000FC0C00000000000000030000000D00008F0000002D0300006E0D00000001000000030000000D00006501000016030000600D00000002000000030000000D00003C02000000030000530D00000003000000030000000D000013030000EB020000470D00000004000000030000000D0000EA030000D70200003D0D00000005000000030000000D0000C1040000C3020000340D00000006000000030000000D000099050000B00200002D0D00000007000000030000000D0000700600009D020000260D00000008000000030000000D0000470700008B020000200D00000009000000030000000D00001E080000790200001A0D0000000A000000030000000D0000F508000069020000150D0000000B000000030000000D0000CB09000058020000100D0000000C000000030000000D0000A10A0000480200000C0D0000000D000000030000000D0000770B000039020000080D0000000E000000030000000D00004B0C00002A020000030D0000000F000000030000000D00001F0D00001C020000FE0C00000010000000030000000D0000F20D00000E020000F90C00000000000000040000000D0000B700000049040000690D00000001000000040000000D00008D010000320400005B0D00000002000000040000000D0000640200001C0400004E0D00000003000000040000000D00003A03000006040000430D00000004000000040000000D000012040000F1030000390D00000005000000040000000D0000E9040000DD030000300D00000006000000040000000D0000C0050000C9030000280D00000007000000040000000D000097060000B6030000220D00000008000000040000000D00006E070000A40300001C0D00000009000000040000000D00004508000092030000170D0000000A000000040000000D00001C09000081030000120D0000000B000000040000000D0000F2090000700300000D0D0000000C000000040000000D0000C80A000060030000090D0000000D000000040000000D00009D0B000050030000050D0000000E000000040000000D0000710C000041030000000D0000000F000000040000000D0000450D000033030000FC0C00000010000000040000000D0000180E000024030000F70C00000000000000050000000D0000E000000063050000640D00000001000000050000000D0000B60100004C050000560D00000002000000050000000D00008C020000350500004A0D00000003000000050000000D0000630300001F0500003F0D00000004000000050000000D00003A0400000A050000350D00000005000000050000000D000011050000F50400002C0D00000006000000050000000D0000E8050000E1040000250D00000007000000050000000D0000BF060000CE0400001E0D00000008000000050000000D000096070000BB040000190D00000009000000050000000D00006D080000A9040000140D0000000A000000050000000D000043090000970400000F0D0000000B000000050000000D00001A0A0000860400000B0D0000000C000000050000000D0000EF0A000076040000070D0000000D000000050000000D0000C40B000066040000030D0000000E000000050000000D0000980C000056040000FE0C0000000F000000050000000D00006C0D000047040000FA0C00000010000000050000000D00003F0E000039040000F50C00000000000000060000000D0000090100007C060000600D00000001000000060000000D0000DF01000064060000520D00000002000000060000000D0000B50200004D060000460D00000003000000060000000D00008C030000370600003B0D00000004000000060000000D00006304000021060000320D00000005000000060000000D00003A0500000C060000290D00000006000000060000000D000011060000F8050000220D00000007000000060000000D0000E8060000E40500001C0D00000008000000060000000D0000BF070000D1050000160D00000009000000060000000D000095080000BF050000110D0000000A000000060000000D00006C090000AD0500000D0D0000000B000000060000000D0000420A00009B050000090D0000000C000000060000000D0000170B00008B050000050D0000000D000000060000000D0000EC0B00007A050000010D0000000E000000060000000D0000C00C00006A050000FD0C0000000F000000060000000D0000940D00005B050000F90C00000010000000060000000D0000660E00004C050000F40C00000000000000070000000D000033010000940700005D0D00000001000000070000000D0000090200007C0700004F0D00000002000000070000000D0000DF02000065070000430D00000003000000070000000D0000B60300004E070000380D00000004000000070000000D00008C040000380700002F0D00000005000000070000000D00006305000023070000270D00000006000000070000000D00003A0600000E070000200D00000007000000070000000D000011070000FA0600001A0D00000008000000070000000D0000E8070000E7060000140D00000009000000070000000D0000BE080000D4060000100D0000000A000000070000000D000094090000C10600000B0D0000000B000000070000000D00006A0A0000B0060000070D0000000C000000070000000D0000400B00009E060000040D0000000D000000070000000D0000140C00008E060000000D0000000E000000070000000D0000E80C00007D060000FC0C0000000F000000070000000D0000BC0D00006E060000F80C00000010000000070000000D00008E0E00005E060000F40C00000000000000080000000D00005E010000AC0800005A0D00000001000000080000000D000033020000930800004C0D00000002000000080000000D0000090300007C080000400D00000003000000080000000D0000E003000065080000360D00000004000000080000000D0000B60400004F0800002D0D00000005000000080000000D00008D05000039080000250D00000006000000080000000D000064060000240800001E0D00000007000000080000000D00003B0700000F080000180D00000008000000080000000D000011080000FC070000130D00000009000000080000000D0000E8080000E80700000E0D0000000A000000080000000D0000BE090000D60700000A0D0000000B000000080000000D0000930A0000C4070000060D0000000C000000080000000D0000680B0000B2070000030D0000000D000000080000000D00003D0C0000A1070000FF0C0000000E000000080000000D0000110D000090070000FC0C0000000F000000080000000D0000E40D000080070000F80C00000010000000080000000D0000B70E000071070000F40C00000000000000090000000D000089010000C4090000570D00000001000000090000000D00005E020000AB0900004A0D00000002000000090000000D000034030000930900003E0D00000003000000090000000D00000A0400007C090000340D00000004000000090000000D0000E1040000650900002B0D00000005000000090000000D0000B70500004F090000230D00000006000000090000000D00008E0600003A0900001D0D00000007000000090000000D00006507000025090000170D00000008000000090000000D00003B08000011090000120D00000009000000090000000D000011090000FD0800000D0D0000000A000000090000000D0000E7090000EA0800000A0D0000000B000000090000000D0000BD0A0000D8080000060D0000000C000000090000000D0000920B0000C6080000030D0000000D000000090000000D0000660C0000B4080000FF0C0000000E000000090000000D00003A0D0000A3080000FC0C0000000F000000090000000D00000D0E000093080000F80C00000010000000090000000D0000DF0E000083080000F40C000000000000000A0000000D0000B4010000DC0A0000550D000000010000000A0000000D000089020000C30A0000480D000000020000000A0000000D00005F030000AB0A00003C0D000000030000000A0000000D000035040000930A0000320D000000040000000A0000000D00000B0500007C0A0000290D000000050000000A0000000D0000E2050000660A0000220D000000060000000A0000000D0000B8060000500A00001B0D000000070000000A0000000D00008F0700003B0A0000160D000000080000000A0000000D000065080000270A0000110D000000090000000A0000000D00003B090000130A00000D0D0000000A0000000A0000000D0000110A0000FF090000090D0000000B0000000A0000000D0000E60A0000EC090000060D0000000C0000000A0000000D0000BB0B0000DA090000030D0000000D0000000A0000000D0000900C0000C8090000000D0000000E0000000A0000000D0000630D0000B7090000FC0C0000000F0000000A0000000D0000360E0000A6090000F90C000000100000000A0000000D0000080F000096090000F50C000000000000000B0000000D0000DF010000F60B0000530D000000010000000B0000000D0000B4020000DD0B0000460D000000020000000B0000000D00008A030000C40B00003B0D000000030000000B0000000D000060040000AC0B0000310D000000040000000B0000000D000036050000950B0000280D000000050000000B0000000D00000D0600007E0B0000210D000000060000000B0000000D0000E3060000680B00001B0D000000070000000B0000000D0000B9070000530B0000150D000000080000000B0000000D00008F0800003E0B0000110D000000090000000B0000000D000065090000290B00000D0D0000000A0000000B0000000D00003B0A0000160B0000090D0000000B0000000B0000000D0000100B0000020B0000060D0000000C0000000B0000000D0000E50B0000F00A0000030D0000000D0000000B0000000D0000B90C0000DE0A0000000D0000000E0000000B0000000D00008D0D0000CC0A0000FD0C0000000F0000000B0000000D0000600E0000BB0A0000FA0C000000100000000B0000000D0000320F0000AA0A0000F60C000000000000000C0000000D00000B020000120D0000510D000000010000000C0000000D0000E0020000F80C0000440D000000020000000C0000000D0000B5030000DF0C0000390D000000030000000C0000000D00008B040000C70C00002F0D000000040000000C0000000D000061050000AF0C0000270D000000050000000C0000000D000037060000980C0000200D000000060000000C0000000D00000E070000820C00001A0D000000070000000C0000000D0000E40700006C0C0000150D000000080000000C0000000D0000BA080000560C0000100D000000090000000C0000000D000090090000420C00000C0D0000000A0000000C0000000D0000650A00002E0C0000090D0000000B0000000C0000000D00003A0B00001A0C0000060D0000000C0000000C0000000D00000F0C0000070C0000030D0000000D0000000C0000000D0000E30C0000F50B0000010D0000000E0000000C0000000D0000B60D0000E30B0000FE0C0000000F0000000C0000000D0000890E0000D10B0000FB0C000000100000000C0000000D00005B0F0000C00B0000F70C000000000000000D0000000D000036020000300E0000500D000000010000000D0000000D00000B030000160E0000430D000000020000000D0000000D0000E1030000FC0D0000380D000000030000000D0000000D0000B6040000E30D00002E0D000000040000000D0000000D00008C050000CB0D0000260D000000050000000D0000000D000062060000B40D00001F0D000000060000000D0000000D0000380700009D0D0000190D000000070000000D0000000D00000E080000870D0000140D000000080000000D0000000D0000E4080000710D0000100D000000090000000D0000000D0000BA0900005C0D00000C0D0000000A0000000D0000000D00008F0A0000480D0000090D0000000B0000000D0000000D0000640B0000340D0000070D0000000C0000000D0000000D0000390C0000210D0000040D0000000D0000000D0000000D00000D0D00000E0D0000010D0000000E0000000D0000000D0000E00D0000FC0C0000FF0C0000000F0000000D0000000D0000B30E0000EA0C0000FC0C000000100000000D0000000D0000840F0000D80C0000F90C000000000000000E0000000D000062020000500F00004E0D000000010000000E0000000D000036030000360F0000410D000000020000000E0000000D00000C0400001C0F0000370D000000030000000E0000000D0000E1040000030F00002D0D000000040000000E0000000D0000B7050000EA0E0000250D000000050000000E0000000D00008D060000D30E00001E0D000000060000000E0000000D000063070000BB0E0000190D000000070000000E0000000D000039080000A50E0000140D000000080000000E0000000D00000F0900008F0E0000100D000000090000000E0000000D0000E40900007A0E00000D0D0000000A0000000E0000000D0000B90A0000650E00000A0D0000000B0000000E0000000D00008E0B0000510E0000070D0000000C0000000E0000000D0000630C00003D0E0000050D0000000D0000000E0000000D0000360D00002A0E0000020D0000000E0000000E0000000D0000090E0000170E0000000D0000000F0000000E0000000D0000DC0E0000050E0000FD0C000000100000000E0000000D0000AD0F0000F30D0000FA0C000000000000000F0000000D00008D020000FF0F00004C0D000000010000000F0000000D000061030000FF0F0000400D000000020000000F0000000D000037040000FF0F0000350D000000030000000F0000000D00000C050000FF0F00002C0D000000040000000F0000000D0000E2050000FF0F0000240D000000050000000F0000000D0000B7060000F40F00001E0D000000060000000F0000000D00008D070000DD0F0000180D000000070000000F0000000D000063080000C60F0000140D000000080000000F0000000D000039090000B00F0000100D000000090000000F0000000D00000E0A00009A0F00000D0D0000000A0000000F0000000D0000E30A0000850F00000A0D0000000B0000000F0000000D0000B80B0000700F0000070D0000000C0000000F0000000D00008C0C00005C0F0000050D0000000D0000000F0000000D0000600D0000490F0000030D0000000E0000000F0000000D0000330E0000360F0000010D0000000F0000000F0000000D0000050F0000230F0000FE0C000000100000000F0000000D0000D60F0000110F0000FB0C00000000000000100000000D0000B8020000FF0F00004A0D00000001000000100000000D00008C030000FF0F00003E0D00000002000000100000000D000061040000FF0F0000340D00000003000000100000000D000037050000FF0F00002B0D00000004000000100000000D00000C060000FF0F0000230D00000005000000100000000D0000E2060000FF0F00001D0D00000006000000100000000D0000B7070000FF0F0000180D00000007000000100000000D00008D080000FF0F0000130D00000008000000100000000D000062090000FF0F00000F0D00000009000000100000000D0000380A0000FF0F00000C0D0000000A000000100000000D00000D0B0000FF0F00000A0D0000000B000000100000000D0000E10B0000FF0F0000080D0000000C000000100000000D0000B50C0000FF0F0000060D0000000D000000100000000D0000890D0000FF0F0000040D0000000E000000100000000D00005C0E0000FF0F0000020D0000000F000000100000000D00002E0F0000FF0F0000FF0C00000010000000100000000D0000FF0F0000FF0F0000FD0C00000000000000000000000E00002600000000000000880E00000001000000000000000E0000FC00000000000000790E00000002000000000000000E0000D3010000000000006B0E00000003000000000000000E0000AA020000000000005F0E00000004000000000000000E00008203000000000000540E00000005000000000000000E00005A040000000000004A0E00000006000000000000000E00003105000000000000420E00000007000000000000000E000009060000000000003A0E00000008000000000000000E0000E006000000000000330E00000009000000000000000E0000B8070000000000002D0E0000000A000000000000000E00008F08000000000000270E0000000B000000000000000E00006509000000000000220E0000000C000000000000000E00003B0A0000000000001D0E0000000D000000000000000E0000110B000000000000170E0000000E000000000000000E0000E60B000000000000120E0000000F000000000000000E0000BA0C0000000000000C0E00000010000000000000000E00008D0D000000000000060E00000000000000010000000E00004B000000E2000000800E00000001000000010000000E000021010000CC000000710E00000002000000010000000E0000F8010000B7000000630E00000003000000010000000E0000CF020000A2000000570E00000004000000010000000E0000A70300008F0000004D0E00000005000000010000000E00007E0400007C000000430E00000006000000010000000E000056050000690000003B0E00000007000000010000000E00002D06000057000000330E00000008000000010000000E000005070000460000002D0E00000009000000010000000E0000DC07000035000000270E0000000A000000010000000E0000B308000025000000210E0000000B000000010000000E000089090000150000001C0E0000000C000000010000000E00005F0A000006000000170E0000000D000000010000000E0000340B000000000000120E0000000E000000010000000E0000090C0000000000000D0E0000000F000000010000000E0000DD0C000000000000070E00000010000000010000000E0000B00D000000000000010E00000000000000020000000E00007100000002020000790E00000001000000020000000E000048010000EC0100006A0E00000002000000020000000E00001E020000D70100005D0E00000003000000020000000E0000F5020000C2010000510E00000004000000020000000E0000CD030000AE010000460E00000005000000020000000E0000A40400009A0100003D0E00000006000000020000000E00007B05000087010000350E00000007000000020000000E000053060000750100002E0E00000008000000020000000E00002A07000064010000270E00000009000000020000000E00000108000053010000210E0000000A000000020000000E0000D8080000420100001C0E0000000B000000020000000E0000AE09000032010000170E0000000C000000020000000E0000840A000023010000120E0000000D000000020000000E0000590B0000140100000D0E0000000E000000020000000E00002E0C000006010000080E0000000F000000020000000E0000010D0000F8000000030E00000010000000020000000E0000D50D0000EA000000FD0D00000000000000030000000E00009900000020030000720E00000001000000030000000E00006F01000009030000640E00000002000000030000000E000045020000F4020000570E00000003000000030000000E00001C030000DF0200004B0E00000004000000030000000E0000F3030000CA020000410E00000005000000030000000E0000CA040000B6020000380E00000006000000030000000E0000A2050000A3020000300E00000007000000030000000E00007906000091020000290E00000008000000030000000E0000500700007F020000220E00000009000000030000000E0000270800006D0200001D0E0000000A000000030000000E0000FE0800005C020000170E0000000B000000030000000E0000D40900004C020000120E0000000C000000030000000E0000A90A00003C0200000E0E0000000D000000030000000E00007F0B00002D020000090E0000000E000000030000000E0000530C00001E020000040E0000000F000000030000000E0000270D000010020000FF0D00000010000000030000000E0000FA0D000002020000FA0D00000000000000040000000E0000C10000003B0400006D0E00000001000000040000000E000097010000250400005E0E00000002000000040000000E00006D0200000E040000510E00000003000000040000000E000044030000F9030000460E00000004000000040000000E00001B040000E40300003C0E00000005000000040000000E0000F2040000D0030000330E00000006000000040000000E0000C9050000BD0300002B0E00000007000000040000000E0000A0060000AA030000240E00000008000000040000000E000077070000970300001E0E00000009000000040000000E00004E08000086030000190E0000000A000000040000000E00002409000074030000140E0000000B000000040000000E0000FA090000640300000F0E0000000C000000040000000E0000D00A0000540300000A0E0000000D000000040000000E0000A50B000044030000060E0000000E000000040000000E0000790C000035030000020E0000000F000000040000000E00004D0D000027030000FD0D00000010000000040000000E0000200E000018030000F80D00000000000000050000000E0000E900000055050000680E00000001000000050000000E0000BF0100003E050000590E00000002000000050000000E000096020000270500004D0E00000003000000050000000E00006C03000012050000420E00000004000000050000000E000043040000FD040000380E00000005000000050000000E00001A050000E80400002F0E00000006000000050000000E0000F1050000D4040000270E00000007000000050000000E0000C8060000C1040000210E00000008000000050000000E00009F070000AE0400001B0E00000009000000050000000E0000750800009C040000150E0000000A000000050000000E00004C0900008B040000110E0000000B000000050000000E0000220A00007A0400000C0E0000000C000000050000000E0000F70A000069040000080E0000000D000000050000000E0000CC0B000059040000040E0000000E000000050000000E0000A00C00004A040000FF0D0000000F000000050000000E0000740D00003B040000FB0D00000010000000050000000E0000460E00002D040000F60D00000000000000060000000E0000130100006D060000630E00000001000000060000000E0000E901000056060000550E00000002000000060000000E0000BF0200003F060000490E00000003000000060000000E000095030000290600003E0E00000004000000060000000E00006C04000014060000340E00000005000000060000000E000043050000FF0500002C0E00000006000000060000000E00001A060000EB050000240E00000007000000060000000E0000F1060000D70500001E0E00000008000000060000000E0000C7070000C4050000180E00000009000000060000000E00009E080000B2050000130E0000000A000000060000000E000074090000A00500000E0E0000000B000000060000000E00004A0A00008E0500000A0E0000000C000000060000000E00001F0B00007E050000060E0000000D000000060000000E0000F40B00006D050000020E0000000E000000060000000E0000C80C00005E050000FE0D0000000F000000060000000E00009B0D00004E050000F90D00000010000000060000000E00006E0E000040050000F50D00000000000000070000000E00003D01000085070000600E00000001000000070000000E0000120200006D070000520E00000002000000070000000E0000E902000056070000450E00000003000000070000000E0000BF030000400700003B0E00000004000000070000000E0000950400002A070000310E00000005000000070000000E00006C05000015070000290E00000006000000070000000E00004306000000070000220E00000007000000070000000E00001A070000EC0600001B0E00000008000000070000000E0000F0070000D9060000160E00000009000000070000000E0000C7080000C6060000110E0000000A000000070000000E00009D090000B40600000D0E0000000B000000070000000E0000720A0000A2060000080E0000000C000000070000000E0000470B000091060000050E0000000D000000070000000E00001C0C000081060000010E0000000E000000070000000E0000F00C000071060000FD0D0000000F000000070000000E0000C30D000061060000F90D00000010000000070000000E0000960E000052060000F40D00000000000000080000000E0000670100009C0800005C0E00000001000000080000000E00003D020000840800004F0E00000002000000080000000E0000130300006D080000430E00000003000000080000000E0000E903000056080000380E00000004000000080000000E0000BF040000400800002F0E00000005000000080000000E0000960500002A080000270E00000006000000080000000E00006D06000016080000200E00000007000000080000000E00004307000001080000190E00000008000000080000000E00001A080000EE070000140E00000009000000080000000E0000F0080000DA0700000F0E0000000A000000080000000E0000C6090000C80700000B0E0000000B000000080000000E00009B0A0000B6070000070E0000000C000000080000000E0000700B0000A5070000040E0000000D000000080000000E0000450C000094070000000E0000000E000000080000000E0000190D000083070000FC0D0000000F000000080000000E0000EC0D000073070000F80D00000010000000080000000E0000BE0E000064070000F40D00000000000000090000000E000092010000B40900005A0E00000001000000090000000E0000670200009C0900004C0E00000002000000090000000E00003D03000084090000400E00000003000000090000000E0000130400006D090000360E00000004000000090000000E0000EA040000560900002D0E00000005000000090000000E0000C005000040090000250E00000006000000090000000E0000970600002B0900001E0E00000007000000090000000E00006D07000016090000180E00000008000000090000000E00004308000002090000130E00000009000000090000000E000019090000EF0800000E0E0000000A000000090000000E0000EF090000DC0800000A0E0000000B000000090000000E0000C50A0000CA080000070E0000000C000000090000000E00009A0B0000B8080000030E0000000D000000090000000E00006E0C0000A7080000000E0000000E000000090000000E0000420D000096080000FC0D0000000F000000090000000E0000150E000086080000F80D00000010000000090000000E0000E70E000076080000F40D000000000000000A0000000E0000BD010000CC0A0000570E000000010000000A0000000E000092020000B30A00004A0E000000020000000A0000000E0000680300009B0A00003E0E000000030000000A0000000E00003E040000840A0000340E000000040000000A0000000E0000140500006D0A00002B0E000000050000000A0000000E0000EB050000570A0000230E000000060000000A0000000E0000C1060000410A00001C0E000000070000000A0000000E0000970700002C0A0000170E000000080000000A0000000E00006D080000180A0000120E000000090000000A0000000E000043090000040A00000E0E0000000A0000000A0000000E0000190A0000F10900000A0E0000000B0000000A0000000E0000EE0A0000DE090000060E0000000C0000000A0000000E0000C30B0000CC090000030E0000000D0000000A0000000E0000970C0000BB090000000E0000000E0000000A0000000E00006B0D0000A9090000FC0D0000000F0000000A0000000E00003E0E000099090000F90D000000100000000A0000000E0000100F000089090000F50D000000000000000B0000000E0000E9010000E60B0000550E000000010000000B0000000E0000BE020000CD0B0000480E000000020000000B0000000E000093030000B40B00003C0E000000030000000B0000000E0000690400009C0B0000320E000000040000000B0000000E00003F050000850B0000290E000000050000000B0000000E0000150600006F0B0000220E000000060000000B0000000E0000EB060000590B00001B0E000000070000000B0000000E0000C2070000430B0000160E000000080000000B0000000E0000980800002F0B0000110E000000090000000B0000000E00006E0900001B0B00000D0E0000000A0000000B0000000E0000430A0000070B0000090E0000000B0000000B0000000E0000180B0000F40A0000060E0000000C0000000B0000000E0000ED0B0000E20A0000030E0000000D0000000B0000000E0000C10C0000D00A0000000E0000000E0000000B0000000E0000940D0000BE0A0000FD0D0000000F0000000B0000000E0000670E0000AD0A0000F90D000000100000000B0000000E0000390F00009D0A0000F60D000000000000000C0000000E000014020000010D0000530E000000010000000C0000000E0000E9020000E70C0000460E000000020000000C0000000E0000BE030000CF0C00003A0E000000030000000C0000000E000094040000B60C0000300E000000040000000C0000000E00006A0500009F0C0000280E000000050000000C0000000E000040060000880C0000210E000000060000000C0000000E000016070000720C00001A0E000000070000000C0000000E0000EC0700005C0C0000150E000000080000000C0000000E0000C2080000470C0000110E000000090000000C0000000E000098090000330C00000D0E0000000A0000000C0000000E00006D0A00001F0C0000090E0000000B0000000C0000000E0000420B00000B0C0000060E0000000C0000000C0000000E0000170C0000F90B0000030E0000000D0000000C0000000E0000EB0C0000E60B0000000E0000000E0000000C0000000E0000BE0D0000D50B0000FD0D0000000F0000000C0000000E0000900E0000C30B0000FA0D000000100000000C0000000E0000620F0000B20B0000F70D000000000000000D0000000E00003F0200001E0E0000510E000000010000000D0000000E000014030000040E0000440E000000020000000D0000000E0000E9030000EB0D0000390E000000030000000D0000000E0000BF040000D30D00002F0E000000040000000D0000000E000095050000BB0D0000270E000000050000000D0000000E00006B060000A40D0000200E000000060000000D0000000E0000410700008D0D00001A0E000000070000000D0000000E000017080000770D0000140E000000080000000D0000000E0000EC080000620D0000100E000000090000000D0000000E0000C20900004D0D00000C0E0000000A0000000D0000000E0000970A0000390D0000090E0000000B0000000D0000000E00006C0B0000250D0000060E0000000C0000000D0000000E0000400C0000120D0000040E0000000D0000000D0000000E0000140D0000FF0C0000010E0000000E0000000D0000000E0000E70D0000ED0C0000FE0D0000000F0000000D0000000E0000BA0E0000DB0C0000FB0D000000100000000D0000000E00008B0F0000CA0C0000F80D000000000000000E0000000E00006B0200003E0F00004F0E000000010000000E0000000E00003F030000240F0000420E000000020000000E0000000E0000140400000A0F0000370E000000030000000E0000000E0000EA040000F20E00002E0E000000040000000E0000000E0000BF050000D90E0000260E000000050000000E0000000E000095060000C20E00001F0E000000060000000E0000000E00006B070000AB0E0000190E000000070000000E0000000E000041080000950E0000140E000000080000000E0000000E0000170900007F0E0000100E000000090000000E0000000E0000EC0900006A0E00000C0E0000000A0000000E0000000E0000C10A0000550E0000090E0000000B0000000E0000000E0000960B0000410E0000060E0000000C0000000E0000000E00006A0C00002E0E0000040E0000000D0000000E0000000E00003E0D00001B0E0000010E0000000E0000000E0000000E0000110E0000080E0000FF0D0000000F0000000E0000000E0000E30E0000F60D0000FC0D000000100000000E0000000E0000B50F0000E50D0000F90D000000000000000F0000000E000096020000FF0F00004D0E000000010000000F0000000E00006A030000FF0F0000400E000000020000000F0000000E00003F040000FF0F0000350E000000030000000F0000000E000015050000FF0F00002C0E000000040000000F0000000E0000EA050000FB0F0000240E000000050000000F0000000E0000C0060000E30F00001E0E000000060000000F0000000E000095070000CC0F0000180E000000070000000F0000000E00006B080000B50F0000130E000000080000000F0000000E0000410900009F0F00000F0E000000090000000F0000000E0000160A00008A0F00000C0E0000000A0000000F0000000E0000EB0A0000750F0000090E0000000B0000000F0000000E0000C00B0000610F0000070E0000000C0000000F0000000E0000940C00004D0F0000040E0000000D0000000F0000000E0000670D0000390F0000020E0000000E0000000F0000000E00003A0E0000270F0000000E0000000F0000000F0000000E00000C0F0000140F0000FD0D000000100000000F0000000E0000DE0F0000020F0000FA0D00000000000000100000000E0000C1020000FF0F00004A0E00000001000000100000000E000095030000FF0F00003E0E00000002000000100000000E00006A040000FF0F0000340E00000003000000100000000E00003F050000FF0F00002B0E00000004000000100000000E000014060000FF0F0000230E00000005000000100000000E0000EA060000FF0F00001C0E00000006000000100000000E0000BF070000FF0F0000170E00000007000000100000000E000095080000FF0F0000120E00000008000000100000000E00006A090000FF0F00000F0E00000009000000100000000E0000400A0000FF0F00000C0E0000000A000000100000000E0000140B0000FF0F0000090E0000000B000000100000000E0000E90B0000FF0F0000070E0000000C000000100000000E0000BD0C0000FF0F0000040E0000000D000000100000000E0000900D0000FF0F0000020E0000000E000000100000000E0000630E0000FF0F0000000E0000000F000000100000000E0000350F0000FF0F0000FE0D00000010000000100000000E0000FF0F0000FF0F0000FB0D00000000000000000000000F000033000000000000008D0F00000001000000000000000F000009010000000000007D0F00000002000000000000000F0000E0010000000000006F0F00000003000000000000000F0000B702000000000000630F00000004000000000000000F00008E03000000000000580F00000005000000000000000F000066040000000000004E0F00000006000000000000000F00003D05000000000000450F00000007000000000000000F000015060000000000003D0F00000008000000000000000F0000EC06000000000000360F00000009000000000000000F0000C307000000000000300F0000000A000000000000000F00009A080000000000002A0F0000000B000000000000000F00007009000000000000240F0000000C000000000000000F0000460A0000000000001E0F0000000D000000000000000F00001C0B000000000000190F0000000E000000000000000F0000F00B000000000000140F0000000F000000000000000F0000C40C0000000000000E0F00000010000000000000000F0000970D000000000000080F00000000000000010000000F000058000000D1000000840F00000001000000010000000F00002E010000BB000000750F00000002000000010000000F000005020000A6000000670F00000003000000010000000F0000DC020000920000005B0F00000004000000010000000F0000B30300007E000000500F00000005000000010000000F00008A0400006B000000470F00000006000000010000000F000062050000590000003E0F00000007000000010000000F00003906000047000000360F00000008000000010000000F000010070000360000002F0F00000009000000010000000F0000E707000025000000290F0000000A000000010000000F0000BE08000015000000230F0000000B000000010000000F000094090000050000001E0F0000000C000000010000000F00006A0A000000000000180F0000000D000000010000000F00003F0B000000000000130F0000000E000000010000000F0000140C0000000000000E0F0000000F000000010000000F0000E80C000000000000080F00000010000000010000000F0000BB0D000000000000020F00000000000000020000000F00007E000000F10100007D0F00000001000000020000000F000054010000DB0100006E0F00000002000000020000000F00002B020000C6010000600F00000003000000020000000F000002030000B1010000540F00000004000000020000000F0000D90300009D010000490F00000005000000020000000F0000B00400008A010000400F00000006000000020000000F00008705000077010000380F00000007000000020000000F00005E06000065010000300F00000008000000020000000F00003507000053010000290F00000009000000020000000F00000C08000042010000230F0000000A000000020000000F0000E3080000320100001E0F0000000B000000020000000F0000B909000022010000180F0000000C000000020000000F00008F0A000013010000130F0000000D000000020000000F0000640B0000040100000E0F0000000E000000020000000F0000380C0000F5000000090F0000000F000000020000000F00000C0D0000E8000000040F00000010000000020000000F0000DF0D0000DA000000FE0E00000000000000030000000F0000A50000000E030000760F00000001000000030000000F00007B010000F8020000670F00000002000000030000000F000052020000E20200005A0F00000003000000030000000F000028030000CD0200004E0F00000004000000030000000F0000FF030000B9020000440F00000005000000030000000F0000D6040000A50200003A0F00000006000000030000000F0000AE05000092020000320F00000007000000030000000F000085060000800200002B0F00000008000000030000000F00005C0700006E020000240F00000009000000030000000F0000320800005C0200001E0F0000000A000000030000000F0000090900004C020000190F0000000B000000030000000F0000DF0900003C020000140F0000000C000000030000000F0000B40A00002C0200000F0F0000000D000000030000000F0000890B00001D0200000A0F0000000E000000030000000F00005E0C00000E020000050F0000000F000000030000000F0000310D000000020000000F00000010000000030000000F0000040E0000F2010000FB0E00000000000000040000000F0000CD00000029040000700F00000001000000040000000F0000A301000013040000610F00000002000000040000000F000079020000FD030000540F00000003000000040000000F000050030000E7030000490F00000004000000040000000F000027040000D30300003E0F00000005000000040000000F0000FE040000BF030000350F00000006000000040000000F0000D5050000AB0300002D0F00000007000000040000000F0000AC06000098030000260F00000008000000040000000F00008307000086030000200F00000009000000040000000F000059080000750300001A0F0000000A000000040000000F00002F09000063030000150F0000000B000000040000000F0000050A000053030000100F0000000C000000040000000F0000DB0A0000430300000C0F0000000D000000040000000F0000B00B000033030000070F0000000E000000040000000F0000840C000025030000020F0000000F000000040000000F0000570D000016030000FD0E00000010000000040000000F00002A0E000008030000F80E00000000000000050000000F0000F6000000430500006B0F00000001000000050000000F0000CC0100002C0500005C0F00000002000000050000000F0000A2020000150500004F0F00000003000000050000000F00007803000000050000440F00000004000000050000000F00004F040000EB0400003A0F00000005000000050000000F000026050000D6040000310F00000006000000050000000F0000FD050000C2040000290F00000007000000050000000F0000D4060000AF040000220F00000008000000050000000F0000AA0700009D0400001C0F00000009000000050000000F0000810800008B040000170F0000000A000000050000000F00005709000079040000120F0000000B000000050000000F00002D0A0000690400000D0F0000000C000000050000000F0000020B000058040000090F0000000D000000050000000F0000D70B000048040000040F0000000E000000050000000F0000AB0C000039040000000F0000000F000000050000000F00007E0D00002A040000FB0E00000010000000050000000F0000510E00001C040000F60E00000000000000060000000F00001F0100005B060000660F00000001000000060000000F0000F501000043060000580F00000002000000060000000F0000CB0200002D0600004B0F00000003000000060000000F0000A103000017060000400F00000004000000060000000F00007804000001060000360F00000005000000060000000F00004F050000ED0500002E0F00000006000000060000000F000025060000D8050000260F00000007000000060000000F0000FC060000C50500001F0F00000008000000060000000F0000D3070000B2050000190F00000009000000060000000F0000A9080000A0050000140F0000000A000000060000000F00007F0900008E0500000F0F0000000B000000060000000F0000550A00007D0500000B0F0000000C000000060000000F00002A0B00006C050000070F0000000D000000060000000F0000FE0B00005C050000020F0000000E000000060000000F0000D20C00004D050000FE0E0000000F000000060000000F0000A50D00003D050000FA0E00000010000000060000000F0000780E00002F050000F50E00000000000000070000000F00004901000072070000620F00000001000000070000000F00001F0200005A070000540F00000002000000070000000F0000F502000043070000480F00000003000000070000000F0000CB0300002D0700003D0F00000004000000070000000F0000A104000017070000330F00000005000000070000000F000078050000020700002A0F00000006000000070000000F00004E060000EE060000230F00000007000000070000000F000025070000DA0600001D0F00000008000000070000000F0000FB070000C7060000170F00000009000000070000000F0000D2080000B4060000120F0000000A000000070000000F0000A8090000A20600000D0F0000000B000000070000000F00007D0A000091060000090F0000000C000000070000000F0000520B000080060000050F0000000D000000070000000F0000270C00006F060000010F0000000E000000070000000F0000FA0C00005F060000FD0E0000000F000000070000000F0000CD0D000050060000F90E00000010000000070000000F0000A00E000041060000F40E00000000000000080000000F000074010000890800005F0F00000001000000080000000F00004902000071080000510F00000002000000080000000F00001F03000059080000440F00000003000000080000000F0000F5030000430800003A0F00000004000000080000000F0000CB0400002D080000300F00000005000000080000000F0000A205000017080000280F00000006000000080000000F00007806000003080000210F00000007000000080000000F00004E070000EF0700001A0F00000008000000080000000F000025080000DB070000150F00000009000000080000000F0000FB080000C8070000100F0000000A000000080000000F0000D1090000B60700000C0F0000000B000000080000000F0000A60A0000A4070000080F0000000C000000080000000F00007B0B000093070000040F0000000D000000080000000F00004F0C000082070000000F0000000E000000080000000F0000230D000072070000FC0E0000000F000000080000000F0000F60D000062070000F80E00000010000000080000000F0000C80E000052070000F30E00000000000000090000000F00009E010000A00900005B0F00000001000000090000000F000074020000880900004E0F00000002000000090000000F00004903000070090000420F00000003000000090000000F00001F04000059090000370F00000004000000090000000F0000F5040000430900002E0F00000005000000090000000F0000CC0500002D090000260F00000006000000090000000F0000A2060000180900001F0F00000007000000090000000F00007807000003090000190F00000008000000090000000F00004E080000F0080000130F00000009000000090000000F000024090000DC0800000F0F0000000A000000090000000F0000FA090000CA0800000B0F0000000B000000090000000F0000CF0A0000B7080000070F0000000C000000090000000F0000A40B0000A6080000030F0000000D000000090000000F0000780C000095080000FF0E0000000E000000090000000F00004C0D000084080000FC0E0000000F000000090000000F00001F0E000074080000F80E00000010000000090000000F0000F10E000064080000F30E000000000000000A0000000F0000C9010000B80A0000580F000000010000000A0000000F00009E0200009F0A00004B0F000000020000000A0000000F000074030000870A00003F0F000000030000000A0000000F00004A040000700A0000350F000000040000000A0000000F000020050000590A00002C0F000000050000000A0000000F0000F6050000430A0000240F000000060000000A0000000F0000CC0600002E0A00001D0F000000070000000A0000000F0000A2070000190A0000170F000000080000000A0000000F000078080000050A0000120F000000090000000A0000000F00004E090000F10900000E0F0000000A0000000A0000000F0000240A0000DE0900000A0F0000000B0000000A0000000F0000F90A0000CC090000060F0000000C0000000A0000000F0000CE0B0000BA090000030F0000000D0000000A0000000F0000A20C0000A8090000FF0E0000000E0000000A0000000F0000750D000097090000FC0E0000000F0000000A0000000F0000480E000087090000F80E000000100000000A0000000F00001A0F000077090000F40E000000000000000B0000000F0000F4010000D10B0000560F000000010000000B0000000F0000C9020000B80B0000490F000000020000000B0000000F00009F0300009F0B00003D0F000000030000000B0000000F000075040000880B0000330F000000040000000B0000000F00004B050000710B00002A0F000000050000000B0000000F0000210600005A0B0000220F000000060000000B0000000F0000F7060000450B00001C0F000000070000000B0000000F0000CD070000300B0000160F000000080000000B0000000F0000A30800001B0B0000110F000000090000000B0000000F000078090000070B00000D0F0000000A0000000B0000000F00004E0A0000F40A0000090F0000000B0000000B0000000F0000230B0000E10A0000060F0000000C0000000B0000000F0000F70B0000CF0A0000020F0000000D0000000B0000000F0000CB0C0000BD0A0000FF0E0000000E0000000B0000000F00009F0D0000AC0A0000FC0E0000000F0000000B0000000F0000710E00009B0A0000F80E000000100000000B0000000F0000430F00008B0A0000F50E000000000000000C0000000F000020020000EB0C0000530F000000010000000C0000000F0000F5020000D20C0000460F000000020000000C0000000F0000CA030000B90C00003B0F000000030000000C0000000F00009F040000A10C0000310F000000040000000C0000000F0000750500008A0C0000280F000000050000000C0000000F00004B060000730C0000210F000000060000000C0000000F0000210700005D0C00001A0F000000070000000C0000000F0000F7070000480C0000150F000000080000000C0000000F0000CD080000330C0000100F000000090000000C0000000F0000A30900001F0C00000C0F0000000A0000000C0000000F0000780A00000B0C0000090F0000000B0000000C0000000F00004D0B0000F80B0000060F0000000C0000000C0000000F0000210C0000E50B0000020F0000000D0000000C0000000F0000F50C0000D30B0000FF0E0000000E0000000C0000000F0000C80D0000C20B0000FC0E0000000F0000000C0000000F00009B0E0000B10B0000F90E000000100000000C0000000F00006C0F0000A00B0000F50E000000000000000D0000000F00004B020000080E0000510F000000010000000D0000000F000020030000EF0D0000440F000000020000000D0000000F0000F5030000D60D0000390F000000030000000D0000000F0000CA040000BD0D00002F0F000000040000000D0000000F0000A0050000A60D0000270F000000050000000D0000000F0000760600008F0D0000200F000000060000000D0000000F00004C070000780D0000190F000000070000000D0000000F000022080000630D0000140F000000080000000D0000000F0000F70800004D0D0000100F000000090000000D0000000F0000CD090000390D00000C0F0000000A0000000D0000000F0000A20A0000250D0000080F0000000B0000000D0000000F0000770B0000110D0000050F0000000C0000000D0000000F00004B0C0000FE0C0000030F0000000D0000000D0000000F00001F0D0000EC0C0000000F0000000E0000000D0000000F0000F20D0000DA0C0000FD0E0000000F0000000D0000000F0000C40E0000C90C0000FA0E000000100000000D0000000F0000950F0000B80C0000F60E000000000000000E0000000F000076020000280F00004F0F000000010000000E0000000F00004B0300000E0F0000420F000000020000000E0000000F000020040000F40E0000370F000000030000000E0000000F0000F5040000DC0E00002E0F000000040000000E0000000F0000CB050000C40E0000250F000000050000000E0000000F0000A0060000AD0E00001E0F000000060000000E0000000F000076070000960E0000180F000000070000000E0000000F00004C080000800E0000130F000000080000000E0000000F0000210900006A0E00000F0F000000090000000E0000000F0000F7090000550E00000B0F0000000A0000000E0000000F0000CC0A0000410E0000080F0000000B0000000E0000000F0000A00B00002D0E0000050F0000000C0000000E0000000F0000750C00001A0E0000030F0000000D0000000E0000000F0000480D0000070E0000000F0000000E0000000E0000000F00001B0E0000F50D0000FD0E0000000F0000000E0000000F0000ED0E0000E30D0000FB0E000000100000000E0000000F0000BE0F0000D20D0000F70E000000000000000F0000000F0000A1020000FF0F00004C0F000000010000000F0000000F000076030000FF0F0000400F000000020000000F0000000F00004B040000FF0F0000350F000000030000000F0000000F000020050000FE0F00002C0F000000040000000F0000000F0000F5050000E50F0000240F000000050000000F0000000F0000CB060000CE0F00001D0F000000060000000F0000000F0000A0070000B70F0000170F000000070000000F0000000F000076080000A00F0000120F000000080000000F0000000F00004B0900008A0F00000E0F000000090000000F0000000F0000210A0000750F00000B0F0000000A0000000F0000000F0000F50A0000600F0000080F0000000B0000000F0000000F0000CA0B00004C0F0000050F0000000C0000000F0000000F00009E0C0000390F0000030F0000000D0000000F0000000F0000710D0000260F0000000F0000000E0000000F0000000F0000440E0000130F0000FE0E0000000F0000000F0000000F0000160F0000010F0000FB0E000000100000000F0000000F0000E70F0000EF0E0000F80E00000000000000100000000F0000CC020000FF0F00004A0F00000001000000100000000F0000A0030000FF0F00003E0F00000002000000100000000F000075040000FF0F0000330F00000003000000100000000F00004A050000FF0F00002A0F00000004000000100000000F000020060000FF0F0000220F00000005000000100000000F0000F5060000FF0F00001C0F00000006000000100000000F0000CA070000FF0F0000160F00000007000000100000000F0000A0080000FF0F0000110F00000008000000100000000F000075090000FF0F00000E0F00000009000000100000000F00004A0A0000FF0F00000A0F0000000A000000100000000F00001F0B0000FF0F0000080F0000000B000000100000000F0000F30B0000FF0F0000050F0000000C000000100000000F0000C70C0000FF0F0000030F0000000D000000100000000F00009B0D0000FF0F0000010F0000000E000000100000000F00006D0E0000FF0F0000FE0E0000000F000000100000000F00003F0F0000FF0F0000FC0E00000010000000100000000F0000FF0F0000FF0F0000F90E00000000000000000000001000004300000000000000FF0F00000001000000000000001000001901000000000000FF0F0000000200000000000000100000EF01000000000000FF0F0000000300000000000000100000C602000000000000FF0F00000004000000000000001000009E03000000000000FF0F00000005000000000000001000007504000000000000FF0F00000006000000000000001000004C05000000000000FF0F00000007000000000000001000002406000000000000FF0F0000000800000000000000100000FB06000000000000FF0F0000000900000000000000100000D207000000000000FF0F0000000A00000000000000100000A808000000000000FF0F0000000B000000000000001000007F09000000000000FF0F0000000C00000000000000100000540A000000000000FF0F0000000D000000000000001000002A0B000000000000FF0F0000000E00000000000000100000FE0B000000000000FF0F0000000F00000000000000100000D20C000000000000FF0F0000001000000000000000100000A50D000000000000FF0F000000000000000100000010000068000000BB000000FF0F00000001000000010000001000003E010000A6000000FF0F00000002000000010000001000001402000091000000FF0F0000000300000001000000100000EB0200007C000000FF0F0000000400000001000000100000C203000069000000FF0F00000005000000010000001000009904000056000000FF0F00000006000000010000001000007105000043000000FF0F00000007000000010000001000004806000032000000FF0F00000008000000010000001000001F07000020000000FF0F0000000900000001000000100000F607000010000000FF0F0000000A00000001000000100000CC08000000000000FF0F0000000B00000001000000100000A209000000000000FF0F0000000C00000001000000100000780A000000000000FF0F0000000D000000010000001000004D0B000000000000FF0F0000000E00000001000000100000220C000000000000FF0F0000000F00000001000000100000F50C000000000000FF0F0000001000000001000000100000C80D000000000000FF0F00000000000000020000001000008E000000DB010000FF0F000000010000000200000010000064010000C5010000FF0F00000002000000020000001000003A020000B0010000FF0F0000000300000002000000100000110300009B010000FF0F0000000400000002000000100000E803000087010000FF0F0000000500000002000000100000BF04000074010000FF0F00000006000000020000001000009605000061010000FF0F00000007000000020000001000006D0600004F010000FF0F0000000800000002000000100000440700003D010000FF0F00000009000000020000001000001B0800002C010000FF0F0000000A00000002000000100000F10800001C010000FF0F0000000B00000002000000100000C70900000C010000FF0F0000000C000000020000001000009D0A0000FD000000FF0F0000000D00000002000000100000720B0000EE000000FF0F0000000E00000002000000100000460C0000E0000000FF0F0000000F00000002000000100000190D0000D2000000FF0F0000001000000002000000100000EC0D0000C5000000FE0F0000000000000003000000100000B5000000F8020000FF0F00000001000000030000001000008B010000E1020000FF0F000000020000000300000010000061020000CC020000FF0F000000030000000300000010000038030000B7020000FF0F00000004000000030000001000000E040000A3020000FF0F0000000500000003000000100000E50400008F020000FF0F0000000600000003000000100000BC0500007C020000FF0F00000007000000030000001000009306000069020000FF0F00000008000000030000001000006A07000058020000FF0F00000009000000030000001000004108000046020000FF0F0000000A000000030000001000001709000036020000FF0F0000000B00000003000000100000ED09000026020000FF0F0000000C00000003000000100000C20A000016020000FF0F0000000D00000003000000100000970B000007020000FF0F0000000E000000030000001000006B0C0000F8010000FF0F0000000F000000030000001000003F0D0000EA010000FF0F0000001000000003000000100000110E0000DD010000FB0F0000000000000004000000100000DD00000012040000FF0F0000000100000004000000100000B3010000FC030000FF0F000000020000000400000010000089020000E6030000FF0F00000003000000040000001000005F030000D0030000FF0F000000040000000400000010000036040000BC030000FF0F00000005000000040000001000000D050000A8030000FF0F0000000600000004000000100000E305000095030000FF0F0000000700000004000000100000BA06000082030000FF0F00000008000000040000001000009107000070030000FF0F0000000900000004000000100000670800005E030000FF0F0000000A000000040000001000003E0900004D030000FF0F0000000B00000004000000100000130A00003D030000FF0F0000000C00000004000000100000E90A00002D030000FF0F0000000D00000004000000100000BD0B00001E030000FF0F0000000E00000004000000100000910C00000F030000FF0F0000000F00000004000000100000650D000000030000FD0F0000001000000004000000100000370E0000F2020000F80F0000000000000005000000100000050100002B050000FF0F0000000100000005000000100000DB01000014050000FF0F0000000200000005000000100000B1020000FE040000FF0F000000030000000500000010000087030000E8040000FF0F00000004000000050000001000005E040000D3040000FF0F000000050000000500000010000035050000BF040000FF0F00000006000000050000001000000B060000AB040000FF0F0000000700000005000000100000E206000098040000FF0F0000000800000005000000100000B907000086040000FF0F00000009000000050000001000008F08000074040000FF0F0000000A000000050000001000006509000063040000FF0F0000000B000000050000001000003B0A000052040000FF0F0000000C00000005000000100000100B000042040000FF0F0000000D00000005000000100000E40B000032040000FF0F0000000E00000005000000100000B80C000023040000FF0F0000000F000000050000001000008B0D000014040000FB0F00000010000000050000001000005E0E000006040000F60F00000000000000060000001000002F01000043060000FF0F0000000100000006000000100000040200002B060000FF0F0000000200000006000000100000DA02000015060000FF0F0000000300000006000000100000B0030000FF050000FF0F000000040000000600000010000087040000EA050000FF0F00000005000000060000001000005D050000D5050000FF0F000000060000000600000010000034060000C1050000FF0F00000007000000060000001000000A070000AE050000FF0F0000000800000006000000100000E10700009B050000FF0F0000000900000006000000100000B708000089050000FF0F0000000A000000060000001000008D09000077050000FF0F0000000B00000006000000100000630A000066050000FF0F0000000C00000006000000100000380B000056050000FF0F0000000D000000060000001000000C0C000046050000FF0F0000000E00000006000000100000E00C000036050000FE0F0000000F00000006000000100000B30D000027050000F90F0000001000000006000000100000850E000019050000F40F00000000000000070000001000005901000059070000FF0F00000001000000070000001000002E02000042070000FF0F0000000200000007000000100000040300002B070000FF0F0000000300000007000000100000DA03000015070000FF0F0000000400000007000000100000B0040000FF060000FF0F000000050000000700000010000086050000EA060000FF0F00000006000000070000001000005D060000D6060000FF0F000000070000000700000010000033070000C2060000FF0F00000008000000070000001000000A080000AF060000FF0F0000000900000007000000100000E00800009D060000FF0F0000000A00000007000000100000B60900008B060000FF0F0000000B000000070000001000008B0A000079060000FF0F0000000C00000007000000100000600B000069060000FF0F0000000D00000007000000100000340C000058060000FF0F0000000E00000007000000100000080D000049060000FC0F0000000F00000007000000100000DB0D000039060000F80F0000001000000007000000100000AD0E00002A060000F30F00000000000000080000001000008301000070080000FF0F00000001000000080000001000005802000058080000FF0F00000002000000080000001000002E03000041080000FF0F0000000300000008000000100000040400002A080000FF0F0000000400000008000000100000DA04000014080000FF0F0000000500000008000000100000B0050000FF070000FF0F000000060000000800000010000087060000EB070000FF0F00000007000000080000001000005D070000D7070000FF0F000000080000000800000010000033080000C3070000FF0F000000090000000800000010000009090000B0070000FF0F0000000A00000008000000100000DF0900009E070000FF0F0000000B00000008000000100000B40A00008C070000FF0F0000000C00000008000000100000890B00007B070000FF0F0000000D000000080000001000005D0C00006B070000FF0F0000000E00000008000000100000300D00005B070000FC0F0000000F00000008000000100000030E00004B070000F70F0000001000000008000000100000D50E00003C070000F30F0000000000000009000000100000AD01000086090000FF0F0000000100000009000000100000830200006E090000FF0F00000002000000090000001000005803000057090000FF0F00000003000000090000001000002E04000040090000FF0F0000000400000009000000100000040500002A090000FF0F0000000500000009000000100000DA05000014090000FF0F0000000600000009000000100000B0060000FF080000FF0F000000070000000900000010000087070000EB080000FF0F00000008000000090000001000005D080000D7080000FF0F000000090000000900000010000032090000C4080000FF0F0000000A00000009000000100000080A0000B2080000FF0F0000000B00000009000000100000DD0A0000A0080000FF0F0000000C00000009000000100000B20B00008E080000FF0F0000000D00000009000000100000860C00007D080000FF0F0000000E00000009000000100000590D00006D080000FB0F0000000F000000090000001000002C0E00005D080000F70F0000001000000009000000100000FE0E00004D080000F20F000000000000000A000000100000D80100009E0A0000FF0F000000010000000A000000100000AD020000850A0000FF0F000000020000000A000000100000830300006D0A0000FF0F000000030000000A00000010000058040000560A0000FF0F000000040000000A0000001000002E050000400A0000FF0F000000050000000A000000100000040600002A0A0000FF0F000000060000000A000000100000DB060000150A0000FF0F000000070000000A000000100000B1070000000A0000FF0F000000080000000A00000010000087080000EC090000FF0F000000090000000A0000001000005C090000D9090000FF0F0000000A0000000A000000100000320A0000C6090000FF0F0000000B0000000A000000100000070B0000B4090000FF0F0000000C0000000A000000100000DB0B0000A2090000FF0F0000000D0000000A000000100000AF0C000091090000FE0F0000000E0000000A000000100000830D000080090000FB0F0000000F0000000A000000100000550E000070090000F70F000000100000000A000000100000270F000060090000F30F000000000000000B00000010000004020000B60B0000FF0F000000010000000B000000100000D80200009E0B0000FF0F000000020000000B000000100000AE030000850B0000FF0F000000030000000B000000100000830400006E0B0000FF0F000000040000000B00000010000059050000570B0000FF0F000000050000000B0000001000002F060000410B0000FF0F000000060000000B000000100000050700002B0B0000FF0F000000070000000B000000100000DB070000170B0000FF0F000000080000000B000000100000B1080000020B0000FF0F000000090000000B00000010000086090000EE0A0000FF0F0000000A0000000B0000001000005C0A0000DB0A0000FF0F0000000B0000000B000000100000300B0000C90A0000FF0F0000000C0000000B000000100000050C0000B70A0000FF0F0000000D0000000B000000100000D90C0000A50A0000FE0F0000000E0000000B000000100000AC0D0000940A0000FB0F0000000F0000000B0000001000007E0E0000830A0000F70F000000100000000B000000100000500F0000730A0000F30F000000000000000C0000001000002F020000D10C0000FF0F000000010000000C00000010000003030000B70C0000FF0F000000020000000C000000100000D90300009F0C0000FF0F000000030000000C000000100000AE040000870C0000FF0F000000040000000C00000010000084050000700C0000FF0F000000050000000C0000001000005A0600005A0C0000FF0F000000060000000C0000001000002F070000440C0000FF0F000000070000000C000000100000050800002F0C0000FF0F000000080000000C000000100000DB0800001A0C0000FF0F000000090000000C000000100000B0090000060C0000FF0F0000000A0000000C000000100000860A0000F20B0000FF0F0000000B0000000C0000001000005A0B0000DF0B0000FF0F0000000C0000000C0000001000002F0C0000CD0B0000FF0F0000000D0000000C000000100000020D0000BB0B0000FE0F0000000E0000000C000000100000D50D0000AA0B0000FB0F0000000F0000000C000000100000A80E0000990B0000F80F000000100000000C000000100000790F0000880B0000F40F000000000000000D0000001000005A020000ED0D0000FF0F000000010000000D0000001000002F030000D40D0000FF0F000000020000000D00000010000004040000BB0D0000FF0F000000030000000D000000100000D9040000A30D0000FF0F000000040000000D000000100000AE0500008B0D0000FF0F000000050000000D00000010000084060000740D0000FF0F000000060000000D0000001000005A0700005E0D0000FF0F000000070000000D00000010000030080000490D0000FF0F000000080000000D00000010000005090000340D0000FF0F000000090000000D000000100000DA0900001F0D0000FF0F0000000A0000000D000000100000AF0A00000C0D0000FF0F0000000B0000000D000000100000840B0000F80C0000FF0F0000000C0000000D000000100000580C0000E60C0000FF0F0000000D0000000D0000001000002C0D0000D30C0000FE0F0000000E0000000D000000100000FF0D0000C20C0000FB0F0000000F0000000D000000100000D10E0000B10C0000F80F000000100000000D000000100000A20F0000A00C0000F40F000000000000000E000000100000850200000C0F0000FF0F000000010000000E0000001000005A030000F20E0000FF0F000000020000000E0000001000002E040000D90E0000FF0F000000030000000E00000010000004050000C10E0000FF0F000000040000000E000000100000D9050000A90E0000FF0F000000050000000E000000100000AF060000920E0000FF0F000000060000000E000000100000840700007C0E0000FF0F000000070000000E0000001000005A080000660E0000FF0F000000080000000E0000001000002F090000500E0000FF0F000000090000000E000000100000040A00003C0E0000FF0F0000000A0000000E000000100000D90A0000280E0000FF0F0000000B0000000E000000100000AE0B0000140E0000FF0F0000000C0000000E000000100000820C0000010E0000FF0F0000000D0000000E000000100000550D0000EE0D0000FE0F0000000E0000000E000000100000280E0000DC0D0000FC0F0000000F0000000E000000100000FA0E0000CB0D0000F90F000000100000000E000000100000CB0F0000BA0D0000F50F000000000000000F000000100000B0020000FF0F0000FF0F000000010000000F00000010000084030000FF0F0000FF0F000000020000000F00000010000059040000FB0F0000FF0F000000030000000F0000001000002E050000E20F0000FF0F000000040000000F00000010000004060000CA0F0000FF0F000000050000000F000000100000D9060000B30F0000FF0F000000060000000F000000100000AE0700009C0F0000FF0F000000070000000F00000010000084080000860F0000FF0F000000080000000F00000010000059090000700F0000FF0F000000090000000F0000001000002E0A00005B0F0000FF0F0000000A0000000F000000100000030B0000470F0000FF0F0000000B0000000F000000100000D70B0000330F0000FF0F0000000C0000000F000000100000AB0C00001F0F0000FF0F0000000D0000000F0000001000007F0D00000D0F0000FF0F0000000E0000000F000000100000510E0000FA0E0000FC0F0000000F0000000F000000100000230F0000E80E0000F90F000000100000000F000000100000F40F0000D70E0000F60F0000000000000010000000100000DB020000FF0F0000FF0F0000000100000010000000100000AF030000FF0F0000FF0F000000020000001000000010000084040000FF0F0000FF0F000000030000001000000010000059050000FF0F0000FF0F00000004000000100000001000002E060000FF0F0000FF0F000000050000001000000010000003070000FF0F0000FF0F0000000600000010000000100000D8070000FF0F0000FF0F0000000700000010000000100000AE080000FF0F0000FF0F000000080000001000000010000083090000FF0F0000FF0F0000000900000010000000100000580A0000FF0F0000FF0F0000000A000000100000001000002C0B0000FF0F0000FF0F0000000B00000010000000100000010C0000FF0F0000FF0F0000000C00000010000000100000D50C0000FF0F0000FF0F0000000D00000010000000100000A80D0000FF0F0000FF0F0000000E000000100000001000007A0E0000FF0F0000FC0F0000000F000000100000001000004C0F0000FF0F0000FA0F0000001000000010000000100000FF0F0000F80F0000F70F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000650300000000000000000000000800000000000000000000CD0600000000000000000000000C00000000000000000000310A000000000000000000000010000000000000000000008B0D00000000000000000000000000000004000000000000A00000009704000000000000000400000004000000000000020400003A0400000000000000080000000400000000000067070000E803000000000000000C00000004000000000000C80A00009F03000000000000001000000004000000000000200E00005F030000000000000000000000080000000000004B0100001109000000000000000400000008000000000000AB040000AC080000000000000008000000080000000000000D0800005208000000000000000C000000080000000000006B0B00000008000000000000001000000008000000000000C00E0000B70700000000000000000000000C000000000000FD0100008F0D00000000000000040000000C0000000000005A050000210D00000000000000080000000C000000000000B8080000BE0C000000000000000C0000000C000000000000140C0000650C00000000000000100000000C000000000000660F0000130C000000000000000000000010000000000000AE020000FF0F00000700000000040000001000000000000008060000FF0F00000000000000080000001000000000000064090000FF0F000000000000000C00000010000000000000BD0C0000FF0F000000000000001000000010000000000000FF0F0000FF0F00000000000000000000000000000004000007000000000000003804000000040000000000000004000069030000000000000D040000000800000000000000040000CE06000000000000F4030000000C000000000000000400002F0A000000000000E6030000001000000000000000040000880D000000000000D8030000000000000004000000040000A50000006804000029040000000400000004000000040000050400000D0400000004000000080000000400000004000067070000BC030000E9030000000C00000004000000040000C60A000075030000DD0300000010000000040000000400001C0E000036030000D20300000000000000080000000400004F010000DB08000025040000000400000008000000040000AD04000078080000FE0300000008000000080000000400000C08000020080000E9030000000C00000008000000040000680B0000D1070000DF030000001000000008000000040000BB0E00008B070000D603000000000000000C000000040000FF010000510D00002704000000040000000C0000000400005A050000E70C00000204000000080000000C000000040000B7080000870C0000F0030000000C0000000C000000040000100C0000310C0000E803000000100000000C000000040000610F0000E30B0000E0030000000000000010000000040000AF020000FF0F00002B04000000040000001000000004000007060000FF0F00000804000000080000001000000004000062090000FF0F0000F8030000000C00000010000000040000B90C0000FF0F0000F2030000001000000010000000040000FF0F0000FF0F0000ED030000000000000000000000080000060000000000000061080000000400000000000000080000670300000000000032080000000800000000000000080000C90600000000000016080000000C00000000000000080000280A000000000000050800000010000000000000000800007D0D000000000000F4070000000000000004000000080000A3000000600400004D08000000040000000400000008000001040000060400002108000000080000000400000008000061070000B703000007080000000C00000004000000080000BD0A000071030000F8070000001000000004000000080000110E000034030000EA0700000000000000080000000800004C010000CC08000044080000000400000008000000080000A80400006C0800001A080000000800000008000000080000050800001608000003080000000C000000080000000800005F0B0000C9070000F7070000001000000008000000080000B00E000085070000EB07000000000000000C000000080000FB0100003B0D00004208000000040000000C00000008000054050000D40C00001A08000000080000000C000000080000AF080000780C000006080000000C0000000C000000080000060C0000240C0000FC07000000100000000C000000080000550F0000D90B0000F2070000000000000010000000080000AA020000FF0F00004108000000040000001000000008000000060000FF0F00001C08000000080000001000000008000059090000FF0F00000A080000000C00000010000000080000AE0C0000FF0F000002080000001000000010000000080000FA0F0000FF0F0000FB0700000000000000000000000C000014000000000000007E0C00000004000000000000000C000071030000000000004B0C00000008000000000000000C0000D1060000000000002C0C0000000C000000000000000C00002D0A000000000000170C00000010000000000000000C0000800D000000000000030C00000000000000040000000C0000AF00000052040000650C00000004000000040000000C00000B040000FA030000350C00000008000000040000000C000068070000AD030000190C0000000C000000040000000C0000C20A000068030000070C00000010000000040000000C0000130E00002C030000F50B00000000000000080000000C000057010000B7080000570C00000004000000080000000C0000B0040000590800002A0C00000008000000080000000C00000B08000006080000110C0000000C000000080000000C0000630B0000BC070000020C00000010000000080000000C0000B20E00007A070000F30B000000000000000C0000000C0000040200001F0D00004F0C000000040000000C0000000C00005B050000BB0C0000260C000000080000000C0000000C0000B4080000620C00000F0C0000000C0000000C0000000C00000A0C0000120C0000030C000000100000000C0000000C0000560F0000CA0B0000F80B00000000000000100000000C0000B1020000FF0F00004A0C00000004000000100000000C000006060000FF0F0000230C00000008000000100000000C00005D090000FF0F0000100C0000000C000000100000000C0000B00C0000FF0F0000060C00000010000000100000000C0000FB0F0000FF0F0000FE0B00000000000000000000001000004300000000000000FF0F00000004000000000000001000009E03000000000000FF0F0000000800000000000000100000FB06000000000000FF0F0000000C00000000000000100000540A000000000000FF0F0000001000000000000000100000A50D000000000000FF0F0000000000000004000000100000DD00000012040000FF0F000000040000000400000010000036040000BC030000FF0F00000008000000040000001000009107000070030000FF0F0000000C00000004000000100000E90A00002D030000FF0F0000001000000004000000100000370E0000F2020000F80F00000000000000080000001000008301000070080000FF0F0000000400000008000000100000DA04000014080000FF0F000000080000000800000010000033080000C3070000FF0F0000000C00000008000000100000890B00007B070000FF0F0000001000000008000000100000D50E00003C070000F30F000000000000000C0000001000002F020000D10C0000FF0F000000040000000C00000010000084050000700C0000FF0F000000080000000C000000100000DB0800001A0C0000FF0F0000000C0000000C0000001000002F0C0000CD0B0000FF0F000000100000000C000000100000790F0000880B0000F40F0000000000000010000000100000DB020000FF0F0000FF0F00000004000000100000001000002E060000FF0F0000FF0F000000080000001000000010000083090000FF0F0000FF0F0000000C00000010000000100000D50C0000FF0F0000FF0F0000001000000010000000100000FF0F0000F80F0000F70F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000500000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000000B0000002F0000003D0000004A000000530000005B000000640000006C00000071000000770000007C00000083000000880000008F00000094000000990000009E000000A2000000A5000000AA000000AD000000B1000000B3000000B7000000BA000000BD000000C0000000C4000000C8000000CC000000CE000000D1000000D4000000D8000000DA000000DC000000E0000000E2000000E4000000E7000000EA000000ED000000EF000000F1000000F3000000F5000000F8000000FA000000FB000000FE000000020100000301000006010000090100000B0100000D01000010010000110100001501000017010000190100001B0100001D0100001F01000021010000240100002501000027010000290100002B0100002D0100002F01000031010000330100003501000038010000390100003B0100003D0100003E0100004001000041010000430100004501000046010000490100004A0100004C0100004E0100004F010000500100005201000053010000550100005701000058010000590100005B0100005C0100005E010000600100006001000062010000640100006501000066010000680100006A0100006B0100006D0100006E010000700100007101000072010000740100007501000077010000780100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000083010000840100008601000088010000890100008A0100008B0100008C0100008E0100008F01000090010000910100009201000094010000950100009601000097010000980100009A0100009B0100009D0100009E010000A0010000A1010000A2010000A3010000A5010000A6010000A7010000A7010000A9010000AA010000AB010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BB010000BB010000BC010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C9010000C9010000CC010000CD010000CD010000CE010000CF010000D1010000D2010000D3010000D3010000D5010000D6010000D7010000D7010000D8010000D9010000DB010000DD010000DE010000DF010000DF010000E1010000E1010000E2010000E3010000E5010000E6010000E7010000E9010000EA010000EB010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F1010000F3010000F4010000F6010000F7010000F8010000F8010000F9010000FB010000FC010000FD010000FD010000FE0100000002000000020000010200000202000003020000030200000402000005020000060200000802000008020000090200000A0200000B0200000C0200000C0200000D0200000E0200000F020000100200001102000011020000130200001402000015020000150200001602000018020000190200001A0200001B0200001D0200001E0200001E0200001F02000020020000210200002102000023020000240200002402000025020000260200002602000027020000280200002A0200002A0200002B0200002C0200002D0200002E0200002E0200002F0200003002000031020000320200003202000033020000340200003602000037020000380200003802000039020000390200003B0200003C0200003C0200003D0200003E0200004002000040020000420200004302000043020000440200004502000045020000470200004702000048020000490200004A0200004B0200004B0200004C0200004D0200004D0200004E0200004F020000510200005102000051020000520200005502000055020000560200005602000057020000590200005A0200005B0200005B0200005C0200005D0200005E0200005E0200005F02000060020000610200006102000062020000630200006402000065020000650200006602000068020000690200006A0200006A0200006B0200006C0200006C0200006D0200006F02000070020000700200007002000071020000720200007302000074020000750200007502000076020000770200007802000078020000790200007A0200007B0200007D0200007E0200007E0200007F02000080020000800200008102000081020000820200008302000083020000840200008502000085020000870200008802000088020000880200008A0200008A0200008B0200008B0200008C0200008D0200008D0200008E0200008F020000900200009002000091020000920200009202000093020000930200009402000095020000950200009702000097020000980200009802000099020000990200009B0200009B0200009B0200009C0200009D0200009D0200009E0200009E0200009F0200009F020000A1020000A2020000A2020000A3020000A4020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000A9020000AA020000AB020000AB020000AC020000AC020000AD020000AE020000AE020000AF020000B0020000B1020000B1020000B2020000B3020000B3020000B4020000B4020000B6020000B6020000B8020000B8020000B9020000BB020000BB020000BB020000BC020000BD020000BD020000BD020000BE020000C0020000C0020000C0020000C1020000C1020000C3020000C4020000C5020000C5020000C6020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CC020000CD020000CD020000CD020000CE020000CF020000CF020000D1020000D2020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D7020000D7020000D8020000D8020000D9020000DA020000DA020000DB020000DB020000DC020000DD020000DE020000DF020000DF020000E0020000E0020000E2020000E2020000E4020000E4020000E5020000E6020000E6020000E7020000E7020000E8020000E9020000E9020000EA020000EA020000EB020000EC020000EC020000EE020000EF020000EF020000F0020000F0020000F1020000F2020000F3020000F4020000F4020000F5020000F5020000F7020000F8020000F8020000F9020000F9020000F9020000FB020000FC020000FD020000FD020000FE020000FE02000000030000010300000103000002030000030300000303000004030000040300000503000006030000060300000603000007030000070300000803000009030000090300000A0300000B0300000B0300000B0300000D0300000E0300000E0300000E0300000F0300000F03000010030000110300001103000012030000120300001303000013030000140300001403000015030000150300001703000017030000180300001803000019030000190300001A0300001A0300001B0300001C0300001C0300001C0300001D0300001E0300001E0300001F0300002003000021030000210300002203000022030000230300002303000024030000250300002503000027030000270300002803000028030000290300002A0300002A0300002A0300002B0300002B0300002D0300002E0300002E0300002F0300002F0300002F0300003003000031030000320300003203000032030000340300003403000035030000360300003603000037030000380300003803000038030000390300003B0300003B0300003C0300003C0300003C0300003D0300003E0300003F030000400300004003000041030000410300004103000042030000420300004303000043030000450300004503000046030000460300004603000047030000480300004803000049030000490300004A0300004A0300004A0300004B0300004B0300004C0300004C0300004E0300004F0300004F030000500300005003000051030000510300005203000052030000520300005203000053030000530300005403000055030000550300005603000056030000570300005703000057030000580300005803000059030000590300005A0300005A0300005C0300005C0300005D0300005E0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000620300006403000065030000650300006603000066030000660300006703000067030000680300006903000069030000690300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006F0300006F0300006F0300007003000070030000720300007303000073030000740300007403000075030000750300007603000076030000770300007703000078030000790300007A0300007A0300007B0300007C0300007C0300007C0300007D0300007D0300007F030000800300008003000080030000800300008103000082030000820300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008A0300008B0300008B0300008B0300008C0300008D0300008D0300008E0300008F0300008F0300009003000090030000900300009103000091030000920300009203000093030000940300009403000095030000960300009603000096030000970300009703000097030000980300009A0300009A0300009B0300009B0300009C0300009C0300009C0300009D0300009D0300009E0300009E030000A0030000A0030000A1030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A6030000A6030000A6030000A6030000A7030000A7030000A9030000AA030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AD030000AE030000AF030000AF030000B0030000B0030000B1030000B2030000B2030000B2030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B6030000B7030000B7030000B8030000B9030000B9030000BA030000BA030000BA030000BB030000BB030000BC030000BD030000BD030000BE030000BE030000BF030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C3030000C4030000C4030000C5030000C5030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CB030000CD030000CD030000CE030000CE030000CE030000CF030000CF030000D0030000D2030000D2030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D7030000D7030000D8030000D8030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DD030000DD030000DF030000DF030000DF030000DF030000E1030000E1030000E1030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E6030000E6030000E8030000E9030000E9030000E9030000E9030000EA030000EB030000EC030000EC030000ED030000ED030000ED030000EE030000EE030000EF030000F1030000F1030000F2030000F2030000F2030000F2030000F3030000F3030000F4030000F4030000F6030000F6030000F7030000F7030000F8030000F8030000F9030000FA030000FA030000FA030000FB030000FB030000FB030000FC030000FC030000FD030000FD030000FE030000FE030000FF030000FF03000000000000040000002B00000039000000450000004E000000540000005C000000640000006A00000070000000750000007B0000008000000085000000890000008E00000093000000970000009A0000009F000000A2000000A6000000A8000000AC000000AF000000B2000000B5000000B8000000BA000000BD000000BF000000C3000000C6000000C9000000CC000000CE000000D1000000D4000000D6000000D8000000DC000000DE000000E0000000E2000000E4000000E6000000E9000000EB000000EC000000EE000000F1000000F2000000F5000000F7000000F9000000FB000000FE000000FF000000020100000401000006010000080100000B0100000D0100000F01000012010000130100001501000017010000190100001B0100001D0100001F010000200100002101000023010000240100002601000027010000280100002B0100002C0100002F0100003101000032010000340100003501000037010000390100003A0100003B0100003D0100003E010000400100004201000043010000440100004601000047010000490100004B0100004B0100004D010000500100005101000052010000530100005501000055010000560100005701000058010000590100005A0100005C0100005E0100005F0100006001000062010000630100006401000065010000660100006701000068010000690100006C0100006D0100006F0100007001000071010000720100007301000074010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000810100008201000084010000850100008701000088010000890100008A0100008B0100008C0100008D0100008D0100008E0100008F01000090010000920100009301000094010000950100009601000097010000980100009A0100009B0100009C0100009D0100009F0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AD010000AD010000AF010000B0010000B0010000B1010000B2010000B3010000B4010000B5010000B5010000B7010000B9010000BA010000BA010000BB010000BD010000BE010000BF010000C0010000C1010000C1010000C2010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CA010000CB010000CC010000CD010000CF010000D0010000D2010000D2010000D3010000D4010000D5010000D6010000D7010000D7010000D8010000DA010000DB010000DC010000DC010000DD010000DF010000DF010000E0010000E1010000E2010000E2010000E3010000E4010000E5010000E7010000E7010000E8010000E9010000EA010000EB010000EB010000EC010000ED010000EE010000EF010000F0010000F0010000F2010000F3010000F4010000F4010000F5010000F6010000F6010000F7010000F8010000F9010000FA010000FA010000FB010000FC010000FD010000FD010000FF0100000002000000020000010200000202000002020000030200000402000005020000050200000702000008020000090200000A0200000A0200000B0200000C0200000D0200000E0200000E0200000F02000010020000110200001202000013020000130200001402000014020000160200001702000017020000190200001A0200001B0200001B0200001C0200001D0200001D0200001E0200001F0200001F0200002102000021020000220200002302000024020000260200002602000027020000280200002802000029020000290200002A0200002A0200002A0200002B0200002D0200002D0200002E0200002E0200002F020000300200003102000032020000320200003302000034020000350200003502000036020000370200003802000038020000390200003B0200003C0200003D0200003D0200003E0200003F020000400200004102000041020000420200004302000043020000440200004502000046020000460200004602000048020000490200004A0200004B0200004C0200004C0200004D0200004E0200004F0200004F02000050020000510200005202000053020000540200005402000055020000560200005602000057020000570200005802000059020000590200005A0200005B0200005B0200005C0200005D0200005D0200005D0200005E0200005E0200005E0200005E0200006002000061020000610200006202000063020000640200006402000065020000660200006602000067020000670200006802000069020000690200006B0200006B0200006C0200006C0200006D0200006D0200006F0200006F0200006F020000700200007202000072020000730200007302000074020000740200007502000076020000760200007702000079020000790200007A0200007A0200007B0200007C0200007D0200007D0200007E0200007E0200007F020000800200008002000081020000810200008202000083020000830200008402000085020000860200008602000087020000880200008802000089020000890200008B0200008B0200008C0200008C0200008D0200008E0200008E0200008E0200008F0200009102000091020000910200009102000092020000920200009202000093020000930200009402000095020000960200009602000097020000970200009802000098020000990200009A0200009A0200009B0200009C0200009D0200009E0200009E0200009E0200009F020000A0020000A0020000A1020000A2020000A2020000A3020000A3020000A4020000A4020000A5020000A5020000A7020000A7020000A8020000A8020000A9020000AA020000AA020000AB020000AB020000AC020000AD020000AE020000AF020000AF020000B0020000B0020000B2020000B2020000B3020000B3020000B4020000B5020000B5020000B6020000B6020000B7020000B8020000B8020000B9020000B9020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BE020000BF020000C0020000C1020000C2020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C6020000C6020000C7020000C7020000C8020000C8020000C9020000C9020000CA020000CB020000CB020000CC020000CD020000CD020000CE020000CE020000CF020000D0020000D0020000D0020000D1020000D1020000D2020000D3020000D3020000D5020000D6020000D6020000D6020000D7020000D8020000D8020000D8020000D9020000D9020000DA020000DC020000DC020000DD020000DD020000DE020000DE020000DF020000DF020000E0020000E0020000E2020000E2020000E3020000E3020000E4020000E4020000E5020000E5020000E6020000E7020000E7020000E7020000E8020000E9020000E9020000EA020000EB020000ED020000ED020000EE020000EE020000EF020000EF020000F0020000F1020000F1020000F3020000F3020000F4020000F4020000F5020000F6020000F6020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FA020000FB020000FD020000FE020000FE020000FE020000FF020000FF020000FF02000000030000000300000103000002030000020300000203000003030000040300000403000005030000050300000503000006030000070300000803000009030000090300000A0300000A0300000A0300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000E0300000F0300001003000010030000120300001203000013030000130300001303000014030000140300001503000015030000160300001703000017030000180300001803000019030000190300001A0300001A0300001A0300001A0300001B0300001B0300001C0300001E0300001E0300001F0300001F0300002003000020030000200300002103000021030000220300002203000023030000230300002403000024030000250300002603000026030000260300002703000027030000280300002803000029030000290300002B0300002B0300002B0300002C0300002D0300002D0300002E0300002E0300002E0300003003000030030000310300003203000032030000320300003303000033030000330300003303000034030000340300003503000036030000360300003603000037030000370300003803000039030000390300003A0300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003F03000040030000400300004103000042030000420300004203000043030000430300004403000045030000450300004503000045030000460300004703000047030000480300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004E0300004F0300004F0300004F03000050030000510300005103000052030000530300005303000054030000540300005403000055030000550300005603000056030000570300005803000058030000590300005A0300005A0300005A0300005B0300005B0300005B0300005C0300005D0300005D0300005E0300005E0300005F0300005F0300005F030000600300006003000061030000610300006303000063030000640300006403000064030000650300006503000066030000660300006603000066030000670300006703000067030000670300006803000068030000690300006A0300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006D0300006E0300006F0300006F030000700300007003000071030000720300007203000072030000730300007403000074030000750300007503000076030000760300007603000077030000770300007803000079030000790300007A0300007A0300007A0300007B0300007B0300007C0300007D0300007D0300007E0300007E0300007F03000080030000810300008103000082030000820300008303000083030000830300008403000084030000850300008503000086030000870300008703000088030000880300008903000089030000890300008A0300008A0300008A0300008C0300008C0300008D0300008D0300008D0300008E0300008E0300008F0300009003000090030000910300009103000092030000920300009203000093030000930300009403000094030000950300009503000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009A0300009A0300009B0300009B0300009B0300009B0300009C0300009C0300009C0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A1030000A2030000A3030000A3030000A3030000A3030000A4030000A5030000A6030000A6030000A7030000A7030000A7030000A8030000A8030000A9030000AA030000AA030000AB030000AB030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B2030000B2030000B2030000B3030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B703000000000000000000002800000039000000450000004F0000005800000060000000680000006F000000740000007900000080000000850000008B00000090000000950000009A0000009E000000A1000000A6000000AA000000AE000000B0000000B3000000B6000000BA000000BD000000C0000000C4000000C7000000CA000000CE000000D0000000D4000000D7000000D9000000DD000000DF000000E1000000E3000000E6000000E9000000EB000000ED000000EF000000F2000000F4000000F6000000F8000000FB000000FD000000FF000000020100000401000007010000090100000C0100000E01000011010000130100001501000017010000190100001B0100001D0100002001000021010000230100002501000027010000290100002B0100002E0100002F0100003201000034010000350100003701000038010000390100003C0100003D0100003F0100004101000042010000440100004501000047010000490100004A0100004C0100004E0100004F0100005101000053010000540100005501000057010000580100005A0100005C0100005C0100005E01000060010000600100006201000063010000650100006601000068010000690100006A0100006C0100006D0100006F01000071010000720100007301000075010000760100007701000078010000790100007A0100007B0100007C0100007E0100007E010000800100008101000083010000850100008601000087010000890100008A0100008B0100008C0100008D0100008E0100008F010000910100009201000093010000950100009601000098010000990100009A0100009C0100009D0100009E0100009E0100009F010000A0010000A1010000A3010000A4010000A5010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AF010000AF010000B0010000B1010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BC010000BD010000BE010000BF010000C0010000C0010000C2010000C3010000C5010000C6010000C6010000C7010000C9010000CA010000CB010000CC010000CC010000CD010000CF010000D0010000D0010000D1010000D2010000D4010000D6010000D7010000D8010000D8010000DA010000DA010000DB010000DC010000DD010000DE010000DF010000E1010000E2010000E4010000E4010000E5010000E6010000E7010000E8010000E9010000EB010000EB010000EC010000ED010000EE010000EF010000F0010000F0010000F1010000F3010000F4010000F5010000F5010000F6010000F9010000F9010000FA010000FB010000FC010000FC010000FD010000FE010000FE01000000020000000200000102000002020000030200000402000004020000050200000602000007020000090200000A0200000A0200000C0200000D0200000E0200000E0200000F02000011020000110200001202000013020000140200001502000015020000160200001702000018020000190200001A0200001C0200001C0200001D0200001E0200001F0200002002000021020000220200002202000024020000240200002502000026020000260200002702000028020000290200002A0200002A0200002B0200002C0200002D0200002E0200003002000030020000320200003202000034020000340200003402000036020000370200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003E0200003F02000040020000410200004302000043020000440200004502000045020000460200004702000049020000490200004A0200004B0200004C0200004D0200004E0200004E0200004F0200005002000051020000520200005202000053020000550200005602000056020000570200005802000059020000590200005A0200005C0200005C0200005D0200005D0200005E0200005F0200006002000061020000620200006202000063020000630200006402000065020000660200006702000067020000690200006A0200006B0200006C0200006C0200006D0200006D0200006E0200006F0200007002000071020000720200007302000074020000750200007502000076020000770200007702000079020000790200007A0200007B0200007C0200007D0200007E0200007E0200007F0200008002000080020000810200008202000083020000840200008402000085020000860200008602000087020000870200008802000088020000890200008A0200008A0200008B0200008B0200008C0200008D0200008D0200008F0200008F02000090020000900200009102000091020000930200009302000093020000930200009502000095020000960200009602000097020000970200009802000099020000990200009A0200009B0200009C0200009D0200009D0200009D0200009E0200009F0200009F020000A0020000A0020000A1020000A2020000A2020000A3020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AA020000AB020000AB020000AD020000AD020000AE020000AE020000AF020000B0020000B0020000B0020000B1020000B2020000B2020000B2020000B3020000B5020000B5020000B5020000B6020000B6020000B7020000B8020000B9020000B9020000BA020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BF020000C0020000C1020000C1020000C1020000C2020000C3020000C3020000C4020000C6020000C6020000C7020000C7020000C8020000C8020000C9020000C9020000CA020000CB020000CC020000CC020000CD020000CE020000CE020000CF020000CF020000D0020000D2020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D6020000D6020000D7020000D8020000D8020000D9020000D9020000DB020000DC020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E2020000E2020000E3020000E3020000E3020000E4020000E5020000E6020000E6020000E7020000E7020000E9020000EA020000EA020000EB020000EC020000EC020000EE020000EF020000F0020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F4020000F5020000F5020000F5020000F7020000F8020000F8020000F8020000F9020000F9020000FA020000FB020000FB020000FD020000FE020000FE020000FE02000000030000010300000103000001030000020300000303000003030000050300000503000006030000060300000703000007030000080300000803000009030000090300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000F03000010030000100300001003000011030000120300001203000013030000140300001503000015030000160300001603000017030000170300001803000019030000190300001A0300001A0300001B0300001B0300001C0300001D0300001D0300001D0300001F0300001F030000200300002103000021030000220300002203000023030000230300002503000025030000250300002503000027030000270300002803000029030000290300002A0300002B0300002B0300002B0300002C0300002D0300002D0300002F0300002F0300002F03000030030000310300003203000033030000330300003403000034030000340300003503000035030000360300003603000038030000380300003903000039030000390300003A0300003B0300003B0300003D0300003D0300003E0300003E0300003E030000400300004003000041030000410300004203000043030000430300004403000044030000450300004503000046030000460300004603000046030000470300004703000048030000490300004A0300004A0300004A0300004B0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000052030000520300005203000053030000530300005403000054030000540300005503000056030000560300005603000057030000580300005803000059030000590300005A0300005B0300005B0300005C0300005C0300005C0300005C0300005E0300005E0300005F0300005F03000060030000600300006103000062030000620300006203000063030000630300006403000065030000650300006603000066030000670300006703000068030000680300006903000069030000690300006A0300006B0300006B0300006C0300006D0300006D0300006D0300006E0300006E0300006F03000070030000710300007103000071030000720300007303000073030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007D0300007E0300007F0300007F030000800300008103000081030000820300008203000082030000840300008403000085030000850300008603000086030000860300008703000088030000880300008803000089030000890300008A0300008A0300008C0300008C0300008D0300008D0300008E0300008E0300008E0300008F0300008F030000900300009003000092030000920300009303000093030000930300009403000094030000950300009503000096030000960300009803000098030000980300009803000099030000990300009A0300009B0300009B0300009B0300009D0300009D0300009E0300009E0300009F0300009F0300009F030000A0030000A1030000A1030000A2030000A2030000A3030000A4030000A4030000A4030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A8030000A9030000A9030000A9030000AA030000AA030000AB030000AB030000AB030000AC030000AC030000AD030000AE030000AE030000AF030000AF030000B0030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B8030000B8030000B9030000B9030000BA030000BB030000BB030000BC030000BC030000BC030000BE030000BE030000BF030000BF030000BF030000C0030000C0030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CC030000CC030000CC030000CD030000CE030000CF030000CF030000CF030000D0030000D0030000D0030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D5030000D6030000D7030000D7030000D7030000D8030000D9030000DA030000DB030000DB030000DC030000DC030000DC030000DD030000DD030000DE030000DF030000DF030000E0030000E1030000E1030000E1030000E2030000E2030000E3030000E3030000E5030000E5030000E6030000E6030000E7030000E7030000E8030000E9030000E9030000E9030000EA030000EA030000EA030000EB030000EB030000ED030000ED030000EE030000EE030000EF030000EF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000005000000050000000500000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ <Feature FeatureType="28" Disable="false" DataSize="8192">3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D227574662D38223F3E3C6864725F6C69622076657273696F6E3D22322E30223E3C5144434D5F76657273696F6E3E362E31303C2F5144434D5F76657273696F6E3E3C70616E656C5F636F6C6F725F6D6F64653E44434950333C2F70616E656C5F636F6C6F725F6D6F64653E3C70616E656C5F6D61785F6C756D696E616E63653E3432332E3736333039323034313031363C2F70616E656C5F6D61785F6C756D696E616E63653E3C70616E656C5F6D696E5F6C756D696E616E63653E302E34313035323937303239303138343C2F70616E656C5F6D696E5F6C756D696E616E63653E3C6E6F6D696E616C5F7065616B5F6C756D696E616E63653E313530303C2F6E6F6D696E616C5F7065616B5F6C756D696E616E63653E3C5344525F7065616B5F6C756D696E616E63653E3430303C2F5344525F7065616B5F6C756D696E616E63653E3C6F75747075745F67616D6D615F73706163653E3C73706163653E3270323C2F73706163653E3C76616C3E322E323C2F76616C3E3C2F6F75747075745F67616D6D615F73706163653E3C70616E656C5F7063633E3C723E3C633E303C2F633E3C723E313C2F723E3C673E303C2F673E3C623E303C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F723E3C673E3C633E303C2F633E3C723E303C2F723E3C673E313C2F673E3C623E303C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F673E3C623E3C633E303C2F633E3C723E303C2F723E3C673E303C2F673E3C623E313C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F623E3C2F70616E656C5F7063633E3C746F6E655F6D61703E3C706F696E74733E3C783E303C2F783E3C793E303C2F793E3C783E36323C2F783E3C793E383C2F793E3C783E3132333C2F783E3C793E33313C2F793E3C783E3138353C2F783E3C793E37353C2F793E3C783E3235343C2F783E3C793E3133313C2F793E3C783E3330383C2F783E3C793E3138343C2F793E3C783E3338363C2F783E3C793E3238323C2F793E3C783E3435313C2F783E3C793E3338373C2F793E3C783E3438323C2F783E3C793E3434373C2F793E3C783E3531333C2F783E3C793E3531343C2F793E3C783E3534343C2F783E3C793E3539303C2F793E3C783E3537353C2F783E3C793E3637353C2F793E3C783E3630363C2F783E3C793E3737303C2F793E3C783E3633373C2F783E3C793E3837373C2F793E3C783E3636383C2F783E3C793E3931363C2F793E3C783E3830303C2F783E3C793E3938313C2F793E3C783E3932333C2F783E3C793E313032333C2F793E3C2F706F696E74733E3C2F746F6E655F6D61703E3C73616D706C696E675F677269643E3C7265643E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F7265643E3C677265656E3E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F677265656E3E3C626C75653E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F626C75653E3C2F73616D706C696E675F677269643E3C647370705F73616D706C696E675F677269643E3C747970653E637573746F6D3C2F747970653E3C73697A653E31373C2F73697A653E3C2F647370705F73616D706C696E675F677269643E3C2F6864725F6C69623E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ </Mode>
+ <Mode ModeID="2" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="P3" NumOfFeatures="14" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="dcip3" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000D00000000000000000000000000200000000000000000000A00100000000000000000000000300000000000000000000710200000000000000000000000400000000000000000000410300000000000000000000000500000000000000000000110400000000000000000000000600000000000000000000E20400000000000000000000000700000000000000000000B20500000000000000000000000800000000000000000000830600000000000000000000000900000000000000000000530700000000000000000000000A00000000000000000000230800000000000000000000000B00000000000000000000F40800000000000000000000000C00000000000000000000C40900000000000000000000000D00000000000000000000950A00000000000000000000000E00000000000000000000650B00000000000000000000000F00000000000000000000350C00000000000000000000001000000000000000000000060D00000000000000000000000000000001000000000000290000001A01000000000000000100000001000000000000FA0000000501000000000000000200000001000000000000CA010000F0000000000000000003000000010000000000009B020000DA000000000000000004000000010000000000006C030000C5000000000000000005000000010000000000003C040000B0000000000000000006000000010000000000000D0500009B00000000000000000700000001000000000000DE0500008500000000000000000800000001000000000000AE06000070000000000000000009000000010000000000007F0700005B00000000000000000A00000001000000000000500800004500000000000000000B00000001000000000000200900003000000000000000000C00000001000000000000F10900001B00000000000000000D00000001000000000000C20A00000600000000000000000E00000001000000000000930B00000000000000000000000F00000001000000000000630C00000000000000000000001000000001000000000000340D00000000000000000000000000000002000000000000530000003902000000000000000100000002000000000000240100002302000000000000000200000002000000000000F40100000E02000000000000000300000002000000000000C5020000F80100000000000000040000000200000000000096030000E20100000000000000050000000200000000000067040000CD0100000000000000060000000200000000000038050000B70100000000000000070000000200000000000009060000A101000000000000000800000002000000000000DA0600008C01000000000000000900000002000000000000AB0700007601000000000000000A000000020000000000007C0800006001000000000000000B000000020000000000004D0900004B01000000000000000C000000020000000000001E0A00003501000000000000000D00000002000000000000EF0A00001F01000000000000000E00000002000000000000C00B00000A01000000000000000F00000002000000000000910C0000F400000000000000001000000002000000000000620D0000DF000000000000000000000000030000000000007C00000058030000010000000001000000030000000000004D01000042030000000000000002000000030000000000001F0200002C03000000000000000300000003000000000000F00200001603000000000000000400000003000000000000C1030000000300000000000000050000000300000000000092040000EA0200000000000000060000000300000000000064050000D40200000000000000070000000300000000000035060000BD0200000000000000080000000300000000000006070000A702000000000000000900000003000000000000D70700009102000000000000000A00000003000000000000A90800007B02000000000000000B000000030000000000007A0900006502000000000000000C000000030000000000004B0A00004F02000000000000000D000000030000000000001C0B00003902000000000000000E00000003000000000000EE0B00002302000000000000000F00000003000000000000BF0C00000D02000000000000001000000003000000000000900D0000F701000000000000000000000004000000000000A600000076040000020000000001000000040000000000007701000060040000000000000002000000040000000000004902000049040000000000000003000000040000000000001A0300003304000000000000000400000004000000000000EC0300001D04000000000000000500000004000000000000BD04000006040000000000000006000000040000000000008F050000F00300000000000000070000000400000000000060060000DA0300000000000000080000000400000000000032070000C30300000000000000090000000400000000000003080000AD03000000000000000A00000004000000000000D50800009603000000000000000B00000004000000000000A60900008003000000000000000C00000004000000000000780A00006A03000000000000000D000000040000000000004A0B00005303000000000000000E000000040000000000001B0C00003D03000000000000000F00000004000000000000ED0C00002703000000000000001000000004000000000000BE0D00001003000000000000000000000005000000000000CF0000009505000003000000000100000005000000000000A10100007E05000000000000000200000005000000000000730200006705000000000000000300000005000000000000450300005105000000000000000400000005000000000000160400003A05000000000000000500000005000000000000E80400002305000000000000000600000005000000000000BA0500000C050000000000000007000000050000000000008C060000F6040000000000000008000000050000000000005E070000DF040000000000000009000000050000000000002F080000C804000000000000000A0000000500000000000001090000B204000000000000000B00000005000000000000D30900009B04000000000000000C00000005000000000000A50A00008404000000000000000D00000005000000000000770B00006D04000000000000000E00000005000000000000490C00005704000000000000000F000000050000000000001A0D00004004000000000000001000000005000000000000EC0D00002904000000000000000000000006000000000000F9000000B306000004000000000100000006000000000000CB0100009C060000000000000002000000060000000000009D02000085060000000000000003000000060000000000006F0300006E06000000000000000400000006000000000000410400005706000000000000000500000006000000000000130500004006000000000000000600000006000000000000E50500002906000000000000000700000006000000000000B7060000120600000000000000080000000600000000000089070000FB050000000000000009000000060000000000005C080000E405000000000000000A000000060000000000002E090000CD05000000000000000B00000006000000000000000A0000B505000000000000000C00000006000000000000D20A00009E05000000000000000D00000006000000000000A40B00008705000000000000000E00000006000000000000760C00007005000000000000000F00000006000000000000480D000059050000000000000010000000060000000000001A0E0000420500000000000000000000000700000000000022010000D207000005000000000100000007000000000000F4010000BB07000000000000000200000007000000000000C7020000A307000000000000000300000007000000000000990300008C070000000000000004000000070000000000006C04000074070000000000000005000000070000000000003E0500005D07000000000000000600000007000000000000100600004507000000000000000700000007000000000000E30600002E07000000000000000800000007000000000000B5070000160700000000000000090000000700000000000088080000FF06000000000000000A000000070000000000005A090000E806000000000000000B000000070000000000002C0A0000D006000000000000000C00000007000000000000FF0A0000B906000000000000000D00000007000000000000D10B0000A106000000000000000E00000007000000000000A40C00008A06000000000000000F00000007000000000000760D00007206000000000000001000000007000000000000480E00005B060000000000000000000000080000000000004C010000F1080000070000000001000000080000000000001E020000D908000001000000000200000008000000000000F1020000C108000000000000000300000008000000000000C4030000A908000000000000000400000008000000000000960400009108000000000000000500000008000000000000690500007A080000000000000006000000080000000000003C06000062080000000000000007000000080000000000000E0700004A08000000000000000800000008000000000000E10700003208000000000000000900000008000000000000B40800001A08000000000000000A00000008000000000000860900000308000000000000000B00000008000000000000590A0000EB07000000000000000C000000080000000000002C0B0000D307000000000000000D00000008000000000000FF0B0000BB07000000000000000E00000008000000000000D10C0000A307000000000000000F00000008000000000000A40D00008C07000000000000001000000008000000000000770E00007407000000000000000000000009000000000000750100000F0A00000800000000010000000900000000000048020000F7090000020000000002000000090000000000001B030000DF09000000000000000300000009000000000000EE030000C709000000000000000400000009000000000000C1040000AF09000000000000000500000009000000000000940500009609000000000000000600000009000000000000670600007E090000000000000007000000090000000000003A07000066090000000000000008000000090000000000000D0800004E09000000000000000900000009000000000000E00800003609000000000000000A00000009000000000000B30900001E09000000000000000B00000009000000000000860A00000509000000000000000C00000009000000000000590B0000ED08000000000000000D000000090000000000002C0C0000D508000000000000000E00000009000000000000FF0C0000BD08000000000000000F00000009000000000000D20D0000A508000000000000001000000009000000000000A50E00008D0800000000000000000000000A0000000000009F0100002E0B00000900000000010000000A00000000000072020000150B00000300000000020000000A00000000000045030000FD0A00000000000000030000000A00000000000018040000E40A00000000000000040000000A000000000000EC040000CC0A00000000000000050000000A000000000000BF050000B30A00000000000000060000000A000000000000920600009B0A00000000000000070000000A00000000000065070000820A00000000000000080000000A000000000000390800006A0A00000000000000090000000A0000000000000C090000510A000000000000000A0000000A000000000000DF090000390A000000000000000B0000000A000000000000B20A0000200A000000000000000C0000000A000000000000860B0000080A000000000000000D0000000A000000000000590C0000EF09000000000000000E0000000A0000000000002C0D0000D709000000000000000F0000000A000000000000000E0000BE0900000000000000100000000A000000000000D30E0000A50900000000000000000000000B000000000000C80100004C0C00000A00000000010000000B0000000000009C020000330C00000500000000020000000B0000000000006F0300001B0C00000000000000030000000B00000000000043040000020C00000000000000040000000B00000000000016050000E90B00000000000000050000000B000000000000EA050000D00B00000000000000060000000B000000000000BD060000B70B00000000000000070000000B000000000000910700009E0B00000000000000080000000B00000000000064080000850B00000000000000090000000B000000000000380900006C0B000000000000000A0000000B0000000000000C0A0000540B000000000000000B0000000B000000000000DF0A00003B0B000000000000000C0000000B000000000000B30B0000220B000000000000000D0000000B000000000000860C0000090B000000000000000E0000000B0000000000005A0D0000F00A000000000000000F0000000B0000000000002D0E0000D70A00000000000000100000000B000000000000010F0000BE0A00000000000000000000000C000000000000F20100006B0D00000B00000000010000000C000000000000C5020000520D00000600000000020000000C00000000000099030000380D00000100000000030000000C0000000000006D0400001F0D00000000000000040000000C00000000000041050000060D00000000000000050000000C00000000000015060000ED0C00000000000000060000000C000000000000E9060000D40C00000000000000070000000C000000000000BC070000BA0C00000000000000080000000C00000000000090080000A10C00000000000000090000000C00000000000064090000880C000000000000000A0000000C000000000000380A00006F0C000000000000000B0000000C0000000000000C0B0000550C000000000000000C0000000C000000000000E00B00003C0C000000000000000D0000000C000000000000B30C0000230C000000000000000E0000000C000000000000870D00000A0C000000000000000F0000000C0000000000005B0E0000F00B00000000000000100000000C0000000000002F0F0000D70B00000000000000000000000D0000000000001B0200008A0E00000C00000000010000000D000000000000EF020000700E00000700000000020000000D000000000000C3030000560E00000200000000030000000D000000000000970400003D0E00000000000000040000000D0000000000006C050000230E00000000000000050000000D000000000000400600000A0E00000000000000060000000D00000000000014070000F00D00000000000000070000000D000000000000E8070000D60D00000000000000080000000D000000000000BC080000BD0D00000000000000090000000D00000000000090090000A30D000000000000000A0000000D000000000000640A00008A0D000000000000000B0000000D000000000000380B0000700D000000000000000C0000000D0000000000000D0C0000560D000000000000000D0000000D000000000000E10C00003D0D000000000000000E0000000D000000000000B50D0000230D000000000000000F0000000D000000000000890E00000A0D00000000000000100000000D0000000000005D0F0000F00C00000000000000000000000E00000000000045020000A80F00000D00000000010000000E000000000000190300008E0F00000800000000020000000E000000000000ED030000740F00000400000000030000000E000000000000C20400005A0F00000000000000040000000E00000000000096050000400F00000000000000050000000E0000000000006B060000260F00000000000000060000000E0000000000003F0700000C0F00000000000000070000000E00000000000013080000F30E00000000000000080000000E000000000000E8080000D90E00000000000000090000000E000000000000BC090000BF0E000000000000000A0000000E000000000000910A0000A50E000000000000000B0000000E000000000000650B00008B0E000000000000000C0000000E0000000000003A0C0000710E000000000000000D0000000E0000000000000E0D0000570E000000000000000E0000000E000000000000E20D00003D0E000000000000000F0000000E000000000000B70E0000230E00000000000000100000000E0000000000008B0F0000090E00000000000000000000000F0000000000006E020000FF0F00000E00000000010000000F00000000000043030000FF0F00000A00000000020000000F00000000000017040000FF0F00000500000000030000000F000000000000EC040000FF0F00000100000000040000000F000000000000C1050000FF0F00000000000000050000000F00000000000096060000FF0F00000000000000060000000F0000000000006A070000FF0F00000000000000070000000F0000000000003F080000FF0F00000000000000080000000F00000000000014090000F40F00000000000000090000000F000000000000E8090000DA0F000000000000000A0000000F000000000000BD0A0000C00F000000000000000B0000000F000000000000920B0000A50F000000000000000C0000000F000000000000660C00008B0F000000000000000D0000000F0000000000003B0D0000710F000000000000000E0000000F000000000000100E0000560F000000000000000F0000000F000000000000E50E00003C0F00000000000000100000000F000000000000B90F0000220F00000000000000000000001000000000000098020000FF0F00000F0000000001000000100000000000006D030000FF0F00000B00000000020000001000000000000042040000FF0F00000700000000030000001000000000000017050000FF0F000002000000000400000010000000000000EC050000FF0F000000000000000500000010000000000000C1060000FF0F00000000000000060000001000000000000096070000FF0F0000000000000007000000100000000000006B080000FF0F0000000000000008000000100000000000003F090000FF0F000000000000000900000010000000000000140A0000FF0F000000000000000A00000010000000000000E90A0000FF0F000000000000000B00000010000000000000BE0B0000FF0F000000000000000C00000010000000000000930C0000FF0F000000000000000D00000010000000000000680D0000FF0F000000000000000E000000100000000000003D0E0000FF0F000000000000000F00000010000000000000120F0000FF0F000000000000001000000010000000000000E70F0000FF0F000000000000000000000000000000010000020000000000000001010000000100000000000000010000D200000000000000FA000000000200000000000000010000A301000000000000F30000000003000000000000000100007402000000000000EC0000000004000000000000000100004403000000000000E50000000005000000000000000100001504000000000000DE000000000600000000000000010000E604000000000000D7000000000700000000000000010000B605000000000000D00000000008000000000000000100008706000000000000C90000000009000000000000000100005807000000000000C2000000000A000000000000000100002808000000000000BB000000000B00000000000000010000F908000000000000B4000000000C00000000000000010000CA09000000000000AD000000000D000000000000000100009A0A000000000000A6000000000E000000000000000100006B0B0000000000009F000000000F000000000000000100003C0C000000000000980000000010000000000000000100000D0D000000000000910000000000000000010000000100002B0000001101000002010000000100000001000000010000000100000001000000010000000200000001000000010000CD010000E8000000F40000000003000000010000000100009E020000D3000000EE0000000004000000010000000100006F030000BE000000E700000000050000000100000001000040040000A9000000E00000000006000000010000000100001105000094000000D9000000000700000001000000010000E20500007F000000D2000000000800000001000000010000B30600006A000000CC0000000009000000010000000100008407000055000000C5000000000A000000010000000100005508000040000000BE000000000B00000001000000010000260900002B000000B7000000000C00000001000000010000F709000016000000B0000000000D00000001000000010000C70A000001000000AA000000000E00000001000000010000980B000000000000A3000000000F00000001000000010000690C0000000000009C0000000010000000010000000100003A0D00000000000095000000000000000002000000010000550000003002000003010000000100000002000000010000260100001B020000FD000000000200000002000000010000F701000005020000F6000000000300000002000000010000C8020000F0010000EF0000000004000000020000000100009A030000DB010000E90000000005000000020000000100006B040000C5010000E20000000006000000020000000100003C050000B0010000DB0000000007000000020000000100000D0600009B010000D5000000000800000002000000010000DE06000085010000CE000000000900000002000000010000B007000070010000C7000000000A00000002000000010000810800005B010000C1000000000B000000020000000100005209000045010000BA000000000C00000002000000010000230A000030010000B3000000000D00000002000000010000F40A00001B010000AD000000000E00000002000000010000C60B000006010000A6000000000F00000002000000010000970C0000F0000000A0000000001000000002000000010000680D0000DB000000990000000000000000030000000100007E0000004F030000050100000001000000030000000100005001000039030000FE0000000002000000030000000100002102000023030000F8000000000300000003000000010000F30200000E030000F1000000000400000003000000010000C4030000F8020000EB00000000050000000300000001000096040000E2020000E400000000060000000300000001000067050000CD020000DE00000000070000000300000001000039060000B7020000D70000000008000000030000000100000A070000A1020000D1000000000900000003000000010000DC0700008C020000CA000000000A00000003000000010000AD08000076020000C4000000000B000000030000000100007E09000060020000BD000000000C00000003000000010000500A00004A020000B7000000000D00000003000000010000210B000035020000B0000000000E00000003000000010000F30B00001F020000AA000000000F00000003000000010000C40C000009020000A3000000001000000003000000010000960D0000F40100009D000000000000000004000000010000A80000006D040000060100000001000000040000000100007A01000057040000FF0000000002000000040000000100004B02000041040000F90000000003000000040000000100001D0300002B040000F3000000000400000004000000010000EF03000015040000EC000000000500000004000000010000C1040000FF030000E600000000060000000400000001000092050000E9030000E000000000070000000400000001000064060000D3030000D900000000080000000400000001000036070000BD030000D300000000090000000400000001000007080000A7030000CD000000000A00000004000000010000D908000091030000C6000000000B00000004000000010000AB0900007B030000C0000000000C000000040000000100007D0A000065030000BA000000000D000000040000000100004E0B00004F030000B3000000000E00000004000000010000200C000039030000AD000000000F00000004000000010000F20C000023030000A7000000001000000004000000010000C40D00000D030000A0000000000000000005000000010000D10000008C05000007010000000100000005000000010000A30100007505000001010000000200000005000000010000750200005F050000FB0000000003000000050000000100004703000049050000F40000000004000000050000000100001904000032050000EE000000000500000005000000010000EB0400001C050000E8000000000600000005000000010000BD05000005050000E20000000007000000050000000100008F060000EF040000DC00000000080000000500000001000061070000D9040000D600000000090000000500000001000033080000C2040000CF000000000A0000000500000001000005090000AC040000C9000000000B00000005000000010000D709000095040000C3000000000C00000005000000010000A90A00007F040000BD000000000D000000050000000100007B0B000069040000B7000000000E000000050000000100004D0C000052040000B1000000000F000000050000000100001F0D00003C040000AA000000001000000005000000010000F10D000025040000A4000000000000000006000000010000FB000000AB06000008010000000100000006000000010000CD0100009406000002010000000200000006000000010000A00200007D060000FC0000000003000000060000000100007203000066060000F6000000000400000006000000010000440400004F060000F00000000005000000060000000100001605000039060000EA000000000600000006000000010000E905000022060000E4000000000700000006000000010000BB0600000B060000DE0000000008000000060000000100008D070000F4050000D80000000009000000060000000100005F080000DE050000D2000000000A0000000600000001000032090000C7050000CC000000000B00000006000000010000040A0000B0050000C6000000000C00000006000000010000D60A000099050000C0000000000D00000006000000010000A80B000083050000BA000000000E000000060000000100007B0C00006C050000B4000000000F000000060000000100004D0D000055050000AE0000000010000000060000000100001F0E00003E050000A800000000000000000700000001000025010000C90700000A010000000100000007000000010000F7010000B207000004010000000200000007000000010000CA0200009B070000FE0000000003000000070000000100009C03000084070000F80000000004000000070000000100006F0400006D070000F20000000005000000070000000100004105000056070000EC000000000600000007000000010000140600003E070000E6000000000700000007000000010000E606000027070000E1000000000800000007000000010000B907000010070000DB0000000009000000070000000100008B080000F9060000D5000000000A000000070000000100005E090000E2060000CF000000000B00000007000000010000300A0000CB060000C9000000000C00000007000000010000030B0000B4060000C3000000000D00000007000000010000D50B00009D060000BD000000000E00000007000000010000A80C000085060000B8000000000F000000070000000100007A0D00006E060000B20000000010000000070000000100004D0E000057060000AC0000000000000000080000000100004E010000E80800000B01000000010000000800000001000021020000D008000005010000000200000008000000010000F4020000B9080000FF000000000300000008000000010000C7030000A1080000FA000000000400000008000000010000990400008A080000F40000000005000000080000000100006C05000072080000EE0000000006000000080000000100003F0600005B080000E90000000007000000080000000100001207000043080000E3000000000800000008000000010000E40700002C080000DD000000000900000008000000010000B708000014080000D7000000000A000000080000000100008A090000FD070000D2000000000B000000080000000100005D0A0000E5070000CC000000000C00000008000000010000300B0000CE070000C6000000000D00000008000000010000020C0000B6070000C1000000000E00000008000000010000D50C00009F070000BB000000000F00000008000000010000A80D000087070000B50000000010000000080000000100007B0E000070070000B000000000000000000900000001000078010000060A00000C0100000001000000090000000100004B020000EF090000060100000002000000090000000100001E030000D709000001010000000300000009000000010000F1030000BF090000FB000000000400000009000000010000C4040000A7090000F6000000000500000009000000010000970500008F090000F00000000006000000090000000100006A06000077090000EB0000000007000000090000000100003D0700005F090000E50000000008000000090000000100001008000048090000E0000000000900000009000000010000E308000030090000DA000000000A00000009000000010000B609000018090000D5000000000B00000009000000010000890A000000090000CF000000000C000000090000000100005C0B0000E8080000CA000000000D000000090000000100002F0C0000D0080000C4000000000E00000009000000010000020D0000B9080000BE000000000F00000009000000010000D50D0000A1080000B9000000001000000009000000010000A80E000089080000B300000000000000000A000000010000A1010000250B00000D01000000010000000A000000010000750200000D0B00000801000000020000000A00000001000048030000F50A00000201000000030000000A0000000100001B040000DC0A0000FD00000000040000000A000000010000EF040000C40A0000F800000000050000000A000000010000C2050000AC0A0000F200000000060000000A00000001000095060000940A0000ED00000000070000000A000000010000680700007C0A0000E800000000080000000A0000000100003C080000630A0000E200000000090000000A0000000100000F0900004B0A0000DD000000000A0000000A000000010000E2090000330A0000D7000000000B0000000A000000010000B60A00001B0A0000D2000000000C0000000A000000010000890B0000030A0000CD000000000D0000000A0000000100005C0C0000EA090000C7000000000E0000000A000000010000300D0000D2090000C2000000000F0000000A000000010000030E0000BA090000BD00000000100000000A000000010000D60E0000A2090000B700000000000000000B000000010000CB010000440C00000E01000000010000000B0000000100009F0200002B0C00000901000000020000000B00000001000072030000120C00000401000000030000000B00000001000046040000FA0B0000FF00000000040000000B00000001000019050000E10B0000FA00000000050000000B000000010000ED050000C90B0000F400000000060000000B000000010000C0060000B00B0000EF00000000070000000B00000001000094070000980B0000EA00000000080000000B000000010000670800007F0B0000E500000000090000000B0000000100003B090000670B0000DF000000000A0000000B0000000100000F0A00004E0B0000DA000000000B0000000B000000010000E20A0000350B0000D5000000000C0000000B000000010000B60B00001D0B0000D0000000000D0000000B000000010000890C0000040B0000CB000000000E0000000B0000000100005D0D0000EC0A0000C5000000000F0000000B000000010000300E0000D30A0000C000000000100000000B000000010000040F0000BB0A0000BB00000000000000000C000000010000F5010000620D00001001000000010000000C000000010000C8020000490D00000B01000000020000000C0000000100009C030000300D00000601000000030000000C00000001000070040000170D00000101000000040000000C00000001000044050000FF0C0000FB00000000050000000C00000001000018060000E60C0000F600000000060000000C000000010000EB060000CD0C0000F100000000070000000C000000010000BF070000B40C0000EC00000000080000000C000000010000930800009B0C0000E700000000090000000C00000001000067090000820C0000E2000000000A0000000C0000000100003B0A0000690C0000DD000000000B0000000C0000000100000F0B0000500C0000D8000000000C0000000C000000010000E20B0000370C0000D3000000000D0000000C000000010000B60C00001E0C0000CE000000000E0000000C0000000100008A0D0000050C0000C9000000000F0000000C0000000100005E0E0000EC0B0000C400000000100000000C000000010000320F0000D30B0000BF00000000000000000D0000000100001E020000810E00001101000000010000000D000000010000F2020000680E00000C01000000020000000D000000010000C60300004E0E00000701000000030000000D0000000100009A040000350E00000201000000040000000D0000000100006E0500001C0E0000FD00000000050000000D00000001000043060000020E0000F800000000060000000D00000001000017070000E90D0000F400000000070000000D000000010000EB070000D00D0000EF00000000080000000D000000010000BF080000B70D0000EA00000000090000000D000000010000930900009D0D0000E5000000000A0000000D000000010000670A0000840D0000E0000000000B0000000D0000000100003B0B00006B0D0000DB000000000C0000000D0000000100000F0C0000510D0000D6000000000D0000000D000000010000E30C0000380D0000D1000000000E0000000D000000010000B70D00001F0D0000CC000000000F0000000D0000000100008B0E0000060D0000C700000000100000000D0000000100005F0F0000EC0C0000C300000000000000000E000000010000480200009F0F00001201000000010000000E0000000100001C030000860F00000D01000000020000000E000000010000F00300006C0F00000901000000030000000E000000010000C5040000530F00000401000000040000000E00000001000099050000390F0000FF00000000050000000E0000000100006D0600001F0F0000FA00000000060000000E00000001000042070000060F0000F600000000070000000E00000001000016080000EC0E0000F100000000080000000E000000010000EA080000D20E0000EC00000000090000000E000000010000BF090000B90E0000E8000000000A0000000E000000010000930A00009F0E0000E3000000000B0000000E000000010000670B0000850E0000DE000000000C0000000E0000000100003C0C00006C0E0000D9000000000D0000000E000000010000100D0000520E0000D5000000000E0000000E000000010000E40D0000380E0000D0000000000F0000000E000000010000B90E00001F0E0000CB00000000100000000E0000000100008D0F0000050E0000C600000000000000000F00000001000071020000FF0F00001301000000010000000F00000001000046030000FF0F00000F01000000020000000F0000000100001B040000FF0F00000A01000000030000000F000000010000EF040000FF0F00000601000000040000000F000000010000C4050000FF0F00000101000000050000000F00000001000098060000FF0F0000FD00000000060000000F0000000100006D070000FF0F0000F800000000070000000F00000001000042080000FF0F0000F300000000080000000F00000001000016090000EE0F0000EF00000000090000000F000000010000EB090000D40F0000EA000000000A0000000F000000010000BF0A0000BA0F0000E6000000000B0000000F000000010000940B0000A00F0000E1000000000C0000000F000000010000690C0000860F0000DC000000000D0000000F0000000100003D0D00006C0F0000D8000000000E0000000F000000010000120E0000520F0000D3000000000F0000000F000000010000E60E0000380F0000CF00000000100000000F000000010000BB0F00001E0F0000CA0000000000000000100000000100009B020000FF0F00001501000000010000001000000001000070030000FF0F00001001000000020000001000000001000045040000FF0F00000C01000000030000001000000001000019050000FF0F000007010000000400000010000000010000EE050000FF0F000003010000000500000010000000010000C3060000FF0F0000FF00000000060000001000000001000098070000FF0F0000FA0000000007000000100000000100006D080000FF0F0000F600000000080000001000000001000042090000FF0F0000F1000000000900000010000000010000170A0000FF0F0000ED000000000A00000010000000010000EC0A0000FF0F0000E8000000000B00000010000000010000C00B0000FF0F0000E4000000000C00000010000000010000950C0000FF0F0000E0000000000D000000100000000100006A0D0000FF0F0000DB000000000E000000100000000100003F0E0000FF0F0000D7000000000F00000010000000010000140F0000FF0F0000D2000000001000000010000000010000E90F0000FF0F0000CE000000000000000000000000020000040000000000000004020000000100000000000000020000D500000000000000FD010000000200000000000000020000A601000000000000F60100000003000000000000000200007702000000000000EF0100000004000000000000000200004803000000000000E90100000005000000000000000200001904000000000000E2010000000600000000000000020000E904000000000000DB010000000700000000000000020000BA05000000000000D40100000008000000000000000200008B06000000000000CD0100000009000000000000000200005C07000000000000C7010000000A000000000000000200002D08000000000000C0010000000B00000000000000020000FE08000000000000B9010000000C00000000000000020000CF09000000000000B2010000000D00000000000000020000A00A000000000000AB010000000E00000000000000020000710B000000000000A5010000000F00000000000000020000420C0000000000009E010000001000000000000000020000130D000000000000970100000000000000010000000200002D0000000801000005020000000100000001000000020000FE000000F4000000FE010000000200000001000000020000D0010000DF000000F8010000000300000001000000020000A1020000CB000000F101000000040000000100000002000072030000B6000000EB01000000050000000100000002000043040000A1000000E4010000000600000001000000020000150500008D000000DD010000000700000001000000020000E605000078000000D7010000000800000001000000020000B706000063000000D0010000000900000001000000020000880700004F000000C9010000000A00000001000000020000590800003A000000C3010000000B000000010000000200002B09000026000000BC010000000C00000001000000020000FC09000011000000B5010000000D00000001000000020000CD0A000000000000AF010000000E000000010000000200009E0B000000000000A8010000000F00000001000000020000700C000000000000A1010000001000000001000000020000410D0000000000009B010000000000000002000000020000570000002702000007020000000100000002000000020000280100001202000000020000000200000002000000020000000200000002000000020000000300000002000000020000CB020000E8010000F30100000004000000020000000200009D030000D3010000EC0100000005000000020000000200006E040000BE010000E601000000060000000200000002000040050000A9010000DF0100000007000000020000000200001106000094010000D9010000000800000002000000020000E30600007F010000D2010000000900000002000000020000B40700006A010000CC010000000A000000020000000200008508000055010000C5010000000B000000020000000200005709000040010000BF010000000C00000002000000020000280A00002B010000B8010000000D00000002000000020000FA0A000016010000B2010000000E00000002000000020000CB0B000001010000AB010000000F000000020000000200009D0C0000EC000000A50100000010000000020000000200006E0D0000D70000009E010000000000000003000000020000810000004603000008020000000100000003000000020000520100003003000002020000000200000003000000020000240200001B030000FB010000000300000003000000020000F602000006030000F5010000000400000003000000020000C7030000F0020000EE01000000050000000300000002000099040000DB020000E80100000006000000030000000200006B050000C6020000E20100000007000000030000000200003C060000B0020000DB0100000008000000030000000200000E0700009B020000D5010000000900000003000000020000E007000086020000CE010000000A00000003000000020000B108000070020000C8010000000B00000003000000020000830900005B020000C2010000000C00000003000000020000550A000045020000BB010000000D00000003000000020000260B000030020000B5010000000E00000003000000020000F80B00001B020000AF010000000F00000003000000020000CA0C000005020000A80100000010000000030000000200009C0D0000F0010000A2010000000000000004000000020000AA00000064040000090200000001000000040000000200007C0100004F040000030200000002000000040000000200004E02000039040000FD0100000003000000040000000200002003000023040000F7010000000400000004000000020000F20300000E040000F0010000000500000004000000020000C4040000F8030000EA01000000060000000400000002000096050000E2030000E401000000070000000400000002000068060000CC030000DE0100000008000000040000000200003A070000B7030000D70100000009000000040000000200000C080000A1030000D1010000000A00000004000000020000DD0800008B030000CB010000000B00000004000000020000AF09000075030000C5010000000C00000004000000020000810A000060030000BE010000000D00000004000000020000530B00004A030000B8010000000E00000004000000020000250C000034030000B2010000000F00000004000000020000F70C00001F030000AC010000001000000004000000020000C90D000009030000A5010000000000000005000000020000D4000000830500000B020000000100000005000000020000A60100006D050000050200000002000000050000000200007802000057050000FF0100000003000000050000000200004A03000041050000F80100000004000000050000000200001D0400002B050000F2010000000500000005000000020000EF04000015050000EC010000000600000005000000020000C1050000FF040000E601000000070000000500000002000093060000E8040000E001000000080000000500000002000065070000D2040000DA01000000090000000500000002000037080000BC040000D4010000000A0000000500000002000009090000A6040000CE010000000B00000005000000020000DC09000090040000C8010000000C00000005000000020000AE0A00007A040000C1010000000D00000005000000020000800B000064040000BB010000000E00000005000000020000520C00004E040000B5010000000F00000005000000020000240D000038040000AF010000001000000005000000020000F60D000022040000A9010000000000000006000000020000FE000000A20600000C020000000100000006000000020000D00100008B06000006020000000200000006000000020000A20200007506000000020000000300000006000000020000750300005E060000FA0100000004000000060000000200004704000048060000F40100000005000000060000000200001A05000031060000EE010000000600000006000000020000EC0500001B060000E8010000000700000006000000020000BE06000005060000E201000000080000000600000002000091070000EE050000DC01000000090000000600000002000063080000D8050000D6010000000A0000000600000002000035090000C1050000D0010000000B00000006000000020000080A0000AB050000CB010000000C00000006000000020000DA0A000094050000C5010000000D00000006000000020000AD0B00007E050000BF010000000E000000060000000200007F0C000067050000B9010000000F00000006000000020000510D000051050000B3010000001000000006000000020000240E00003B050000AD01000000000000000700000002000027010000C00700000E020000000100000007000000020000FA010000A907000008020000000200000007000000020000CC02000093070000020200000003000000070000000200009F0300007C070000FC0100000004000000070000000200007204000065070000F6010000000500000007000000020000440500004E070000F00100000006000000070000000200001706000037070000EB010000000700000007000000020000EA06000021070000E5010000000800000007000000020000BC0700000A070000DF0100000009000000070000000200008F080000F3060000D9010000000A0000000700000002000061090000DC060000D3010000000B00000007000000020000340A0000C5060000CD010000000C00000007000000020000070B0000AF060000C8010000000D00000007000000020000D90B000098060000C2010000000E00000007000000020000AC0C000081060000BC010000000F000000070000000200007F0D00006A060000B6010000001000000007000000020000510E000053060000B001000000000000000800000002000051010000DF0800000F02000000010000000800000002000024020000C808000009020000000200000008000000020000F7020000B108000004020000000300000008000000020000C903000099080000FE0100000004000000080000000200009C04000082080000F80100000005000000080000000200006F0500006B080000F30100000006000000080000000200004206000054080000ED010000000700000008000000020000150700003D080000E7010000000800000008000000020000E807000026080000E1010000000900000008000000020000BB0800000E080000DC010000000A000000080000000200008D090000F7070000D6010000000B00000008000000020000600A0000E0070000D0010000000C00000008000000020000330B0000C9070000CB010000000D00000008000000020000060C0000B2070000C5010000000E00000008000000020000D90C00009B070000BF010000000F00000008000000020000AC0D000083070000BA0100000010000000080000000200007F0E00006C070000B40100000000000000090000000200007B010000FE090000100200000001000000090000000200004E020000E60900000B02000000020000000900000002000021030000CF09000005020000000300000009000000020000F4030000B709000000020000000400000009000000020000C70400009F090000FA0100000005000000090000000200009A05000088090000F50100000006000000090000000200006D06000070090000EF0100000007000000090000000200004007000059090000EA0100000008000000090000000200001308000041090000E4010000000900000009000000020000E60800002A090000DE010000000A00000009000000020000B909000012090000D9010000000B000000090000000200008D0A0000FB080000D3010000000C00000009000000020000600B0000E3080000CE010000000D00000009000000020000330C0000CC080000C8010000000E00000009000000020000060D0000B4080000C3010000000F00000009000000020000D90D00009D080000BD010000001000000009000000020000AC0E000085080000B801000000000000000A000000020000A40100001C0B00001202000000010000000A00000002000078020000040B00000C02000000020000000A0000000200004B030000EC0A00000702000000030000000A0000000200001E040000D50A00000202000000040000000A000000020000F2040000BD0A0000FC01000000050000000A000000020000C5050000A50A0000F701000000060000000A000000020000980600008D0A0000F101000000070000000A0000000200006C070000750A0000EC01000000080000000A0000000200003F0800005D0A0000E601000000090000000A00000002000012090000450A0000E1010000000A0000000A000000020000E60900002D0A0000DC010000000B0000000A000000020000B90A0000150A0000D6010000000C0000000A0000000200008C0B0000FD090000D1010000000D0000000A0000000200005F0C0000E6090000CB010000000E0000000A000000020000330D0000CE090000C6010000000F0000000A000000020000060E0000B6090000C101000000100000000A000000020000D90E00009E090000BB01000000000000000B000000020000CE0100003B0C00001302000000010000000B000000020000A1020000230C00000E02000000020000000B000000020000750300000A0C00000902000000030000000B00000002000049040000F20B00000302000000040000000B0000000200001C050000DA0B0000FE01000000050000000B000000020000F0050000C20B0000F901000000060000000B000000020000C3060000A90B0000F401000000070000000B00000002000097070000910B0000EE01000000080000000B0000000200006A080000790B0000E901000000090000000B0000000200003E090000610B0000E4010000000A0000000B000000020000120A0000480B0000DE010000000B0000000B000000020000E50A0000300B0000D9010000000C0000000B000000020000B90B0000180B0000D4010000000D0000000B0000000200008C0C0000000B0000CF010000000E0000000B000000020000600D0000E70A0000C9010000000F0000000B000000020000330E0000CF0A0000C401000000100000000B000000020000070F0000B70A0000BF01000000000000000C000000020000F8010000590D00001502000000010000000C000000020000CB020000410D00000F02000000020000000C0000000200009F030000280D00000A02000000030000000C00000002000073040000100D00000502000000040000000C00000002000047050000F70C00000002000000050000000C0000000200001B060000DE0C0000FB01000000060000000C000000020000EE060000C60C0000F601000000070000000C000000020000C2070000AD0C0000F101000000080000000C00000002000096080000950C0000EB01000000090000000C0000000200006A0900007C0C0000E6010000000A0000000C0000000200003E0A0000630C0000E1010000000B0000000C000000020000110B00004B0C0000DC010000000C0000000C000000020000E50B0000320C0000D7010000000D0000000C000000020000B90C0000190C0000D2010000000E0000000C0000000200008D0D0000010C0000CD010000000F0000000C000000020000600E0000E80B0000C801000000100000000C000000020000340F0000D00B0000C201000000000000000D00000002000021020000780E00001602000000010000000D000000020000F50200005F0E00001102000000020000000D000000020000C9030000460E00000C02000000030000000D0000000200009D0400002D0E00000702000000040000000D00000002000071050000140E00000202000000050000000D00000002000045060000FB0D0000FD01000000060000000D00000002000019070000E20D0000F801000000070000000D000000020000ED070000C90D0000F301000000080000000D000000020000C1080000B00D0000EE01000000090000000D00000002000095090000970D0000E9010000000A0000000D0000000200006A0A00007E0D0000E4010000000B0000000D0000000200003E0B0000650D0000DF010000000C0000000D000000020000120C00004C0D0000DA010000000D0000000D000000020000E60C0000330D0000D5010000000E0000000D000000020000BA0D00001A0D0000D0010000000F0000000D0000000200008E0E0000010D0000CB01000000100000000D000000020000620F0000E80C0000C601000000000000000E0000000200004B020000970F00001702000000010000000E0000000200001F0300007D0F00001202000000020000000E000000020000F3030000640F00000E02000000030000000E000000020000C80400004B0F00000902000000040000000E0000000200009C050000310F00000402000000050000000E00000002000070060000180F0000FF01000000060000000E00000002000044070000FF0E0000FA01000000070000000E00000002000019080000E50E0000F501000000080000000E000000020000ED080000CC0E0000F101000000090000000E000000020000C1090000B30E0000EC010000000A0000000E000000020000960A0000990E0000E7010000000B0000000E0000000200006A0B0000800E0000E2010000000C0000000E0000000200003E0C0000670E0000DD010000000D0000000E000000020000120D00004D0E0000D8010000000E0000000E000000020000E70D0000340E0000D3010000000F0000000E000000020000BB0E00001B0E0000CF01000000100000000E0000000200008F0F0000010E0000CA01000000000000000F00000002000075020000FF0F00001902000000010000000F00000002000049030000FF0F00001402000000020000000F0000000200001E040000FF0F00000F02000000030000000F000000020000F2040000FF0F00000B02000000040000000F000000020000C7050000FF0F00000602000000050000000F0000000200009B060000FF0F00000102000000060000000F00000002000070070000FF0F0000FC01000000070000000F00000002000044080000FF0F0000F801000000080000000F00000002000019090000E80F0000F301000000090000000F000000020000ED090000CE0F0000EE010000000A0000000F000000020000C20A0000B40F0000EA010000000B0000000F000000020000960B00009B0F0000E5010000000C0000000F0000000200006B0C0000810F0000E0010000000D0000000F0000000200003F0D0000670F0000DB010000000E0000000F000000020000140E00004D0F0000D7010000000F0000000F000000020000E80E0000340F0000D201000000100000000F000000020000BD0F00001A0F0000CD0100000000000000100000000200009E020000FF0F00001A02000000010000001000000002000073030000FF0F00001602000000020000001000000002000048040000FF0F0000110200000003000000100000000200001C050000FF0F00000C020000000400000010000000020000F1050000FF0F000008020000000500000010000000020000C6060000FF0F0000030200000006000000100000000200009B070000FF0F0000FF0100000007000000100000000200006F080000FF0F0000FA01000000080000001000000002000044090000FF0F0000F6010000000900000010000000020000190A0000FF0F0000F1010000000A00000010000000020000EE0A0000FF0F0000EC010000000B00000010000000020000C20B0000FF0F0000E8010000000C00000010000000020000970C0000FF0F0000E3010000000D000000100000000200006C0D0000FF0F0000DF010000000E00000010000000020000400E0000FF0F0000DA010000000F00000010000000020000150F0000FF0F0000D6010000001000000010000000020000EA0F0000FF0F0000D1010000000000000000000000030000060000000000000007030000000100000000000000030000D70000000000000000030000000200000000000000030000A801000000000000F90200000003000000000000000300007902000000000000F30200000004000000000000000300004B03000000000000EC0200000005000000000000000300001C04000000000000E6020000000600000000000000030000ED04000000000000DF020000000700000000000000030000BF05000000000000D80200000008000000000000000300009006000000000000D20200000009000000000000000300006107000000000000CB020000000A000000000000000300003208000000000000C4020000000B000000000000000300000409000000000000BE020000000C00000000000000030000D509000000000000B7020000000D00000000000000030000A60A000000000000B0020000000E00000000000000030000780B000000000000AA020000000F00000000000000030000490C000000000000A30200000010000000000000000300001A0D0000000000009D0200000000000000010000000300002F000000000100000803000000010000000100000003000001010000EB00000002030000000200000001000000030000D2010000D7000000FB020000000300000001000000030000A4020000C3000000F502000000040000000100000003000075030000AE000000EE020000000500000001000000030000470400009A000000E80200000006000000010000000300001805000086000000E1020000000700000001000000030000EA05000071000000DB020000000800000001000000030000BB0600005D000000D40200000009000000010000000300008D07000049000000CE020000000A000000010000000300005E08000035000000C7020000000B000000010000000300003009000020000000C1020000000C00000001000000030000010A00000C000000BA020000000D00000001000000030000D30A000000000000B4020000000E00000001000000030000A40B000000000000AD020000000F00000001000000030000760C000000000000A7020000001000000001000000030000470D000000000000A0020000000000000002000000030000590000001E0200000A0300000001000000020000000300002B0100000A02000003030000000200000002000000030000FD010000F5010000FD020000000300000002000000030000CE020000E0010000F7020000000400000002000000030000A0030000CC010000F002000000050000000200000003000072040000B7010000EA02000000060000000200000003000043050000A2010000E3020000000700000002000000030000150600008E010000DD020000000800000002000000030000E706000079010000D7020000000900000002000000030000B807000064010000D0020000000A000000020000000300008A08000050010000CA020000000B000000020000000300005C0900003B010000C3020000000C000000020000000300002D0A000026010000BD020000000D00000002000000030000FF0A000012010000B7020000000E00000002000000030000D10B0000FD000000B0020000000F00000002000000030000A30C0000E8000000AA020000001000000002000000030000740D0000D4000000A3020000000000000003000000030000830000003D0300000B0300000001000000030000000300005501000028030000050300000002000000030000000300002702000013030000FF020000000300000003000000030000000300000003000000030000000400000003000000030000CA030000E9020000F20200000005000000030000000300009C040000D4020000EC0200000006000000030000000300006E050000BF020000E602000000070000000300000003000040060000AA020000DF0200000008000000030000000300001207000095020000D9020000000900000003000000030000E407000080020000D3020000000A00000003000000030000B60800006B020000CD020000000B000000030000000300008809000056020000C6020000000C000000030000000300005A0A000040020000C0020000000D000000030000000300002C0B00002B020000BA020000000E00000003000000030000FD0B000016020000B3020000000F00000003000000030000CF0C000001020000AD020000001000000003000000030000A10D0000EC010000A7020000000000000004000000030000AD0000005C0400000D0300000001000000040000000300007F0100004604000007030000000200000004000000030000510200003104000001030000000300000004000000030000230300001B040000FA020000000400000004000000030000F503000006040000F4020000000500000004000000030000C7040000F1030000EE02000000060000000400000003000099050000DB030000E80200000007000000040000000300006B060000C6030000E20200000008000000040000000300003D070000B0030000DC020000000900000004000000030000100800009B030000D6020000000A00000004000000030000E208000086030000CF020000000B00000004000000030000B409000070030000C9020000000C00000004000000030000860A00005B030000C3020000000D00000004000000030000580B000045030000BD020000000E000000040000000300002A0C000030030000B7020000000F00000004000000030000FC0C00001B030000B1020000001000000004000000030000CE0D000005030000AA020000000000000005000000030000D60000007A0500000E030000000100000005000000030000A901000064050000080300000002000000050000000300007B0200004F050000020300000003000000050000000300004D03000039050000FC0200000004000000050000000300002004000023050000F6020000000500000005000000030000F20400000D050000F0020000000600000005000000030000C4050000F8040000EA02000000070000000500000003000097060000E2040000E402000000080000000500000003000069070000CC040000DE0200000009000000050000000300003B080000B6040000D8020000000A000000050000000300000E090000A1040000D2020000000B00000005000000030000E00900008B040000CC020000000C00000005000000030000B20A000075040000C6020000000D00000005000000030000840B00005F040000C0020000000E00000005000000030000570C00004A040000BA020000000F00000005000000030000290D000034040000B4020000001000000005000000030000FB0D00001E040000AE020000000000000006000000030000000100009906000010030000000100000006000000030000D3010000830600000A030000000200000006000000030000A50200006D060000040300000003000000060000000300007803000056060000FE0200000004000000060000000300004A04000040060000F80200000005000000060000000300001D0500002A060000F2020000000600000006000000030000EF05000014060000ED020000000700000006000000030000C2060000FE050000E702000000080000000600000003000094070000E8050000E102000000090000000600000003000067080000D2050000DB020000000A0000000600000003000039090000BC050000D5020000000B000000060000000300000C0A0000A5050000CF020000000C00000006000000030000DE0A00008F050000C9020000000D00000006000000030000B10B000079050000C3020000000E00000006000000030000830C000063050000BD020000000F00000006000000030000560D00004D050000B7020000001000000006000000030000290E000037050000B10200000000000000070000000300002A010000B707000012030000000100000007000000030000FD010000A10700000C030000000200000007000000030000CF0200008B07000006030000000300000007000000030000A20300007407000000030000000400000007000000030000750400005E070000FA0200000005000000070000000300004805000047070000F50200000006000000070000000300001A06000031070000EF020000000700000007000000030000ED0600001A070000E9020000000800000007000000030000C007000004070000E302000000090000000700000003000092080000ED060000DD020000000A0000000700000003000065090000D7060000D8020000000B00000007000000030000380A0000C0060000D2020000000C000000070000000300000B0B0000AA060000CC020000000D00000007000000030000DD0B000093060000C6020000000E00000007000000030000B00C00007D060000C0020000000F00000007000000030000830D000066060000BB020000001000000007000000030000560E000050060000B502000000000000000800000003000054010000D60800001303000000010000000800000003000027020000BF0800000D030000000200000008000000030000F9020000A808000008030000000300000008000000030000CC03000092080000020300000004000000080000000300009F0400007B080000FC0200000005000000080000000300007205000064080000F7020000000600000008000000030000450600004D080000F10200000007000000080000000300001807000036080000EB020000000800000008000000030000EB0700001F080000E6020000000900000008000000030000BE08000008080000E0020000000A0000000800000003000091090000F2070000DA020000000B00000008000000030000640A0000DB070000D5020000000C00000008000000030000370B0000C4070000CF020000000D000000080000000300000A0C0000AD070000C9020000000E00000008000000030000DD0C000096070000C4020000000F00000008000000030000B00D00007F070000BE020000001000000008000000030000830E000068070000B80200000000000000090000000300007D010000F50900001503000000010000000900000003000050020000DE0900000F03000000020000000900000003000024030000C60900000A030000000300000009000000030000F7030000AF09000004030000000400000009000000030000CA04000098090000FE0200000005000000090000000300009D05000081090000F90200000006000000090000000300007006000069090000F30200000007000000090000000300004307000052090000EE020000000800000009000000030000170800003B090000E8020000000900000009000000030000EA08000024090000E3020000000A00000009000000030000BD0900000D090000DD020000000B00000009000000030000900A0000F5080000D8020000000C00000009000000030000630B0000DE080000D2020000000D00000009000000030000360C0000C7080000CC020000000E00000009000000030000090D0000B0080000C7020000000F00000009000000030000DD0D000099080000C1020000001000000009000000030000B00E000081080000BC02000000000000000A000000030000A7010000130B00001603000000010000000A0000000300007A020000FC0A00001103000000020000000A0000000300004E030000E40A00000B03000000030000000A00000003000021040000CD0A00000603000000040000000A000000030000F5040000B50A00000103000000050000000A000000030000C80500009E0A0000FB02000000060000000A0000000300009B060000860A0000F602000000070000000A0000000300006F0700006E0A0000F002000000080000000A00000003000042080000570A0000EB02000000090000000A000000030000150900003F0A0000E5020000000A0000000A000000030000E9090000280A0000E0020000000B0000000A000000030000BC0A0000100A0000DA020000000C0000000A0000000300008F0B0000F8090000D5020000000D0000000A000000030000630C0000E1090000D0020000000E0000000A000000030000360D0000C9090000CA020000000F0000000A000000030000090E0000B2090000C502000000100000000A000000030000DD0E00009A090000BF02000000000000000B000000030000D1010000320C00001803000000010000000B000000030000A40200001A0C00001203000000020000000B00000003000078030000020C00000D03000000030000000B0000000300004C040000EA0B00000803000000040000000B0000000300001F050000D20B00000303000000050000000B000000030000F3050000BA0B0000FD02000000060000000B000000030000C6060000A20B0000F802000000070000000B0000000300009A0700008A0B0000F302000000080000000B0000000300006D080000730B0000ED02000000090000000B000000030000410900005B0B0000E8020000000A0000000B000000030000140A0000430B0000E3020000000B0000000B000000030000E80A00002B0B0000DD020000000C0000000B000000030000BC0B0000130B0000D8020000000D0000000B0000000300008F0C0000FB0A0000D3020000000E0000000B000000030000630D0000E30A0000CD020000000F0000000B000000030000360E0000CB0A0000C802000000100000000B0000000300000A0F0000B30A0000C302000000000000000C000000030000FB010000510D00001903000000010000000C000000030000CE020000380D00001403000000020000000C000000030000A2030000200D00000F03000000030000000C00000003000076040000080D00000A03000000040000000C0000000300004A050000F00C00000503000000050000000C0000000300001D060000D70C0000FF02000000060000000C000000030000F1060000BF0C0000FA02000000070000000C000000030000C5070000A70C0000F502000000080000000C000000030000990800008E0C0000F002000000090000000C0000000300006D090000760C0000EB020000000A0000000C000000030000400A00005E0C0000E5020000000B0000000C000000030000140B0000450C0000E0020000000C0000000C000000030000E80B00002D0C0000DB020000000D0000000C000000030000BC0C0000150C0000D6020000000E0000000C0000000300008F0D0000FC0B0000D1020000000F0000000C000000030000630E0000E40B0000CB02000000100000000C000000030000370F0000CC0B0000C602000000000000000D000000030000240200006F0E00001B03000000010000000D000000030000F8020000570E00001603000000020000000D000000030000CC0300003E0E00001103000000030000000D000000030000A0040000250E00000C03000000040000000D000000030000740500000D0E00000703000000050000000D00000003000048060000F40D00000203000000060000000D0000000300001C070000DB0D0000FC02000000070000000D000000030000F0070000C30D0000F702000000080000000D000000030000C4080000AA0D0000F202000000090000000D00000003000098090000910D0000ED020000000A0000000D0000000300006C0A0000790D0000E8020000000B0000000D000000030000400B0000600D0000E3020000000C0000000D000000030000140C0000470D0000DE020000000D0000000D000000030000E80C00002F0D0000D9020000000E0000000D000000030000BC0D0000160D0000D4020000000F0000000D000000030000900E0000FD0C0000CF02000000100000000D000000030000640F0000E50C0000CA02000000000000000E0000000300004E0200008E0F00001C03000000010000000E00000003000022030000750F00001803000000020000000E000000030000F60300005C0F00001303000000030000000E000000030000CB040000430F00000E03000000040000000E0000000300009F0500002A0F00000903000000050000000E00000003000073060000110F00000403000000060000000E00000003000047070000F80E0000FF02000000070000000E0000000300001B080000DF0E0000FA02000000080000000E000000030000F0080000C60E0000F502000000090000000E000000030000C4090000AD0E0000F0020000000A0000000E000000030000980A0000940E0000EB020000000B0000000E0000000300006C0B00007B0E0000E6020000000C0000000E000000030000400C0000620E0000E1020000000D0000000E000000030000150D0000490E0000DC020000000E0000000E000000030000E90D00002F0E0000D7020000000F0000000E000000030000BD0E0000160E0000D202000000100000000E000000030000910F0000FD0D0000CD02000000000000000F00000003000078020000FF0F00001E03000000010000000F0000000300004C030000FF0F00001903000000020000000F00000003000021040000FF0F00001403000000030000000F000000030000F5040000FF0F00001003000000040000000F000000030000C9050000FF0F00000B03000000050000000F0000000300009E060000FF0F00000603000000060000000F00000003000072070000FF0F00000103000000070000000F00000003000047080000FB0F0000FC02000000080000000F0000000300001B090000E10F0000F702000000090000000F000000030000EF090000C80F0000F2020000000A0000000F000000030000C40A0000AF0F0000EE020000000B0000000F000000030000980B0000950F0000E9020000000C0000000F0000000300006D0C00007C0F0000E4020000000D0000000F000000030000410D0000620F0000DF020000000E0000000F000000030000150E0000490F0000DA020000000F0000000F000000030000EA0E0000300F0000D502000000100000000F000000030000BE0F0000160F0000D1020000000000000010000000030000A2020000FF0F00002003000000010000001000000003000076030000FF0F00001B0300000002000000100000000300004B040000FF0F0000160300000003000000100000000300001F050000FF0F000011030000000400000010000000030000F4050000FF0F00000D030000000500000010000000030000C9060000FF0F0000080300000006000000100000000300009D070000FF0F00000303000000070000001000000003000072080000FF0F0000FF02000000080000001000000003000046090000FF0F0000FA0200000009000000100000000300001B0A0000FF0F0000F5020000000A00000010000000030000F00A0000FF0F0000F0020000000B00000010000000030000C40B0000FF0F0000EC020000000C00000010000000030000990C0000FF0F0000E7020000000D000000100000000300006D0D0000FF0F0000E2020000000E00000010000000030000420E0000FF0F0000DD020000000F00000010000000030000170F0000FF0F0000D9020000001000000010000000030000EB0F0000FF0F0000D402000000000000000000000004000008000000000000000A040000000100000000000000040000D90000000000000003040000000200000000000000040000AB01000000000000FD0300000003000000000000000400007C02000000000000F60300000004000000000000000400004E03000000000000F00300000005000000000000000400002004000000000000E9030000000600000000000000040000F104000000000000E3030000000700000000000000040000C305000000000000DC0300000008000000000000000400009406000000000000D60300000009000000000000000400006607000000000000CF030000000A000000000000000400003708000000000000C9030000000B000000000000000400000909000000000000C3030000000C00000000000000040000DB09000000000000BC030000000D00000000000000040000AC0A000000000000B6030000000E000000000000000400007E0B000000000000AF030000000F000000000000000400004F0C000000000000A9030000001000000000000000040000210D000000000000A203000000000000000100000004000032000000F70000000B04000000010000000100000004000003010000E300000005040000000200000001000000040000D5010000CF000000FF030000000300000001000000040000A7020000BB000000F803000000040000000100000004000079030000A7000000F20300000005000000010000000400004A04000093000000EC0300000006000000010000000400001C0500007F000000E5030000000700000001000000040000EE0500006B000000DF030000000800000001000000040000C006000057000000D80300000009000000010000000400009107000043000000D2030000000A00000001000000040000630800002F000000CC030000000B00000001000000040000350900001B000000C5030000000C00000001000000040000070A000007000000BF030000000D00000001000000040000D80A000000000000B9030000000E00000001000000040000AA0B000000000000B2030000000F000000010000000400007C0C000000000000AC0300000010000000010000000400004E0D000000000000A50300000000000000020000000400005B000000150200000D0400000001000000020000000400002D0100000102000007040000000200000002000000040000FF010000ED01000001040000000300000002000000040000D1020000D8010000FA030000000400000002000000040000A3030000C4010000F403000000050000000200000004000075040000B0010000EE030000000600000002000000040000470500009B010000E70300000007000000020000000400001906000087010000E1030000000800000002000000040000EB06000073010000DB030000000900000002000000040000BD0700005E010000D5030000000A000000020000000400008F0800004A010000CE030000000B000000020000000400006109000036010000C8030000000C00000002000000040000330A000021010000C2030000000D00000002000000040000050B00000D010000BC030000000E00000002000000040000D60B0000F9000000B5030000000F00000002000000040000A80C0000E4000000AF0300000010000000020000000400007A0D0000D0000000A903000000000000000300000004000085000000340300000F040000000100000003000000040000570100001F03000009040000000200000003000000040000290200000B03000002040000000300000003000000040000FC020000F6020000FC030000000400000003000000040000CE030000E1020000F6030000000500000003000000040000A0040000CC020000F003000000060000000300000004000072050000B8020000EA03000000070000000300000004000044060000A3020000E4030000000800000003000000040000160700008E020000DD030000000900000003000000040000E80700007A020000D7030000000A00000003000000040000BA08000065020000D1030000000B000000030000000400008C09000050020000CB030000000C000000030000000400005F0A00003C020000C5030000000D00000003000000040000310B000027020000BF030000000E00000003000000040000030C000012020000B8030000000F00000003000000040000D50C0000FD010000B2030000001000000003000000040000A70D0000E9010000AC030000000000000004000000040000AF0000005304000011040000000100000004000000040000810100003E0400000A0400000002000000040000000400005402000028040000040400000003000000040000000400002603000013040000FE030000000400000004000000040000000400000004000000040000000500000004000000040000CA040000E9030000F20300000006000000040000000400009D050000D4030000EC0300000007000000040000000400006F060000BF030000E603000000080000000400000004000041070000AA030000E00300000009000000040000000400001408000095030000DA030000000A00000004000000040000E608000080030000D4030000000B00000004000000040000B80900006B030000CE030000000C000000040000000400008B0A000056030000C8030000000D000000040000000400005D0B000041030000C2030000000E000000040000000400002F0C00002C030000BC030000000F00000004000000040000010D000017030000B5030000001000000004000000040000D40D000002030000AF030000000000000005000000040000D90000007105000012040000000100000005000000040000AB0100005C0500000C0400000002000000050000000400007E0200004605000006040000000300000005000000040000500300003105000000040000000400000005000000040000230400001C050000FA030000000500000005000000040000F504000006050000F4030000000600000005000000040000C8050000F1040000EE0300000007000000050000000400009A060000DB040000E80300000008000000050000000400006D070000C6040000E20300000009000000050000000400003F080000B0040000DC030000000A00000005000000040000120900009B040000D7030000000B00000005000000040000E409000085040000D1030000000C00000005000000040000B70A000070040000CB030000000D00000005000000040000890B00005B040000C5030000000E000000050000000400005C0C000045040000BF030000000F000000050000000400002E0D000030040000B9030000001000000005000000040000000E00001A040000B3030000000000000006000000040000030100009006000014040000000100000006000000040000D50100007A0600000E040000000200000006000000040000A802000064060000080400000003000000060000000400007B0300004F060000020400000004000000060000000400004D04000039060000FC0300000005000000060000000400002005000023060000F7030000000600000006000000040000F30500000D060000F1030000000700000006000000040000C5060000F7050000EB03000000080000000600000004000098070000E2050000E50300000009000000060000000400006B080000CC050000DF030000000A000000060000000400003D090000B6050000D9030000000B00000006000000040000100A0000A0050000D3030000000C00000006000000040000E30A00008A050000CD030000000D00000006000000040000B50B000075050000C8030000000E00000006000000040000880C00005F050000C2030000000F000000060000000400005B0D000049050000BC0300000010000000060000000400002D0E000033050000B60300000000000000070000000400002C010000AF07000016040000000100000007000000040000FF0100009807000010040000000200000007000000040000D2020000820700000A040000000300000007000000040000A50300006C070000040400000004000000070000000400007804000056070000FF0300000005000000070000000400004B05000040070000F90300000006000000070000000400001E0600002A070000F3030000000700000007000000040000F006000013070000ED030000000800000007000000040000C3070000FD060000E703000000090000000700000004000096080000E7060000E2030000000A0000000700000004000069090000D1060000DC030000000B000000070000000400003C0A0000BB060000D6030000000C000000070000000400000F0B0000A5060000D0030000000D00000007000000040000E10B00008E060000CB030000000E00000007000000040000B40C000078060000C5030000000F00000007000000040000870D000062060000BF0300000010000000070000000400005A0E00004C060000B903000000000000000800000004000056010000CD0800001704000000010000000800000004000029020000B708000012040000000200000008000000040000FC020000A00800000C040000000300000008000000040000CF0300008A08000006040000000400000008000000040000A20400007308000001040000000500000008000000040000750500005D080000FB0300000006000000080000000400004806000046080000F50300000007000000080000000400001B07000030080000F0030000000800000008000000040000EE07000019080000EA030000000900000008000000040000C208000002080000E4030000000A0000000800000004000095090000EC070000DF030000000B00000008000000040000680A0000D5070000D9030000000C000000080000000400003B0B0000BF070000D3030000000D000000080000000400000E0C0000A8070000CE030000000E00000008000000040000E10C000092070000C8030000000F00000008000000040000B40D00007B070000C2030000001000000008000000040000870E000065070000BD03000000000000000900000004000080010000EC0900001904000000010000000900000004000053020000D50900001304000000020000000900000004000027030000BE0900000E040000000300000009000000040000FA030000A709000008040000000400000009000000040000CD0400009009000003040000000500000009000000040000A005000079090000FD0300000006000000090000000400007306000063090000F8030000000700000009000000040000470700004C090000F20300000008000000090000000400001A08000035090000EC030000000900000009000000040000ED0800001E090000E7030000000A00000009000000040000C009000007090000E1030000000B00000009000000040000930A0000F0080000DC030000000C00000009000000040000670B0000D9080000D6030000000D000000090000000400003A0C0000C2080000D1030000000E000000090000000400000D0D0000AB080000CB030000000F00000009000000040000E00D000094080000C6030000001000000009000000040000B30E00007E080000C003000000000000000A000000040000AA0100000B0B00001B04000000010000000A0000000400007D020000F30A00001504000000020000000A00000004000051030000DC0A00001004000000030000000A00000004000024040000C50A00000A04000000040000000A000000040000F7040000AE0A00000504000000050000000A000000040000CB050000960A0000FF03000000060000000A0000000400009E0600007F0A0000FA03000000070000000A00000004000072070000680A0000F403000000080000000A00000004000045080000500A0000EF03000000090000000A00000004000018090000390A0000EA030000000A0000000A000000040000EC090000220A0000E4030000000B0000000A000000040000BF0A00000B0A0000DF030000000C0000000A000000040000930B0000F3090000D9030000000D0000000A000000040000660C0000DC090000D4030000000E0000000A000000040000390D0000C5090000CE030000000F0000000A0000000400000D0E0000AE090000C903000000100000000A000000040000E00E000096090000C303000000000000000B000000040000D4010000290C00001C04000000010000000B000000040000A7020000120C00001704000000020000000B0000000400007B030000FA0B00001204000000030000000B0000000400004E040000E20B00000C04000000040000000B00000004000022050000CB0B00000704000000050000000B000000040000F6050000B30B00000204000000060000000B000000040000C90600009C0B0000FC03000000070000000B0000000400009D070000840B0000F703000000080000000B000000040000700800006C0B0000F203000000090000000B00000004000044090000550B0000EC030000000A0000000B000000040000170A00003D0B0000E7030000000B0000000B000000040000EB0A0000250B0000E1030000000C0000000B000000040000BF0B00000E0B0000DC030000000D0000000B000000040000920C0000F60A0000D7030000000E0000000B000000040000660D0000DE0A0000D1030000000F0000000B000000040000390E0000C70A0000CC03000000100000000B0000000400000D0F0000AF0A0000C703000000000000000C000000040000FE010000480D00001E04000000010000000C000000040000D1020000300D00001904000000020000000C000000040000A5030000180D00001404000000030000000C00000004000079040000000D00000E04000000040000000C0000000400004D050000E80C00000904000000050000000C00000004000020060000D00C00000404000000060000000C000000040000F4060000B80C0000FF03000000070000000C000000040000C8070000A00C0000F903000000080000000C0000000400009C080000880C0000F403000000090000000C0000000400006F090000700C0000EF030000000A0000000C000000040000430A0000580C0000E9030000000B0000000C000000040000170B0000400C0000E4030000000C0000000C000000040000EB0B0000280C0000DF030000000D0000000C000000040000BE0C0000100C0000DA030000000E0000000C000000040000920D0000F80B0000D4030000000F0000000C000000040000660E0000E00B0000CF03000000100000000C0000000400003A0F0000C80B0000CA03000000000000000D00000004000027020000670E00002004000000010000000D000000040000FB0200004E0E00001B04000000020000000D000000040000CF030000360E00001604000000030000000D000000040000A30400001E0E00001004000000040000000D00000004000077050000050E00000B04000000050000000D0000000400004B060000ED0D00000604000000060000000D0000000400001F070000D40D00000104000000070000000D000000040000F3070000BC0D0000FC03000000080000000D000000040000C7080000A40D0000F703000000090000000D0000000400009B0900008B0D0000F1030000000A0000000D0000000400006F0A0000730D0000EC030000000B0000000D000000040000430B00005B0D0000E7030000000C0000000D000000040000170C0000420D0000E2030000000D0000000D000000040000EB0C00002A0D0000DD030000000E0000000D000000040000BE0D0000110D0000D8030000000F0000000D000000040000920E0000F90C0000D203000000100000000D000000040000660F0000E10C0000CD03000000000000000E00000004000051020000850F00002204000000010000000E000000040000250300006D0F00001D04000000020000000E000000040000F9030000540F00001704000000030000000E000000040000CE0400003B0F00001204000000040000000E000000040000A2050000220F00000D04000000050000000E000000040000760600000A0F00000804000000060000000E0000000400004A070000F10E00000304000000070000000E0000000400001E080000D80E0000FE03000000080000000E000000040000F2080000BF0E0000F903000000090000000E000000040000C6090000A70E0000F4030000000A0000000E0000000400009A0A00008E0E0000EF030000000B0000000E0000000400006E0B0000750E0000EA030000000C0000000E000000040000430C00005C0E0000E5030000000D0000000E000000040000170D0000440E0000E0030000000E0000000E000000040000EB0D00002B0E0000DB030000000F0000000E000000040000BF0E0000120E0000D603000000100000000E000000040000930F0000F90D0000D003000000000000000F0000000400007B020000FF0F00002304000000010000000F0000000400004F030000FF0F00001E04000000020000000F00000004000024040000FF0F00001904000000030000000F000000040000F8040000FF0F00001404000000040000000F000000040000CC050000FF0F00000F04000000050000000F000000040000A1060000FF0F00000A04000000060000000F00000004000075070000FF0F00000604000000070000000F00000004000049080000F40F00000104000000080000000F0000000400001D090000DB0F0000FC03000000090000000F000000040000F2090000C20F0000F7030000000A0000000F000000040000C60A0000A90F0000F2030000000B0000000F0000000400009A0B0000900F0000ED030000000C0000000F0000000400006F0C0000770F0000E8030000000D0000000F000000040000430D00005E0F0000E3030000000E0000000F000000040000170E0000450F0000DE030000000F0000000F000000040000EB0E00002B0F0000D903000000100000000F000000040000C00F0000120F0000D4030000000000000010000000040000A5020000FF0F00002504000000010000001000000004000079030000FF0F0000200400000002000000100000000400004E040000FF0F00001B04000000030000001000000004000022050000FF0F000016040000000400000010000000040000F7050000FF0F000012040000000500000010000000040000CB060000FF0F00000D040000000600000010000000040000A0070000FF0F00000804000000070000001000000004000074080000FF0F00000304000000080000001000000004000049090000FF0F0000FE0300000009000000100000000400001D0A0000FF0F0000F9030000000A00000010000000040000F20A0000FF0F0000F4030000000B00000010000000040000C60B0000FF0F0000EF030000000C000000100000000400009B0C0000FF0F0000EB030000000D000000100000000400006F0D0000FF0F0000E6030000000E00000010000000040000440E0000FF0F0000E1030000000F00000010000000040000180F0000FF0F0000DC030000001000000010000000040000ED0F0000FF0F0000D70300000000000000000000000500000A000000000000000D050000000100000000000000050000DC0000000000000006050000000200000000000000050000AD01000000000000000500000003000000000000000500007F02000000000000FA0400000004000000000000000500005103000000000000F30400000005000000000000000500002304000000000000ED040000000600000000000000050000F504000000000000E7040000000700000000000000050000C705000000000000E00400000008000000000000000500009906000000000000DA0400000009000000000000000500006B07000000000000D4040000000A000000000000000500003C08000000000000CE040000000B000000000000000500000E09000000000000C7040000000C00000000000000050000E009000000000000C1040000000D00000000000000050000B20A000000000000BB040000000E00000000000000050000840B000000000000B4040000000F00000000000000050000560C000000000000AE040000001000000000000000050000280D000000000000A804000000000000000100000005000034000000EE0000000E05000000010000000100000005000006010000DA00000008050000000200000001000000050000D8010000C600000002050000000300000001000000050000AA020000B3000000FC0400000004000000010000000500007C0300009F000000F60400000005000000010000000500004E0400008B000000EF0400000006000000010000000500002005000078000000E9040000000700000001000000050000F205000064000000E3040000000800000001000000050000C406000051000000DD040000000900000001000000050000960700003D000000D6040000000A000000010000000500006808000029000000D0040000000B000000010000000500003A09000016000000CA040000000C000000010000000500000C0A000002000000C4040000000D00000001000000050000DE0A000000000000BE040000000E00000001000000050000B00B000000000000B7040000000F00000001000000050000820C000000000000B1040000001000000001000000050000540D000000000000AB0400000000000000020000000500005E0000000C0200001005000000010000000200000005000030010000F80100000A05000000020000000200000005000002020000E401000004050000000300000002000000050000D4020000D0010000FE040000000400000002000000050000A6030000BC010000F804000000050000000200000005000078040000A8010000F20400000006000000020000000500004B05000094010000EB0400000007000000020000000500001D06000080010000E5040000000800000002000000050000EF0600006C010000DF040000000900000002000000050000C107000058010000D9040000000A000000020000000500009308000044010000D3040000000B000000020000000500006509000030010000CD040000000C00000002000000050000380A00001C010000C7040000000D000000020000000500000A0B000008010000C0040000000E00000002000000050000DC0B0000F4000000BA040000000F00000002000000050000AE0C0000E0000000B4040000001000000002000000050000800D0000CC000000AE040000000000000003000000050000870000002B030000120500000001000000030000000500005A010000170300000C0500000002000000030000000500002C0200000203000006050000000300000003000000050000FE020000EE02000000050000000400000003000000050000D1030000DA020000FA040000000500000003000000050000A3040000C5020000F404000000060000000300000005000075050000B1020000EE040000000700000003000000050000480600009C020000E80400000008000000030000000500001A07000088020000E2040000000900000003000000050000EC07000074020000DC040000000A00000003000000050000BF0800005F020000D6040000000B00000003000000050000910900004B020000D0040000000C00000003000000050000630A000037020000C9040000000D00000003000000050000360B000022020000C3040000000E00000003000000050000080C00000E020000BD040000000F00000003000000050000DA0C0000F9010000B7040000001000000003000000050000AD0D0000E5010000B1040000000000000004000000050000B10000004A0400001405000000010000000400000005000084010000350400000E050000000200000004000000050000560200002004000008050000000300000004000000050000290300000C04000002050000000400000004000000050000FB030000F7030000FC040000000500000004000000050000CE040000E2030000F6040000000600000004000000050000A0050000CD030000F004000000070000000400000005000073060000B9030000EA04000000080000000400000005000045070000A4030000E4040000000900000004000000050000180800008F030000DE040000000A00000004000000050000EA0800007A030000D8040000000B00000004000000050000BD09000066030000D2040000000C000000040000000500008F0A000051030000CC040000000D00000004000000050000620B00003C030000C6040000000E00000004000000050000340C000027030000C0040000000F00000004000000050000070D000013030000BA040000001000000004000000050000D90D0000FE020000B4040000000000000005000000050000DB0000006805000016050000000100000005000000050000AE0100005305000010050000000200000005000000050000810200003E0500000A0500000003000000050000000500005303000029050000040500000004000000050000000500002604000014050000FE040000000500000005000000050000000500000005000000050000000600000005000000050000CB050000EA040000F30400000007000000050000000500009E060000D5040000ED04000000080000000500000005000070070000C0040000E704000000090000000500000005000043080000AA040000E1040000000A000000050000000500001609000095040000DB040000000B00000005000000050000E809000080040000D5040000000C00000005000000050000BB0A00006B040000CF040000000D000000050000000500008E0B000056040000C9040000000E00000005000000050000600C000041040000C3040000000F00000005000000050000330D00002C040000BD040000001000000005000000050000060E000017040000B8040000000000000006000000050000050100008706000018050000000100000006000000050000D80100007206000012050000000200000006000000050000AB0200005C0600000C0500000003000000060000000500007E0300004706000006050000000400000006000000050000500400003106000001050000000500000006000000050000230500001C060000FB040000000600000006000000050000F605000006060000F5040000000700000006000000050000C9060000F1050000EF0400000008000000060000000500009C070000DB050000E90400000009000000060000000500006E080000C6050000E3040000000A0000000600000005000041090000B0050000DE040000000B00000006000000050000140A00009B050000D8040000000C00000006000000050000E70A000085050000D2040000000D00000006000000050000BA0B000070050000CC040000000E000000060000000500008C0C00005A050000C6040000000F000000060000000500005F0D000045050000C0040000001000000006000000050000320E00002F050000BB0400000000000000070000000500002F010000A60700001A050000000100000007000000050000020200009007000014050000000200000007000000050000D50200007A0700000E050000000300000007000000050000A803000064070000080500000004000000070000000500007B0400004E070000030500000005000000070000000500004E05000039070000FD0400000006000000070000000500002106000023070000F7040000000700000007000000050000F40600000D070000F1040000000800000007000000050000C7070000F7060000EC0400000009000000070000000500009A080000E1060000E6040000000A000000070000000500006D090000CB060000E0040000000B00000007000000050000400A0000B5060000DB040000000C00000007000000050000130B0000A0060000D5040000000D00000007000000050000E50B00008A060000CF040000000E00000007000000050000B80C000074060000C9040000000F000000070000000500008B0D00005E060000C40400000010000000070000000500005E0E000048060000BE04000000000000000800000005000059010000C50800001C0500000001000000080000000500002C020000AE08000016050000000200000008000000050000FF0200009808000010050000000300000008000000050000D2030000820800000B050000000400000008000000050000A50400006C080000050500000005000000080000000500007805000055080000FF0400000006000000080000000500004C0600003F080000FA0400000007000000080000000500001F07000029080000F4040000000800000008000000050000F207000013080000EE040000000900000008000000050000C5080000FD070000E9040000000A0000000800000005000098090000E6070000E3040000000B000000080000000500006B0A0000D0070000DD040000000C000000080000000500003E0B0000BA070000D8040000000D00000008000000050000110C0000A4070000D2040000000E00000008000000050000E40C00008D070000CC040000000F00000008000000050000B80D000077070000C70400000010000000080000000500008B0E000061070000C104000000000000000900000005000083010000E30900001D05000000010000000900000005000056020000CD0900001805000000020000000900000005000029030000B609000012050000000300000009000000050000FD0300009F0900000D050000000400000009000000050000D00400008909000007050000000500000009000000050000A30500007209000002050000000600000009000000050000760600005C090000FC0400000007000000090000000500004A07000045090000F60400000008000000090000000500001D0800002E090000F1040000000900000009000000050000F008000018090000EB040000000A00000009000000050000C409000001090000E6040000000B00000009000000050000970A0000EB080000E0040000000C000000090000000500006A0B0000D4080000DA040000000D000000090000000500003D0C0000BE080000D5040000000E00000009000000050000110D0000A7080000CF040000000F00000009000000050000E40D000090080000CA040000001000000009000000050000B70E00007A080000C404000000000000000A000000050000AD010000020B00001F05000000010000000A00000005000080020000EB0A00001A05000000020000000A00000005000054030000D40A00001405000000030000000A00000005000027040000BD0A00000F05000000040000000A000000050000FA040000A60A00000905000000050000000A000000050000CE0500008F0A00000405000000060000000A000000050000A1060000780A0000FE04000000070000000A00000005000075070000610A0000F904000000080000000A000000050000480800004A0A0000F304000000090000000A0000000500001C090000330A0000EE040000000A0000000A000000050000EF0900001C0A0000E8040000000B0000000A000000050000C20A0000050A0000E3040000000C0000000A000000050000960B0000EE090000DD040000000D0000000A000000050000690C0000D7090000D8040000000E0000000A0000000500003D0D0000C0090000D2040000000F0000000A000000050000100E0000A9090000CD04000000100000000A000000050000E30E000093090000C704000000000000000B000000050000D7010000210C00002105000000010000000B000000050000AA020000090C00001C05000000020000000B0000000500007E030000F20B00001605000000030000000B00000005000051040000DB0B00001105000000040000000B00000005000025050000C30B00000B05000000050000000B000000050000F9050000AC0B00000605000000060000000B000000050000CC060000950B00000105000000070000000B000000050000A00700007D0B0000FB04000000080000000B00000005000073080000660B0000F604000000090000000B000000050000470900004F0B0000F0040000000A0000000B0000000500001A0A0000370B0000EB040000000B0000000B000000050000EE0A0000200B0000E6040000000C0000000B000000050000C20B0000090B0000E0040000000D0000000B000000050000950C0000F10A0000DB040000000E0000000B000000050000690D0000DA0A0000D5040000000F0000000B0000000500003C0E0000C30A0000D004000000100000000B000000050000100F0000AB0A0000CA04000000000000000C000000050000010200003F0D00002305000000010000000C000000050000D4020000280D00001E05000000020000000C000000050000A8030000100D00001805000000030000000C0000000500007C040000F80C00001305000000040000000C0000000500004F050000E00C00000E05000000050000000C00000005000023060000C90C00000805000000060000000C000000050000F7060000B10C00000305000000070000000C000000050000CB070000990C0000FE04000000080000000C0000000500009E080000820C0000F804000000090000000C000000050000720900006A0C0000F3040000000A0000000C000000050000460A0000520C0000EE040000000B0000000C0000000500001A0B00003B0C0000E8040000000C0000000C000000050000ED0B0000230C0000E3040000000D0000000C000000050000C10C00000B0C0000DE040000000E0000000C000000050000950D0000F30B0000D8040000000F0000000C000000050000690E0000DC0B0000D304000000100000000C0000000500003C0F0000C40B0000CE04000000000000000D0000000500002A0200005E0E00002505000000010000000D000000050000FE020000460E00002005000000020000000D000000050000D20300002E0E00001A05000000030000000D000000050000A6040000160E00001505000000040000000D0000000500007A050000FE0D00001005000000050000000D0000000500004E060000E60D00000B05000000060000000D00000005000022070000CE0D00000505000000070000000D000000050000F6070000B50D00000005000000080000000D000000050000CA0800009D0D0000FB04000000090000000D0000000500009D090000850D0000F6040000000A0000000D000000050000710A00006D0D0000F0040000000B0000000D000000050000450B0000550D0000EB040000000C0000000D000000050000190C00003D0D0000E6040000000D0000000D000000050000ED0C0000250D0000E0040000000E0000000D000000050000C10D00000D0D0000DB040000000F0000000D000000050000950E0000F50C0000D604000000100000000D000000050000690F0000DD0C0000D104000000000000000E000000050000540200007D0F00002705000000010000000E00000005000028030000640F00002205000000020000000E000000050000FC0300004C0F00001C05000000030000000E000000050000D0040000330F00001705000000040000000E000000050000A50500001B0F00001205000000050000000E00000005000079060000020F00000D05000000060000000E0000000500004D070000EA0E00000805000000070000000E00000005000021080000D20E00000205000000080000000E000000050000F5080000B90E0000FD04000000090000000E000000050000C9090000A10E0000F8040000000A0000000E0000000500009D0A0000880E0000F3040000000B0000000E000000050000710B0000700E0000EE040000000C0000000E000000050000450C0000570E0000E9040000000D0000000E000000050000190D00003F0E0000E3040000000E0000000E000000050000ED0D0000270E0000DE040000000F0000000E000000050000C10E00000E0E0000D904000000100000000E000000050000950F0000F60D0000D404000000000000000F0000000500007E020000FF0F00002905000000010000000F00000005000052030000FF0F00002405000000020000000F00000005000027040000FF0F00001E05000000030000000F000000050000FB040000FF0F00001905000000040000000F000000050000CF050000FF0F00001405000000050000000F000000050000A3060000FF0F00000F05000000060000000F00000005000077070000FF0F00000A05000000070000000F0000000500004C080000EE0F00000505000000080000000F00000005000020090000D50F00000005000000090000000F000000050000F4090000BC0F0000FB040000000A0000000F000000050000C80A0000A30F0000F6040000000B0000000F0000000500009C0B00008A0F0000F1040000000C0000000F000000050000710C0000720F0000EB040000000D0000000F000000050000450D0000590F0000E6040000000E0000000F000000050000190E0000400F0000E1040000000F0000000F000000050000ED0E0000270F0000DC04000000100000000F000000050000C10F00000E0F0000D7040000000000000010000000050000A8020000FF0F00002B0500000001000000100000000500007D030000FF0F00002505000000020000001000000005000051040000FF0F00002005000000030000001000000005000025050000FF0F00001B050000000400000010000000050000FA050000FF0F000016050000000500000010000000050000CE060000FF0F000011050000000600000010000000050000A2070000FF0F00000C05000000070000001000000005000077080000FF0F0000070500000008000000100000000500004B090000FF0F0000020500000009000000100000000500001F0A0000FF0F0000FD040000000A00000010000000050000F40A0000FF0F0000F8040000000B00000010000000050000C80B0000FF0F0000F3040000000C000000100000000500009C0C0000FF0F0000EE040000000D00000010000000050000710D0000FF0F0000E9040000000E00000010000000050000450E0000FF0F0000E4040000000F00000010000000050000190F0000FF0F0000DF040000001000000010000000050000EE0F0000FF0F0000DA0400000000000000000000000600000C0000000000000010060000000100000000000000060000DE0000000000000009060000000200000000000000060000B001000000000000030600000003000000000000000600008202000000000000FD0500000004000000000000000600005403000000000000F70500000005000000000000000600002704000000000000F1050000000600000000000000060000F904000000000000EB050000000700000000000000060000CB05000000000000E50500000008000000000000000600009D06000000000000DE0500000009000000000000000600006F07000000000000D8050000000A000000000000000600004108000000000000D2050000000B000000000000000600001409000000000000CC050000000C00000000000000060000E609000000000000C6050000000D00000000000000060000B80A000000000000C0050000000E000000000000000600008A0B000000000000BA050000000F000000000000000600005C0C000000000000B40500000010000000000000000600002E0D000000000000AD05000000000000000100000006000036000000E50000001206000000010000000100000006000008010000D10000000C060000000200000001000000060000DA010000BE00000005060000000300000001000000060000AD020000AB000000FF0500000004000000010000000600007F03000097000000F90500000005000000010000000600005104000084000000F30500000006000000010000000600002405000071000000ED050000000700000001000000060000F60500005E000000E7050000000800000001000000060000C80600004A000000E10500000009000000010000000600009A07000037000000DB050000000A000000010000000600006D08000024000000D5050000000B000000010000000600003F09000010000000CF050000000C00000001000000060000110A000000000000C9050000000D00000001000000060000E40A000000000000C3050000000E00000001000000060000B60B000000000000BD050000000F00000001000000060000880C000000000000B60500000010000000010000000600005A0D000000000000B005000000000000000200000006000060000000030200001406000000010000000200000006000032010000F00100000E06000000020000000200000006000005020000DC01000008060000000300000002000000060000D7020000C801000002060000000400000002000000060000A9030000B5010000FC0500000005000000020000000600007C040000A1010000F60500000006000000020000000600004E0500008D010000F0050000000700000002000000060000210600007A010000EA050000000800000002000000060000F306000066010000E3050000000900000002000000060000C607000052010000DD050000000A00000002000000060000980800003F010000D7050000000B000000020000000600006A0900002B010000D1050000000C000000020000000600003D0A000017010000CB050000000D000000020000000600000F0B000004010000C5050000000E00000002000000060000E20B0000F0000000BF050000000F00000002000000060000B40C0000DC000000B9050000001000000002000000060000860D0000C9000000B30500000000000000030000000600008A00000022030000160600000001000000030000000600005C0100000E030000100600000002000000030000000600002F020000FA0200000A06000000030000000300000006000001030000E602000004060000000400000003000000060000D4030000D2020000FE050000000500000003000000060000A6040000BE020000F805000000060000000300000006000079050000AA020000F20500000007000000030000000600004C06000096020000EC0500000008000000030000000600001E07000082020000E6050000000900000003000000060000F10700006E020000E0050000000A00000003000000060000C30800005A020000DA050000000B000000030000000600009609000046020000D4050000000C00000003000000060000680A000032020000CE050000000D000000030000000600003B0B00001E020000C8050000000E000000030000000600000D0C000009020000C2050000000F00000003000000060000E00C0000F5010000BC050000001000000003000000060000B30D0000E1010000B6050000000000000004000000060000B40000004104000018060000000100000004000000060000860100002C0400001206000000020000000400000006000059020000180400000C0600000003000000040000000600002C0300000404000006060000000400000004000000060000FE030000EF03000000060000000500000004000000060000D1040000DB030000FA050000000600000004000000060000A4050000C6030000F405000000070000000400000006000076060000B2030000EE050000000800000004000000060000490700009D030000E90500000009000000040000000600001C08000089030000E3050000000A00000004000000060000EE08000075030000DD050000000B00000004000000060000C109000060030000D7050000000C00000004000000060000940A00004C030000D1050000000D00000004000000060000670B000037030000CB050000000E00000004000000060000390C000023030000C5050000000F000000040000000600000C0D00000F030000BF050000001000000004000000060000DF0D0000FA020000B9050000000000000005000000060000DE000000600500001A060000000100000005000000060000B00100004B0500001406000000020000000500000006000083020000360500000E060000000300000005000000060000560300002105000008060000000400000005000000060000290400000C05000002060000000500000005000000060000FC040000F8040000FD050000000600000005000000060000CF050000E3040000F7050000000700000005000000060000A1060000CE040000F105000000080000000500000006000074070000B9040000EB05000000090000000500000006000047080000A4040000E5050000000A000000050000000600001A09000090040000DF050000000B00000005000000060000ED0900007B040000DA050000000C00000005000000060000BF0A000066040000D4050000000D00000005000000060000920B000051040000CE050000000E00000005000000060000650C00003C040000C8050000000F00000005000000060000380D000028040000C20500000010000000050000000600000B0E000013040000BC050000000000000006000000060000080100007E0600001C060000000100000006000000060000DB0100006906000016060000000200000006000000060000AE0200005406000010060000000300000006000000060000800300003F0600000A060000000400000006000000060000530400002A060000050600000005000000060000000600002605000014060000FF050000000600000006000000060000000600000006000000060000000700000006000000060000CC060000EA050000F30500000008000000060000000600009F070000D5050000EE05000000090000000600000006000072080000C0050000E8050000000A0000000600000006000045090000AB050000E2050000000B00000006000000060000180A000095050000DC050000000C00000006000000060000EB0A000080050000D6050000000D00000006000000060000BE0B00006B050000D1050000000E00000006000000060000910C000056050000CB050000000F00000006000000060000640D000041050000C5050000001000000006000000060000370E00002C050000BF050000000000000007000000060000320100009D0700001E060000000100000007000000060000050200008707000018060000000200000007000000060000D80200007207000012060000000300000007000000060000AB0300005C0700000D0600000004000000070000000600007E0400004707000007060000000500000007000000060000510500003107000001060000000600000007000000060000240600001C070000FB050000000700000007000000060000F706000006070000F6050000000800000007000000060000CA070000F1060000F00500000009000000070000000600009D080000DB060000EA050000000A0000000700000006000070090000C6060000E5050000000B00000007000000060000430A0000B0060000DF050000000C00000007000000060000160B00009B060000D9050000000D00000007000000060000EA0B000085060000D3050000000E00000007000000060000BD0C00006F060000CE050000000F00000007000000060000900D00005A060000C8050000001000000007000000060000630E000044060000C20500000000000000080000000600005C010000BC080000200600000001000000080000000600002F020000A60800001A060000000200000008000000060000020300009008000014060000000300000008000000060000D50300007A0800000F060000000400000008000000060000A804000064080000090600000005000000080000000600007C0500004E080000030600000006000000080000000600004F06000038080000FE0500000007000000080000000600002207000022080000F8050000000800000008000000060000F50700000C080000F3050000000900000008000000060000C8080000F7070000ED050000000A000000080000000600009C090000E1070000E7050000000B000000080000000600006F0A0000CB070000E2050000000C00000008000000060000420B0000B5070000DC050000000D00000008000000060000150C00009F070000D6050000000E00000008000000060000E80C000089070000D1050000000F00000008000000060000BC0D000073070000CB0500000010000000080000000600008F0E00005D070000C505000000000000000900000006000086010000DA0900002206000000010000000900000006000059020000C40900001C0600000002000000090000000600002C030000AE09000017060000000300000009000000060000000400009809000011060000000400000009000000060000D3040000810900000B060000000500000009000000060000A60500006B090000060600000006000000090000000600007A06000055090000000600000007000000090000000600004D0700003E090000FB0500000008000000090000000600002008000028090000F5050000000900000009000000060000F408000012090000EF050000000A00000009000000060000C7090000FC080000EA050000000B000000090000000600009A0A0000E5080000E4050000000C000000090000000600006D0B0000CF080000DF050000000D00000009000000060000410C0000B9080000D9050000000E00000009000000060000140D0000A3080000D3050000000F00000009000000060000E70D00008C080000CE050000001000000009000000060000BB0E000076080000C805000000000000000A000000060000B0010000F90A00002406000000010000000A00000006000083020000E20A00001E06000000020000000A00000006000056030000CC0A00001906000000030000000A0000000600002A040000B50A00001306000000040000000A000000060000FD0400009F0A00000E06000000050000000A000000060000D1050000880A00000806000000060000000A000000060000A4060000710A00000306000000070000000A000000060000780700005B0A0000FD05000000080000000A0000000600004B080000440A0000F805000000090000000A0000000600001F0900002D0A0000F2050000000A0000000A000000060000F2090000170A0000EC050000000B0000000A000000060000C60A0000000A0000E7050000000C0000000A000000060000990B0000E9090000E1050000000D0000000A0000000600006C0C0000D3090000DC050000000E0000000A000000060000400D0000BC090000D6050000000F0000000A000000060000130E0000A5090000D105000000100000000A000000060000E70E00008F090000CB05000000000000000B000000060000DA010000180C00002606000000010000000B000000060000AD020000010C00002006000000020000000B00000006000081030000EA0B00001B06000000030000000B00000006000054040000D30B00001506000000040000000B00000006000028050000BC0B00001006000000050000000B000000060000FB050000A50B00000A06000000060000000B000000060000CF0600008E0B00000506000000070000000B000000060000A3070000770B00000006000000080000000B00000006000076080000600B0000FA05000000090000000B0000000600004A090000490B0000F5050000000A0000000B0000000600001D0A0000320B0000EF050000000B0000000B000000060000F10A00001B0B0000EA050000000C0000000B000000060000C50B0000040B0000E4050000000D0000000B000000060000980C0000ED0A0000DF050000000E0000000B0000000600006C0D0000D60A0000D9050000000F0000000B0000000600003F0E0000BE0A0000D405000000100000000B000000060000130F0000A70A0000CE05000000000000000C00000006000004020000370D00002806000000010000000C000000060000D70200001F0D00002206000000020000000C000000060000AB030000080D00001D06000000030000000C0000000600007F040000F00C00001806000000040000000C00000006000052050000D90C00001206000000050000000C00000006000026060000C20C00000D06000000060000000C000000060000FA060000AA0C00000706000000070000000C000000060000CE070000930C00000206000000080000000C000000060000A10800007B0C0000FD05000000090000000C00000006000075090000640C0000F7050000000A0000000C000000060000490A00004D0C0000F2050000000B0000000C0000000600001C0B0000350C0000EC050000000C0000000C000000060000F00B00001E0C0000E7050000000D0000000C000000060000C40C0000060C0000E1050000000E0000000C000000060000980D0000EF0B0000DC050000000F0000000C0000000600006B0E0000D80B0000D705000000100000000C0000000600003F0F0000C00B0000D105000000000000000D0000000600002E020000550E00002A06000000010000000D000000060000010300003E0E00002506000000020000000D000000060000D5030000260E00001F06000000030000000D000000060000A90400000E0E00001A06000000040000000D0000000600007D050000F60D00001406000000050000000D00000006000051060000DE0D00000F06000000060000000D00000006000025070000C70D00000A06000000070000000D000000060000F8070000AF0D00000406000000080000000D000000060000CC080000970D0000FF05000000090000000D000000060000A00900007F0D0000FA050000000A0000000D000000060000740A0000680D0000F4050000000B0000000D000000060000480B0000500D0000EF050000000C0000000D0000000600001C0C0000380D0000EA050000000D0000000D000000060000EF0C0000200D0000E4050000000E0000000D000000060000C30D0000090D0000DF050000000F0000000D000000060000970E0000F10C0000DA05000000100000000D0000000600006B0F0000D90C0000D405000000000000000E00000006000058020000740F00002C06000000010000000E0000000600002B0300005C0F00002706000000020000000E000000060000FF030000440F00002106000000030000000E000000060000D30400002C0F00001C06000000040000000E000000060000A7050000130F00001706000000050000000E0000000600007B060000FB0E00001106000000060000000E0000000600004F070000E30E00000C06000000070000000E00000006000023080000CB0E00000706000000080000000E000000060000F7080000B30E00000206000000090000000E000000060000CB0900009B0E0000FC050000000A0000000E0000000600009F0A0000830E0000F7050000000B0000000E000000060000730B00006A0E0000F2050000000C0000000E000000060000470C0000520E0000EC050000000D0000000E0000000600001B0D00003A0E0000E7050000000E0000000E000000060000EF0D0000220E0000E2050000000F0000000E000000060000C30E00000A0E0000DD05000000100000000E000000060000970F0000F20D0000D705000000000000000F00000006000081020000FF0F00002E06000000010000000F00000006000056030000FF0F00002906000000020000000F0000000600002A040000FF0F00002306000000030000000F000000060000FE040000FF0F00001E06000000040000000F000000060000D2050000FF0F00001906000000050000000F000000060000A6060000FF0F00001406000000060000000F0000000600007A070000FF0F00000F06000000070000000F0000000600004E080000E70F00000906000000080000000F00000006000022090000CF0F00000406000000090000000F000000060000F6090000B60F0000FF050000000A0000000F000000060000CA0A00009E0F0000FA050000000B0000000F0000000600009F0B0000850F0000F4050000000C0000000F000000060000730C00006D0F0000EF050000000D0000000F000000060000470D0000540F0000EA050000000E0000000F0000000600001B0E00003C0F0000E5050000000F0000000F000000060000EF0E0000230F0000DF05000000100000000F000000060000C30F00000B0F0000DA050000000000000010000000060000AB020000FF0F00003006000000010000001000000006000080030000FF0F00002B06000000020000001000000006000054040000FF0F00002606000000030000001000000006000028050000FF0F000020060000000400000010000000060000FC050000FF0F00001B060000000500000010000000060000D1060000FF0F000016060000000600000010000000060000A5070000FF0F00001106000000070000001000000006000079080000FF0F00000C0600000008000000100000000600004D090000FF0F000007060000000900000010000000060000220A0000FF0F000001060000000A00000010000000060000F60A0000FF0F0000FC050000000B00000010000000060000CA0B0000FF0F0000F7050000000C000000100000000600009E0C0000FF0F0000F2050000000D00000010000000060000720D0000FF0F0000ED050000000E00000010000000060000470E0000FF0F0000E8050000000F000000100000000600001B0F0000FF0F0000E2050000001000000010000000060000EF0F0000FF0F0000DD0500000000000000000000000700000E0000000000000013070000000100000000000000070000E0000000000000000D070000000200000000000000070000B301000000000000070700000003000000000000000700008502000000000000010700000004000000000000000700005803000000000000FB0600000005000000000000000700002A04000000000000F5060000000600000000000000070000FD04000000000000EF060000000700000000000000070000CF05000000000000E9060000000800000000000000070000A106000000000000E30600000009000000000000000700007407000000000000DD060000000A000000000000000700004608000000000000D7060000000B000000000000000700001909000000000000D1060000000C00000000000000070000EB09000000000000CB060000000D00000000000000070000BE0A000000000000C5060000000E00000000000000070000900B000000000000BF060000000F00000000000000070000630C000000000000B9060000001000000000000000070000350D000000000000B306000000000000000100000007000038000000DC000000150700000001000000010000000700000A010000C90000000F070000000200000001000000070000DD010000B600000009070000000300000001000000070000B0020000A3000000030700000004000000010000000700008203000090000000FD060000000500000001000000070000550400007D000000F7060000000600000001000000070000270500006A000000F1060000000700000001000000070000FA05000057000000EB060000000800000001000000070000CC06000044000000E50600000009000000010000000700009F07000031000000DF060000000A00000001000000070000710800001E000000D9060000000B00000001000000070000440900000B000000D3060000000C00000001000000070000170A000000000000CE060000000D00000001000000070000E90A000000000000C8060000000E00000001000000070000BC0B000000000000C2060000000F000000010000000700008E0C000000000000BC060000001000000001000000070000610D000000000000B606000000000000000200000007000062000000FB0100001707000000010000000200000007000035010000E70100001107000000020000000200000007000007020000D40100000B070000000300000002000000070000DA020000C001000005070000000400000002000000070000AD030000AD010000FF0600000005000000020000000700007F0400009A010000F90600000006000000020000000700005205000086010000F40600000007000000020000000700002506000073010000EE060000000800000002000000070000F706000060010000E8060000000900000002000000070000CA0700004C010000E2060000000A000000020000000700009D08000039010000DC060000000B000000020000000700006F09000026010000D6060000000C00000002000000070000420A000012010000D0060000000D00000002000000070000150B0000FF000000CA060000000E00000002000000070000E70B0000EC000000C4060000000F00000002000000070000BA0C0000D8000000BF0600000010000000020000000700008D0D0000C5000000B90600000000000000030000000700008C00000019030000190700000001000000030000000700005F010000060300001307000000020000000300000007000032020000F20200000D07000000030000000300000007000004030000DE02000008070000000400000003000000070000D7030000CA02000002070000000500000003000000070000AA040000B7020000FC0600000006000000030000000700007D050000A3020000F60600000007000000030000000700004F0600008F020000F0060000000800000003000000070000220700007B020000EA060000000900000003000000070000F507000068020000E4060000000A00000003000000070000C808000054020000DF060000000B000000030000000700009A09000040020000D9060000000C000000030000000700006D0A00002D020000D3060000000D00000003000000070000400B000019020000CD060000000E00000003000000070000130C000005020000C7060000000F00000003000000070000E50C0000F1010000C1060000001000000003000000070000B80D0000DE010000BB060000000000000004000000070000B6000000380400001B0700000001000000040000000700008901000024040000150700000002000000040000000700005C02000010040000100700000003000000040000000700002F030000FC0300000A07000000040000000400000007000002040000E803000004070000000500000004000000070000D4040000D3030000FE060000000600000004000000070000A7050000BF030000F80600000007000000040000000700007A060000AB030000F30600000008000000040000000700004D07000097030000ED0600000009000000040000000700002008000083030000E7060000000A00000004000000070000F30800006F030000E1060000000B00000004000000070000C60900005B030000DB060000000C00000004000000070000980A000047030000D6060000000D000000040000000700006B0B000033030000D0060000000E000000040000000700003E0C00001F030000CA060000000F00000004000000070000110D00000B030000C4060000001000000004000000070000E40D0000F6020000BE060000000000000005000000070000E0000000570500001D070000000100000005000000070000B30100004205000018070000000200000005000000070000860200002E0500001207000000030000000500000007000059030000190500000C0700000004000000050000000700002C0400000505000006070000000500000005000000070000FF040000F004000001070000000600000005000000070000D2050000DC040000FB060000000700000005000000070000A5060000C7040000F506000000080000000500000007000078070000B3040000EF0600000009000000050000000700004B0800009E040000EA060000000A000000050000000700001E0900008A040000E4060000000B00000005000000070000F109000076040000DE060000000C00000005000000070000C40A000061040000D8060000000D00000005000000070000970B00004D040000D2060000000E000000050000000700006A0C000038040000CD060000000F000000050000000700003D0D000024040000C7060000001000000005000000070000100E00000F040000C10600000000000000060000000700000A0100007506000020070000000100000006000000070000DD010000610600001A070000000200000006000000070000B00200004C0600001407000000030000000600000007000083030000370600000E0700000004000000060000000700005604000022060000090700000005000000060000000700002A0500000D06000003070000000600000006000000070000FD050000F8050000FD060000000700000006000000070000D0060000E4050000F8060000000800000006000000070000A3070000CF050000F206000000090000000600000007000076080000BA050000EC060000000A0000000600000007000049090000A5050000E6060000000B000000060000000700001C0A000090050000E1060000000C00000006000000070000EF0A00007B050000DB060000000D00000006000000070000C20B000066050000D5060000000E00000006000000070000950C000052050000CF060000000F00000006000000070000680D00003D050000CA0600000010000000060000000700003B0E000028050000C4060000000000000007000000070000340100009407000022070000000100000007000000070000070200007F0700001C070000000200000007000000070000DB0200006A07000016070000000300000007000000070000AE0300005507000011070000000400000007000000070000810400003F0700000B070000000500000007000000070000540500002A07000005070000000600000007000000070000270600001507000000070000000700000007000000070000000700000007000000070000000800000007000000070000CE070000EA060000F4060000000900000007000000070000A1080000D5060000EF060000000A0000000700000007000074090000C0060000E9060000000B00000007000000070000470A0000AB060000E3060000000C000000070000000700001A0B000096060000DE060000000D00000007000000070000EE0B000080060000D8060000000E00000007000000070000C10C00006B060000D2060000000F00000007000000070000940D000056060000CC060000001000000007000000070000670E000041060000C70600000000000000080000000700005E010000B308000024070000000100000008000000070000320200009D0800001E070000000200000008000000070000050300008808000019070000000300000008000000070000D80300007208000013070000000400000008000000070000AB0400005D0800000D0700000005000000080000000700007F0500004708000008070000000600000008000000070000520600003108000002070000000700000008000000070000250700001C080000FC060000000800000008000000070000F907000006080000F7060000000900000008000000070000CC080000F1070000F1060000000A000000080000000700009F090000DB070000EC060000000B00000008000000070000720A0000C5070000E6060000000C00000008000000070000460B0000B0070000E0060000000D00000008000000070000190C00009A070000DB060000000E00000008000000070000EC0C000085070000D5060000000F00000008000000070000BF0D00006F070000CF060000001000000008000000070000930E000059070000CA06000000000000000900000007000088010000D2090000260700000001000000090000000700005C020000BC090000210700000002000000090000000700002F030000A60900001B070000000300000009000000070000020400009009000015070000000400000009000000070000D60400007A09000010070000000500000009000000070000A9050000640900000A0700000006000000090000000700007D0600004E090000050700000007000000090000000700005007000038090000FF0600000008000000090000000700002308000022090000F9060000000900000009000000070000F70800000C090000F4060000000A00000009000000070000CA090000F6080000EE060000000B000000090000000700009E0A0000E0080000E8060000000C00000009000000070000710B0000CA080000E3060000000D00000009000000070000440C0000B4080000DD060000000E00000009000000070000180D00009E080000D8060000000F00000009000000070000EB0D000088080000D2060000001000000009000000070000BE0E000072080000CC06000000000000000A000000070000B2010000F00A00002807000000010000000A00000007000086020000DA0A00002307000000020000000A00000007000059030000C40A00001D07000000030000000A0000000700002D040000AD0A00001807000000040000000A00000007000000050000970A00001207000000050000000A000000070000D4050000810A00000D07000000060000000A000000070000A70600006A0A00000707000000070000000A0000000700007B070000540A00000107000000080000000A0000000700004E0800003E0A0000FC06000000090000000A00000007000022090000270A0000F6060000000A0000000A000000070000F5090000110A0000F1060000000B0000000A000000070000C90A0000FB090000EB060000000C0000000A0000000700009C0B0000E4090000E6060000000D0000000A000000070000700C0000CE090000E0060000000E0000000A000000070000430D0000B8090000DA060000000F0000000A000000070000170E0000A1090000D506000000100000000A000000070000EA0E00008B090000CF06000000000000000B000000070000DC0100000F0C00002B07000000010000000B000000070000B0020000F80B00002507000000020000000B00000007000084030000E20B00001F07000000030000000B00000007000057040000CB0B00001A07000000040000000B0000000700002B050000B40B00001407000000050000000B000000070000FE0500009E0B00000F07000000060000000B000000070000D2060000870B00000907000000070000000B000000070000A6070000700B00000407000000080000000B00000007000079080000590B0000FE06000000090000000B0000000700004D090000430B0000F9060000000A0000000B000000070000200A00002C0B0000F3060000000B0000000B000000070000F40A0000150B0000EE060000000C0000000B000000070000C80B0000FF0A0000E8060000000D0000000B0000000700009B0C0000E80A0000E3060000000E0000000B0000000700006F0D0000D10A0000DD060000000F0000000B000000070000420E0000BA0A0000D806000000100000000B000000070000160F0000A40A0000D206000000000000000C000000070000070200002E0D00002D07000000010000000C000000070000DA020000170D00002707000000020000000C000000070000AE030000000D00002207000000030000000C00000007000082040000E90C00001C07000000040000000C00000007000055050000D10C00001707000000050000000C00000007000029060000BA0C00001107000000060000000C000000070000FD060000A30C00000C07000000070000000C000000070000D00700008C0C00000607000000080000000C000000070000A4080000750C00000107000000090000000C000000070000780900005E0C0000FB060000000A0000000C0000000700004B0A0000470C0000F6060000000B0000000C0000000700001F0B0000300C0000F0060000000C0000000C000000070000F30B0000190C0000EB060000000D0000000C000000070000C70C0000020C0000E5060000000E0000000C0000000700009A0D0000EB0B0000E0060000000F0000000C0000000700006E0E0000D30B0000DA06000000100000000C000000070000420F0000BC0B0000D506000000000000000D000000070000310200004D0E00002F07000000010000000D00000007000004030000350E00002907000000020000000D000000070000D80300001E0E00002407000000030000000D000000070000AC040000060E00001F07000000040000000D00000007000080050000EF0D00001907000000050000000D00000007000054060000D70D00001407000000060000000D00000007000027070000C00D00000E07000000070000000D000000070000FB070000A80D00000907000000080000000D000000070000CF080000910D00000307000000090000000D000000070000A3090000790D0000FE060000000A0000000D000000070000770A0000620D0000F8060000000B0000000D0000000700004A0B00004A0D0000F3060000000C0000000D0000000700001E0C0000330D0000EE060000000D0000000D000000070000F20C00001C0D0000E8060000000E0000000D000000070000C60D0000040D0000E3060000000F0000000D000000070000990E0000ED0C0000DD06000000100000000D0000000700006D0F0000D50C0000D806000000000000000E0000000700005B0200006B0F00003107000000010000000E0000000700002F030000530F00002C07000000020000000E000000070000020400003C0F00002607000000030000000E000000070000D6040000240F00002107000000040000000E000000070000AA0500000C0F00001B07000000050000000E0000000700007E060000F40E00001607000000060000000E00000007000052070000DC0E00001107000000070000000E00000007000026080000C40E00000B07000000080000000E000000070000FA080000AD0E00000607000000090000000E000000070000CE090000950E000000070000000A0000000E000000070000A20A00007D0E0000FB060000000B0000000E000000070000760B0000650E0000F6060000000C0000000E000000070000490C00004D0E0000F0060000000D0000000E0000000700001D0D0000350E0000EB060000000E0000000E000000070000F10D00001E0E0000E5060000000F0000000E000000070000C50E0000060E0000E006000000100000000E000000070000990F0000EE0D0000DB06000000000000000F00000007000085020000FF0F00003307000000010000000F00000007000059030000FF0F00002E07000000020000000F0000000700002D040000FF0F00002907000000030000000F00000007000001050000FF0F00002307000000040000000F000000070000D5050000FF0F00001E07000000050000000F000000070000A9060000FF0F00001807000000060000000F0000000700007D070000F90F00001307000000070000000F00000007000051080000E10F00000E07000000080000000F00000007000025090000C80F00000807000000090000000F000000070000F9090000B00F000003070000000A0000000F000000070000CD0A0000980F0000FE060000000B0000000F000000070000A10B0000800F0000F8060000000C0000000F000000070000750C0000670F0000F3060000000D0000000F000000070000490D00004F0F0000EE060000000E0000000F0000000700001D0E0000370F0000E8060000000F0000000F000000070000F10E00001F0F0000E306000000100000000F000000070000C50F0000070F0000DD060000000000000010000000070000AF020000FF0F00003507000000010000001000000007000083030000FF0F00003007000000020000001000000007000057040000FF0F00002B0700000003000000100000000700002B050000FF0F000025070000000400000010000000070000FF050000FF0F000020070000000500000010000000070000D3060000FF0F00001B070000000600000010000000070000A7070000FF0F0000150700000007000000100000000700007B080000FF0F00001007000000080000001000000007000050090000FF0F00000B070000000900000010000000070000240A0000FF0F000006070000000A00000010000000070000F80A0000FF0F000000070000000B00000010000000070000CC0B0000FF0F0000FB060000000C00000010000000070000A00C0000FF0F0000F6060000000D00000010000000070000740D0000FF0F0000F0060000000E00000010000000070000480E0000FF0F0000EB060000000F000000100000000700001C0F0000FF0F0000E6060000001000000010000000070000F00F0000FF0F0000E0060000000000000000000000080000100000000000000015080000000100000000000000080000E30000000000000010080000000200000000000000080000B5010000000000000A0800000003000000000000000800008802000000000000040800000004000000000000000800005B03000000000000FE0700000005000000000000000800002E04000000000000F80700000006000000000000000800000005000000000000F3070000000700000000000000080000D305000000000000ED070000000800000000000000080000A606000000000000E70700000009000000000000000800007907000000000000E1070000000A000000000000000800004B08000000000000DB070000000B000000000000000800001E09000000000000D6070000000C00000000000000080000F109000000000000D0070000000D00000000000000080000C40A000000000000CA070000000E00000000000000080000960B000000000000C4070000000F00000000000000080000690C000000000000BE0700000010000000000000000800003C0D000000000000B90700000000000000010000000800003A000000D3000000180800000001000000010000000800000D010000C000000012080000000200000001000000080000E0010000AE0000000C080000000300000001000000080000B20200009B000000060800000004000000010000000800008503000088000000010800000005000000010000000800005804000076000000FB0700000006000000010000000800002B05000063000000F5070000000700000001000000080000FE05000050000000EF070000000800000001000000080000D10600003E000000EA070000000900000001000000080000A30700002B000000E4070000000A000000010000000800007608000018000000DE070000000B000000010000000800004909000006000000D8070000000C000000010000000800001C0A000000000000D2070000000D00000001000000080000EF0A000000000000CD070000000E00000001000000080000C20B000000000000C7070000000F00000001000000080000940C000000000000C1070000001000000001000000080000670D000000000000BB07000000000000000200000008000064000000F20100001A08000000010000000200000008000037010000DF010000140800000002000000020000000800000A020000CC0100000F080000000300000002000000080000DD020000B901000009080000000400000002000000080000B0030000A6010000030800000005000000020000000800008304000092010000FD070000000600000002000000080000560500007F010000F8070000000700000002000000080000280600006C010000F2070000000800000002000000080000FB06000059010000EC070000000900000002000000080000CE07000046010000E6070000000A00000002000000080000A108000033010000E1070000000B000000020000000800007409000020010000DB070000000C00000002000000080000470A00000D010000D5070000000D000000020000000800001A0B0000FA000000CF070000000E00000002000000080000ED0B0000E7000000C9070000000F00000002000000080000C00C0000D4000000C4070000001000000002000000080000930D0000C1000000BE0700000000000000030000000800008E000000100300001C08000000010000000300000008000061010000FD0200001708000000020000000300000008000034020000EA0200001108000000030000000300000008000007030000D60200000B080000000400000003000000080000DA030000C302000006080000000500000003000000080000AD040000AF02000000080000000600000003000000080000800500009C020000FA0700000007000000030000000800005306000089020000F40700000008000000030000000800002607000075020000EF070000000900000003000000080000F907000062020000E9070000000A00000003000000080000CC0800004E020000E3070000000B000000030000000800009F0900003B020000DD070000000C00000003000000080000720A000028020000D8070000000D00000003000000080000450B000014020000D2070000000E00000003000000080000180C000001020000CC070000000F00000003000000080000EB0C0000ED010000C6070000001000000003000000080000BE0D0000DA010000C1070000000000000004000000080000B80000002F0400001F0800000001000000040000000800008B0100001B040000190800000002000000040000000800005F020000080400001308000000030000000400000008000032030000F40300000E08000000040000000400000008000005040000E003000008080000000500000004000000080000D8040000CC03000002080000000600000004000000080000AB050000B8030000FC0700000007000000040000000800007E060000A5030000F70700000008000000040000000800005107000091030000F1070000000900000004000000080000240800007D030000EB070000000A00000004000000080000F708000069030000E6070000000B00000004000000080000CA09000056030000E0070000000C000000040000000800009D0A000042030000DA070000000D00000004000000080000700B00002E030000D4070000000E00000004000000080000430C00001A030000CF070000000F00000004000000080000160D000007030000C9070000001000000004000000080000E90D0000F3020000C3070000000000000005000000080000E30000004E05000021080000000100000005000000080000B60100003A0500001B0800000002000000050000000800008902000026050000160800000003000000050000000800005C03000011050000100800000004000000050000000800002F040000FD0400000A08000000050000000500000008000002050000E904000005080000000600000005000000080000D5050000D5040000FF070000000700000005000000080000A8060000C1040000F90700000008000000050000000800007C070000AD040000F40700000009000000050000000800004F08000099040000EE070000000A000000050000000800002209000084040000E8070000000B00000005000000080000F509000070040000E2070000000C00000005000000080000C80A00005C040000DD070000000D000000050000000800009B0B000048040000D7070000000E000000050000000800006E0C000034040000D1070000000F00000005000000080000420D000020040000CC070000001000000005000000080000150E00000B040000C60700000000000000060000000800000D0100006D06000023080000000100000006000000080000E0010000580600001E080000000200000006000000080000B30200004406000018080000000300000006000000080000860300002F060000120800000004000000060000000800005A0400001A0600000D0800000005000000060000000800002D050000060600000708000000060000000600000008000000060000F105000001080000000700000006000000080000D3060000DD050000FC070000000800000006000000080000A6070000C8050000F60700000009000000060000000800007A080000B4050000F0070000000A000000060000000800004D0900009F050000EB070000000B00000006000000080000200A00008B050000E5070000000C00000006000000080000F30A000076050000DF070000000D00000006000000080000C60B000062050000DA070000000E000000060000000800009A0C00004D050000D4070000000F000000060000000800006D0D000039050000CE070000001000000006000000080000400E000024050000C9070000000000000007000000080000370100008B070000260800000001000000070000000800000A0200007607000020080000000200000007000000080000DD020000620700001B080000000300000007000000080000B10300004D0700001508000000040000000700000008000084040000380700000F08000000050000000700000008000057050000230700000A0800000006000000070000000800002B0600000E07000004080000000700000007000000080000FE060000F9060000FE070000000800000007000000080000D1070000E4060000F9070000000900000007000000080000A4080000CF060000F3070000000A0000000700000008000078090000BA060000ED070000000B000000070000000800004B0A0000A5060000E8070000000C000000070000000800001E0B000091060000E2070000000D00000007000000080000F20B00007C060000DC070000000E00000007000000080000C50C000067060000D7070000000F00000007000000080000980D000052060000D10700000010000000070000000800006B0E00003D060000CB07000000000000000800000008000061010000AA0800002808000000010000000800000008000034020000950800002308000000020000000800000008000008030000800800001D080000000300000008000000080000DB0300006A08000017080000000400000008000000080000AE040000550800001208000000050000000800000008000082050000400800000C080000000600000008000000080000550600002A08000006080000000700000008000000080000290700001508000001080000000800000008000000080000000800000008000000080000000900000008000000080000CF080000EB070000F5070000000A00000008000000080000A3090000D5070000F0070000000B00000008000000080000760A0000C0070000EA070000000C00000008000000080000490B0000AB070000E5070000000D000000080000000800001D0C000095070000DF070000000E00000008000000080000F00C000080070000D9070000000F00000008000000080000C30D00006B070000D4070000001000000008000000080000970E000056070000CE0700000000000000090000000800008B010000C90900002B0800000001000000090000000800005F020000B309000025080000000200000009000000080000320300009E0900001F08000000030000000900000008000005040000880900001A080000000400000009000000080000D90400007209000014080000000500000009000000080000AC0500005D0900000E080000000600000009000000080000800600004709000009080000000700000009000000080000530700003109000003080000000800000009000000080000270800001C090000FE070000000900000009000000080000FA08000006090000F8070000000A00000009000000080000CE090000F0080000F2070000000B00000009000000080000A10A0000DB080000ED070000000C00000009000000080000740B0000C5080000E7070000000D00000009000000080000480C0000AF080000E1070000000E000000090000000800001B0D00009A080000DC070000000F00000009000000080000EF0D000084080000D6070000001000000009000000080000C20E00006E080000D107000000000000000A000000080000B5010000E80A00002D08000000010000000A00000008000089020000D20A00002708000000020000000A0000000800005C030000BC0A00002208000000030000000A00000008000030040000A60A00001C08000000040000000A000000080000030500008F0A00001608000000050000000A000000080000D7050000790A00001108000000060000000A000000080000AA060000630A00000B08000000070000000A0000000800007E0700004D0A00000608000000080000000A00000008000051080000370A00000008000000090000000A00000008000025090000210A0000FA070000000A0000000A000000080000F80900000B0A0000F5070000000B0000000A000000080000CC0A0000F5090000EF070000000C0000000A0000000800009F0B0000DF090000EA070000000D0000000A000000080000730C0000C9090000E4070000000E0000000A000000080000460D0000B3090000DF070000000F0000000A0000000800001A0E00009D090000D907000000100000000A000000080000EE0E000087090000D307000000000000000B000000080000DF010000060C00002F08000000010000000B000000080000B3020000F00B00002A08000000020000000B00000008000087030000DA0B00002408000000030000000B0000000800005A040000C30B00001E08000000040000000B0000000800002E050000AD0B00001908000000050000000B00000008000001060000960B00001308000000060000000B000000080000D5060000800B00000E08000000070000000B000000080000A90700006A0B00000808000000080000000B0000000800007C080000530B00000308000000090000000B000000080000500900003D0B0000FD070000000A0000000B000000080000230A0000260B0000F7070000000B0000000B000000080000F70A0000100B0000F2070000000C0000000B000000080000CB0B0000F90A0000EC070000000D0000000B0000000800009E0C0000E30A0000E7070000000E0000000B000000080000720D0000CD0A0000E1070000000F0000000B000000080000450E0000B60A0000DC07000000100000000B000000080000190F0000A00A0000D607000000000000000C0000000800000A020000250D00003208000000010000000C000000080000DD0200000E0D00002C08000000020000000C000000080000B1030000F80C00002608000000030000000C00000008000085040000E10C00002108000000040000000C00000008000058050000CA0C00001B08000000050000000C0000000800002C060000B30C00001608000000060000000C000000080000000700009C0C00001008000000070000000C000000080000D3070000860C00000B08000000080000000C000000080000A70800006F0C00000508000000090000000C0000000800007B090000580C000000080000000A0000000C0000000800004E0A0000410C0000FA070000000B0000000C000000080000220B00002A0C0000F4070000000C0000000C000000080000F60B0000140C0000EF070000000D0000000C000000080000C90C0000FD0B0000E9070000000E0000000C0000000800009D0D0000E60B0000E4070000000F0000000C000000080000710E0000CF0B0000DE07000000100000000C000000080000440F0000B90B0000D907000000000000000D00000008000034020000440E00003408000000010000000D000000080000070300002D0E00002E08000000020000000D000000080000DB030000160E00002908000000030000000D000000080000AF040000FE0D00002308000000040000000D00000008000083050000E70D00001E08000000050000000D00000008000056060000D00D00001808000000060000000D0000000800002A070000B90D00001308000000070000000D000000080000FE070000A20D00000D08000000080000000D000000080000D20800008B0D00000808000000090000000D000000080000A5090000730D000002080000000A0000000D000000080000790A00005C0D0000FD070000000B0000000D0000000800004D0B0000450D0000F7070000000C0000000D000000080000210C00002E0D0000F1070000000D0000000D000000080000F40C0000170D0000EC070000000E0000000D000000080000C80D0000000D0000E6070000000F0000000D0000000800009C0E0000E80C0000E107000000100000000D000000080000700F0000D10C0000DB07000000000000000E0000000800005E020000630F00003608000000010000000E000000080000320300004B0F00003108000000020000000E00000008000005040000340F00002B08000000030000000E000000080000D90400001C0F00002608000000040000000E000000080000AD050000040F00002008000000050000000E00000008000081060000ED0E00001B08000000060000000E00000008000055070000D50E00001508000000070000000E00000008000029080000BE0E00001008000000080000000E000000080000FC080000A60E00000A08000000090000000E000000080000D00900008F0E000005080000000A0000000E000000080000A40A0000770E0000FF070000000B0000000E000000080000780B0000600E0000FA070000000C0000000E0000000800004C0C0000480E0000F4070000000D0000000E0000000800001F0D0000310E0000EF070000000E0000000E000000080000F30D0000190E0000E9070000000F0000000E000000080000C70E0000020E0000E407000000100000000E0000000800009B0F0000EA0D0000DE07000000000000000F00000008000088020000FF0F00003908000000010000000F0000000800005C030000FF0F00003308000000020000000F00000008000030040000FF0F00002E08000000030000000F00000008000004050000FF0F00002808000000040000000F000000080000D8050000FF0F00002308000000050000000F000000080000AB060000FF0F00001D08000000060000000F0000000800007F070000F20F00001808000000070000000F00000008000053080000DA0F00001208000000080000000F00000008000027090000C20F00000D08000000090000000F000000080000FB090000AA0F000007080000000A0000000F000000080000CF0A0000920F000002080000000B0000000F000000080000A30B00007A0F0000FC070000000C0000000F000000080000770C0000620F0000F7070000000D0000000F0000000800004B0D00004A0F0000F1070000000E0000000F0000000800001F0E0000330F0000EC070000000F0000000F000000080000F20E00001B0F0000E607000000100000000F000000080000C60F0000030F0000E1070000000000000010000000080000B2020000FF0F00003B08000000010000001000000008000086030000FF0F0000350800000002000000100000000800005A040000FF0F0000300800000003000000100000000800002E050000FF0F00002A08000000040000001000000008000002060000FF0F000025080000000500000010000000080000D6060000FF0F000020080000000600000010000000080000AA070000FF0F00001A0800000007000000100000000800007E080000FF0F00001508000000080000001000000008000052090000FF0F00000F080000000900000010000000080000260A0000FF0F00000A080000000A00000010000000080000FA0A0000FF0F000004080000000B00000010000000080000CE0B0000FF0F0000FF070000000C00000010000000080000A20C0000FF0F0000F9070000000D00000010000000080000760D0000FF0F0000F4070000000E000000100000000800004A0E0000FF0F0000EE070000000F000000100000000800001E0F0000FF0F0000E9070000001000000010000000080000F20F0000FF0F0000E3070000000000000000000000090000120000000000000018090000000100000000000000090000E50000000000000013090000000200000000000000090000B8010000000000000D0900000003000000000000000900008B02000000000000080900000004000000000000000900005E03000000000000020900000005000000000000000900003104000000000000FC0800000006000000000000000900000405000000000000F7080000000700000000000000090000D705000000000000F1080000000800000000000000090000AA06000000000000EB0800000009000000000000000900007D07000000000000E6080000000A000000000000000900005008000000000000E0080000000B000000000000000900002309000000000000DA080000000C00000000000000090000F609000000000000D5080000000D00000000000000090000CA0A000000000000CF080000000E000000000000000900009D0B000000000000C9080000000F00000000000000090000700C000000000000C4080000001000000000000000090000430D000000000000BE0800000000000000010000000900003C000000CA0000001B0900000001000000010000000900000F010000B800000015090000000200000001000000090000E2010000A500000010090000000300000001000000090000B5020000930000000A0900000004000000010000000900008803000081000000040900000005000000010000000900005C0400006E000000FF0800000006000000010000000900002F0500005C000000F9080000000700000001000000090000020600004A000000F3080000000800000001000000090000D506000037000000EE080000000900000001000000090000A807000025000000E8080000000A000000010000000900007B08000013000000E3080000000B000000010000000900004E09000000000000DD080000000C00000001000000090000210A000000000000D7080000000D00000001000000090000F40A000000000000D2080000000E00000001000000090000C80B000000000000CC080000000F000000010000000900009B0C000000000000C60800000010000000010000000900006E0D000000000000C108000000000000000200000009000066000000E90100001D09000000010000000200000009000039010000D6010000180900000002000000020000000900000D020000C301000012090000000300000002000000090000E0020000B10100000D090000000400000002000000090000B30300009E01000007090000000500000002000000090000860400008B010000010900000006000000020000000900005905000079010000FC0800000007000000020000000900002C06000066010000F60800000008000000020000000900000007000053010000F0080000000900000002000000090000D307000040010000EB080000000A00000002000000090000A60800002E010000E5080000000B00000002000000090000790900001B010000DF080000000C000000020000000900004C0A000008010000DA080000000D000000020000000900001F0B0000F6000000D4080000000E00000002000000090000F20B0000E3000000CF080000000F00000002000000090000C60C0000D0000000C9080000001000000002000000090000990D0000BE000000C308000000000000000300000009000091000000070300002009000000010000000300000009000064010000F40200001A09000000020000000300000009000037020000E1020000150900000003000000030000000900000A030000CE0200000F090000000400000003000000090000DD030000BB02000009090000000500000003000000090000B1040000A8020000040900000006000000030000000900008405000095020000FE0800000007000000030000000900005706000082020000F80800000008000000030000000900002A0700006F020000F3080000000900000003000000090000FD0700005C020000ED080000000A00000003000000090000D108000049020000E8080000000B00000003000000090000A409000036020000E2080000000C00000003000000090000770A000023020000DC080000000D000000030000000900004A0B000010020000D7080000000E000000030000000900001D0C0000FC010000D1080000000F00000003000000090000F10C0000E9010000CB080000001000000003000000090000C40D0000D6010000C6080000000000000004000000090000BB00000026040000220900000001000000040000000900008E010000130400001D09000000020000000400000009000061020000FF0300001709000000030000000400000009000035030000EC0300001109000000040000000400000009000008040000D80300000C090000000500000004000000090000DB040000C503000006090000000600000004000000090000AE050000B203000001090000000700000004000000090000820600009E030000FB080000000800000004000000090000550700008B030000F50800000009000000040000000900002808000077030000F0080000000A00000004000000090000FB08000064030000EA080000000B00000004000000090000CF09000050030000E4080000000C00000004000000090000A20A00003D030000DF080000000D00000004000000090000750B000029030000D9080000000E00000004000000090000480C000016030000D4080000000F000000040000000900001C0D000002030000CE080000001000000004000000090000EF0D0000EF020000C8080000000000000005000000090000E50000004505000025090000000100000005000000090000B8010000310500001F0900000002000000050000000900008C0200001D0500001A0900000003000000050000000900005F030000090500001409000000040000000500000009000032040000F60400000E09000000050000000500000009000005050000E204000009090000000600000005000000090000D9050000CE04000003090000000700000005000000090000AC060000BA040000FD0800000008000000050000000900007F070000A6040000F80800000009000000050000000900005308000093040000F2080000000A00000005000000090000260900007F040000ED080000000B00000005000000090000F90900006B040000E7080000000C00000005000000090000CD0A000057040000E1080000000D00000005000000090000A00B000043040000DC080000000E00000005000000090000730C00002F040000D6080000000F00000005000000090000460D00001C040000D00800000010000000050000000900001A0E000008040000CB0800000000000000060000000900000F0100006406000027090000000100000006000000090000E30100005006000022090000000200000006000000090000B60200003B0600001C0900000003000000060000000900008903000027060000160900000004000000060000000900005D040000130600001109000000050000000600000009000030050000FF0500000B09000000060000000600000009000003060000EB05000006090000000700000006000000090000D7060000D605000000090000000800000006000000090000AA070000C2050000FA0800000009000000060000000900007D080000AE050000F5080000000A00000006000000090000510900009A050000EF080000000B00000006000000090000240A000085050000E9080000000C00000006000000090000F70A000071050000E4080000000D00000006000000090000CB0B00005D050000DE080000000E000000060000000900009E0C000049050000D9080000000F00000006000000090000710D000035050000D3080000001000000006000000090000450E000020050000CD08000000000000000700000009000039010000830700002A0900000001000000070000000900000D0200006E07000024090000000200000007000000090000E0020000590700001F090000000300000007000000090000B403000045070000190900000004000000070000000900008704000030070000130900000005000000070000000900005A0500001C0700000E0900000006000000070000000900002E060000070700000809000000070000000700000009000001070000F206000002090000000800000007000000090000D5070000DE060000FD080000000900000007000000090000A8080000C9060000F7080000000A000000070000000900007B090000B5060000F2080000000B000000070000000900004F0A0000A0060000EC080000000C00000007000000090000220B00008C060000E6080000000D00000007000000090000F60B000077060000E1080000000E00000007000000090000C90C000062060000DB080000000F000000070000000900009C0D00004E060000D5080000001000000007000000090000700E000039060000D008000000000000000800000009000064010000A10800002C090000000100000008000000090000370200008C080000270900000002000000080000000900000B0300007708000021090000000300000008000000090000DE030000620800001B090000000400000008000000090000B10400004D0800001609000000050000000800000009000085050000380800001009000000060000000800000009000058060000240800000B0900000007000000080000000900002C0700000F08000005090000000800000008000000090000FF070000FA070000FF080000000900000008000000090000D3080000E5070000FA080000000A00000008000000090000A6090000D0070000F4080000000B000000080000000900007A0A0000BB070000EE080000000C000000080000000900004D0B0000A6070000E9080000000D00000008000000090000200C000091070000E3080000000E00000008000000090000F40C00007C070000DE080000000F00000008000000090000C70D000067070000D80800000010000000080000000900009B0E000052070000D20800000000000000090000000900008E010000C00900002F09000000010000000900000009000061020000AB0900002909000000020000000900000009000035030000950900002409000000030000000900000009000008040000800900001E090000000400000009000000090000DC0400006B09000018090000000500000009000000090000AF050000550900001309000000060000000900000009000083060000400900000D090000000700000009000000090000560700002B090000070900000008000000090000000900002A0800001509000002090000000900000009000000090000FF080000FF080000FF080000000A00000009000000090000D1090000EB080000F7080000000B00000009000000090000A40A0000D5080000F1080000000C00000009000000090000780B0000C0080000EB080000000D000000090000000900004B0C0000AB080000E6080000000E000000090000000900001F0D000095080000E0080000000F00000009000000090000F20D000080080000DA080000001000000009000000090000C60E00006B080000D508000000000000000A000000090000B8010000DF0A00003109000000010000000A0000000900008C020000C90A00002C09000000020000000A0000000900005F030000B30A00002609000000030000000A000000090000330400009E0A00002009000000040000000A00000009000006050000880A00001B09000000050000000A000000090000DA050000720A00001509000000060000000A000000090000AD0600005D0A00001009000000070000000A00000009000081070000470A00000A09000000080000000A00000009000054080000310A00000409000000090000000A000000090000280900001B0A0000FF080000000A0000000A000000090000FC090000060A0000F9080000000B0000000A000000090000CF0A0000F0090000F3080000000C0000000A000000090000A30B0000DA090000EE080000000D0000000A000000090000760C0000C4090000E8080000000E0000000A0000000900004A0D0000AF090000E3080000000F0000000A0000000900001D0E000099090000DD08000000100000000A000000090000F10E000083090000D708000000000000000B000000090000E2010000FE0B00003409000000010000000B000000090000B6020000E80B00002E09000000020000000B00000009000089030000D10B00002909000000030000000B0000000900005D040000BB0B00002309000000040000000B00000009000031050000A50B00001D09000000050000000B000000090000040600008F0B00001809000000060000000B000000090000D8060000790B00001209000000070000000B000000090000AB070000630B00000C09000000080000000B0000000900007F0800004D0B00000709000000090000000B00000009000053090000370B000001090000000A0000000B000000090000260A0000210B0000FC080000000B0000000B000000090000FA0A00000B0B0000F6080000000C0000000B000000090000CD0B0000F40A0000F0080000000D0000000B000000090000A10C0000DE0A0000EB080000000E0000000B000000090000750D0000C80A0000E5080000000F0000000B000000090000480E0000B20A0000DF08000000100000000B0000000900001C0F00009C0A0000DA08000000000000000C0000000900000D0200001C0D00003609000000010000000C000000090000E0020000060D00003109000000020000000C000000090000B4030000EF0C00002B09000000030000000C00000009000087040000D90C00002509000000040000000C0000000900005B050000C20C00002009000000050000000C0000000900002F060000AC0C00001A09000000060000000C00000009000002070000960C00001509000000070000000C000000090000D60700007F0C00000F09000000080000000C000000090000AA080000690C00000909000000090000000C0000000900007D090000520C000004090000000A0000000C000000090000510A00003C0C0000FE080000000B0000000C000000090000250B0000250C0000F8080000000C0000000C000000090000F80B00000F0C0000F3080000000D0000000C000000090000CC0C0000F80B0000ED080000000E0000000C000000090000A00D0000E20B0000E8080000000F0000000C000000090000730E0000CB0B0000E208000000100000000C000000090000470F0000B50B0000DC08000000000000000D000000090000370200003B0E00003909000000010000000D0000000900000A030000240E00003309000000020000000D000000090000DE0300000D0E00002E09000000030000000D000000090000B2040000F70D00002809000000040000000D00000009000086050000E00D00002209000000050000000D00000009000059060000C90D00001D09000000060000000D0000000900002D070000B20D00001709000000070000000D000000090000010800009B0D00001109000000080000000D000000090000D4080000840D00000C09000000090000000D000000090000A80900006D0D000006090000000A0000000D0000000900007C0A0000570D000001090000000B0000000D0000000900004F0B0000400D0000FB080000000C0000000D000000090000230C0000290D0000F5080000000D0000000D000000090000F70C0000120D0000F0080000000E0000000D000000090000CB0D0000FB0C0000EA080000000F0000000D0000000900009E0E0000E40C0000E508000000100000000D000000090000720F0000CD0C0000DF08000000000000000E000000090000610200005A0F00003B09000000010000000E00000009000035030000430F00003609000000020000000E000000090000080400002B0F00003009000000030000000E000000090000DC040000140F00002A09000000040000000E000000090000B0050000FD0E00002509000000050000000E00000009000084060000E60E00001F09000000060000000E00000009000057070000CF0E00001A09000000070000000E0000000900002B080000B70E00001409000000080000000E000000090000FF080000A00E00000E09000000090000000E000000090000D3090000890E000009090000000A0000000E000000090000A60A0000720E000003090000000B0000000E0000000900007A0B00005A0E0000FD080000000C0000000E0000000900004E0C0000430E0000F8080000000D0000000E000000090000220D00002C0E0000F2080000000E0000000E000000090000F50D0000150E0000ED080000000F0000000E000000090000C90E0000FD0D0000E708000000100000000E0000000900009D0F0000E60D0000E108000000000000000F0000000900008B020000FF0F00003E09000000010000000F0000000900005F030000FF0F00003809000000020000000F00000009000033040000FF0F00003309000000030000000F00000009000007050000FF0F00002D09000000040000000F000000090000DA050000FF0F00002709000000050000000F000000090000AE060000FF0F00002209000000060000000F00000009000082070000EB0F00001C09000000070000000F00000009000056080000D30F00001609000000080000000F0000000900002A090000BC0F00001109000000090000000F000000090000FD090000A40F00000B090000000A0000000F000000090000D10A00008D0F000006090000000B0000000F000000090000A50B0000750F000000090000000C0000000F000000090000790C00005D0F0000FA080000000D0000000F0000000900004D0D0000460F0000F5080000000E0000000F000000090000200E00002E0F0000EF080000000F0000000F000000090000F40E0000160F0000EA08000000100000000F000000090000C80F0000FF0E0000E4080000000000000010000000090000B5020000FF0F00004009000000010000001000000009000089030000FF0F00003B0900000002000000100000000900005D040000FF0F00003509000000030000001000000009000031050000FF0F00002F09000000040000001000000009000005060000FF0F00002A090000000500000010000000090000D9060000FF0F000024090000000600000010000000090000AC070000FF0F00001F09000000070000001000000009000080080000FF0F00001909000000080000001000000009000054090000FF0F000013090000000900000010000000090000280A0000FF0F00000E090000000A00000010000000090000FC0A0000FF0F000008090000000B00000010000000090000D00B0000FF0F000003090000000C00000010000000090000A40C0000FF0F0000FD080000000D00000010000000090000770D0000FF0F0000F7080000000E000000100000000900004B0E0000FF0F0000F2080000000F000000100000000900001F0F0000FF0F0000EC080000001000000010000000090000F30F0000FF0F0000E60800000000000000000000000A000014000000000000001B0A00000001000000000000000A0000E700000000000000160A00000002000000000000000A0000BB01000000000000100A00000003000000000000000A00008E020000000000000B0A00000004000000000000000A00006103000000000000050A00000005000000000000000A00003504000000000000000A00000006000000000000000A00000805000000000000FB0900000007000000000000000A0000DB05000000000000F50900000008000000000000000A0000AF06000000000000F00900000009000000000000000A00008207000000000000EA090000000A000000000000000A00005508000000000000E5090000000B000000000000000A00002909000000000000DF090000000C000000000000000A0000FC09000000000000DA090000000D000000000000000A0000CF0A000000000000D4090000000E000000000000000A0000A30B000000000000CF090000000F000000000000000A0000760C000000000000C90900000010000000000000000A0000490D000000000000C40900000000000000010000000A00003E000000C10000001E0A00000001000000010000000A000012010000AF000000190A00000002000000010000000A0000E50100009D000000130A00000003000000010000000A0000B80200008B0000000E0A00000004000000010000000A00008C03000079000000080A00000005000000010000000A00005F04000067000000030A00000006000000010000000A00003205000055000000FD0900000007000000010000000A00000606000043000000F80900000008000000010000000A0000D906000031000000F20900000009000000010000000A0000AD0700001F000000ED090000000A000000010000000A0000800800000D000000E7090000000B000000010000000A00005309000000000000E2090000000C000000010000000A0000270A000000000000DC090000000D000000010000000A0000FA0A000000000000D7090000000E000000010000000A0000CD0B000000000000D1090000000F000000010000000A0000A10C000000000000CC0900000010000000010000000A0000740D000000000000C60900000000000000020000000A000069000000E0010000210A00000001000000020000000A00003C010000CD0100001B0A00000002000000020000000A00000F020000BB010000160A00000003000000020000000A0000E3020000A9010000100A00000004000000020000000A0000B6030000960100000B0A00000005000000020000000A00008904000084010000050A00000006000000020000000A00005D05000072010000000A00000007000000020000000A0000300600005F010000FA0900000008000000020000000A0000040700004D010000F50900000009000000020000000A0000D70700003A010000EF090000000A000000020000000A0000AA08000028010000EA090000000B000000020000000A00007E09000016010000E4090000000C000000020000000A0000510A000003010000DF090000000D000000020000000A0000250B0000F1000000D9090000000E000000020000000A0000F80B0000DF000000D4090000000F000000020000000A0000CB0C0000CC000000CE0900000010000000020000000A00009F0D0000BA000000C90900000000000000030000000A000093000000FF020000230A00000001000000030000000A000066010000EC0200001E0A00000002000000030000000A00003A020000D9020000180A00000003000000030000000A00000D030000C6020000130A00000004000000030000000A0000E0030000B40200000D0A00000005000000030000000A0000B4040000A1020000080A00000006000000030000000A0000870500008E020000020A00000007000000030000000A00005B0600007B020000FD0900000008000000030000000A00002E07000069020000F70900000009000000030000000A00000208000056020000F2090000000A000000030000000A0000D508000043020000EC090000000B000000030000000A0000A809000030020000E7090000000C000000030000000A00007C0A00001E020000E1090000000D000000030000000A00004F0B00000B020000DB090000000E000000030000000A0000230C0000F8010000D6090000000F000000030000000A0000F60C0000E5010000D00900000010000000030000000A0000C90D0000D3010000CB0900000000000000040000000A0000BD0000001D040000260A00000001000000040000000A0000910100000A040000200A00000002000000040000000A000064020000F70300001B0A00000003000000040000000A000037030000E4030000150A00000004000000040000000A00000B040000D1030000100A00000005000000040000000A0000DE040000BE0300000A0A00000006000000040000000A0000B2050000AB030000050A00000007000000040000000A00008506000097030000FF0900000008000000040000000A00005907000084030000FA0900000009000000040000000A00002C08000071030000F4090000000A000000040000000A0000000900005E030000EF090000000B000000040000000A0000D30900004B030000E9090000000C000000040000000A0000A60A000038030000E3090000000D000000040000000A00007A0B000025030000DE090000000E000000040000000A00004D0C000012030000D8090000000F000000040000000A0000210D0000FE020000D30900000010000000040000000A0000F40D0000EB020000CD0900000000000000050000000A0000E70000003C050000290A00000001000000050000000A0000BB01000029050000230A00000002000000050000000A00008E020000150500001D0A00000003000000050000000A00006203000002050000180A00000004000000050000000A000035040000EE040000120A00000005000000050000000A000009050000DB0400000D0A00000006000000050000000A0000DC050000C7040000070A00000007000000050000000A0000B0060000B4040000020A00000008000000050000000A000083070000A0040000FC0900000009000000050000000A0000570800008D040000F7090000000A000000050000000A00002A09000079040000F1090000000B000000050000000A0000FE09000066040000EB090000000C000000050000000A0000D10A000052040000E6090000000D000000050000000A0000A40B00003F040000E0090000000E000000050000000A0000780C00002B040000DB090000000F000000050000000A00004B0D000018040000D50900000010000000050000000A00001F0E000004040000D00900000000000000060000000A0000120100005B0600002B0A00000001000000060000000A0000E501000047060000260A00000002000000060000000A0000B902000033060000200A00000003000000060000000A00008C0300001F0600001B0A00000004000000060000000A0000600400000B060000150A00000005000000060000000A000033050000F70500000F0A00000006000000060000000A000007060000E40500000A0A00000007000000060000000A0000DA060000D0050000040A00000008000000060000000A0000AE070000BC050000FF0900000009000000060000000A000081080000A8050000F9090000000A000000060000000A00005509000094050000F3090000000B000000060000000A0000280A000080050000EE090000000C000000060000000A0000FC0A00006C050000E8090000000D000000060000000A0000CF0B000058050000E3090000000E000000060000000A0000A30C000045050000DD090000000F000000060000000A0000760D000031050000D80900000010000000060000000A00004A0E00001D050000D20900000000000000070000000A00003C0100007A0700002E0A00000001000000070000000A00001002000065070000280A00000002000000070000000A0000E302000051070000230A00000003000000070000000A0000B70300003D0700001D0A00000004000000070000000A00008A04000029070000180A00000005000000070000000A00005E05000014070000120A00000006000000070000000A000031060000000700000C0A00000007000000070000000A000005070000EC060000070A00000008000000070000000A0000D8070000D8060000010A00000009000000070000000A0000AC080000C3060000FC090000000A000000070000000A00007F090000AF060000F6090000000B000000070000000A0000530A00009B060000F0090000000C000000070000000A0000260B000086060000EB090000000D000000070000000A0000FA0B000072060000E5090000000E000000070000000A0000CD0C00005E060000E0090000000F000000070000000A0000A10D00004A060000DA0900000010000000070000000A0000740E000035060000D40900000000000000080000000A00006601000098080000310A00000001000000080000000A00003A020000840800002B0A00000002000000080000000A00000D0300006F080000250A00000003000000080000000A0000E10300005B080000200A00000004000000080000000A0000B4040000460800001A0A00000005000000080000000A00008805000031080000140A00000006000000080000000A00005C0600001D0800000F0A00000007000000080000000A00002F07000008080000090A00000008000000080000000A000003080000F3070000040A00000009000000080000000A0000D6080000DF070000FE090000000A000000080000000A0000AA090000CA070000F8090000000B000000080000000A00007D0A0000B5070000F3090000000C000000080000000A0000510B0000A1070000ED090000000D000000080000000A0000240C00008C070000E8090000000E000000080000000A0000F80C000077070000E2090000000F000000080000000A0000CB0D000063070000DC0900000010000000080000000A00009F0E00004E070000D70900000000000000090000000A000091010000B7090000330A00000001000000090000000A000064020000A20900002E0A00000002000000090000000A0000380300008D090000280A00000003000000090000000A00000B04000078090000220A00000004000000090000000A0000DF040000630900001D0A00000005000000090000000A0000B20500004E090000170A00000006000000090000000A00008606000039090000110A00000007000000090000000A00005A070000240900000C0A00000008000000090000000A00002D0800000F090000060A00000009000000090000000A000001090000FA080000000A0000000A000000090000000A0000D4090000E5080000FB090000000B000000090000000A0000A80A0000D0080000F5090000000C000000090000000A00007B0B0000BB080000F0090000000D000000090000000A00004F0C0000A6080000EA090000000E000000090000000A0000220D000091080000E4090000000F000000090000000A0000F60D00007C080000DF0900000010000000090000000A0000CA0E000067080000D909000000000000000A0000000A0000BB010000D60A0000360A000000010000000A0000000A00008E020000C10A0000300A000000020000000A0000000A000062030000AB0A00002B0A000000030000000A0000000A000036040000960A0000250A000000040000000A0000000A000009050000800A00001F0A000000050000000A0000000A0000DD0500006B0A00001A0A000000060000000A0000000A0000B0060000560A0000140A000000070000000A0000000A000084070000400A00000E0A000000080000000A0000000A0000580800002B0A0000090A000000090000000A0000000A00002B090000150A0000030A0000000A0000000A0000000A0000FF090000FF090000FF090000000B0000000A0000000A0000D20A0000EB090000F8090000000C0000000A0000000A0000A60B0000D5090000F2090000000D0000000A0000000A0000790C0000C0090000EC090000000E0000000A0000000A00004D0D0000AA090000E7090000000F0000000A0000000A0000210E000095090000E109000000100000000A0000000A0000F40E000080090000DB09000000000000000B0000000A0000E5010000F50B0000390A000000010000000B0000000A0000B9020000DF0B0000330A000000020000000B0000000A00008C030000C90B00002D0A000000030000000B0000000A000060040000B30B0000280A000000040000000B0000000A0000340500009E0B0000220A000000050000000B0000000A000007060000880B00001C0A000000060000000B0000000A0000DB060000720B0000160A000000070000000B0000000A0000AE0700005C0B0000110A000000080000000B0000000A000082080000470B00000B0A000000090000000B0000000A000056090000310B0000050A0000000A0000000B0000000A0000290A00001B0B0000000A0000000B0000000B0000000A0000FD0A0000050B0000FA090000000C0000000B0000000A0000D00B0000EF0A0000F4090000000D0000000B0000000A0000A40C0000DA0A0000EF090000000E0000000B0000000A0000780D0000C40A0000E9090000000F0000000B0000000A00004B0E0000AE0A0000E309000000100000000B0000000A00001F0F0000980A0000DE09000000000000000C0000000A000010020000140D00003B0A000000010000000C0000000A0000E3020000FD0C0000350A000000020000000C0000000A0000B7030000E70C0000300A000000030000000C0000000A00008A040000D10C00002A0A000000040000000C0000000A00005E050000BB0C0000240A000000050000000C0000000A000032060000A50C00001F0A000000060000000C0000000A0000050700008F0C0000190A000000070000000C0000000A0000D9070000780C0000130A000000080000000C0000000A0000AD080000620C00000E0A000000090000000C0000000A0000800900004C0C0000080A0000000A0000000C0000000A0000540A0000360C0000020A0000000B0000000C0000000A0000270B0000200C0000FD090000000C0000000C0000000A0000FB0B00000A0C0000F7090000000D0000000C0000000A0000CF0C0000F30B0000F1090000000E0000000C0000000A0000A20D0000DD0B0000EB090000000F0000000C0000000A0000760E0000C70B0000E609000000100000000C0000000A00004A0F0000B10B0000E009000000000000000D0000000A00003A020000320E00003E0A000000010000000D0000000A00000D0300001C0E0000380A000000020000000D0000000A0000E1030000050E0000320A000000030000000D0000000A0000B5040000EF0D00002D0A000000040000000D0000000A000088050000D80D0000270A000000050000000D0000000A00005C060000C20D0000210A000000060000000D0000000A000030070000AB0D00001C0A000000070000000D0000000A000003080000950D0000160A000000080000000D0000000A0000D70800007E0D0000100A000000090000000D0000000A0000AB090000670D00000A0A0000000A0000000D0000000A00007E0A0000510D0000050A0000000B0000000D0000000A0000520B00003A0D0000FF090000000C0000000D0000000A0000260C0000240D0000F9090000000D0000000D0000000A0000F90C00000D0D0000F4090000000E0000000D0000000A0000CD0D0000F70C0000EE090000000F0000000D0000000A0000A10E0000E00C0000E809000000100000000D0000000A0000740F0000CA0C0000E209000000000000000E0000000A000064020000510F0000400A000000010000000E0000000A0000380300003A0F00003B0A000000020000000E0000000A00000B040000230F0000350A000000030000000E0000000A0000DF0400000C0F00002F0A000000040000000E0000000A0000B3050000F60E00002A0A000000050000000E0000000A000086060000DF0E0000240A000000060000000E0000000A00005A070000C80E00001E0A000000070000000E0000000A00002E080000B10E0000180A000000080000000E0000000A0000020900009A0E0000130A000000090000000E0000000A0000D5090000830E00000D0A0000000A0000000E0000000A0000A90A00006C0E0000070A0000000B0000000E0000000A00007D0B0000550E0000010A0000000C0000000E0000000A0000500C00003E0E0000FC090000000D0000000E0000000A0000240D0000270E0000F6090000000E0000000E0000000A0000F80D0000100E0000F0090000000F0000000E0000000A0000CB0E0000F90D0000EB09000000100000000E0000000A00009F0F0000E20D0000E509000000000000000F0000000A00008E020000FF0F0000430A000000010000000F0000000A000062030000FF0F00003D0A000000020000000F0000000A000036040000FF0F0000380A000000030000000F0000000A00000A050000FF0F0000320A000000040000000F0000000A0000DD050000FF0F00002C0A000000050000000F0000000A0000B1060000FB0F0000260A000000060000000F0000000A000085070000E40F0000210A000000070000000F0000000A000058080000CD0F00001B0A000000080000000F0000000A00002C090000B60F0000150A000000090000000F0000000A0000000A00009E0F00000F0A0000000A0000000F0000000A0000D30A0000870F00000A0A0000000B0000000F0000000A0000A70B0000700F0000040A0000000C0000000F0000000A00007B0C0000580F0000FE090000000D0000000F0000000A00004E0D0000410F0000F8090000000E0000000F0000000A0000220E00002A0F0000F3090000000F0000000F0000000A0000F60E0000120F0000ED09000000100000000F0000000A0000CA0F0000FB0E0000E70900000000000000100000000A0000B9020000FF0F0000460A00000001000000100000000A00008C030000FF0F0000400A00000002000000100000000A000060040000FF0F00003A0A00000003000000100000000A000034050000FF0F0000340A00000004000000100000000A000008060000FF0F00002F0A00000005000000100000000A0000DB060000FF0F0000290A00000006000000100000000A0000AF070000FF0F0000230A00000007000000100000000A000083080000FF0F00001D0A00000008000000100000000A000056090000FF0F0000180A00000009000000100000000A00002A0A0000FF0F0000120A0000000A000000100000000A0000FE0A0000FF0F00000C0A0000000B000000100000000A0000D20B0000FF0F0000060A0000000C000000100000000A0000A50C0000FF0F0000010A0000000D000000100000000A0000790D0000FF0F0000FB090000000E000000100000000A00004D0E0000FF0F0000F5090000000F000000100000000A0000210F0000FF0F0000EF0900000010000000100000000A0000F40F0000FF0F0000E90900000000000000000000000B000016000000000000001E0B00000001000000000000000B0000EA00000000000000190B00000002000000000000000B0000BD01000000000000140B00000003000000000000000B000091020000000000000E0B00000004000000000000000B00006503000000000000090B00000005000000000000000B00003804000000000000040B00000006000000000000000B00000C05000000000000FE0A00000007000000000000000B0000DF05000000000000F90A00000008000000000000000B0000B306000000000000F40A00000009000000000000000B00008707000000000000EF0A0000000A000000000000000B00005A08000000000000E90A0000000B000000000000000B00002E09000000000000E40A0000000C000000000000000B0000020A000000000000DF0A0000000D000000000000000B0000D50A000000000000D90A0000000E000000000000000B0000A90B000000000000D40A0000000F000000000000000B00007D0C000000000000CF0A00000010000000000000000B0000500D000000000000C90A00000000000000010000000B000040000000B8000000210B00000001000000010000000B000014010000A60000001C0B00000002000000010000000B0000E801000095000000160B00000003000000010000000B0000BB02000083000000110B00000004000000010000000B00008F030000710000000C0B00000005000000010000000B00006304000060000000060B00000006000000010000000B0000360500004E000000010B00000007000000010000000B00000A0600003C000000FC0A00000008000000010000000B0000DD0600002B000000F60A00000009000000010000000B0000B107000019000000F10A0000000A000000010000000B00008508000008000000EC0A0000000B000000010000000B00005809000000000000E60A0000000C000000010000000B00002C0A000000000000E10A0000000D000000010000000B0000000B000000000000DC0A0000000E000000010000000B0000D30B000000000000D60A0000000F000000010000000B0000A70C000000000000D10A00000010000000010000000B00007B0D000000000000CC0A00000000000000020000000B00006B000000D7010000240B00000001000000020000000B00003E010000C50100001F0B00000002000000020000000B000012020000B3010000190B00000003000000020000000B0000E6020000A1010000140B00000004000000020000000B0000B90300008F0100000E0B00000005000000020000000B00008D0400007D010000090B00000006000000020000000B0000610500006B010000040B00000007000000020000000B00003406000059010000FE0A00000008000000020000000B00000807000047010000F90A00000009000000020000000B0000DB07000035010000F30A0000000A000000020000000B0000AF08000023010000EE0A0000000B000000020000000B00008309000010010000E90A0000000C000000020000000B0000560A0000FE000000E30A0000000D000000020000000B00002A0B0000EC000000DE0A0000000E000000020000000B0000FE0B0000DA000000D90A0000000F000000020000000B0000D10C0000C8000000D30A00000010000000020000000B0000A50D0000B6000000CE0A00000000000000030000000B000095000000F6020000270B00000001000000030000000B000069010000E3020000210B00000002000000030000000B00003C020000D10200001C0B00000003000000030000000B000010030000BE020000160B00000004000000030000000B0000E4030000AC020000110B00000005000000030000000B0000B70400009A0200000C0B00000006000000030000000B00008B05000087020000060B00000007000000030000000B00005F06000075020000010B00000008000000030000000B00003207000062020000FB0A00000009000000030000000B00000608000050020000F60A0000000A000000030000000B0000D90800003D020000F10A0000000B000000030000000B0000AD0900002B020000EB0A0000000C000000030000000B0000810A000019020000E60A0000000D000000030000000B0000540B000006020000E00A0000000E000000030000000B0000280C0000F4010000DB0A0000000F000000030000000B0000FC0C0000E1010000D50A00000010000000030000000B0000CF0D0000CF010000D00A00000000000000040000000B0000BF000000140400002A0B00000001000000040000000B00009301000002040000240B00000002000000040000000B000067020000EF0300001F0B00000003000000040000000B00003A030000DC030000190B00000004000000040000000B00000E040000C9030000140B00000005000000040000000B0000E2040000B60300000E0B00000006000000040000000B0000B5050000A4030000090B00000007000000040000000B00008906000091030000030B00000008000000040000000B00005D0700007E030000FE0A00000009000000040000000B0000300800006B030000F80A0000000A000000040000000B00000409000058030000F30A0000000B000000040000000B0000D709000046030000EE0A0000000C000000040000000B0000AB0A000033030000E80A0000000D000000040000000B00007F0B000020030000E30A0000000E000000040000000B0000520C00000D030000DD0A0000000F000000040000000B0000260D0000FA020000D80A00000010000000040000000B0000FA0D0000E8020000D20A00000000000000050000000B0000EA000000330500002C0B00000001000000050000000B0000BD01000020050000270B00000002000000050000000B0000910200000D050000210B00000003000000050000000B000065030000FA0400001C0B00000004000000050000000B000038040000E7040000160B00000005000000050000000B00000C050000D3040000110B00000006000000050000000B0000E0050000C00400000B0B00000007000000050000000B0000B3060000AD040000060B00000008000000050000000B0000870700009A040000000B00000009000000050000000B00005B08000087040000FB0A0000000A000000050000000B00002E09000073040000F50A0000000B000000050000000B0000020A000060040000F00A0000000C000000050000000B0000D50A00004D040000EA0A0000000D000000050000000B0000A90B00003A040000E50A0000000E000000050000000B00007D0C000027040000DF0A0000000F000000050000000B0000500D000014040000DA0A00000010000000050000000B0000240E000000040000D40A00000000000000060000000B000014010000520600002F0B00000001000000060000000B0000E80100003E0600002A0B00000002000000060000000B0000BB0200002B060000240B00000003000000060000000B00008F030000170600001F0B00000004000000060000000B00006304000004060000190B00000005000000060000000B000036050000F0050000130B00000006000000060000000B00000A060000DD0500000E0B00000007000000060000000B0000DE060000C9050000080B00000008000000060000000B0000B1070000B6050000030B00000009000000060000000B000085080000A2050000FD0A0000000A000000060000000B0000580900008E050000F80A0000000B000000060000000B00002C0A00007B050000F20A0000000C000000060000000B0000000B000067050000ED0A0000000D000000060000000B0000D30B000054050000E70A0000000E000000060000000B0000A70C000040050000E20A0000000F000000060000000B00007B0D00002D050000DC0A00000010000000060000000B00004E0E000019050000D70A00000000000000070000000B00003F01000071070000320B00000001000000070000000B0000120200005D0700002C0B00000002000000070000000B0000E602000049070000270B00000003000000070000000B0000B903000035070000210B00000004000000070000000B00008D040000210700001C0B00000005000000070000000B0000610500000D070000160B00000006000000070000000B000034060000F9060000110B00000007000000070000000B000008070000E50600000B0B00000008000000070000000B0000DC070000D1060000050B00000009000000070000000B0000AF080000BD060000000B0000000A000000070000000B000083090000A9060000FA0A0000000B000000070000000B0000560A000095060000F50A0000000C000000070000000B00002A0B000081060000EF0A0000000D000000070000000B0000FE0B00006E060000EA0A0000000E000000070000000B0000D10C00005A060000E40A0000000F000000070000000B0000A50D000046060000DE0A00000010000000070000000B0000790E000032060000D90A00000000000000080000000B00006901000090080000350B00000001000000080000000B00003D0200007B0800002F0B00000002000000080000000B000010030000670800002A0B00000003000000080000000B0000E403000053080000240B00000004000000080000000B0000B70400003E0800001E0B00000005000000080000000B00008B0500002A080000190B00000006000000080000000B00005F06000016080000130B00000007000000080000000B000032070000010800000D0B00000008000000080000000B000006080000ED070000080B00000009000000080000000B0000DA080000D9070000020B0000000A000000080000000B0000AD090000C4070000FD0A0000000B000000080000000B0000810A0000B0070000F70A0000000C000000080000000B0000540B00009C070000F10A0000000D000000080000000B0000280C000087070000EC0A0000000E000000080000000B0000FC0C000073070000E60A0000000F000000080000000B0000CF0D00005F070000E10A00000010000000080000000B0000A30E00004A070000DB0A00000000000000090000000B000093010000AE090000380B00000001000000090000000B0000670200009A090000320B00000002000000090000000B00003B030000850900002C0B00000003000000090000000B00000E04000070090000270B00000004000000090000000B0000E20400005C090000210B00000005000000090000000B0000B5050000470900001B0B00000006000000090000000B00008906000032090000160B00000007000000090000000B00005D0700001D090000100B00000008000000090000000B000030080000090900000A0B00000009000000090000000B000004090000F4080000050B0000000A000000090000000B0000D8090000DF080000FF0A0000000B000000090000000B0000AB0A0000CB080000F90A0000000C000000090000000B00007F0B0000B6080000F40A0000000D000000090000000B0000520C0000A1080000EE0A0000000E000000090000000B0000260D00008C080000E80A0000000F000000090000000B0000FA0D000078080000E30A00000010000000090000000B0000CD0E000063080000DD0A000000000000000A0000000B0000BE010000CD0A00003A0B000000010000000A0000000B000091020000B80A0000350B000000020000000A0000000B000065030000A30A00002F0B000000030000000A0000000B0000390400008E0A0000290B000000040000000A0000000B00000C050000790A0000240B000000050000000A0000000B0000E0050000640A00001E0B000000060000000A0000000B0000B30600004F0A0000180B000000070000000A0000000B0000870700003A0A0000130B000000080000000A0000000B00005B080000250A00000D0B000000090000000A0000000B00002E0900000F0A0000070B0000000A0000000A0000000B0000020A0000FA090000020B0000000B0000000A0000000B0000D50A0000E5090000FC0A0000000C0000000A0000000B0000A90B0000D0090000F60A0000000D0000000A0000000B00007D0C0000BB090000F00A0000000E0000000A0000000B0000500D0000A6090000EB0A0000000F0000000A0000000B0000240E000091090000E50A000000100000000A0000000B0000F80E00007C090000DF0A000000000000000B0000000B0000E8010000EC0B00003D0B000000010000000B0000000B0000BC020000D70B0000370B000000020000000B0000000B00008F030000C10B0000320B000000030000000B0000000B000063040000AC0B00002C0B000000040000000B0000000B000037050000960B0000260B000000050000000B0000000B00000A060000810B0000210B000000060000000B0000000B0000DE0600006B0B00001B0B000000070000000B0000000B0000B1070000560B0000150B000000080000000B0000000B000085080000400B00000F0B000000090000000B0000000B0000590900002B0B00000A0B0000000A0000000B0000000B00002C0A0000150B0000040B0000000B0000000B0000000B0000FF0A0000FF0A0000FF0A0000000C0000000B0000000B0000D30B0000EA0A0000F80A0000000D0000000B0000000B0000A70C0000D50A0000F30A0000000E0000000B0000000B00007B0D0000BF0A0000ED0A0000000F0000000B0000000B00004E0E0000AA0A0000E70A000000100000000B0000000B0000220F0000940A0000E20A000000000000000C0000000B0000130200000B0D0000400B000000010000000C0000000B0000E6020000F50C00003A0B000000020000000C0000000B0000BA030000DF0C0000340B000000030000000C0000000B00008D040000C90C00002F0B000000040000000C0000000B000061050000B30C0000290B000000050000000C0000000B0000350600009E0C0000230B000000060000000C0000000B000008070000880C00001D0B000000070000000C0000000B0000DC070000720C0000180B000000080000000C0000000B0000AF0800005C0C0000120B000000090000000C0000000B000083090000460C00000C0B0000000A0000000C0000000B0000570A0000300C0000060B0000000B0000000C0000000B00002A0B00001A0C0000010B0000000C0000000C0000000B0000FE0B0000050C0000FB0A0000000D0000000C0000000B0000D10C0000EF0B0000F50A0000000E0000000C0000000B0000A50D0000D90B0000EF0A0000000F0000000C0000000B0000790E0000C30B0000EA0A000000100000000C0000000B00004C0F0000AD0B0000E40A000000000000000D0000000B00003D0200002A0E0000430B000000010000000D0000000B000010030000130E00003D0B000000020000000D0000000B0000E4030000FD0D0000370B000000030000000D0000000B0000B8040000E70D0000310B000000040000000D0000000B00008B050000D10D00002C0B000000050000000D0000000B00005F060000BA0D0000260B000000060000000D0000000B000033070000A40D0000200B000000070000000D0000000B0000060800008E0D00001A0B000000080000000D0000000B0000DA080000780D0000140B000000090000000D0000000B0000AD090000610D00000F0B0000000A0000000D0000000B0000810A00004B0D0000090B0000000B0000000D0000000B0000550B0000350D0000030B0000000C0000000D0000000B0000280C00001F0D0000FD0A0000000D0000000D0000000B0000FC0C0000080D0000F70A0000000E0000000D0000000B0000CF0D0000F20C0000F20A0000000F0000000D0000000B0000A30E0000DC0C0000EC0A000000100000000D0000000B0000770F0000C60C0000E60A000000000000000E0000000B000067020000490F0000460B000000010000000E0000000B00003B030000320F0000400B000000020000000E0000000B00000E0400001B0F00003A0B000000030000000E0000000B0000E2040000050F0000340B000000040000000E0000000B0000B6050000EE0E00002E0B000000050000000E0000000B000089060000D70E0000280B000000060000000E0000000B00005D070000C10E0000230B000000070000000E0000000B000030080000AA0E00001D0B000000080000000E0000000B000004090000930E0000170B000000090000000E0000000B0000D80900007D0E0000110B0000000A0000000E0000000B0000AB0A0000660E00000B0B0000000B0000000E0000000B00007F0B0000500E0000050B0000000C0000000E0000000B0000520C0000390E0000000B0000000D0000000E0000000B0000260D0000220E0000FA0A0000000E0000000E0000000B0000FA0D00000C0E0000F40A0000000F0000000E0000000B0000CD0E0000F50D0000EE0A000000100000000E0000000B0000A10F0000DE0D0000E80A000000000000000F0000000B000092020000FF0F0000480B000000010000000F0000000B000065030000FF0F0000430B000000020000000F0000000B000039040000FF0F00003D0B000000030000000F0000000B00000C050000FF0F0000370B000000040000000F0000000B0000E0050000FF0F0000310B000000050000000F0000000B0000B4060000F40F00002B0B000000060000000F0000000B000087070000DD0F0000250B000000070000000F0000000B00005B080000C60F00001F0B000000080000000F0000000B00002E090000AF0F0000190B000000090000000F0000000B0000020A0000980F0000140B0000000A0000000F0000000B0000D60A0000810F00000E0B0000000B0000000F0000000B0000A90B00006A0F0000080B0000000C0000000F0000000B00007D0C0000530F0000020B0000000D0000000F0000000B0000500D00003C0F0000FC0A0000000E0000000F0000000B0000240E0000250F0000F60A0000000F0000000F0000000B0000F80E00000E0F0000F00A000000100000000F0000000B0000CB0F0000F70E0000EA0A00000000000000100000000B0000BC020000FF0F00004B0B00000001000000100000000B000090030000FF0F0000450B00000002000000100000000B000063040000FF0F00003F0B00000003000000100000000B000037050000FF0F0000390B00000004000000100000000B00000A060000FF0F0000340B00000005000000100000000B0000DE060000FF0F00002E0B00000006000000100000000B0000B2070000FF0F0000280B00000007000000100000000B000085080000FF0F0000220B00000008000000100000000B000059090000FF0F00001C0B00000009000000100000000B00002C0A0000FF0F0000160B0000000A000000100000000B0000000B0000FF0F0000100B0000000B000000100000000B0000D40B0000FF0F00000A0B0000000C000000100000000B0000A70C0000FF0F0000040B0000000D000000100000000B00007B0D0000FF0F0000FE0A0000000E000000100000000B00004E0E0000FF0F0000F80A0000000F000000100000000B0000220F0000FF0F0000F20A00000010000000100000000B0000F60F0000FF0F0000ED0A00000000000000000000000C00001800000000000000210C00000001000000000000000C0000EC000000000000001C0C00000002000000000000000C0000C001000000000000170C00000003000000000000000C00009402000000000000120C00000004000000000000000C000068030000000000000D0C00000005000000000000000C00003C04000000000000080C00000006000000000000000C00001005000000000000020C00000007000000000000000C0000E405000000000000FD0B00000008000000000000000C0000B706000000000000F80B00000009000000000000000C00008B07000000000000F30B0000000A000000000000000C00005F08000000000000EE0B0000000B000000000000000C00003309000000000000E90B0000000C000000000000000C0000070A000000000000E40B0000000D000000000000000C0000DB0A000000000000DE0B0000000E000000000000000C0000AF0B000000000000D90B0000000F000000000000000C0000830C000000000000D40B00000010000000000000000C0000570D000000000000CF0B00000000000000010000000C000042000000AF000000240C00000001000000010000000C0000160100009E0000001F0C00000002000000010000000C0000EA0100008C0000001A0C00000003000000010000000C0000BE0200007B000000150C00000004000000010000000C0000920300006A0000000F0C00000005000000010000000C000066040000580000000A0C00000006000000010000000C00003A05000047000000050C00000007000000010000000C00000E06000036000000000C00000008000000010000000C0000E206000025000000FB0B00000009000000010000000C0000B607000013000000F50B0000000A000000010000000C00008A08000002000000F00B0000000B000000010000000C00005D09000000000000EB0B0000000C000000010000000C0000310A000000000000E60B0000000D000000010000000C0000050B000000000000E10B0000000E000000010000000C0000D90B000000000000DB0B0000000F000000010000000C0000AD0C000000000000D60B00000010000000010000000C0000810D000000000000D10B00000000000000020000000C00006D000000CE010000270C00000001000000020000000C000041010000BC010000220C00000002000000020000000C000015020000AA0100001D0C00000003000000020000000C0000E902000099010000170C00000004000000020000000C0000BC03000087010000120C00000005000000020000000C000090040000750100000D0C00000006000000020000000C00006405000064010000080C00000007000000020000000C00003806000052010000020C00000008000000020000000C00000C07000040010000FD0B00000009000000020000000C0000E00700002F010000F80B0000000A000000020000000C0000B40800001D010000F30B0000000B000000020000000C0000880900000B010000ED0B0000000C000000020000000C00005B0A0000F9000000E80B0000000D000000020000000C00002F0B0000E8000000E30B0000000E000000020000000C0000030C0000D6000000DE0B0000000F000000020000000C0000D70C0000C4000000D80B00000010000000020000000C0000AB0D0000B3000000D30B00000000000000030000000C000097000000ED0200002A0C00000001000000030000000C00006B010000DB020000250C00000002000000030000000C00003F020000C9020000200C00000003000000030000000C000013030000B60200001A0C00000004000000030000000C0000E7030000A4020000150C00000005000000030000000C0000BB04000092020000100C00000006000000030000000C00008E050000800200000A0C00000007000000030000000C0000620600006E020000050C00000008000000030000000C0000360700005C020000000C00000009000000030000000C00000A0800004A020000FA0B0000000A000000030000000C0000DE08000038020000F50B0000000B000000030000000C0000B209000026020000F00B0000000C000000030000000C0000860A000014020000EA0B0000000D000000030000000C0000590B000002020000E50B0000000E000000030000000C00002D0C0000EF010000E00B0000000F000000030000000C0000010D0000DD010000DA0B00000010000000030000000C0000D50D0000CB010000D50B00000000000000040000000C0000C20000000C0400002D0C00000001000000040000000C000096010000F9030000280C00000002000000040000000C000069020000E7030000220C00000003000000040000000C00003D030000D40300001D0C00000004000000040000000C000011040000C2030000180C00000005000000040000000C0000E5040000AF030000120C00000006000000040000000C0000B90500009D0300000D0C00000007000000040000000C00008D0600008A030000080C00000008000000040000000C00006007000078030000020C00000009000000040000000C00003408000065030000FD0B0000000A000000040000000C00000809000053030000F70B0000000B000000040000000C0000DC09000040030000F20B0000000C000000040000000C0000B00A00002E030000ED0B0000000D000000040000000C0000840B00001B030000E70B0000000E000000040000000C0000570C000009030000E20B0000000F000000040000000C00002B0D0000F6020000DD0B00000010000000040000000C0000FF0D0000E4020000D70B00000000000000050000000C0000EC0000002A050000300C00000001000000050000000C0000C0010000180500002B0C00000002000000050000000C00009402000005050000250C00000003000000050000000C000068030000F2040000200C00000004000000050000000C00003B040000DF0400001A0C00000005000000050000000C00000F050000CC040000150C00000006000000050000000C0000E3050000B9040000100C00000007000000050000000C0000B7060000A60400000A0C00000008000000050000000C00008B07000094040000050C00000009000000050000000C00005E08000081040000FF0B0000000A000000050000000C0000320900006E040000FA0B0000000B000000050000000C0000060A00005B040000F40B0000000C000000050000000C0000DA0A000048040000EF0B0000000D000000050000000C0000AE0B000035040000EA0B0000000E000000050000000C0000810C000022040000E40B0000000F000000050000000C0000550D00000F040000DF0B00000010000000050000000C0000290E0000FD030000D90B00000000000000060000000C00001701000049060000330C00000001000000060000000C0000EB010000360600002E0C00000002000000060000000C0000BE02000023060000280C00000003000000060000000C0000920300000F060000230C00000004000000060000000C000066040000FC0500001D0C00000005000000060000000C00003A050000E9050000180C00000006000000060000000C00000D060000D6050000120C00000007000000060000000C0000E1060000C20500000D0C00000008000000060000000C0000B5070000AF050000070C00000009000000060000000C0000890800009C050000020C0000000A000000060000000C00005C09000089050000FC0B0000000B000000060000000C0000300A000076050000F70B0000000C000000060000000C0000040B000062050000F10B0000000D000000060000000C0000D80B00004F050000EC0B0000000E000000060000000C0000AB0C00003C050000E60B0000000F000000060000000C00007F0D000029050000E10B00000010000000060000000C0000530E000015050000DB0B00000000000000070000000C00004101000068070000360C00000001000000070000000C00001502000054070000300C00000002000000070000000C0000E9020000410700002B0C00000003000000070000000C0000BC0300002D070000250C00000004000000070000000C0000900400001A070000200C00000005000000070000000C000064050000060700001A0C00000006000000070000000C000038060000F2060000150C00000007000000070000000C00000B070000DF0600000F0C00000008000000070000000C0000DF070000CB0600000A0C00000009000000070000000C0000B3080000B7060000040C0000000A000000070000000C000087090000A4060000FF0B0000000B000000070000000C00005A0A000090060000F90B0000000C000000070000000C00002E0B00007C060000F30B0000000D000000070000000C0000020C000069060000EE0B0000000E000000070000000C0000D50C000055060000E80B0000000F000000070000000C0000A90D000042060000E30B00000010000000070000000C00007D0E00002E060000DD0B00000000000000080000000C00006C01000087080000390C00000001000000080000000C00003F02000073080000330C00000002000000080000000C0000130300005F0800002E0C00000003000000080000000C0000E70300004B080000280C00000004000000080000000C0000BA04000037080000230C00000005000000080000000C00008E050000230800001D0C00000006000000080000000C0000620600000F080000170C00000007000000080000000C000036070000FB070000120C00000008000000080000000C000009080000E70700000C0C00000009000000080000000C0000DD080000D3070000070C0000000A000000080000000C0000B1090000BF070000010C0000000B000000080000000C0000840A0000AB070000FB0B0000000C000000080000000C0000580B000097070000F60B0000000D000000080000000C00002C0C000083070000F00B0000000E000000080000000C0000000D00006F070000EB0B0000000F000000080000000C0000D30D00005B070000E50B00000010000000080000000C0000A70E000047070000DF0B00000000000000090000000C000096010000A60900003C0C00000001000000090000000C00006A02000091090000360C00000002000000090000000C00003D0300007D090000310C00000003000000090000000C000011040000680900002B0C00000004000000090000000C0000E504000054090000250C00000005000000090000000C0000B805000040090000200C00000006000000090000000C00008C0600002B0900001A0C00000007000000090000000C00006007000017090000140C00000008000000090000000C000034080000020900000F0C00000009000000090000000C000007090000EE080000090C0000000A000000090000000C0000DB090000DA080000030C0000000B000000090000000C0000AF0A0000C5080000FE0B0000000C000000090000000C0000820B0000B1080000F80B0000000D000000090000000C0000560C00009C080000F20B0000000E000000090000000C00002A0D000088080000ED0B0000000F000000090000000C0000FD0D000074080000E70B00000010000000090000000C0000D10E00005F080000E10B000000000000000A0000000C0000C1010000C50A00003F0C000000010000000A0000000C000094020000B00A0000390C000000020000000A0000000C0000680300009B0A0000330C000000030000000A0000000C00003C040000860A00002E0C000000040000000A0000000C00000F050000710A0000280C000000050000000A0000000C0000E30500005D0A0000220C000000060000000A0000000C0000B6060000480A00001D0C000000070000000A0000000C00008A070000330A0000170C000000080000000A0000000C00005E0800001E0A0000110C000000090000000A0000000C000031090000090A00000B0C0000000A0000000A0000000C0000050A0000F5090000060C0000000B0000000A0000000C0000D90A0000E0090000000C0000000C0000000A0000000C0000AC0B0000CB090000FA0B0000000D0000000A0000000C0000800C0000B6090000F50B0000000E0000000A0000000C0000540D0000A1090000EF0B0000000F0000000A0000000C0000270E00008D090000E90B000000100000000A0000000C0000FB0E000078090000E30B000000000000000B0000000C0000EB010000E30B0000420C000000010000000B0000000C0000BF020000CE0B00003C0C000000020000000B0000000C000092030000B90B0000360C000000030000000B0000000C000066040000A40B0000310C000000040000000B0000000C00003A0500008F0B00002B0C000000050000000B0000000C00000D060000790B0000250C000000060000000B0000000C0000E1060000640B00001F0C000000070000000B0000000C0000B40700004F0B0000190C000000080000000B0000000C0000880800003A0B0000140C000000090000000B0000000C00005C090000250B00000E0C0000000A0000000B0000000C00002F0A0000100B0000080C0000000B0000000B0000000C0000030B0000FA0A0000020C0000000C0000000B0000000C0000D60B0000E50A0000FD0B0000000D0000000B0000000C0000AA0C0000D00A0000F70B0000000E0000000B0000000C00007E0D0000BB0A0000F10B0000000F0000000B0000000C0000510E0000A60A0000EB0B000000100000000B0000000C0000250F0000910A0000E50B000000000000000C0000000C000016020000020D0000450C000000010000000C0000000C0000E9020000ED0C00003F0C000000020000000C0000000C0000BD030000D70C0000390C000000030000000C0000000C000090040000C20C0000330C000000040000000C0000000C000064050000AC0C00002D0C000000050000000C0000000C000037060000960C0000280C000000060000000C0000000C00000B070000810C0000220C000000070000000C0000000C0000DF0700006B0C00001C0C000000080000000C0000000C0000B2080000560C0000160C000000090000000C0000000C000086090000400C0000100C0000000A0000000C0000000C0000590A00002B0C00000A0C0000000B0000000C0000000C00002D0B0000150C0000050C0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B0000000D0000000C0000000C0000D40C0000EA0B0000F90B0000000E0000000C0000000C0000A80D0000D40B0000F30B0000000F0000000C0000000C00007B0E0000BF0B0000ED0B000000100000000C0000000C00004F0F0000A90B0000E70B000000000000000D0000000C000040020000210E0000480C000000010000000D0000000C0000140300000B0E0000420C000000020000000D0000000C0000E7030000F50D00003C0C000000030000000D0000000C0000BB040000DF0D0000360C000000040000000D0000000C00008E050000C90D0000300C000000050000000D0000000C000062060000B30D00002A0C000000060000000D0000000C0000350700009D0D0000240C000000070000000D0000000C000009080000870D00001F0C000000080000000D0000000C0000DC080000710D0000190C000000090000000D0000000C0000B00900005C0D0000130C0000000A0000000D0000000C0000840A0000460D00000D0C0000000B0000000D0000000C0000570B0000300D0000070C0000000C0000000D0000000C00002B0C00001A0D0000010C0000000D0000000D0000000C0000FE0C0000040D0000FB0B0000000E0000000D0000000C0000D20D0000EE0C0000F50B0000000F0000000D0000000C0000A50E0000D80C0000EF0B000000100000000D0000000C0000790F0000C20C0000EA0B000000000000000E0000000C00006A020000400F00004B0C000000010000000E0000000C00003E0300002A0F0000450C000000020000000E0000000C000011040000130F00003F0C000000030000000E0000000C0000E5040000FD0E0000390C000000040000000E0000000C0000B9050000E70E0000330C000000050000000E0000000C00008C060000D00E00002D0C000000060000000E0000000C000060070000BA0E0000270C000000070000000E0000000C000033080000A40E0000210C000000080000000E0000000C0000070900008D0E00001B0C000000090000000E0000000C0000DA090000770E0000150C0000000A0000000E0000000C0000AE0A0000610E00000F0C0000000B0000000E0000000C0000810B00004A0E0000090C0000000C0000000E0000000C0000550C0000340E0000030C0000000D0000000E0000000C0000280D00001E0E0000FD0B0000000E0000000E0000000C0000FC0D0000070E0000F70B0000000F0000000E0000000C0000CF0E0000F10D0000F10B000000100000000E0000000C0000A30F0000DB0D0000EC0B000000000000000F0000000C000095020000FF0F00004E0C000000010000000F0000000C000068030000FF0F0000480C000000020000000F0000000C00003C040000FF0F0000420C000000030000000F0000000C00000F050000FF0F00003C0C000000040000000F0000000C0000E3050000FF0F0000360C000000050000000F0000000C0000B6060000ED0F0000300C000000060000000F0000000C00008A070000D60F00002A0C000000070000000F0000000C00005D080000C00F0000240C000000080000000F0000000C000031090000A90F00001E0C000000090000000F0000000C0000040A0000920F0000180C0000000A0000000F0000000C0000D80A00007C0F0000120C0000000B0000000F0000000C0000AB0B0000650F00000C0C0000000C0000000F0000000C00007F0C00004E0F0000060C0000000D0000000F0000000C0000520D0000370F0000000C0000000E0000000F0000000C0000260E0000210F0000FA0B0000000F0000000F0000000C0000F90E00000A0F0000F40B000000100000000F0000000C0000CD0F0000F30E0000EE0B00000000000000100000000C0000BF020000FF0F0000510C00000001000000100000000C000093030000FF0F00004B0C00000002000000100000000C000066040000FF0F0000450C00000003000000100000000C00003A050000FF0F00003E0C00000004000000100000000C00000D060000FF0F0000380C00000005000000100000000C0000E1060000FF0F0000320C00000006000000100000000C0000B4070000FF0F00002C0C00000007000000100000000C000088080000FF0F0000260C00000008000000100000000C00005B090000FF0F0000200C00000009000000100000000C00002F0A0000FF0F00001A0C0000000A000000100000000C0000020B0000FF0F0000140C0000000B000000100000000C0000D50B0000FF0F00000E0C0000000C000000100000000C0000A90C0000FF0F0000080C0000000D000000100000000C00007C0D0000FF0F0000020C0000000E000000100000000C0000500E0000FF0F0000FC0B0000000F000000100000000C0000230F0000FF0F0000F60B00000010000000100000000C0000F70F0000FF0F0000F00B00000000000000000000000D00001A00000000000000240D00000001000000000000000D0000EE000000000000001F0D00000002000000000000000D0000C2010000000000001A0D00000003000000000000000D00009702000000000000150D00000004000000000000000D00006B03000000000000100D00000005000000000000000D00003F040000000000000B0D00000006000000000000000D00001305000000000000060D00000007000000000000000D0000E805000000000000010D00000008000000000000000D0000BC06000000000000FC0C00000009000000000000000D00009007000000000000F70C0000000A000000000000000D00006408000000000000F20C0000000B000000000000000D00003909000000000000EE0C0000000C000000000000000D00000D0A000000000000E90C0000000D000000000000000D0000E10A000000000000E40C0000000E000000000000000D0000B50B000000000000DF0C0000000F000000000000000D00008A0C000000000000DA0C00000010000000000000000D00005E0D000000000000D50C00000000000000010000000D000045000000A6000000270D00000001000000010000000D00001901000095000000220D00000002000000010000000D0000ED010000840000001D0D00000003000000010000000D0000C102000073000000180D00000004000000010000000D00009503000062000000130D00000005000000010000000D000069040000510000000E0D00000006000000010000000D00003E05000040000000090D00000007000000010000000D0000120600002F000000040D00000008000000010000000D0000E60600001E000000FF0C00000009000000010000000D0000BA0700000D000000FA0C0000000A000000010000000D00008E08000000000000F50C0000000B000000010000000D00006309000000000000F00C0000000C000000010000000D0000370A000000000000EB0C0000000D000000010000000D00000B0B000000000000E60C0000000E000000010000000D0000DF0B000000000000E10C0000000F000000010000000D0000B30C000000000000DC0C00000010000000010000000D0000870D000000000000D70C00000000000000020000000D00006F000000C50100002A0D00000001000000020000000D000043010000B4010000250D00000002000000020000000D000017020000A2010000200D00000003000000020000000D0000EB020000910100001B0D00000004000000020000000D0000C00300007F010000160D00000005000000020000000D0000940400006E010000110D00000006000000020000000D0000680500005D0100000C0D00000007000000020000000D00003C0600004B010000070D00000008000000020000000D0000100700003A010000010D00000009000000020000000D0000E407000029010000FC0C0000000A000000020000000D0000B808000017010000F70C0000000B000000020000000D00008C09000006010000F20C0000000C000000020000000D0000610A0000F4000000ED0C0000000D000000020000000D0000350B0000E3000000E80C0000000E000000020000000D0000090C0000D2000000E30C0000000F000000020000000D0000DD0C0000C0000000DE0C00000010000000020000000D0000B10D0000AF000000D80C00000000000000030000000D00009A000000E40200002E0D00000001000000030000000D00006E010000D2020000280D00000002000000030000000D000042020000C0020000230D00000003000000030000000D000016030000AF0200001E0D00000004000000030000000D0000EA0300009D020000190D00000005000000030000000D0000BE0400008B020000140D00000006000000030000000D000092050000790200000E0D00000007000000030000000D00006606000067020000090D00000008000000030000000D00003A07000056020000040D00000009000000030000000D00000E08000044020000FF0C0000000A000000030000000D0000E208000032020000FA0C0000000B000000030000000D0000B609000020020000F40C0000000C000000030000000D00008A0A00000F020000EF0C0000000D000000030000000D00005F0B0000FD010000EA0C0000000E000000030000000D0000330C0000EB010000E50C0000000F000000030000000D0000070D0000D9010000DF0C00000010000000030000000D0000DB0D0000C8010000DA0C00000000000000040000000D0000C400000003040000310D00000001000000040000000D000098010000F10300002B0D00000002000000040000000D00006C020000DE030000260D00000003000000040000000D000040030000CC030000210D00000004000000040000000D000014040000BA0300001C0D00000005000000040000000D0000E8040000A8030000160D00000006000000040000000D0000BC05000096030000110D00000007000000040000000D000090060000840300000C0D00000008000000040000000D00006407000071030000060D00000009000000040000000D0000380800005F030000010D0000000A000000040000000D00000C0900004D030000FC0C0000000B000000040000000D0000E00900003B030000F70C0000000C000000040000000D0000B40A000029030000F10C0000000D000000040000000D0000880B000017030000EC0C0000000E000000040000000D00005C0C000005030000E70C0000000F000000040000000D0000300D0000F2020000E10C00000010000000040000000D0000040E0000E0020000DC0C00000000000000050000000D0000EF00000022050000340D00000001000000050000000D0000C30100000F0500002E0D00000002000000050000000D000097020000FC040000290D00000003000000050000000D00006B030000EA040000240D00000004000000050000000D00003F040000D70400001E0D00000005000000050000000D000012050000C5040000190D00000006000000050000000D0000E6050000B2040000140D00000007000000050000000D0000BA060000A00400000E0D00000008000000050000000D00008E0700008D040000090D00000009000000050000000D0000620800007B040000040D0000000A000000050000000D00003609000068040000FE0C0000000B000000050000000D00000A0A000056040000F90C0000000C000000050000000D0000DE0A000043040000F30C0000000D000000050000000D0000B20B000031040000EE0C0000000E000000050000000D0000860C00001E040000E90C0000000F000000050000000D00005A0D00000B040000E30C00000010000000050000000D00002E0E0000F9030000DE0C00000000000000060000000D00001901000040060000370D00000001000000060000000D0000ED0100002D060000320D00000002000000060000000D0000C10200001B0600002C0D00000003000000060000000D00009503000008060000270D00000004000000060000000D000069040000F5050000210D00000005000000060000000D00003D050000E20500001C0D00000006000000060000000D000011060000CF050000160D00000007000000060000000D0000E5060000BC050000110D00000008000000060000000D0000B8070000A90500000B0D00000009000000060000000D00008C08000096050000060D0000000A000000060000000D00006009000083050000010D0000000B000000060000000D0000340A000070050000FB0C0000000C000000060000000D0000080B00005D050000F60C0000000D000000060000000D0000DC0B00004A050000F00C0000000E000000060000000D0000B00C000037050000EB0C0000000F000000060000000D0000840D000024050000E50C00000010000000060000000D0000580E000012050000E00C00000000000000070000000D0000440100005F0700003A0D00000001000000070000000D0000180200004C070000350D00000002000000070000000D0000EB020000390700002F0D00000003000000070000000D0000BF030000250700002A0D00000004000000070000000D00009304000012070000240D00000005000000070000000D000067050000FF0600001E0D00000006000000070000000D00003B060000EB060000190D00000007000000070000000D00000F070000D8060000130D00000008000000070000000D0000E3070000C50600000E0D00000009000000070000000D0000B6080000B1060000080D0000000A000000070000000D00008A0900009E060000030D0000000B000000070000000D00005E0A00008B060000FD0C0000000C000000070000000D0000320B000077060000F80C0000000D000000070000000D0000060C000064060000F20C0000000E000000070000000D0000DA0C000051060000ED0C0000000F000000070000000D0000AD0D00003E060000E70C00000010000000070000000D0000810E00002A060000E20C00000000000000080000000D00006E0100007E0800003D0D00000001000000080000000D0000420200006A080000380D00000002000000080000000D00001603000057080000320D00000003000000080000000D0000EA030000430800002C0D00000004000000080000000D0000BD0400002F080000270D00000005000000080000000D0000910500001C080000210D00000006000000080000000D000065060000080800001C0D00000007000000080000000D000039070000F4070000160D00000008000000080000000D00000D080000E0070000100D00000009000000080000000D0000E0080000CD0700000B0D0000000A000000080000000D0000B4090000B9070000050D0000000B000000080000000D0000880A0000A5070000000D0000000C000000080000000D00005C0B000092070000FA0C0000000D000000080000000D0000300C00007E070000F40C0000000E000000080000000D0000030D00006A070000EF0C0000000F000000080000000D0000D70D000057070000E90C00000010000000080000000D0000AB0E000043070000E40C00000000000000090000000D0000990100009D090000400D00000001000000090000000D00006D020000890900003B0D00000002000000090000000D00004003000075090000350D00000003000000090000000D000014040000610900002F0D00000004000000090000000D0000E80400004D0900002A0D00000005000000090000000D0000BC05000038090000240D00000006000000090000000D00008F060000240900001E0D00000007000000090000000D00006307000010090000190D00000008000000090000000D000037080000FC080000130D00000009000000090000000D00000A090000E80800000D0D0000000A000000090000000D0000DE090000D4080000080D0000000B000000090000000D0000B20A0000C0080000020D0000000C000000090000000D0000860B0000AC080000FC0C0000000D000000090000000D0000590C000098080000F70C0000000E000000090000000D00002D0D000084080000F10C0000000F000000090000000D0000010E000070080000EB0C00000010000000090000000D0000D50E00005B080000E60C000000000000000A0000000D0000C3010000BC0A0000430D000000010000000A0000000D000097020000A70A00003E0D000000020000000A0000000D00006B030000930A0000380D000000030000000A0000000D00003E0400007E0A0000320D000000040000000A0000000D0000120500006A0A00002C0D000000050000000A0000000D0000E6050000550A0000270D000000060000000A0000000D0000B9060000410A0000210D000000070000000A0000000D00008D0700002C0A00001B0D000000080000000A0000000D000061080000180A0000150D000000090000000A0000000D000035090000030A0000100D0000000A0000000A0000000D0000080A0000EF0900000A0D0000000B0000000A0000000D0000DC0A0000DB090000040D0000000C0000000A0000000D0000B00B0000C6090000FE0C0000000D0000000A0000000D0000830C0000B2090000F90C0000000E0000000A0000000D0000570D00009D090000F30C0000000F0000000A0000000D00002B0E000089090000ED0C000000100000000A0000000D0000FE0E000074090000E70C000000000000000B0000000D0000EE010000DB0B0000470D000000010000000B0000000D0000C2020000C60B0000410D000000020000000B0000000D000095030000B10B00003B0D000000030000000B0000000D0000690400009C0B0000350D000000040000000B0000000D00003C050000870B00002F0D000000050000000B0000000D000010060000720B0000290D000000060000000B0000000D0000E40600005D0B0000240D000000070000000B0000000D0000B7070000490B00001E0D000000080000000B0000000D00008B080000340B0000180D000000090000000B0000000D00005F0900001F0B0000120D0000000A0000000B0000000D0000320A00000A0B00000C0D0000000B0000000B0000000D0000060B0000F50A0000060D0000000C0000000B0000000D0000D90B0000E00A0000010D0000000D0000000B0000000D0000AD0C0000CB0A0000FB0C0000000E0000000B0000000D0000810D0000B60A0000F50C0000000F0000000B0000000D0000540E0000A20A0000EF0C000000100000000B0000000D0000280F00008D0A0000E90C000000000000000C0000000D000018020000F90C00004A0D000000010000000C0000000D0000EC020000E40C0000440D000000020000000C0000000D0000C0030000CF0C00003E0D000000030000000C0000000D000093040000BA0C0000380D000000040000000C0000000D000067050000A40C0000320D000000050000000C0000000D00003A0600008F0C00002C0D000000060000000C0000000D00000E0700007A0C0000260D000000070000000C0000000D0000E1070000650C0000200D000000080000000C0000000D0000B50800004F0C00001A0D000000090000000C0000000D0000890900003A0C0000150D0000000A0000000C0000000D00005C0A0000250C00000F0D0000000B0000000C0000000D0000300B0000100C0000090D0000000C0000000C0000000D0000030C0000FA0B0000030D0000000D0000000C0000000D0000D70C0000E50B0000FD0C0000000E0000000C0000000D0000AA0D0000D00B0000F70C0000000F0000000C0000000D00007E0E0000BB0B0000F10C000000100000000C0000000D0000520F0000A50B0000EB0C000000000000000D0000000D000043020000180E00004D0D000000010000000D0000000D000017030000030E0000470D000000020000000D0000000D0000EA030000ED0D0000410D000000030000000D0000000D0000BE040000D70D00003B0D000000040000000D0000000D000091050000C20D0000350D000000050000000D0000000D000065060000AC0D00002F0D000000060000000D0000000D000038070000960D0000290D000000070000000D0000000D00000C080000810D0000230D000000080000000D0000000D0000DF0800006B0D00001D0D000000090000000D0000000D0000B3090000560D0000170D0000000A0000000D0000000D0000860A0000400D0000110D0000000B0000000D0000000D00005A0B00002A0D00000B0D0000000C0000000D0000000D00002D0C0000150D0000050D0000000D0000000D0000000D0000FF0C0000FF0C0000FF0C0000000E0000000D0000000D0000D40D0000E90C0000F90C0000000F0000000D0000000D0000A80E0000D40C0000F30C000000100000000D0000000D00007B0F0000BE0C0000ED0C000000000000000E0000000D00006E020000370F0000500D000000010000000E0000000D000041030000210F00004A0D000000020000000E0000000D0000140400000B0F0000440D000000030000000E0000000D0000E8040000F50E00003E0D000000040000000E0000000D0000BB050000DF0E0000380D000000050000000E0000000D00008F060000C90E0000320D000000060000000E0000000D000062070000B30E00002C0D000000070000000E0000000D0000360800009D0E0000250D000000080000000E0000000D000009090000870E00001F0D000000090000000E0000000D0000DD090000710E0000190D0000000A0000000E0000000D0000B00A00005B0E0000130D0000000B0000000E0000000D0000840B0000450E00000D0D0000000C0000000E0000000D0000570C00002F0E0000070D0000000D0000000E0000000D00002A0D0000190E0000010D0000000E0000000E0000000D0000FE0D0000030E0000FB0C0000000F0000000E0000000D0000D10E0000ED0D0000F50C000000100000000E0000000D0000A50F0000D70D0000EF0C000000000000000F0000000D000098020000FF0F0000530D000000010000000F0000000D00006C030000FF0F00004D0D000000020000000F0000000D00003F040000FF0F0000470D000000030000000F0000000D000012050000FF0F0000410D000000040000000F0000000D0000E6050000FC0F00003A0D000000050000000F0000000D0000B9060000E60F0000340D000000060000000F0000000D00008C070000D00F00002E0D000000070000000F0000000D000060080000B90F0000280D000000080000000F0000000D000033090000A30F0000220D000000090000000F0000000D0000070A00008C0F00001C0D0000000A0000000F0000000D0000DA0A0000760F0000160D0000000B0000000F0000000D0000AD0B00005F0F00000F0D0000000C0000000F0000000D0000810C0000490F0000090D0000000D0000000F0000000D0000540D0000330F0000030D0000000E0000000F0000000D0000280E00001C0F0000FD0C0000000F0000000F0000000D0000FB0E0000060F0000F70C000000100000000F0000000D0000CE0F0000EF0E0000F10C00000000000000100000000D0000C3020000FF0F0000560D00000001000000100000000D000096030000FF0F0000500D00000002000000100000000D000069040000FF0F00004A0D00000003000000100000000D00003D050000FF0F0000440D00000004000000100000000D000010060000FF0F00003D0D00000005000000100000000D0000E3060000FF0F0000370D00000006000000100000000D0000B7070000FF0F0000310D00000007000000100000000D00008A080000FF0F00002B0D00000008000000100000000D00005D090000FF0F0000240D00000009000000100000000D0000310A0000FF0F00001E0D0000000A000000100000000D0000040B0000FF0F0000180D0000000B000000100000000D0000D70B0000FF0F0000120D0000000C000000100000000D0000AB0C0000FF0F00000C0D0000000D000000100000000D00007E0D0000FF0F0000050D0000000E000000100000000D0000510E0000FF0F0000FF0C0000000F000000100000000D0000250F0000FF0F0000F90C00000010000000100000000D0000F80F0000FF0F0000F30C00000000000000000000000E00001C00000000000000270E00000001000000000000000E0000F100000000000000220E00000002000000000000000E0000C5010000000000001E0E00000003000000000000000E00009A02000000000000190E00000004000000000000000E00006E03000000000000140E00000005000000000000000E000043040000000000000F0E00000006000000000000000E000017050000000000000A0E00000007000000000000000E0000EC05000000000000060E00000008000000000000000E0000C006000000000000010E00000009000000000000000E00009507000000000000FC0D0000000A000000000000000E00006908000000000000F70D0000000B000000000000000E00003E09000000000000F20D0000000C000000000000000E0000120A000000000000ED0D0000000D000000000000000E0000E70A000000000000E90D0000000E000000000000000E0000BB0B000000000000E40D0000000F000000000000000E0000900C000000000000DF0D00000010000000000000000E0000650D000000000000DA0D00000000000000010000000E0000470000009D0000002A0E00000001000000010000000E00001B0100008D000000260E00000002000000010000000E0000F00100007C000000210E00000003000000010000000E0000C40200006B0000001C0E00000004000000010000000E0000980300005B000000170E00000005000000010000000E00006D0400004A000000120E00000006000000010000000E000041050000390000000D0E00000007000000010000000E00001606000029000000080E00000008000000010000000E0000EA06000018000000030E00000009000000010000000E0000BF07000007000000FE0D0000000A000000010000000E00009308000000000000F90D0000000B000000010000000E00006809000000000000F50D0000000C000000010000000E00003C0A000000000000F00D0000000D000000010000000E0000110B000000000000EB0D0000000E000000010000000E0000E50B000000000000E60D0000000F000000010000000E0000B90C000000000000E10D00000010000000010000000E00008E0D000000000000DC0D00000000000000020000000E000071000000BC0100002E0E00000001000000020000000E000046010000AB010000290E00000002000000020000000E00001A0200009A010000240E00000003000000020000000E0000EE020000890100001F0E00000004000000020000000E0000C3030000780100001A0E00000005000000020000000E00009704000067010000150E00000006000000020000000E00006B05000056010000100E00000007000000020000000E000040060000450100000B0E00000008000000020000000E00001407000034010000060E00000009000000020000000E0000E907000023010000010E0000000A000000020000000E0000BD08000012010000FC0D0000000B000000020000000E00009109000001010000F70D0000000C000000020000000E0000660A0000F0000000F20D0000000D000000020000000E00003A0B0000DE000000ED0D0000000E000000020000000E00000E0C0000CD000000E80D0000000F000000020000000E0000E30C0000BC000000E30D00000010000000020000000E0000B70D0000AB000000DE0D00000000000000030000000E00009C000000DB020000310E00000001000000030000000E000070010000C90200002C0E00000002000000030000000E000044020000B8020000270E00000003000000030000000E000019030000A7020000220E00000004000000030000000E0000ED030000950200001D0E00000005000000030000000E0000C104000084020000180E00000006000000030000000E00009605000072020000120E00000007000000030000000E00006A060000610200000D0E00000008000000030000000E00003E0700004F020000080E00000009000000030000000E0000120800003E020000030E0000000A000000030000000E0000E70800002D020000FE0D0000000B000000030000000E0000BB0900001B020000F90D0000000C000000030000000E00008F0A00000A020000F40D0000000D000000030000000E0000640B0000F8010000EF0D0000000E000000030000000E0000380C0000E7010000EA0D0000000F000000030000000E00000C0D0000D5010000E50D00000010000000030000000E0000E00D0000C4010000DF0D00000000000000040000000E0000C7000000FA030000340E00000001000000040000000E00009B010000E80300002F0E00000002000000040000000E00006F020000D60300002A0E00000003000000040000000E000043030000C4030000250E00000004000000040000000E000017040000B20300001F0E00000005000000040000000E0000EC040000A10300001A0E00000006000000040000000E0000C00500008F030000150E00000007000000040000000E0000940600007D030000100E00000008000000040000000E0000680700006B0300000B0E00000009000000040000000E00003C08000059030000060E0000000A000000040000000E00001109000048030000000E0000000B000000040000000E0000E509000036030000FB0D0000000C000000040000000E0000B90A000024030000F60D0000000D000000040000000E00008D0B000012030000F10D0000000E000000040000000E0000610C000000030000EC0D0000000F000000040000000E0000360D0000EE020000E60D00000010000000040000000E00000A0E0000DD020000E10D00000000000000050000000E0000F100000019050000380E00000001000000050000000E0000C501000006050000320E00000002000000050000000E000099020000F40400002D0E00000003000000050000000E00006E030000E2040000280E00000004000000050000000E000042040000D0040000220E00000005000000050000000E000016050000BE0400001D0E00000006000000050000000E0000EA050000AB040000180E00000007000000050000000E0000BE06000099040000130E00000008000000050000000E000092070000870400000D0E00000009000000050000000E00006608000075040000080E0000000A000000050000000E00003A09000063040000030E0000000B000000050000000E00000E0A000050040000FD0D0000000C000000050000000E0000E30A00003E040000F80D0000000D000000050000000E0000B70B00002C040000F30D0000000E000000050000000E00008B0C00001A040000ED0D0000000F000000050000000E00005F0D000007040000E80D00000010000000050000000E0000330E0000F5030000E30D00000000000000060000000E00001C010000380600003B0E00000001000000060000000E0000F001000025060000350E00000002000000060000000E0000C402000012060000300E00000003000000060000000E000098030000000600002B0E00000004000000060000000E00006C040000ED050000250E00000005000000060000000E000040050000DA050000200E00000006000000060000000E000014060000C80500001A0E00000007000000060000000E0000E8060000B5050000150E00000008000000060000000E0000BC070000A3050000100E00000009000000060000000E000090080000900500000A0E0000000A000000060000000E0000640900007D050000050E0000000B000000060000000E0000380A00006B050000000E0000000C000000060000000E00000C0B000058050000FA0D0000000D000000060000000E0000E00B000046050000F50D0000000E000000060000000E0000B40C000033050000EF0D0000000F000000060000000E0000880D000020050000EA0D00000010000000060000000E00005C0E00000E050000E50D00000000000000070000000E000046010000560700003E0E00000001000000070000000E00001A02000043070000390E00000002000000070000000E0000EE02000030070000330E00000003000000070000000E0000C20300001D0700002E0E00000004000000070000000E0000960400000A070000280E00000005000000070000000E00006A050000F7060000230E00000006000000070000000E00003E060000E40600001D0E00000007000000070000000E000012070000D1060000180E00000008000000070000000E0000E6070000BE060000120E00000009000000070000000E0000BA080000AB0600000D0E0000000A000000070000000E00008E09000098060000070E0000000B000000070000000E0000620A000085060000020E0000000C000000070000000E0000360B000072060000FC0D0000000D000000070000000E00000A0C00005F060000F70D0000000E000000070000000E0000DE0C00004C060000F10D0000000F000000070000000E0000B20D000039060000EC0D00000010000000070000000E0000860E000026060000E60D00000000000000080000000E00007101000075080000410E00000001000000080000000E000045020000620800003C0E00000002000000080000000E0000190300004E080000360E00000003000000080000000E0000ED0300003B080000310E00000004000000080000000E0000C1040000280800002B0E00000005000000080000000E00009405000014080000250E00000006000000080000000E00006806000001080000200E00000007000000080000000E00003C070000EE0700001A0E00000008000000080000000E000010080000DA070000150E00000009000000080000000E0000E4080000C70700000F0E0000000A000000080000000E0000B8090000B30700000A0E0000000B000000080000000E00008C0A0000A0070000040E0000000C000000080000000E00005F0B00008D070000FE0D0000000D000000080000000E0000330C000079070000F90D0000000E000000080000000E0000070D000066070000F30D0000000F000000080000000E0000DB0D000052070000EE0D00000010000000080000000E0000AF0E00003F070000E80D00000000000000090000000E00009C01000094090000450E00000001000000090000000E00006F020000800900003F0E00000002000000090000000E0000430300006D090000390E00000003000000090000000E00001704000059090000340E00000004000000090000000E0000EB040000450900002E0E00000005000000090000000E0000BF05000031090000280E00000006000000090000000E0000920600001D090000230E00000007000000090000000E0000660700000A0900001D0E00000008000000090000000E00003A080000F6080000170E00000009000000090000000E00000E090000E2080000120E0000000A000000090000000E0000E2090000CE0800000C0E0000000B000000090000000E0000B50A0000BB080000060E0000000C000000090000000E0000890B0000A7080000000E0000000D000000090000000E00005D0C000093080000FB0D0000000E000000090000000E0000310D00007F080000F50D0000000F000000090000000E0000040E00006B080000EF0D00000010000000090000000E0000D80E000058080000EA0D000000000000000A0000000E0000C6010000B30A0000480E000000010000000A0000000E00009A0200009F0A0000420E000000020000000A0000000E00006E0300008B0A00003C0E000000030000000A0000000E000041040000760A0000370E000000040000000A0000000E000015050000620A0000310E000000050000000A0000000E0000E90500004E0A00002B0E000000060000000A0000000E0000BD0600003A0A0000250E000000070000000A0000000E000090070000260A00001F0E000000080000000A0000000E000064080000120A00001A0E000000090000000A0000000E000038090000FD090000140E0000000A0000000A0000000E00000B0A0000E90900000E0E0000000B0000000A0000000E0000DF0A0000D5090000080E0000000C0000000A0000000E0000B30B0000C1090000030E0000000D0000000A0000000E0000860C0000AD090000FD0D0000000E0000000A0000000E00005A0D000099090000F70D0000000F0000000A0000000E00002E0E000084090000F10D000000100000000A0000000E0000020F000070090000EB0D000000000000000B0000000E0000F1010000D20B00004B0E000000010000000B0000000E0000C4020000BD0B0000450E000000020000000B0000000E000098030000A90B00003F0E000000030000000B0000000E00006C040000940B00003A0E000000040000000B0000000E00003F050000800B0000340E000000050000000B0000000E0000130600006B0B00002E0E000000060000000B0000000E0000E7060000570B0000280E000000070000000B0000000E0000BA070000420B0000220E000000080000000B0000000E00008E0800002D0B00001C0E000000090000000B0000000E000062090000190B0000160E0000000A0000000B0000000E0000350A0000040B0000100E0000000B0000000B0000000E0000090B0000F00A00000B0E0000000C0000000B0000000E0000DC0B0000DB0A0000050E0000000D0000000B0000000E0000B00C0000C70A0000FF0D0000000E0000000B0000000E0000840D0000B20A0000F90D0000000F0000000B0000000E0000570E00009D0A0000F30D000000100000000B0000000E00002B0F0000890A0000ED0D000000000000000C0000000E00001B020000F10C00004F0E000000010000000C0000000E0000EF020000DC0C0000490E000000020000000C0000000E0000C3030000C70C0000430E000000030000000C0000000E000096040000B20C00003D0E000000040000000C0000000E00006A0500009D0C0000370E000000050000000C0000000E00003D060000880C0000310E000000060000000C0000000E000011070000730C00002B0E000000070000000C0000000E0000E40700005E0C0000250E000000080000000C0000000E0000B8080000490C00001F0E000000090000000C0000000E00008B090000340C0000190E0000000A0000000C0000000E00005F0A00001F0C0000130E0000000B0000000C0000000E0000320B00000A0C00000D0E0000000C0000000C0000000E0000060C0000F50B0000070E0000000D0000000C0000000E0000DA0C0000E00B0000010E0000000E0000000C0000000E0000AD0D0000CB0B0000FB0D0000000F0000000C0000000E0000810E0000B70B0000F50D000000100000000C0000000E0000540F0000A20B0000EF0D000000000000000D0000000E000046020000100E0000520E000000010000000D0000000E00001A030000FA0D00004C0E000000020000000D0000000E0000ED030000E50D0000460E000000030000000D0000000E0000C0040000D00D0000400E000000040000000D0000000E000094050000BA0D0000390E000000050000000D0000000E000067060000A50D0000330E000000060000000D0000000E00003B070000900D00002D0E000000070000000D0000000E00000E0800007A0D0000270E000000080000000D0000000E0000E2080000650D0000210E000000090000000D0000000E0000B5090000500D00001B0E0000000A0000000D0000000E0000890A00003A0D0000150E0000000B0000000D0000000E00005C0B0000250D00000F0E0000000C0000000D0000000E0000300C0000100D0000090E0000000D0000000D0000000E0000030D0000FA0C0000030E0000000E0000000D0000000E0000D70D0000E50C0000FD0D0000000F0000000D0000000E0000AA0E0000D00C0000F70D000000100000000D0000000E00007D0F0000BA0C0000F10D000000000000000E0000000E0000710200002E0F0000550E000000010000000E0000000E000044030000190F00004F0E000000020000000E0000000E000017040000030F0000490E000000030000000E0000000E0000EB040000ED0E0000430E000000040000000E0000000E0000BE050000D80E00003C0E000000050000000E0000000E000092060000C20E0000360E000000060000000E0000000E000065070000AC0E0000300E000000070000000E0000000E000038080000960E00002A0E000000080000000E0000000E00000C090000810E0000240E000000090000000E0000000E0000DF0900006B0E00001E0E0000000A0000000E0000000E0000B30A0000550E0000170E0000000B0000000E0000000E0000860B00003F0E0000110E0000000C0000000E0000000E0000590C00002A0E00000B0E0000000D0000000E0000000E00002D0D0000140E0000050E0000000E0000000E0000000E0000FF0D0000FF0D0000FF0D0000000F0000000E0000000E0000D30E0000E90D0000F80D000000100000000E0000000E0000A70F0000D30D0000F20D000000000000000F0000000E00009B020000FF0F0000580E000000010000000F0000000E00006F030000FF0F0000520E000000020000000F0000000E000042040000FF0F00004C0E000000030000000F0000000E000015050000FF0F0000460E000000040000000F0000000E0000E9050000F50F00003F0E000000050000000F0000000E0000BC060000DF0F0000390E000000060000000F0000000E00008F070000C90F0000330E000000070000000F0000000E000062080000B30F00002C0E000000080000000F0000000E0000360900009C0F0000260E000000090000000F0000000E0000090A0000860F0000200E0000000A0000000F0000000E0000DC0A0000700F00001A0E0000000B0000000F0000000E0000B00B00005A0F0000130E0000000C0000000F0000000E0000830C0000440F00000D0E0000000D0000000F0000000E0000560D00002E0F0000070E0000000E0000000F0000000E00002A0E0000180F0000010E0000000F0000000F0000000E0000FD0E0000020F0000FA0D000000100000000F0000000E0000D00F0000EB0E0000F40D00000000000000100000000E0000C6020000FF0F00005C0E00000001000000100000000E000099030000FF0F0000550E00000002000000100000000E00006C040000FF0F00004F0E00000003000000100000000E000040050000FF0F0000490E00000004000000100000000E000013060000FF0F0000420E00000005000000100000000E0000E6060000FF0F00003C0E00000006000000100000000E0000B9070000FF0F0000350E00000007000000100000000E00008C080000FF0F00002F0E00000008000000100000000E000060090000FF0F0000290E00000009000000100000000E0000330A0000FF0F0000220E0000000A000000100000000E0000060B0000FF0F00001C0E0000000B000000100000000E0000D90B0000FF0F0000160E0000000C000000100000000E0000AD0C0000FF0F00000F0E0000000D000000100000000E0000800D0000FF0F0000090E0000000E000000100000000E0000530E0000FF0F0000020E0000000F000000100000000E0000260F0000FF0F0000FC0D00000010000000100000000E0000F90F0000FF0F0000F60D00000000000000000000000F00001E000000000000002A0F00000001000000000000000F0000F300000000000000250F00000002000000000000000F0000C801000000000000210F00000003000000000000000F00009D020000000000001C0F00000004000000000000000F00007103000000000000180F00000005000000000000000F00004604000000000000130F00000006000000000000000F00001B050000000000000E0F00000007000000000000000F0000F0050000000000000A0F00000008000000000000000F0000C506000000000000050F00000009000000000000000F00009A07000000000000000F0000000A000000000000000F00006E08000000000000FC0E0000000B000000000000000F00004309000000000000F70E0000000C000000000000000F0000180A000000000000F20E0000000D000000000000000F0000ED0A000000000000EE0E0000000E000000000000000F0000C20B000000000000E90E0000000F000000000000000F0000960C000000000000E50E00000010000000000000000F00006B0D000000000000E00E00000000000000010000000F000049000000940000002E0F00000001000000010000000F00001E01000084000000290F00000002000000010000000F0000F201000074000000240F00000003000000010000000F0000C7020000630000001F0F00000004000000010000000F00009C030000530000001B0F00000005000000010000000F00007004000043000000160F00000006000000010000000F00004505000032000000110F00000007000000010000000F00001A060000220000000C0F00000008000000010000000F0000EF06000012000000080F00000009000000010000000F0000C307000001000000030F0000000A000000010000000F00009808000000000000FE0E0000000B000000010000000F00006D09000000000000F90E0000000C000000010000000F0000410A000000000000F40E0000000D000000010000000F0000160B000000000000F00E0000000E000000010000000F0000EB0B000000000000EB0E0000000F000000010000000F0000C00C000000000000E60E00000010000000010000000F0000940D000000000000E10E00000000000000020000000F000073000000B3010000310F00000001000000020000000F000048010000A20100002C0F00000002000000020000000F00001D02000092010000270F00000003000000020000000F0000F102000081010000220F00000004000000020000000F0000C6030000700100001D0F00000005000000020000000F00009B04000060010000190F00000006000000020000000F00006F0500004F010000140F00000007000000020000000F0000440600003E0100000F0F00000008000000020000000F0000180700002D0100000A0F00000009000000020000000F0000ED0700001D010000050F0000000A000000020000000F0000C20800000C010000000F0000000B000000020000000F000096090000FB000000FB0E0000000C000000020000000F00006B0A0000EB000000F60E0000000D000000020000000F00003F0B0000DA000000F20E0000000E000000020000000F0000140C0000C9000000ED0E0000000F000000020000000F0000E90C0000B8000000E80E00000010000000020000000F0000BD0D0000A8000000E30E00000000000000030000000F00009E000000D2020000340F00000001000000030000000F000073010000C10200002F0F00000002000000030000000F000047020000B00200002A0F00000003000000030000000F00001C0300009F020000250F00000004000000030000000F0000F00300008E020000200F00000005000000030000000F0000C50400007C0200001B0F00000006000000030000000F0000990500006B020000160F00000007000000030000000F00006E0600005A020000110F00000008000000030000000F000042070000490200000C0F00000009000000030000000F00001708000038020000080F0000000A000000030000000F0000EB08000027020000030F0000000B000000030000000F0000C009000016020000FE0E0000000C000000030000000F0000940A000005020000F90E0000000D000000030000000F0000690B0000F4010000F40E0000000E000000030000000F00003D0C0000E3010000EF0E0000000F000000030000000F0000120D0000D1010000EA0E00000010000000030000000F0000E60D0000C0010000E50E00000000000000040000000F0000C9000000F1030000380F00000001000000040000000F00009D010000DF030000330F00000002000000040000000F000072020000CE0300002E0F00000003000000040000000F000046030000BC030000290F00000004000000040000000F00001A040000AB030000230F00000005000000040000000F0000EF040000990300001E0F00000006000000040000000F0000C305000088030000190F00000007000000040000000F00009806000076030000140F00000008000000040000000F00006C070000650300000F0F00000009000000040000000F000040080000530300000A0F0000000A000000040000000F00001509000042030000050F0000000B000000040000000F0000E909000030030000000F0000000C000000040000000F0000BE0A00001F030000FB0E0000000D000000040000000F0000920B00000D030000F50E0000000E000000040000000F0000660C0000FC020000F00E0000000F000000040000000F00003B0D0000EA020000EB0E00000010000000040000000F00000F0E0000D9020000E60E00000000000000050000000F0000F4000000100500003B0F00000001000000050000000F0000C8010000FE040000360F00000002000000050000000F00009C020000EC040000310F00000003000000050000000F000070030000DA0400002C0F00000004000000050000000F000045040000C8040000260F00000005000000050000000F000019050000B6040000210F00000006000000050000000F0000ED050000A40400001C0F00000007000000050000000F0000C206000093040000170F00000008000000050000000F00009607000081040000110F00000009000000050000000F00006A0800006F0400000C0F0000000A000000050000000F00003E0900005D040000070F0000000B000000050000000F0000130A00004B040000020F0000000C000000050000000F0000E70A000039040000FD0E0000000D000000050000000F0000BB0B000027040000F70E0000000E000000050000000F0000900C000015040000F20E0000000F000000050000000F0000640D000003040000ED0E00000010000000050000000F0000380E0000F2030000E80E00000000000000060000000F00001E0100002F0600003F0F00000001000000060000000F0000F20100001C060000390F00000002000000060000000F0000C70200000A060000340F00000003000000060000000F00009B030000F80500002F0F00000004000000060000000F00006F040000E6050000290F00000005000000060000000F000043050000D3050000240F00000006000000060000000F000017060000C10500001F0F00000007000000060000000F0000EC060000AF050000190F00000008000000060000000F0000C00700009C050000140F00000009000000060000000F0000940800008A0500000F0F0000000A000000060000000F00006809000078050000090F0000000B000000060000000F00003C0A000066050000040F0000000C000000060000000F0000100B000053050000FF0E0000000D000000060000000F0000E50B000041050000F90E0000000E000000060000000F0000B90C00002F050000F40E0000000F000000060000000F00008D0D00001C050000EF0E00000010000000060000000F0000610E00000A050000E90E00000000000000070000000F0000490100004E070000420F00000001000000070000000F00001D0200003B0700003D0F00000002000000070000000F0000F102000028070000370F00000003000000070000000F0000C503000016070000320F00000004000000070000000F000099040000030700002C0F00000005000000070000000F00006D050000F0060000270F00000006000000070000000F000041060000DD060000210F00000007000000070000000F000015070000CB0600001C0F00000008000000070000000F0000EA070000B8060000160F00000009000000070000000F0000BE080000A5060000110F0000000A000000070000000F000092090000930600000C0F0000000B000000070000000F0000660A000080060000060F0000000C000000070000000F00003A0B00006D060000010F0000000D000000070000000F00000E0C00005B060000FB0E0000000E000000070000000F0000E20C000048060000F60E0000000F000000070000000F0000B60D000035060000F00E00000010000000070000000F00008A0E000023060000EB0E00000000000000080000000F0000740100006C080000460F00000001000000080000000F00004802000059080000400F00000002000000080000000F00001C030000460800003A0F00000003000000080000000F0000F003000033080000350F00000004000000080000000F0000C4040000200800002F0F00000005000000080000000F0000970500000D0800002A0F00000006000000080000000F00006B060000FA070000240F00000007000000080000000F00003F070000E70700001F0F00000008000000080000000F000013080000D4070000190F00000009000000080000000F0000E7080000C1070000130F0000000A000000080000000F0000BB090000AE0700000E0F0000000B000000080000000F00008F0A00009B070000080F0000000C000000080000000F0000630B000088070000030F0000000D000000080000000F0000370C000075070000FD0E0000000E000000080000000F00000B0D000061070000F80E0000000F000000080000000F0000DF0D00004E070000F20E00000010000000080000000F0000B30E00003B070000EC0E00000000000000090000000F00009E0100008B090000490F00000001000000090000000F00007202000078090000430F00000002000000090000000F000046030000640900003E0F00000003000000090000000F00001A04000051090000380F00000004000000090000000F0000EE0400003D090000320F00000005000000090000000F0000C20500002A0900002D0F00000006000000090000000F00009506000017090000270F00000007000000090000000F00006907000003090000210F00000008000000090000000F00003D080000F00800001B0F00000009000000090000000F000011090000DC080000160F0000000A000000090000000F0000E5090000C9080000100F0000000B000000090000000F0000B90A0000B50800000A0F0000000C000000090000000F00008D0B0000A2080000050F0000000D000000090000000F0000600C00008E080000FF0E0000000E000000090000000F0000340D00007B080000F90E0000000F000000090000000F0000080E000067080000F40E00000010000000090000000F0000DC0E000054080000EE0E000000000000000A0000000F0000C9010000AA0A00004C0F000000010000000A0000000F00009D020000960A0000470F000000020000000A0000000F000071030000830A0000410F000000030000000A0000000F0000440400006F0A00003B0F000000040000000A0000000F0000180500005B0A0000350F000000050000000A0000000F0000EC050000470A00002F0F000000060000000A0000000F0000C0060000330A00002A0F000000070000000A0000000F0000930700001F0A0000240F000000080000000A0000000F0000670800000B0A00001E0F000000090000000A0000000F00003B090000F8090000180F0000000A0000000A0000000F00000E0A0000E4090000120F0000000B0000000A0000000F0000E20A0000D00900000D0F0000000C0000000A0000000F0000B60B0000BC090000070F0000000D0000000A0000000F00008A0C0000A8090000010F0000000E0000000A0000000F00005D0D000094090000FB0E0000000F0000000A0000000F0000310E000080090000F50E000000100000000A0000000F0000050F00006D090000EF0E000000000000000B0000000F0000F4010000C90B0000500F000000010000000B0000000F0000C7020000B50B00004A0F000000020000000B0000000F00009B030000A10B0000440F000000030000000B0000000F00006F0400008C0B00003E0F000000040000000B0000000F000042050000780B0000380F000000050000000B0000000F000016060000640B0000320F000000060000000B0000000F0000EA060000500B00002C0F000000070000000B0000000F0000BD0700003B0B0000260F000000080000000B0000000F000091080000270B0000200F000000090000000B0000000F000064090000130B00001B0F0000000A0000000B0000000F0000380A0000FF0A0000150F0000000B0000000B0000000F00000C0B0000EA0A00000F0F0000000C0000000B0000000F0000DF0B0000D60A0000090F0000000D0000000B0000000F0000B30C0000C20A0000030F0000000E0000000B0000000F0000870D0000AE0A0000FD0E0000000F0000000B0000000F00005A0E0000990A0000F70E000000100000000B0000000F00002E0F0000850A0000F10E000000000000000C0000000F00001E020000E80C0000530F000000010000000C0000000F0000F2020000D30C00004D0F000000020000000C0000000F0000C6030000BF0C0000470F000000030000000C0000000F000099040000AA0C0000410F000000040000000C0000000F00006D050000950C00003B0F000000050000000C0000000F000040060000810C0000350F000000060000000C0000000F0000140700006C0C00002F0F000000070000000C0000000F0000E7070000580C0000290F000000080000000C0000000F0000BB080000430C0000230F000000090000000C0000000F00008E0900002E0C00001D0F0000000A0000000C0000000F0000620A00001A0C0000170F0000000B0000000C0000000F0000350B0000050C0000110F0000000C0000000C0000000F0000090C0000F00B00000B0F0000000D0000000C0000000F0000DC0C0000DC0B0000050F0000000E0000000C0000000F0000B00D0000C70B0000FF0E0000000F0000000C0000000F0000830E0000B20B0000F90E000000100000000C0000000F0000570F00009E0B0000F30E000000000000000D0000000F000049020000070E0000570F000000010000000D0000000F00001D030000F20D0000510F000000020000000D0000000F0000F0030000DD0D00004A0F000000030000000D0000000F0000C3040000C80D0000440F000000040000000D0000000F000097050000B30D00003E0F000000050000000D0000000F00006A0600009E0D0000380F000000060000000D0000000F00003E070000890D0000320F000000070000000D0000000F000011080000740D00002C0F000000080000000D0000000F0000E40800005F0D0000250F000000090000000D0000000F0000B80900004A0D00001F0F0000000A0000000D0000000F00008B0A0000350D0000190F0000000B0000000D0000000F00005F0B0000200D0000130F0000000C0000000D0000000F0000320C00000A0D00000D0F0000000D0000000D0000000F0000060D0000F50C0000070F0000000E0000000D0000000F0000D90D0000E00C0000000F0000000F0000000D0000000F0000AC0E0000CB0C0000FA0E000000100000000D0000000F0000800F0000B60C0000F40E000000000000000E0000000F000074020000260F00005A0F000000010000000E0000000F000047030000100F0000540F000000020000000E0000000F00001A040000FB0E00004E0F000000030000000E0000000F0000EE040000E60E0000470F000000040000000E0000000F0000C1050000D00E0000410F000000050000000E0000000F000094060000BB0E00003B0F000000060000000E0000000F000068070000A50E0000350F000000070000000E0000000F00003B080000900E00002E0F000000080000000E0000000F00000E0900007A0E0000280F000000090000000E0000000F0000E2090000650E0000220F0000000A0000000E0000000F0000B50A00004F0E00001B0F0000000B0000000E0000000F0000880B00003A0E0000150F0000000C0000000E0000000F00005C0C0000250E00000F0F0000000D0000000E0000000F00002F0D00000F0E0000090F0000000E0000000E0000000F0000020E0000FA0D0000020F0000000F0000000E0000000F0000D50E0000E40D0000FC0E000000100000000E0000000F0000A90F0000CF0D0000F60E000000000000000F0000000F00009F020000FF0F00005E0F000000010000000F0000000F000072030000FF0F0000570F000000020000000F0000000F000045040000FF0F0000510F000000030000000F0000000F000018050000FF0F00004A0F000000040000000F0000000F0000EB050000ED0F0000440F000000050000000F0000000F0000BF060000D80F00003E0F000000060000000F0000000F000092070000C20F0000370F000000070000000F0000000F000065080000AC0F0000310F000000080000000F0000000F000038090000960F00002A0F000000090000000F0000000F00000B0A0000800F0000240F0000000A0000000F0000000F0000DF0A00006A0F00001E0F0000000B0000000F0000000F0000B20B0000550F0000170F0000000C0000000F0000000F0000850C00003F0F0000110F0000000D0000000F0000000F0000580D0000290F00000A0F0000000E0000000F0000000F00002B0E0000130F0000040F0000000F0000000F0000000F0000FF0E0000FF0E0000FF0E000000100000000F0000000F0000D20F0000E80E0000F70E00000000000000100000000F0000C9020000FF0F0000610F00000001000000100000000F00009C030000FF0F00005B0F00000002000000100000000F00006F040000FF0F0000540F00000003000000100000000F000043050000FF0F00004E0F00000004000000100000000F000016060000FF0F0000470F00000005000000100000000F0000E9060000FF0F0000400F00000006000000100000000F0000BC070000FF0F00003A0F00000007000000100000000F00008F080000FF0F0000330F00000008000000100000000F000062090000FF0F00002D0F00000009000000100000000F0000350A0000FF0F0000260F0000000A000000100000000F0000080B0000FF0F0000200F0000000B000000100000000F0000DB0B0000FF0F0000190F0000000C000000100000000F0000AE0C0000FF0F0000130F0000000D000000100000000F0000810D0000FF0F00000C0F0000000E000000100000000F0000550E0000FF0F0000060F0000000F000000100000000F0000280F0000FF0F0000FF0E00000010000000100000000F0000FB0F0000FF0F0000F90E00000000000000000000001000002000000000000000FF0F0000000100000000000000100000F500000000000000FF0F0000000200000000000000100000CA01000000000000FF0F0000000300000000000000100000A002000000000000FF0F00000004000000000000001000007503000000000000FF0F00000005000000000000001000004A04000000000000FF0F00000006000000000000001000001F05000000000000FF0F0000000700000000000000100000F405000000000000FF0F0000000800000000000000100000C906000000000000FF0F00000009000000000000001000009E07000000000000FF0F0000000A000000000000001000007308000000000000FF0F0000000B000000000000001000004809000000000000FC0F0000000C000000000000001000001E0A000000000000F70F0000000D00000000000000100000F30A000000000000F30F0000000E00000000000000100000C80B000000000000EE0F0000000F000000000000001000009D0C000000000000EA0F0000001000000000000000100000720D000000000000E50F00000000000000010000001000004B0000008B000000FF0F0000000100000001000000100000200100007B000000FF0F0000000200000001000000100000F50100006B000000FF0F0000000300000001000000100000CA0200005B000000FF0F00000004000000010000001000009F0300004B000000FF0F0000000500000001000000100000740400003B000000FF0F0000000600000001000000100000490500002B000000FF0F00000007000000010000001000001E0600001B000000FF0F0000000800000001000000100000F30600000B000000FF0F0000000900000001000000100000C807000000000000FF0F0000000A000000010000001000009D08000000000000FF0F0000000B000000010000001000007209000000000000FE0F0000000C00000001000000100000470A000000000000F90F0000000D000000010000001000001C0B000000000000F50F0000000E00000001000000100000F10B000000000000F00F0000000F00000001000000100000C60C000000000000EC0F00000010000000010000001000009B0D000000000000E70F000000000000000200000010000076000000AA010000FF0F00000001000000020000001000004B0100009A010000FF0F00000002000000020000001000001F02000089010000FF0F0000000300000002000000100000F402000079010000FF0F0000000400000002000000100000C903000069010000FF0F00000005000000020000001000009E04000058010000FF0F00000006000000020000001000007305000048010000FF0F00000007000000020000001000004806000038010000FF0F00000008000000020000001000001D07000027010000FF0F0000000900000002000000100000F107000017010000FF0F0000000A00000002000000100000C608000006010000FF0F0000000B000000020000001000009B090000F6000000FF0F0000000C00000002000000100000700A0000E6000000FB0F0000000D00000002000000100000450B0000D5000000F70F0000000E000000020000001000001A0C0000C5000000F20F0000000F00000002000000100000EE0C0000B4000000ED0F0000001000000002000000100000C30D0000A4000000E80F0000000000000003000000100000A0000000C9020000FF0F000000010000000300000010000075010000B8020000FF0F00000002000000030000001000004A020000A8020000FF0F00000003000000030000001000001F03000097020000FF0F0000000400000003000000100000F303000086020000FF0F0000000500000003000000100000C804000075020000FF0F00000006000000030000001000009D05000064020000FF0F00000007000000030000001000007106000054020000FF0F00000008000000030000001000004607000043020000FF0F00000009000000030000001000001B08000032020000FF0F0000000A00000003000000100000F008000021020000FF0F0000000B00000003000000100000C409000011020000FF0F0000000C00000003000000100000990A000000020000FD0F0000000D000000030000001000006E0B0000EF010000F80F0000000E00000003000000100000430C0000DE010000F30F0000000F00000003000000100000170D0000CD010000EF0F0000001000000003000000100000EC0D0000BD010000EA0F0000000000000004000000100000CB000000E8030000FF0F0000000100000004000000100000A0010000D7030000FF0F000000020000000400000010000074020000C6030000FF0F000000030000000400000010000049030000B4030000FF0F00000004000000040000001000001E040000A3030000FF0F0000000500000004000000100000F204000092030000FF0F0000000600000004000000100000C705000081030000FF0F00000007000000040000001000009B06000070030000FF0F0000000800000004000000100000700700005F030000FF0F0000000900000004000000100000440800004D030000FF0F0000000A00000004000000100000190900003C030000FF0F0000000B00000004000000100000EE0900002B030000FF0F0000000C00000004000000100000C20A00001A030000FF0F0000000D00000004000000100000970B000009030000FA0F0000000E000000040000001000006B0C0000F8020000F50F0000000F00000004000000100000400D0000E6020000F00F0000001000000004000000100000150E0000D5020000EB0F0000000000000005000000100000F600000007050000FF0F0000000100000005000000100000CA010000F5040000FF0F00000002000000050000001000009F020000E4040000FF0F000000030000000500000010000073030000D2040000FF0F000000040000000500000010000048040000C1040000FF0F00000005000000050000001000001C050000AF040000FF0F0000000600000005000000100000F10500009D040000FF0F0000000700000005000000100000C50600008C040000FF0F00000008000000050000001000009A0700007A040000FF0F00000009000000050000001000006E08000069040000FF0F0000000A000000050000001000004309000057040000FF0F0000000B00000005000000100000170A000046040000FF0F0000000C00000005000000100000EB0A000034040000FF0F0000000D00000005000000100000C00B000023040000FC0F0000000E00000005000000100000940C000011040000F70F0000000F00000005000000100000690D0000FF030000F20F00000010000000050000001000003D0E0000EE030000EC0F00000000000000060000001000002101000026060000FF0F0000000100000006000000100000F501000014060000FF0F0000000200000006000000100000C902000002060000FF0F00000003000000060000001000009E030000F0050000FF0F000000040000000600000010000072040000DE050000FF0F000000050000000600000010000046050000CC050000FF0F00000006000000060000001000001B060000BA050000FF0F0000000700000006000000100000EF060000A8050000FF0F0000000800000006000000100000C307000096050000FF0F00000009000000060000001000009808000084050000FF0F0000000A000000060000001000006C09000072050000FF0F0000000B00000006000000100000400A000060050000FF0F0000000C00000006000000100000150B00004E050000FF0F0000000D00000006000000100000E90B00003C050000FE0F0000000E00000006000000100000BD0C00002A050000F80F0000000F00000006000000100000910D000018050000F30F0000001000000006000000100000660E000006050000EE0F00000000000000070000001000004C01000045070000FF0F00000001000000070000001000002002000032070000FF0F0000000200000007000000100000F402000020070000FF0F0000000300000007000000100000C80300000E070000FF0F00000004000000070000001000009C040000FB060000FF0F000000050000000700000010000070050000E9060000FF0F000000060000000700000010000045060000D7060000FF0F000000070000000700000010000019070000C4060000FF0F0000000800000007000000100000ED070000B2060000FF0F0000000900000007000000100000C10800009F060000FF0F0000000A00000007000000100000950900008D060000FF0F0000000B000000070000001000006A0A00007B060000FF0F0000000C000000070000001000003E0B000068060000FF0F0000000D00000007000000100000120C000056060000FF0F0000000E00000007000000100000E60C000044060000FA0F0000000F00000007000000100000BA0D000031060000F50F00000010000000070000001000008E0E00001F060000EF0F00000000000000080000001000007601000064080000FF0F00000001000000080000001000004A02000051080000FF0F00000002000000080000001000001E0300003E080000FF0F0000000300000008000000100000F20300002B080000FF0F0000000400000008000000100000C704000019080000FF0F00000005000000080000001000009B05000006080000FF0F00000006000000080000001000006F060000F3070000FF0F000000070000000800000010000043070000E0070000FF0F000000080000000800000010000017080000CE070000FF0F0000000900000008000000100000EB080000BB070000FF0F0000000A00000008000000100000BF090000A8070000FF0F0000000B00000008000000100000930A000095070000FF0F0000000C00000008000000100000670B000083070000FF0F0000000D000000080000001000003B0C000070070000FF0F0000000E000000080000001000000F0D00005D070000FC0F0000000F00000008000000100000E30D00004A070000F60F0000001000000008000000100000B70E000038070000F10F0000000000000009000000100000A101000083090000FF0F0000000100000009000000100000750200006F090000FF0F0000000200000009000000100000490300005C090000FF0F00000003000000090000001000001D04000049090000FF0F0000000400000009000000100000F104000036090000FF0F0000000500000009000000100000C505000023090000FF0F00000006000000090000001000009906000010090000FF0F00000007000000090000001000006C070000FC080000FF0F000000080000000900000010000040080000E9080000FF0F000000090000000900000010000014090000D6080000FF0F0000000A00000009000000100000E8090000C3080000FF0F0000000B00000009000000100000BC0A0000B0080000FF0F0000000C00000009000000100000900B00009D080000FF0F0000000D00000009000000100000640C00008A080000FF0F0000000E00000009000000100000380D000076080000FD0F0000000F000000090000001000000C0E000063080000F80F0000001000000009000000100000E00E000050080000F20F000000000000000A000000100000CC010000A10A0000FF0F000000010000000A000000100000A00200008E0A0000FF0F000000020000000A000000100000730300007A0A0000FF0F000000030000000A00000010000047040000670A0000FF0F000000040000000A0000001000001B050000530A0000FF0F000000050000000A000000100000EF050000400A0000FF0F000000060000000A000000100000C30600002C0A0000FF0F000000070000000A00000010000096070000190A0000FF0F000000080000000A0000001000006A080000050A0000FF0F000000090000000A0000001000003E090000F2090000FF0F0000000A0000000A000000100000120A0000DE090000FF0F0000000B0000000A000000100000E50A0000CA090000FF0F0000000C0000000A000000100000B90B0000B7090000FF0F0000000D0000000A0000001000008D0C0000A3090000FF0F0000000E0000000A000000100000610D000090090000FF0F0000000F0000000A000000100000340E00007C090000F90F000000100000000A000000100000080F000069090000F30F000000000000000B000000100000F7010000C00B0000FF0F000000010000000B000000100000CA020000AC0B0000FF0F000000020000000B0000001000009E030000980B0000FF0F000000030000000B00000010000072040000850B0000FF0F000000040000000B00000010000045050000710B0000FF0F000000050000000B000000100000190600005D0B0000FF0F000000060000000B000000100000ED060000490B0000FF0F000000070000000B000000100000C0070000350B0000FF0F000000080000000B00000010000094080000210B0000FF0F000000090000000B000000100000670900000D0B0000FF0F0000000A0000000B0000001000003B0A0000F90A0000FF0F0000000B0000000B0000001000000F0B0000E50A0000FF0F0000000C0000000B000000100000E20B0000D10A0000FF0F0000000D0000000B000000100000B60C0000BD0A0000FF0F0000000E0000000B0000001000008A0D0000A90A0000FF0F0000000F0000000B0000001000005D0E0000950A0000FB0F000000100000000B000000100000310F0000810A0000F50F000000000000000C00000010000021020000DF0C0000FF0F000000010000000C000000100000F5020000CB0C0000FF0F000000020000000C000000100000C8030000B70C0000FF0F000000030000000C0000001000009C040000A20C0000FF0F000000040000000C0000001000006F0500008E0C0000FF0F000000050000000C000000100000430600007A0C0000FF0F000000060000000C00000010000016070000650C0000FF0F000000070000000C000000100000EA070000510C0000FF0F000000080000000C000000100000BD0800003D0C0000FF0F000000090000000C00000010000091090000280C0000FF0F0000000A0000000C000000100000640A0000140C0000FF0F0000000B0000000C000000100000380B0000000C0000FF0F0000000C0000000C0000001000000C0C0000EB0B0000FF0F0000000D0000000C000000100000DF0C0000D70B0000FF0F0000000E0000000C000000100000B30D0000C30B0000FF0F0000000F0000000C000000100000860E0000AE0B0000FC0F000000100000000C0000001000005A0F00009A0B0000F60F000000000000000D0000001000004C020000FE0D0000FF0F000000010000000D00000010000020030000E90D0000FF0F000000020000000D000000100000F3030000D50D0000FF0F000000030000000D000000100000C6040000C00D0000FF0F000000040000000D0000001000009A050000AB0D0000FF0F000000050000000D0000001000006D060000970D0000FF0F000000060000000D00000010000040070000820D0000FF0F000000070000000D000000100000140800006D0D0000FF0F000000080000000D000000100000E7080000580D0000FF0F000000090000000D000000100000BB090000440D0000FF0F0000000A0000000D0000001000008E0A00002F0D0000FF0F0000000B0000000D000000100000610B00001A0D0000FF0F0000000C0000000D000000100000350C0000050D0000FF0F0000000D0000000D000000100000080D0000F10C0000FF0F0000000E0000000D000000100000DB0D0000DC0C0000FF0F0000000F0000000D000000100000AF0E0000C70C0000FE0F000000100000000D000000100000820F0000B20C0000F80F000000000000000E000000100000770200001D0F0000FF0F000000010000000E0000001000004A030000080F0000FF0F000000020000000E0000001000001D040000F30E0000FF0F000000030000000E000000100000F1040000DE0E0000FF0F000000040000000E000000100000C4050000C90E0000FF0F000000050000000E00000010000097060000B30E0000FF0F000000060000000E0000001000006A0700009E0E0000FF0F000000070000000E0000001000003E080000890E0000FF0F000000080000000E00000010000011090000740E0000FF0F000000090000000E000000100000E40900005F0E0000FF0F0000000A0000000E000000100000B70A00004A0E0000FF0F0000000B0000000E0000001000008B0B0000350E0000FF0F0000000C0000000E0000001000005E0C0000200E0000FF0F0000000D0000000E000000100000310D00000A0E0000FF0F0000000E0000000E000000100000040E0000F50D0000FF0F0000000F0000000E000000100000D80E0000E00D0000FF0F000000100000000E000000100000AB0F0000CB0D0000F90F000000000000000F000000100000A2020000FF0F0000FF0F000000010000000F00000010000075030000FF0F0000FF0F000000020000000F00000010000048040000FF0F0000FF0F000000030000000F0000001000001B050000FB0F0000FF0F000000040000000F000000100000EE050000E60F0000FF0F000000050000000F000000100000C1060000D00F0000FF0F000000060000000F00000010000094070000BB0F0000FF0F000000070000000F00000010000067080000A50F0000FF0F000000080000000F0000001000003B090000900F0000FF0F000000090000000F0000001000000E0A00007A0F0000FF0F0000000A0000000F000000100000E10A0000650F0000FF0F0000000B0000000F000000100000B40B00004F0F0000FF0F0000000C0000000F000000100000870C00003A0F0000FF0F0000000D0000000F0000001000005A0D0000240F0000FF0F0000000E0000000F0000001000002D0E00000F0F0000FF0F0000000F0000000F000000100000000F0000F90E0000FF0F000000100000000F000000100000D30F0000E40E0000FA0F0000000000000010000000100000CD020000FF0F0000FF0F0000000100000010000000100000A0030000FF0F0000FF0F000000020000001000000010000073040000FF0F0000FF0F000000030000001000000010000045050000FF0F0000FF0F000000040000001000000010000018060000FF0F0000FF0F0000000500000010000000100000EB060000FF0F0000FF0F0000000600000010000000100000BE070000FF0F0000FF0F000000070000001000000010000091080000FF0F0000FF0F000000080000001000000010000064090000FF0F0000FF0F0000000900000010000000100000370A0000FF0F0000FF0F0000000A000000100000001000000A0B0000FF0F0000FF0F0000000B00000010000000100000DD0B0000FF0F0000FF0F0000000C00000010000000100000B00C0000FF0F0000FF0F0000000D00000010000000100000830D0000FF0F0000FF0F0000000E00000010000000100000560E0000FF0F0000FF0F0000000F00000010000000100000290F0000FF0F0000FF0F0000001000000010000000100000FF0F0000FF0F0000FF0F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000410300000000000000000000000800000000000000000000830600000000000000000000000C00000000000000000000C40900000000000000000000001000000000000000000000060D00000000000000000000000000000004000000000000A60000007604000002000000000400000004000000000000EC0300001D0400000000000000080000000400000000000032070000C303000000000000000C00000004000000000000780A00006A03000000000000001000000004000000000000BE0D000010030000000000000000000000080000000000004C010000F108000007000000000400000008000000000000960400009108000000000000000800000008000000000000E10700003208000000000000000C000000080000000000002C0B0000D307000000000000001000000008000000000000770E0000740700000000000000000000000C000000000000F20100006B0D00000B00000000040000000C00000000000041050000060D00000000000000080000000C00000000000090080000A10C000000000000000C0000000C000000000000E00B00003C0C00000000000000100000000C0000000000002F0F0000D70B00000000000000000000001000000000000098020000FF0F00000F000000000400000010000000000000EC050000FF0F0000000000000008000000100000000000003F090000FF0F000000000000000C00000010000000000000930C0000FF0F000000000000001000000010000000000000E70F0000FF0F00000000000000000000000000000004000008000000000000000A0400000004000000000000000400004E03000000000000F00300000008000000000000000400009406000000000000D6030000000C00000000000000040000DB09000000000000BC030000001000000000000000040000210D000000000000A2030000000000000004000000040000AF000000530400001104000000040000000400000004000000040000000400000004000000080000000400000004000041070000AA030000E0030000000C000000040000000400008B0A000056030000C8030000001000000004000000040000D40D000002030000AF03000000000000000800000004000056010000CD08000017040000000400000008000000040000A20400007308000001040000000800000008000000040000EE07000019080000EA030000000C000000080000000400003B0B0000BF070000D3030000001000000008000000040000870E000065070000BD03000000000000000C000000040000FE010000480D00001E04000000040000000C0000000400004D050000E80C00000904000000080000000C0000000400009C080000880C0000F4030000000C0000000C000000040000EB0B0000280C0000DF03000000100000000C0000000400003A0F0000C80B0000CA030000000000000010000000040000A5020000FF0F000025040000000400000010000000040000F7050000FF0F00001204000000080000001000000004000049090000FF0F0000FE030000000C000000100000000400009B0C0000FF0F0000EB030000001000000010000000040000ED0F0000FF0F0000D70300000000000000000000000800001000000000000000150800000004000000000000000800005B03000000000000FE070000000800000000000000080000A606000000000000E7070000000C00000000000000080000F109000000000000D00700000010000000000000000800003C0D000000000000B9070000000000000004000000080000B80000002F0400001F08000000040000000400000008000005040000E0030000080800000008000000040000000800005107000091030000F1070000000C000000040000000800009D0A000042030000DA070000001000000004000000080000E90D0000F3020000C307000000000000000800000008000061010000AA08000028080000000400000008000000080000AE0400005508000012080000000800000008000000080000000800000008000000080000000C00000008000000080000490B0000AB070000E5070000001000000008000000080000970E000056070000CE07000000000000000C0000000800000A020000250D00003208000000040000000C00000008000058050000CA0C00001B08000000080000000C000000080000A70800006F0C000005080000000C0000000C000000080000F60B0000140C0000EF07000000100000000C000000080000440F0000B90B0000D9070000000000000010000000080000B2020000FF0F00003B08000000040000001000000008000002060000FF0F00002508000000080000001000000008000052090000FF0F00000F080000000C00000010000000080000A20C0000FF0F0000F9070000001000000010000000080000F20F0000FF0F0000E30700000000000000000000000C00001800000000000000210C00000004000000000000000C000068030000000000000D0C00000008000000000000000C0000B706000000000000F80B0000000C000000000000000C0000070A000000000000E40B00000010000000000000000C0000570D000000000000CF0B00000000000000040000000C0000C20000000C0400002D0C00000004000000040000000C000011040000C2030000180C00000008000000040000000C00006007000078030000020C0000000C000000040000000C0000B00A00002E030000ED0B00000010000000040000000C0000FF0D0000E4020000D70B00000000000000080000000C00006C01000087080000390C00000004000000080000000C0000BA04000037080000230C00000008000000080000000C000009080000E70700000C0C0000000C000000080000000C0000580B000097070000F60B00000010000000080000000C0000A70E000047070000DF0B000000000000000C0000000C000016020000020D0000450C000000040000000C0000000C000064050000AC0C00002D0C000000080000000C0000000C0000B2080000560C0000160C0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B000000100000000C0000000C00004F0F0000A90B0000E70B00000000000000100000000C0000BF020000FF0F0000510C00000004000000100000000C00000D060000FF0F0000380C00000008000000100000000C00005B090000FF0F0000200C0000000C000000100000000C0000A90C0000FF0F0000080C00000010000000100000000C0000F70F0000FF0F0000F00B00000000000000000000001000002000000000000000FF0F00000004000000000000001000007503000000000000FF0F0000000800000000000000100000C906000000000000FF0F0000000C000000000000001000001E0A000000000000F70F0000001000000000000000100000720D000000000000E50F0000000000000004000000100000CB000000E8030000FF0F00000004000000040000001000001E040000A3030000FF0F0000000800000004000000100000700700005F030000FF0F0000000C00000004000000100000C20A00001A030000FF0F0000001000000004000000100000150E0000D5020000EB0F00000000000000080000001000007601000064080000FF0F0000000400000008000000100000C704000019080000FF0F000000080000000800000010000017080000CE070000FF0F0000000C00000008000000100000670B000083070000FF0F0000001000000008000000100000B70E000038070000F10F000000000000000C00000010000021020000DF0C0000FF0F000000040000000C0000001000006F0500008E0C0000FF0F000000080000000C000000100000BD0800003D0C0000FF0F0000000C0000000C0000001000000C0C0000EB0B0000FF0F000000100000000C0000001000005A0F00009A0B0000F60F0000000000000010000000100000CD020000FF0F0000FF0F000000040000001000000010000018060000FF0F0000FF0F000000080000001000000010000064090000FF0F0000FF0F0000000C00000010000000100000B00C0000FF0F0000FF0F0000001000000010000000100000FF0F0000FF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000500000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000002C0000003C00000048000000520000005B000000630000006A00000071000000770000007D00000082000000880000008D00000091000000960000009B0000009F000000A3000000A7000000AB000000AF000000B3000000B6000000BA000000BD000000C1000000C4000000C7000000CB000000CE000000D1000000D4000000D7000000DA000000DD000000DF000000E2000000E5000000E8000000EA000000ED000000F0000000F2000000F5000000F7000000FA000000FC000000FF000000010100000301000006010000080100000A0100000D0100000F010000110100001301000016010000180100001A0100001C0100001E01000020010000220100002401000026010000280100002A0100002C0100002E01000030010000320100003401000036010000380100003A0100003C0100003E0100003F01000041010000430100004501000047010000480100004A0100004C0100004E0100004F01000051010000530100005501000056010000580100005A0100005B0100005D0100005F0100006001000062010000640100006501000067010000680100006A0100006B0100006D0100006F010000700100007201000073010000750100007601000078010000790100007B0100007C0100007E0100007F010000810100008201000084010000850100008701000088010000890100008B0100008C0100008E0100008F010000910100009201000093010000950100009601000097010000990100009A0100009C0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A6010000A8010000A9010000AA010000AB010000AD010000AE010000AF010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BB010000BC010000BD010000BE010000C0010000C1010000C2010000C3010000C4010000C6010000C7010000C8010000C9010000CA010000CC010000CD010000CE010000CF010000D0010000D2010000D3010000D4010000D5010000D6010000D7010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003F02000040020000410200004202000043020000440200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004C0200004D0200004E0200004F0200005002000051020000520200005302000053020000540200005502000056020000570200005802000059020000590200005A0200005B0200005C0200005D0200005E0200005F0200005F02000060020000610200006202000063020000640200006502000065020000660200006702000068020000690200006A0200006A0200006B0200006C0200006D0200006E0200006F0200006F0200007002000071020000720200007302000073020000740200007502000076020000770200007802000078020000790200007A0200007B0200007C0200007C0200007D0200007E0200007F020000800200008002000081020000820200008302000084020000840200008502000086020000870200008702000088020000890200008A0200008B0200008B0200008C0200008D0200008E0200008F0200008F020000900200009102000092020000920200009302000094020000950200009502000096020000970200009802000099020000990200009A0200009B0200009C0200009C0200009D0200009E0200009F0200009F020000A0020000A1020000A2020000A2020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B5020000B6020000B6020000B7020000B8020000B8020000B9020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C4020000C5020000C5020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CC020000CC020000CD020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D3020000D3020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E1020000E2020000E2020000E3020000E4020000E4020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000EA020000EA020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000EF020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FB020000FB020000FC020000FD020000FD020000FE020000FE020000FF020000000300000003000001030000020300000203000003030000040300000403000005030000050300000603000007030000070300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F030000100300001003000011030000110300001203000013030000130300001403000015030000150300001603000016030000170300001803000018030000190300001A0300001A0300001B0300001B0300001C0300001D0300001D0300001E0300001E0300001F03000020030000200300002103000021030000220300002303000023030000240300002503000025030000260300002603000027030000280300002803000029030000290300002A0300002B0300002B0300002C0300002C0300002D0300002E0300002E0300002F0300002F03000030030000310300003103000032030000320300003303000034030000340300003503000035030000360300003603000037030000380300003803000039030000390300003A0300003B0300003B0300003C0300003C0300003D0300003E0300003E0300003F0300003F03000040030000400300004103000042030000420300004303000043030000440300004403000045030000460300004603000047030000470300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004D0300004D0300004E0300004E0300004F0300004F03000050030000510300005103000052030000520300005303000053030000540300005503000055030000560300005603000057030000570300005803000058030000590300005A0300005A0300005B0300005B0300005C0300005C0300005D0300005E0300005E0300005F0300005F0300006003000060030000610300006103000062030000630300006303000064030000640300006503000065030000660300006603000067030000670300006803000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000072030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F030000800300008003000081030000810300008203000083030000830300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F030000900300009003000091030000910300009203000092030000930300009303000094030000940300009503000095030000960300009603000097030000970300009803000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D6030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E6030000E7030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EE030000EF030000EF030000F0030000F0030000F1030000F1030000F2030000F2030000F3030000F3030000F4030000F4030000F4030000F5030000F5030000F6030000F6030000F7030000F7030000F8030000F8030000F9030000F9030000FA030000FA030000FA030000FB030000FB030000FC030000FC030000FD030000FD030000FE030000FE030000FF030000FF030000000000002800000037000000430000004C000000540000005B00000062000000680000006E00000073000000780000007D00000082000000860000008A0000008E00000092000000960000009A0000009E000000A1000000A5000000A8000000AB000000AE000000B2000000B5000000B8000000BB000000BE000000C0000000C3000000C6000000C9000000CB000000CE000000D0000000D3000000D6000000D8000000DA000000DD000000DF000000E2000000E4000000E6000000E8000000EB000000ED000000EF000000F1000000F3000000F5000000F8000000FA000000FC000000FE00000000010000020100000401000006010000080100000A0100000B0100000D0100000F01000011010000130100001501000017010000180100001A0100001C0100001E0100001F01000021010000230100002501000026010000280100002A0100002B0100002D0100002F0100003001000032010000330100003501000037010000380100003A0100003B0100003D0100003E010000400100004201000043010000450100004601000048010000490100004B0100004C0100004D0100004F010000500100005201000053010000550100005601000057010000590100005A0100005C0100005D0100005E01000060010000610100006301000064010000650100006701000068010000690100006B0100006C0100006D0100006E01000070010000710100007201000074010000750100007601000077010000790100007A0100007B0100007C0100007E0100007F01000080010000810100008301000084010000850100008601000087010000890100008A0100008B0100008C0100008D0100008F0100009001000091010000920100009301000094010000960100009701000098010000990100009A0100009B0100009C0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FC010000FD010000FE010000FF0100000002000001020000020200000302000003020000040200000502000006020000070200000802000009020000090200000A0200000B0200000C0200000D0200000E0200000E0200000F0200001002000011020000120200001302000013020000140200001502000016020000170200001802000018020000190200001A0200001B0200001C0200001D0200001D0200001E0200001F020000200200002102000021020000220200002302000024020000250200002502000026020000270200002802000029020000290200002A0200002B0200002C0200002D0200002D0200002E0200002F020000300200003102000031020000320200003302000034020000340200003502000036020000370200003802000038020000390200003A0200003B0200003B0200003C0200003D0200003E0200003E0200003F020000400200004102000041020000420200004302000044020000440200004502000046020000470200004702000048020000490200004A0200004A0200004B0200004C0200004D0200004D0200004E0200004F02000050020000500200005102000052020000520200005302000054020000550200005502000056020000570200005802000058020000590200005A0200005A0200005B0200005C0200005D0200005D0200005E0200005F0200005F02000060020000610200006202000062020000630200006402000064020000650200006602000066020000670200006802000069020000690200006A0200006B0200006B0200006C0200006D0200006D0200006E0200006F0200006F02000070020000710200007202000072020000730200007402000074020000750200007602000076020000770200007802000078020000790200007A0200007A0200007B0200007C0200007C0200007D0200007E0200007E0200007F0200008002000080020000810200008202000082020000830200008402000084020000850200008602000086020000870200008802000088020000890200008A0200008A0200008B0200008C0200008C0200008D0200008E0200008E0200008F0200008F0200009002000091020000910200009202000093020000930200009402000095020000950200009602000097020000970200009802000098020000990200009A0200009A0200009B0200009C0200009C0200009D0200009E0200009E0200009F0200009F020000A0020000A1020000A1020000A2020000A3020000A3020000A4020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000A9020000A9020000AA020000AB020000AB020000AC020000AD020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B1020000B2020000B3020000B3020000B4020000B4020000B5020000B6020000B6020000B7020000B7020000B8020000B9020000B9020000BA020000BA020000BB020000BC020000BC020000BD020000BD020000BE020000BF020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C6020000C7020000C8020000C8020000C9020000C9020000CA020000CA020000CB020000CC020000CC020000CD020000CD020000CE020000CF020000CF020000D0020000D0020000D1020000D1020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E4020000E5020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000E9020000EA020000EA020000EB020000EB020000EC020000ED020000ED020000EE020000EE020000EF020000EF020000F0020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F4020000F5020000F5020000F6020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FB020000FB020000FC020000FC020000FD020000FD020000FE020000FF020000FF020000000300000003000001030000010300000203000002030000030300000303000004030000040300000503000005030000060300000703000007030000080300000803000009030000090300000A0300000A0300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000F0300000F030000100300001103000011030000120300001203000013030000130300001403000014030000150300001503000016030000160300001703000017030000180300001803000019030000190300001A0300001A0300001B0300001B0300001C0300001C0300001D0300001D0300001E0300001E0300001F0300001F030000200300002003000021030000220300002203000023030000230300002403000024030000250300002503000026030000260300002703000027030000280300002803000029030000290300002A0300002A0300002B0300002B0300002C0300002C0300002D0300002D0300002E0300002E0300002F0300002F03000030030000300300003103000031030000320300003203000033030000330300003403000034030000350300003503000036030000360300003703000037030000380300003803000039030000390300003A0300003A0300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003E0300003F0300003F03000040030000400300004103000041030000420300004203000043030000430300004403000044030000450300004503000046030000460300004703000047030000480300004803000049030000490300004A0300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000050030000510300005103000052030000520300005303000053030000540300005403000054030000550300005503000056030000560300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005C0300005C0300005C0300005D0300005D0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000630300006303000063030000640300006403000065030000650300006603000066030000670300006703000068030000680300006903000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000072030000730300007303000073030000740300007403000075030000750300007603000076030000770300007703000078030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F03000080030000800300008003000081030000810300008203000082030000830300008303000084030000840300008403000085030000850300008603000086030000870300008703000088030000880300008803000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F0300008F03000090030000900300009103000091030000920300009203000092030000930300009303000094030000940300009503000095030000960300009603000096030000970300009703000098030000980300009903000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A5030000A6030000A6030000A7030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AD030000AE030000AE030000AF030000000000002B0000003B00000047000000510000005A00000062000000690000006F000000750000007B00000081000000860000008B0000009000000094000000990000009D000000A1000000A5000000A9000000AD000000B0000000B4000000B7000000BB000000BE000000C2000000C5000000C8000000CB000000CE000000D1000000D4000000D7000000DA000000DD000000DF000000E2000000E5000000E7000000EA000000ED000000EF000000F2000000F4000000F7000000F9000000FB000000FE00000000010000020100000501000007010000090100000C0100000E01000010010000120100001401000016010000180100001A0100001D0100001F01000021010000230100002501000027010000290100002A0100002C0100002E01000030010000320100003401000036010000380100003A0100003B0100003D0100003F0100004101000043010000440100004601000048010000490100004B0100004D0100004F0100005001000052010000540100005501000057010000590100005A0100005C0100005D0100005F0100006101000062010000640100006501000067010000680100006A0100006C0100006D0100006F010000700100007201000073010000750100007601000078010000790100007A0100007C0100007D0100007F010000800100008201000083010000850100008601000087010000890100008A0100008B0100008D0100008E01000090010000910100009201000094010000950100009601000098010000990100009A0100009C0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A6010000A7010000A9010000AA010000AB010000AC010000AE010000AF010000B0010000B1010000B3010000B4010000B5010000B6010000B8010000B9010000BA010000BB010000BC010000BE010000BF010000C0010000C1010000C2010000C4010000C5010000C6010000C7010000C8010000C9010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F02000010020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F02000020020000210200002202000023020000240200002502000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F02000030020000310200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003F0200004002000041020000420200004202000043020000440200004502000046020000470200004802000048020000490200004A0200004B0200004C0200004D0200004E0200004F0200004F0200005002000051020000520200005302000054020000540200005502000056020000570200005802000059020000590200005A0200005B0200005C0200005D0200005E0200005E0200005F0200006002000061020000620200006302000063020000640200006502000066020000670200006802000068020000690200006A0200006B0200006C0200006C0200006D0200006E0200006F020000700200007002000071020000720200007302000074020000740200007502000076020000770200007802000078020000790200007A0200007B0200007B0200007C0200007D0200007E0200007F0200007F020000800200008102000082020000820200008302000084020000850200008602000086020000870200008802000089020000890200008A0200008B0200008C0200008C0200008D0200008E0200008F0200008F020000900200009102000092020000920200009302000094020000950200009502000096020000970200009802000098020000990200009A0200009B0200009B0200009C0200009D0200009E0200009E0200009F020000A0020000A1020000A1020000A2020000A3020000A3020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B5020000B5020000B6020000B7020000B7020000B8020000B9020000BA020000BA020000BB020000BC020000BC020000BD020000BE020000BE020000BF020000C0020000C1020000C1020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CB020000CC020000CD020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D2020000D3020000D4020000D4020000D5020000D6020000D6020000D7020000D8020000D8020000D9020000DA020000DA020000DB020000DC020000DC020000DD020000DE020000DE020000DF020000DF020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E5020000E5020000E6020000E7020000E7020000E8020000E9020000E9020000EA020000EB020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000F0020000F0020000F1020000F2020000F2020000F3020000F4020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FB020000FC020000FC020000FD020000FE020000FE020000FF02000000030000000300000103000001030000020300000303000003030000040300000403000005030000060300000603000007030000080300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F03000010030000100300001103000011030000120300001303000013030000140300001403000015030000160300001603000017030000170300001803000019030000190300001A0300001A0300001B0300001C0300001C0300001D0300001D0300001E0300001F0300001F03000020030000200300002103000022030000220300002303000023030000240300002403000025030000260300002603000027030000270300002803000029030000290300002A0300002A0300002B0300002C0300002C0300002D0300002D0300002E0300002E0300002F0300003003000030030000310300003103000032030000330300003303000034030000340300003503000035030000360300003703000037030000380300003803000039030000390300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003F0300003F0300004003000040030000410300004103000042030000420300004303000044030000440300004503000045030000460300004603000047030000480300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000050030000510300005203000052030000530300005303000054030000540300005503000055030000560300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005C0300005D0300005D0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000630300006403000064030000650300006503000066030000660300006703000067030000680300006803000069030000690300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000073030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007C0300007D0300007E0300007E0300007F0300007F03000080030000800300008103000081030000820300008203000083030000830300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F030000900300009103000091030000920300009203000093030000930300009403000094030000950300009503000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000B9030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CC030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E5030000E6030000E6030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EA030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EF030000EF030000EF030000F0030000F0030000F1030000F1030000F2030000F2030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000005000000050000000500000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="3" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="sRGB" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" ColorGamut="srgb" DynamicRange="sdr" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ </Disp_Modes>
+ <Luts NumLuts="1">
+ <Lut Type="0" NumPackets="41">ECFFFFFF0000803F936F163FDA1AB13DEDFFFFFF0000803F87501D3FB9530A3EEEFFFFFF0000803FAAEE213FD1912C3EEFFFFFFF0000803F8CBC283F8C82603EF0FFFFFF0000803F473C2D3FD1E9813EF1FFFFFF0000803F5C02343FFE0E9D3EF2FFFFFF0000803F6E6E383FE04DAF3EF3FFFFFF0000803F31093F3F3C16CB3EF4FFFFFF0000803F3960433F73BDDD3EF5FFFFFF0000803F91D5493F6519FA3EF6FFFFFF0000803F840E4E3F957E063FF7FFFFFF0000803F1B62543FCEDF143FF8FFFFFF0000803F828C583F90871E3FF9FFFFFF0000803FF2B65E3F1A182D3FFAFFFFFF0000803FE7C4623FABCE363FFBFFFFFF0000803FD7BE683F8E5A453FFCFFFFFF0000803F41B66C3FD6194F3FFDFFFFFF0000803F1E8A723F8AAC5D3FFEFFFFFF0000803F516B763F6475673FFFFFFFFF0000803F8A227C3FB41E763F000000000000803F0000803F0000803F01000000836B723F6189773F0000803F02000000BF0C6A3F484E723F0000803F03000000CD945E3F191E6B3F0000803F04000000B988573FEFAB663F0000803F0500000084D44D3F5E81603F0000803F0600000045D9473FEBAA5C3F0000803F07000000CA883F3F2651573F0000803F080000005C593A3FADFB533F0000803F09000000802D333F05514F3F0000803F0A00000083C02E3FC3624C3F0000803F0B0000005986283FE04C483F0000803F0C0000008C9D243F18B3453F0000803F0D000000431C1F3F8909423F0000803F0E000000ABB21B3FE4C03F3F0000803F0F0000003DD4163FC07A3C3F0000803F1000000009C0133FE4683A3F0000803F110000008A740F3FF27B373F0000803F1200000039B80C3FCB9D353F0000803F130000005DDE083FBAF9323F0000803F140000009467063F3448313F0000803F</Lut>
+ </Luts>
+</Calib_Data>
diff --git a/config/qdcm_calib_data_rm69299_amoled_fhd+_video_mode_dsi_visionox_panel.xml b/config/qdcm_calib_data_rm69299_amoled_fhd+_video_mode_dsi_visionox_panel.xml
new file mode 100644
index 0000000..e1c7fcf
--- /dev/null
+++ b/config/qdcm_calib_data_rm69299_amoled_fhd+_video_mode_dsi_visionox_panel.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" ?>
+<!--
+Copyright (c) 2019, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+-->
+<Calib_Data>
+ <Disp_Modes NumModes="4" DefaultMode="1">
+ <Mode ModeID="0" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="HDR" NumOfFeatures="14" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="hdr" ColorGamut="dcip3" PictureQuality="standard" IsMerge="1">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000DB0000000400000004000000000200000000000000000000B60100000800000006000000000300000000000000000000920200000B000000080000000004000000000000000000006D0300000D00000009000000000500000000000000000000480400000F00000009000000000600000000000000000000230500001100000009000000000700000000000000000000FE0500001200000008000000000800000000000000000000D80600001300000006000000000900000000000000000000B20700001400000005000000000A000000000000000000008C0800001400000003000000000B00000000000000000000650900001400000001000000000C000000000000000000003E0A00001300000000000000000D00000000000000000000170B00001300000000000000000E00000000000000000000EE0B00001200000000000000000F00000000000000000000C60C000010000000000000000010000000000000000000009C0D00000F000000000000000000000000010000000000001A000000EB00000007000000000100000001000000000000F5000000F00000000A000000000200000001000000000000D1010000F40000000D000000000300000001000000000000AC020000F70000000F00000000040000000100000000000088030000FA0000001000000000050000000100000000000063040000FD000000100000000006000000010000000000003F050000FF0000000F0000000007000000010000000000001A060000010100000E000000000800000001000000000000F4060000020100000D000000000900000001000000000000CF070000030100000C000000000A00000001000000000000A9080000040100000A000000000B00000001000000000000830900000401000008000000000C000000010000000000005C0A00000401000006000000000D00000001000000000000350B00000401000005000000000E000000010000000000000D0C00000401000004000000000F00000001000000000000E40C00000301000003000000001000000001000000000000BB0D0000020100000200000000000000000200000000000033000000D70100000B0000000001000000020000000000000F010000DC0100000F000000000200000002000000000000EB010000E001000012000000000300000002000000000000C7020000E401000013000000000400000002000000000000A2030000E8010000140000000005000000020000000000007E040000EB010000150000000006000000020000000000005A050000EE0100001400000000070000000200000000000035060000F00100001300000000080000000200000000000010070000F201000012000000000900000002000000000000EB070000F301000010000000000A00000002000000000000C6080000F40100000F000000000B00000002000000000000A0090000F50100000D000000000C00000002000000000000790A0000F60100000B000000000D00000002000000000000520B0000F60100000A000000000E000000020000000000002B0C0000F601000008000000000F00000002000000000000020D0000F601000008000000001000000002000000000000DA0D0000F5010000070000000000000000030000000000004C000000C20200000E00000000010000000300000000000028010000C80200001200000000020000000300000000000004020000CD02000015000000000300000003000000000000E0020000D102000016000000000400000003000000000000BD030000D50200001700000000050000000300000000000099040000D90200001800000000060000000300000000000075050000DC0200001700000000070000000300000000000050060000DF020000160000000008000000030000000000002C070000E10200001500000000090000000300000000000007080000E302000013000000000A00000003000000000000E2080000E502000012000000000B00000003000000000000BC090000E602000010000000000C00000003000000000000960A0000E70200000E000000000D000000030000000000006F0B0000E80200000D000000000E00000003000000000000480C0000E80200000C000000000F00000003000000000000200D0000E80200000B000000001000000003000000000000F80D0000E80200000B00000000000000000400000000000064000000AE0300000F00000000010000000400000000000041010000B4030000130000000002000000040000000000001D020000B903000016000000000300000004000000000000FA020000BE03000018000000000400000004000000000000D6030000C303000019000000000500000004000000000000B3040000C7030000190000000006000000040000000000008F050000CA030000190000000007000000040000000000006B060000CE0300001800000000080000000400000000000047070000D10300001600000000090000000400000000000022080000D303000015000000000A00000004000000000000FD080000D503000013000000000B00000004000000000000D8090000D703000012000000000C00000004000000000000B20A0000D803000010000000000D000000040000000000008C0B0000DA0300000E000000000E00000004000000000000650C0000DA0300000D000000000F000000040000000000003E0D0000DB0300000D000000001000000004000000000000150E0000DB0300000C0000000000000000050000000000007C000000990400000F00000000010000000500000000000059010000A00400001300000000020000000500000000000036020000A60400001600000000030000000500000000000013030000AB04000018000000000400000005000000000000F0030000B004000019000000000500000005000000000000CD040000B404000019000000000600000005000000000000A9050000B90400001900000000070000000500000000000086060000BC0400001800000000080000000500000000000062070000C0040000170000000009000000050000000000003D080000C304000015000000000A0000000500000000000019090000C504000013000000000B00000005000000000000F4090000C704000012000000000C00000005000000000000CE0A0000C904000010000000000D00000005000000000000A80B0000CB0400000F000000000E00000005000000000000820C0000CC0400000E000000000F000000050000000000005B0D0000CD0400000D000000001000000005000000000000330E0000CE0400000D00000000000000000600000000000094000000840500000E000000000100000006000000000000710100008B050000120000000002000000060000000000004F02000091050000150000000003000000060000000000002C0300009705000017000000000400000006000000000000090400009D05000018000000000500000006000000000000E6040000A205000018000000000600000006000000000000C3050000A605000018000000000700000006000000000000A0060000AA050000170000000008000000060000000000007C070000AE0500001600000000090000000600000000000058080000B205000014000000000A0000000600000000000034090000B505000013000000000B000000060000000000000F0A0000B705000011000000000C00000006000000000000EA0A0000BA0500000F000000000D00000006000000000000C50B0000BC0500000E000000000E000000060000000000009E0C0000BE0500000D000000000F00000006000000000000770D0000BF0500000C000000001000000006000000000000500E0000C10500000C000000000000000007000000000000AC0000006E0600000C000000000100000007000000000000890100007606000010000000000200000007000000000000670200007C06000013000000000300000007000000000000440300008306000015000000000400000007000000000000220400008906000016000000000500000007000000000000FF0400008E06000016000000000600000007000000000000DD0500009306000016000000000700000007000000000000BA0600009806000015000000000800000007000000000000960700009C0600001400000000090000000700000000000073080000A006000013000000000A000000070000000000004F090000A406000011000000000B000000070000000000002B0A0000A70600000F000000000C00000007000000000000060B0000AA0600000E000000000D00000007000000000000E00B0000AC0600000C000000000E00000007000000000000BB0C0000AF0600000B000000000F00000007000000000000940D0000B10600000B0000000010000000070000000000006D0E0000B30600000B000000000000000008000000000000C3000000580700000A000000000100000008000000000000A10100005F0700000E0000000002000000080000000000007F02000067070000110000000003000000080000000000005D0300006E070000120000000004000000080000000000003B0400007407000014000000000500000008000000000000180500007A07000014000000000600000008000000000000F60500008007000014000000000700000008000000000000D30600008507000013000000000800000008000000000000B007000089070000120000000009000000080000000000008D0800008E07000010000000000A000000080000000000006A090000920700000F000000000B00000008000000000000460A0000960700000D000000000C00000008000000000000210B0000990700000B000000000D00000008000000000000FC0B00009C0700000A000000000E00000008000000000000D70C00009F07000009000000000F00000008000000000000B00D0000A107000008000000001000000008000000000000890E0000A407000008000000000000000009000000000000DA0000004008000007000000000100000009000000000000B9010000480800000B00000000020000000900000000000097020000500800000E000000000300000009000000000000750300005808000010000000000400000009000000000000530400005E080000110000000005000000090000000000003105000065080000110000000006000000090000000000000F0600006B08000011000000000700000009000000000000ED0600007108000010000000000800000009000000000000CA070000760800000F000000000900000009000000000000A70800007B0800000E000000000A00000009000000000000840900007F0800000C000000000B00000009000000000000600A0000830800000A000000000C000000090000000000003C0B00008708000009000000000D00000009000000000000180C00008B08000008000000000E00000009000000000000F20C00008E08000007000000000F00000009000000000000CC0D00009108000006000000001000000009000000000000A60E0000940800000600000000000000000A000000000000F2000000280900000400000000010000000A000000000000D0010000300900000800000000020000000A000000000000AF020000390900000B00000000030000000A0000000000008D030000400900000D00000000040000000A0000000000006C040000480900000E00000000050000000A0000000000004A0500004F0900000E00000000060000000A00000000000028060000550900000E00000000070000000A000000000000060700005B0900000D00000000080000000A000000000000E4070000610900000C00000000090000000A000000000000C1080000660900000B000000000A0000000A0000000000009E0900006B09000009000000000B0000000A0000000000007B0A00007009000008000000000C0000000A000000000000570B00007409000006000000000D0000000A000000000000330C00007809000005000000000E0000000A0000000000000E0D00007C09000004000000000F0000000A000000000000E90D0000800900000300000000100000000A000000000000C20E0000830900000300000000000000000B000000000000090100000E0A00000100000000010000000B000000000000E7010000170A00000500000000020000000B000000000000C6020000200A00000800000000030000000B000000000000A5030000280A00000A00000000040000000B00000000000084040000300A00000B00000000050000000B00000000000063050000370A00000B00000000060000000B000000000000410600003E0A00000B00000000070000000B00000000000020070000450A00000B00000000080000000B000000000000FE0700004B0A00000900000000090000000B000000000000DB080000510A000008000000000A0000000B000000000000B9090000560A000007000000000B0000000B000000000000960A00005B0A000005000000000C0000000B000000000000720B0000600A000004000000000D0000000B0000000000004E0C0000650A000002000000000E0000000B0000000000002A0D0000690A000001000000000F0000000B000000000000050E00006D0A00000100000000100000000B000000000000DF0E0000710A00000100000000000000000C00000000000020010000F20A00000000000000010000000C000000000000FF010000FC0A00000300000000020000000C000000000000DE020000050B00000500000000030000000C000000000000BD0300000E0B00000700000000040000000C0000000000009C040000160B00000900000000050000000C0000000000007B0500001E0B00000900000000060000000C0000000000005A060000260B00000900000000070000000C000000000000390700002D0B00000800000000080000000C00000000000017080000330B00000700000000090000000C000000000000F50800003A0B000006000000000A0000000C000000000000D3090000400B000004000000000B0000000C000000000000B10A0000450B000003000000000C0000000C0000000000008D0B00004B0B000001000000000D0000000C0000000000006A0C0000500B000000000000000E0000000C000000000000450D0000540B000000000000000F0000000C000000000000210E0000590B00000000000000100000000C000000000000FB0E00005D0B00000000000000000000000D00000000000037010000D50B00000000000000010000000D00000000000016020000E00B00000100000000020000000D000000000000F6020000E90B00000400000000030000000D000000000000D5030000F30B00000600000000040000000D000000000000B5040000FB0B00000700000000050000000D00000000000094050000040C00000700000000060000000D000000000000730600000C0C00000700000000070000000D00000000000052070000130C00000600000000080000000D000000000000310800001A0C00000500000000090000000D00000000000010090000210C000004000000000A0000000D000000000000EE090000280C000003000000000B0000000D000000000000CB0A00002E0C000001000000000C0000000D000000000000A80B0000330C000000000000000D0000000D000000000000850C0000390C000000000000000E0000000D000000000000610D00003E0C000000000000000F0000000D0000000000003D0E0000430C00000000000000100000000D000000000000170F0000480C00000000000000000000000E0000000000004E010000B70C00000000000000010000000E0000000000002E020000C20C00000000000000020000000E0000000000000E030000CC0C00000200000000030000000E000000000000ED030000D50C00000400000000040000000E000000000000CD040000DF0C00000600000000050000000E000000000000AD050000E80C00000600000000060000000E0000000000008D060000F00C00000600000000070000000E0000000000006C070000F80C00000500000000080000000E0000000000004B080000000D00000400000000090000000E0000000000002A090000070D000003000000000A0000000E000000000000080A00000E0D000002000000000B0000000E000000000000E60A0000140D000000000000000C0000000E000000000000C40B00001B0D000000000000000D0000000E000000000000A10C0000200D000000000000000E0000000E0000000000007D0D0000260D000000000000000F0000000E000000000000590E00002C0D00000000000000100000000E000000000000340F0000310D00000000000000000000000F00000000000065010000960D00000000000000010000000F00000000000045020000A10D00000000000000020000000F00000000000026030000AC0D00000200000000030000000F00000000000006040000B60D00000400000000040000000F000000000000E6040000C00D00000600000000050000000F000000000000C6050000C90D00000600000000060000000F000000000000A6060000D20D00000600000000070000000F00000000000086070000DB0D00000500000000080000000F00000000000065080000E30D00000400000000090000000F00000000000044090000EB0D000003000000000A0000000F000000000000230A0000F20D000002000000000B0000000F000000000000010B0000F90D000000000000000C0000000F000000000000DF0B0000000E000000000000000D0000000F000000000000BC0C0000060E000000000000000E0000000F000000000000990D00000C0E000000000000000F0000000F000000000000750E0000120E00000000000000100000000F000000000000500F0000180E0000000000000000000000100000000000007D010000740E0000000000000001000000100000000000005D0200007F0E0000010000000002000000100000000000003E0300008A0E0000040000000003000000100000000000001E040000950E000006000000000400000010000000000000FF0400009F0E000007000000000500000010000000000000DF050000A90E000008000000000600000010000000000000BF060000B20E0000070000000007000000100000000000009F070000BB0E0000070000000008000000100000000000007F080000C40E0000060000000009000000100000000000005E090000CC0E000005000000000A000000100000000000003E0A0000D40E000003000000000B000000100000000000001C0B0000DC0E000002000000000C00000010000000000000FA0B0000E30E000000000000000D00000010000000000000D80C0000EA0E000000000000000E00000010000000000000B50D0000F00E000000000000000F00000010000000000000910E0000F70E0000000000000010000000100000000000006D0F0000FD0E0000000000000000000000000000000100000B00000009000000F6000000000100000000000000010000E60000000D000000FA000000000200000000000000010000C201000011000000FD0000000003000000000000000100009E02000014000000000100000004000000000000000100007A0300001600000001010000000500000000000000010000550400001800000002010000000600000000000000010000310500001A000000020100000007000000000000000100000C0600001C00000002010000000800000000000000010000E70600001C00000001010000000900000000000000010000C20700001D00000000010000000A000000000000000100009C0800001D000000FF000000000B00000000000000010000760900001D000000FD000000000C000000000000000100004F0A00001D000000FC000000000D00000000000000010000280B00001C000000FB000000000E00000000000000010000010C00001B000000FB000000000F00000000000000010000D80C00001A000000FA000000001000000000000000010000AF0D000018000000FB00000000000000000100000001000025000000F5000000FE00000000010000000100000001000001010000F900000002010000000200000001000000010000DD010000FD00000005010000000300000001000000010000B9020000010100000801000000040000000100000001000095030000040100000901000000050000000100000001000071040000070100000A0100000006000000010000000100004D050000090100000A010000000700000001000000010000280600000B0100000A010000000800000001000000010000040700000C01000009010000000900000001000000010000DF0700000D01000008010000000A00000001000000010000B90800000E01000007010000000B00000001000000010000930900000E01000005010000000C000000010000000100006D0A00000E01000004010000000D00000001000000010000460B00000E01000003010000000E000000010000000100001F0C00000D01000003010000000F00000001000000010000F70C00000D01000003010000001000000001000000010000CF0D00000C010000030100000000000000020000000100003E000000E1010000030100000001000000020000000100001A010000E601000008010000000200000002000000010000F7010000EA0100000B010000000300000002000000010000D3020000EE0100000D010000000400000002000000010000B0030000F20100000F0100000005000000020000000100008C040000F50100001001000000060000000200000001000068050000F80100001001000000070000000200000001000044060000FA0100000F01000000080000000200000001000020070000FC0100000F010000000900000002000000010000FB070000FD0100000E010000000A00000002000000010000D6080000FE0100000D010000000B00000002000000010000B0090000FF0100000B010000000C000000020000000100008A0A0000000200000A010000000D00000002000000010000640B00000002000009010000000E000000020000000100003D0C00000002000009010000000F00000002000000010000150D00000002000009010000001000000002000000010000ED0D0000FF0100000901000000000000000300000001000057000000CD0200000701000000010000000300000001000034010000D20200000C01000000020000000300000001000010020000D70200000F010000000300000003000000010000ED020000DC02000011010000000400000003000000010000CA030000E002000013010000000500000003000000010000A6040000E30200001401000000060000000300000001000083050000E6020000140100000007000000030000000100005F060000E9020000140100000008000000030000000100003B070000EC0200001301000000090000000300000001000017080000EE02000012010000000A00000003000000010000F2080000EF02000011010000000B00000003000000010000CD090000F102000010010000000C00000003000000010000A70A0000F20200000F010000000D00000003000000010000810B0000F20200000E010000000E000000030000000100005A0C0000F30200000D010000000F00000003000000010000330D0000F30200000D0100000010000000030000000100000B0E0000F30200000D0100000000000000040000000100006F000000B90300000A0100000001000000040000000100004C010000BF0300000E01000000020000000400000001000029020000C40300001101000000030000000400000001000007030000C903000014010000000400000004000000010000E4030000CE03000015010000000500000004000000010000C1040000D2030000160100000006000000040000000100009D050000D5030000160100000007000000040000000100007A060000D80300001601000000080000000400000001000056070000DB0300001501000000090000000400000001000032080000DE03000014010000000A000000040000000100000E090000E003000013010000000B00000004000000010000E9090000E203000012010000000C00000004000000010000C40A0000E303000011010000000D000000040000000100009E0B0000E403000010010000000E00000004000000010000780C0000E503000010010000000F00000004000000010000510D0000E603000010010000001000000004000000010000290E0000E60300001001000000000000000500000001000088000000A40400000B01000000010000000500000001000065010000AB0400000F01000000020000000500000001000042020000B10400001301000000030000000500000001000020030000B604000015010000000400000005000000010000FD030000BB04000017010000000500000005000000010000DA040000C004000017010000000600000005000000010000B7050000C40400001801000000070000000500000001000094060000C70400001701000000080000000500000001000071070000CB040000170100000009000000050000000100004D080000CE04000016010000000A0000000500000001000029090000D004000015010000000B00000005000000010000050A0000D304000014010000000C00000005000000010000E00A0000D504000013010000000D00000005000000010000BA0B0000D604000012010000000E00000005000000010000940C0000D804000011010000000F000000050000000100006E0D0000D904000011010000001000000005000000010000460E0000DA04000011010000000000000006000000010000A0000000900500000B0100000001000000060000000100007D010000960500000F0100000002000000060000000100005B0200009D0500001301000000030000000600000001000039030000A30500001501000000040000000600000001000016040000A805000017010000000500000006000000010000F4040000AD05000017010000000600000006000000010000D1050000B205000018010000000700000006000000010000AF060000B6050000170100000008000000060000000100008B070000BA0500001701000000090000000600000001000068080000BD05000016010000000A0000000600000001000044090000C005000015010000000B00000006000000010000200A0000C305000014010000000C00000006000000010000FC0A0000C505000013010000000D00000006000000010000D60B0000C805000012010000000E00000006000000010000B10C0000CA05000011010000000F000000060000000100008A0D0000CB05000011010000001000000006000000010000630E0000CC05000012010000000000000007000000010000B70000007A0600000A01000000010000000700000001000095010000820600000E010000000200000007000000010000730200008806000012010000000300000007000000010000510300008F060000140100000004000000070000000100002F04000095060000160100000005000000070000000100000D0500009A06000017010000000600000007000000010000EB0500009F06000017010000000700000007000000010000C8060000A406000017010000000800000007000000010000A6070000A80600001601000000090000000700000001000083080000AC06000015010000000A000000070000000100005F090000B006000014010000000B000000070000000100003B0A0000B306000013010000000C00000007000000010000170B0000B606000012010000000D00000007000000010000F20B0000B806000011010000000E00000007000000010000CD0C0000BB06000011010000000F00000007000000010000A70D0000BD06000011010000001000000007000000010000800E0000BF06000011010000000000000008000000010000CF0000006407000009010000000100000008000000010000AD0100006C0700000D0100000002000000080000000100008B02000073070000100100000003000000080000000100006A0300007A07000013010000000400000008000000010000480400008007000015010000000500000008000000010000260500008607000015010000000600000008000000010000040600008C07000016010000000700000008000000010000E20600009107000016010000000800000008000000010000C007000096070000150100000009000000080000000100009D0800009A07000014010000000A000000080000000100007A0900009E07000013010000000B00000008000000010000560A0000A207000012010000000C00000008000000010000330B0000A507000011010000000D000000080000000100000E0C0000A807000010010000000E00000008000000010000E90C0000AB07000010010000000F00000008000000010000C30D0000AE070000100100000010000000080000000100009D0E0000B007000010010000000000000009000000010000E60000004D08000007010000000100000009000000010000C5010000550800000B010000000200000009000000010000A30200005D0800000F010000000300000009000000010000820300006408000011010000000400000009000000010000610400006B080000130100000005000000090000000100003F05000072080000140100000006000000090000000100001E0600007808000014010000000700000009000000010000FC0600007D08000014010000000800000009000000010000DA0700008308000013010000000900000009000000010000B70800008708000013010000000A00000009000000010000950900008C08000012010000000B00000009000000010000710A00009008000011010000000C000000090000000100004E0B00009408000010010000000D000000090000000100002A0C0000980800000F010000000E00000009000000010000050D00009B0800000E010000000F00000009000000010000DF0D00009E0800000E010000001000000009000000010000B90E0000A10800000F01000000000000000A000000010000FD000000350900000501000000010000000A000000010000DC0100003E0900000901000000020000000A000000010000BB020000460900000D01000000030000000A0000000100009A0300004E0900000F01000000040000000A00000001000079040000550900001101000000050000000A000000010000580500005C0900001201000000060000000A00000001000037060000620900001201000000070000000A00000001000015070000690900001201000000080000000A000000010000F40700006E0900001201000000090000000A000000010000D10800007409000011010000000A0000000A000000010000AF0900007909000010010000000B0000000A0000000100008C0A00007D0900000F010000000C0000000A000000010000690B0000820900000E010000000D0000000A000000010000450C0000860900000D010000000E0000000A000000010000210D0000890900000D010000000F0000000A000000010000FB0D00008D0900000D01000000100000000A000000010000D60E0000900900000D01000000000000000B000000010000140100001B0A00000301000000010000000B000000010000F4010000250A00000801000000020000000B000000010000D30200002D0A00000B01000000030000000B000000010000B2030000360A00000E01000000040000000B000000010000920400003D0A00000F01000000050000000B00000001000071050000450A00001001000000060000000B000000010000500600004C0A00001101000000070000000B0000000100002F070000520A00001101000000080000000B0000000100000D080000590A00001001000000090000000B000000010000EC0800005E0A00000F010000000A0000000B000000010000C9090000640A00000E010000000B0000000B000000010000A70A0000690A00000D010000000C0000000B000000010000840B00006E0A00000C010000000D0000000B000000010000600C0000720A00000C010000000E0000000B0000000100003C0D0000770A00000B010000000F0000000B000000010000170E00007B0A00000B01000000100000000B000000010000F20E00007E0A00000C01000000000000000C0000000100002C010000000B00000201000000010000000C0000000100000B0200000A0B00000601000000020000000C000000010000EB020000130B00000A01000000030000000C000000010000CB0300001C0B00000C01000000040000000C000000010000AA040000240B00000E01000000050000000C0000000100008A0500002C0B00000F01000000060000000C00000001000069060000340B00000F01000000070000000C000000010000480700003B0B00000F01000000080000000C00000001000027080000410B00000F01000000090000000C00000001000006090000480B00000E010000000A0000000C000000010000E40900004E0B00000D010000000B0000000C000000010000C20A0000530B00000C010000000C0000000C0000000100009F0B0000590B00000B010000000D0000000C0000000100007C0C00005E0B00000B010000000E0000000C000000010000580D0000620B00000A010000000F0000000C000000010000340E0000670B00000A01000000100000000C0000000100000E0F00006B0B00000B01000000000000000D00000001000043010000E40B00000101000000010000000D00000001000023020000EE0B00000501000000020000000D00000001000003030000F80B00000901000000030000000D000000010000E3030000010C00000C01000000040000000D000000010000C30400000A0C00000D01000000050000000D000000010000A2050000120C00000E01000000060000000D000000010000820600001A0C00000F01000000070000000D00000001000062070000220C00000F01000000080000000D00000001000041080000290C00000E01000000090000000D00000001000020090000300C00000D010000000A0000000D000000010000FE090000360C00000C010000000B0000000D000000010000DC0A00003C0C00000B010000000C0000000D000000010000BA0B0000420C00000B010000000D0000000D000000010000970C0000470C00000A010000000E0000000D000000010000740D00004D0C00000A010000000F0000000D000000010000500E0000510C00000A01000000100000000D0000000100002B0F0000560C00000A01000000000000000E0000000100005A010000C60C00000101000000010000000E0000000100003A020000D00C00000501000000020000000E0000000100001B030000DB0C00000901000000030000000E000000010000FB030000E40C00000C01000000040000000E000000010000DB040000EE0C00000D01000000050000000E000000010000BB050000F60C00000E01000000060000000E0000000100009B060000FF0C00000F01000000070000000E0000000100007B070000070D00000F01000000080000000E0000000100005B0800000E0D00000E01000000090000000E0000000100003A090000160D00000D010000000A0000000E000000010000190A00001D0D00000D010000000B0000000E000000010000F70A0000230D00000C010000000C0000000E000000010000D50B0000290D00000B010000000D0000000E000000010000B30C00002F0D00000A010000000E0000000E0000000100008F0D0000350D00000A010000000F0000000E0000000100006C0E00003A0D00000A01000000100000000E000000010000470F00003F0D00000B01000000000000000F00000001000072010000A60D00000201000000010000000F00000001000052020000B10D00000601000000020000000F00000001000033030000BB0D00000A01000000030000000F00000001000013040000C60D00000D01000000040000000F000000010000F4040000CF0D00000E01000000050000000F000000010000D4050000D90D00000F01000000060000000F000000010000B5060000E10D00001001000000070000000F00000001000095070000EA0D00001001000000080000000F00000001000075080000F20D00000F01000000090000000F00000001000054090000FA0D00000F010000000A0000000F000000010000330A0000010E00000E010000000B0000000F000000010000120B0000080E00000D010000000C0000000F000000010000F00B00000F0E00000C010000000D0000000F000000010000CE0C0000150E00000C010000000E0000000F000000010000AB0D00001B0E00000B010000000F0000000F000000010000880E0000210E00000B01000000100000000F000000010000640F0000270E00000C01000000000000001000000001000089010000830E0000040100000001000000100000000100006A0200008F0E0000090100000002000000100000000100004B0300009A0E00000C0100000003000000100000000100002C040000A50E00000F0100000004000000100000000100000D050000AF0E000011010000000500000010000000010000EE050000B90E000012010000000600000010000000010000CE060000C20E000012010000000700000010000000010000AF070000CB0E0000120100000008000000100000000100008F080000D40E0000120100000009000000100000000100006F090000DC0E000011010000000A000000100000000100004E0A0000E40E000010010000000B000000100000000100002D0B0000EB0E000010010000000C000000100000000100000C0C0000F20E00000F010000000D00000010000000010000EA0C0000F90E00000E010000000E00000010000000010000C80D0000000F00000E010000000F00000010000000010000A40E0000060F00000E010000001000000010000000010000810F00000C0F00000F0100000000000000000000000200001200000012000000E8010000000100000000000000020000EF00000016000000ED010000000200000000000000020000CB0100001A000000F1010000000300000000000000020000A70200001D000000F40100000004000000000000000200008403000020000000F60100000005000000000000000200006004000022000000F70100000006000000000000000200003C05000024000000F80100000007000000000000000200001806000025000000F8010000000800000000000000020000F306000026000000F8010000000900000000000000020000CF07000027000000F8010000000A00000000000000020000A908000027000000F7010000000B000000000000000200008409000027000000F6010000000C000000000000000200005E0A000026000000F6010000000D00000000000000020000370B000026000000F6010000000E00000000000000020000100C000025000000F5010000000F00000000000000020000E80C000023000000F6010000001000000000000000020000C00D000022000000F70100000000000000010000000200002C000000FE000000F10100000001000000010000000200000901000003010000F6010000000200000001000000020000E601000007010000FA010000000300000001000000020000C20200000B010000FD0100000004000000010000000200009F0300000E010000FF0100000005000000010000000200007B0400001001000000020000000600000001000000020000580500001301000001020000000700000001000000020000340600001401000001020000000800000001000000020000100700001601000001020000000900000001000000020000EB0700001701000001020000000A00000001000000020000C70800001801000000020000000B00000001000000020000A10900001801000000020000000C000000010000000200007C0A000018010000FF010000000D00000001000000020000550B000018010000FF010000000E000000010000000200002F0C000017010000FF010000000F00000001000000020000070D000017010000FF010000001000000001000000020000DF0D0000160100000002000000000000000200000002000046000000EB010000F801000000010000000200000002000023010000F0010000FD01000000020000000200000002000000020000F401000001020000000300000002000000020000DD020000F801000004020000000400000002000000020000BA030000FC0100000602000000050000000200000002000096040000FF010000070200000006000000020000000200007305000002020000080200000007000000020000000200005006000004020000080200000008000000020000000200002C0700000602000008020000000900000002000000020000080800000802000008020000000A00000002000000020000E30800000902000007020000000B00000002000000020000BE0900000A02000007020000000C00000002000000020000990A00000A02000006020000000D00000002000000020000730B00000A02000006020000000E000000020000000200004C0C00000A02000006020000000F00000002000000020000250D00000A02000006020000001000000002000000020000FE0D00000A020000070200000000000000030000000200005F000000D7020000FD0100000001000000030000000200003C010000DD0200000202000000020000000300000002000019020000E202000006020000000300000003000000020000F7020000E602000009020000000400000003000000020000D4030000EA0200000B020000000500000003000000020000B1040000EE0200000C0200000006000000030000000200008E050000F10200000D0200000007000000030000000200006B060000F40200000D02000000080000000300000002000047070000F60200000D02000000090000000300000002000024080000F80200000D020000000A00000003000000020000FF080000FA0200000C020000000B00000003000000020000DB090000FB0200000C020000000C00000003000000020000B60A0000FC0200000B020000000D00000003000000020000900B0000FD0200000B020000000E000000030000000200006A0C0000FD0200000B020000000F00000003000000020000430D0000FE0200000B0200000010000000030000000200001C0E0000FE0200000C02000000000000000400000002000078000000C40300000102000000010000000400000002000055010000CA0300000602000000020000000400000002000033020000CF0300000A02000000030000000400000002000010030000D40300000D020000000400000004000000020000EE030000D90300000F020000000500000004000000020000CB040000DD03000010020000000600000004000000020000A9050000E00300001102000000070000000400000002000086060000E40300001102000000080000000400000002000063070000E6030000110200000009000000040000000200003F080000E903000011020000000A000000040000000200001B090000EB03000010020000000B00000004000000020000F7090000ED03000010020000000C00000004000000020000D20A0000EE0300000F020000000D00000004000000020000AD0B0000F00300000F020000000E00000004000000020000870C0000F00300000F020000000F00000004000000020000610D0000F10300000F020000001000000004000000020000390E0000F20300001002000000000000000500000002000090000000B0040000030200000001000000050000000200006E010000B6040000080200000002000000050000000200004C020000BC0400000C0200000003000000050000000200002A030000C20400000F02000000040000000500000002000007040000C604000011020000000500000005000000020000E5040000CB04000012020000000600000005000000020000C3050000CF04000013020000000700000005000000020000A0060000D3040000130200000008000000050000000200007D070000D6040000130200000009000000050000000200005A080000D904000013020000000A0000000500000002000037090000DC04000013020000000B00000005000000020000130A0000DE04000012020000000C00000005000000020000EE0A0000E004000012020000000D00000005000000020000C90B0000E204000011020000000E00000005000000020000A40C0000E304000011020000000F000000050000000200007E0D0000E404000012020000001000000005000000020000570E0000E504000013020000000000000006000000020000A80000009B0500000402000000010000000600000002000086010000A20500000902000000020000000600000002000064020000A90500000D02000000030000000600000002000043030000AF0500001002000000040000000600000002000021040000B405000012020000000500000006000000020000FF040000B905000014020000000600000006000000020000DD050000BE05000014020000000700000006000000020000BA060000C20500001502000000080000000600000002000098070000C60500001502000000090000000600000002000075080000C905000014020000000A0000000600000002000052090000CC05000014020000000B000000060000000200002E0A0000CF05000013020000000C000000060000000200000A0B0000D105000013020000000D00000006000000020000E50B0000D405000013020000000E00000006000000020000C00C0000D505000013020000000F000000060000000200009A0D0000D705000013020000001000000006000000020000740E0000D805000014020000000000000007000000020000C000000086060000040200000001000000070000000200009E0100008E060000090200000002000000070000000200007D020000950600000D0200000003000000070000000200005B0300009B060000100200000004000000070000000200003A040000A10600001202000000050000000700000002000018050000A606000014020000000600000007000000020000F6050000AC06000015020000000700000007000000020000D4060000B006000015020000000800000007000000020000B2070000B40600001502000000090000000700000002000090080000B806000015020000000A000000070000000200006D090000BC06000014020000000B00000007000000020000490A0000BF06000014020000000C00000007000000020000260B0000C206000013020000000D00000007000000020000010C0000C506000013020000000E00000007000000020000DC0C0000C706000013020000000F00000007000000020000B70D0000C906000014020000001000000007000000020000910E0000CB06000015020000000000000008000000020000D70000007107000004020000000100000008000000020000B6010000780700000902000000020000000800000002000095020000800700000D020000000300000008000000020000740300008707000010020000000400000008000000020000530400008D07000012020000000500000008000000020000310500009307000014020000000600000008000000020000100600009907000015020000000700000008000000020000EE0600009E07000015020000000800000008000000020000CC070000A307000015020000000900000008000000020000AA080000A707000015020000000A0000000800000002000088090000AB07000014020000000B00000008000000020000650A0000AF07000014020000000C00000008000000020000410B0000B207000013020000000D000000080000000200001D0C0000B507000013020000000E00000008000000020000F80C0000B807000013020000000F00000008000000020000D30D0000BB07000014020000001000000008000000020000AD0E0000BD07000015020000000000000009000000020000EF0000005A08000003020000000100000009000000020000CE0100006208000008020000000200000009000000020000AD0200006A0800000C0200000003000000090000000200008C030000710800000F0200000004000000090000000200006B04000078080000120200000005000000090000000200004A0500007F08000013020000000600000009000000020000290600008508000014020000000700000009000000020000080700008A08000014020000000800000009000000020000E60700009008000014020000000900000009000000020000C40800009508000014020000000A00000009000000020000A20900009908000014020000000B000000090000000200007F0A00009D08000013020000000C000000090000000200005C0B0000A108000013020000000D00000009000000020000390C0000A508000013020000000E00000009000000020000140D0000A808000013020000000F00000009000000020000EF0D0000AB08000013020000001000000009000000020000CA0E0000AE0800001402000000000000000A00000002000006010000420900000202000000010000000A000000020000E50100004B0900000802000000020000000A000000020000C5020000530900000C02000000030000000A000000020000A40300005B0900000F02000000040000000A00000002000084040000620900001102000000050000000A00000002000063050000690900001202000000060000000A00000002000042060000700900001302000000070000000A00000002000021070000760900001402000000080000000A000000020000000800007C0900001402000000090000000A000000020000DF0800008109000014020000000A0000000A000000020000BD0900008609000013020000000B0000000A0000000200009A0A00008B09000013020000000C0000000A000000020000770B00008F09000012020000000D0000000A000000020000540C00009309000012020000000E0000000A000000020000300D00009709000012020000000F0000000A0000000200000B0E00009A0900001302000000100000000A000000020000E60E00009E0900001402000000000000000B0000000200001D010000290A00000202000000010000000B000000020000FD010000320A00000702000000020000000B000000020000DD0200003B0A00000B02000000030000000B000000020000BD030000430A00000E02000000040000000B0000000200009C0400004B0A00001002000000050000000B0000000200007C050000530A00001202000000060000000B0000000200005C0600005A0A00001302000000070000000B0000000200003B070000600A00001302000000080000000B0000000200001A080000660A00001302000000090000000B000000020000F90800006C0A000013020000000A0000000B000000020000D7090000720A000013020000000B0000000B000000020000B50A0000770A000012020000000C0000000B000000020000920B00007C0A000012020000000D0000000B0000000200006F0C0000800A000012020000000E0000000B0000000200004C0D0000840A000012020000000F0000000B000000020000280E0000880A00001202000000100000000B000000020000030F00008C0A00001402000000000000000C000000020000350100000F0B00000102000000010000000C00000002000015020000180B00000702000000020000000C000000020000F5020000220B00000B02000000030000000C000000020000D50300002A0B00000E02000000040000000C000000020000B5040000330B00001002000000050000000C000000020000950500003B0B00001202000000060000000C00000002000075060000420B00001302000000070000000C00000002000054070000490B00001302000000080000000C00000002000034080000500B00001302000000090000000C00000002000013090000560B000013020000000A0000000C000000020000F10900005C0B000013020000000B0000000C000000020000D00A0000620B000012020000000C0000000C000000020000AE0B0000670B000012020000000D0000000C0000000200008B0C00006C0B000012020000000E0000000C000000020000670D0000710B000012020000000F0000000C000000020000440E0000750B00001202000000100000000C0000000200001F0F0000790B00001402000000000000000D0000000200004C010000F30B00000202000000010000000D0000000200002C020000FD0B00000702000000020000000D0000000200000D030000070C00000B02000000030000000D000000020000ED030000100C00000E02000000040000000D000000020000CE040000190C00001002000000050000000D000000020000AE050000210C00001202000000060000000D0000000200008E060000290C00001302000000070000000D0000000200006E070000300C00001302000000080000000D0000000200004E080000370C00001302000000090000000D0000000200002D0900003E0C000013020000000A0000000D0000000200000C0A0000450C000013020000000B0000000D000000020000EB0A00004B0C000013020000000C0000000D000000020000C90B0000500C000012020000000D0000000D000000020000A60C0000560C000012020000000E0000000D000000020000830D00005B0C000012020000000F0000000D000000020000600E0000600C00001302000000100000000D0000000200003B0F0000650C00001402000000000000000E00000002000063010000D50C00000302000000010000000E00000002000044020000E00C00000802000000020000000E00000002000025030000EA0C00000C02000000030000000E00000002000006040000F30C00000F02000000040000000E000000020000E6040000FD0C00001202000000050000000E000000020000C7050000050D00001302000000060000000E000000020000A70600000E0D00001402000000070000000E00000002000088070000160D00001502000000080000000E000000020000680800001D0D00001502000000090000000E00000002000047090000250D000015020000000A0000000E000000020000270A00002C0D000014020000000B0000000E000000020000050B0000320D000014020000000C0000000E000000020000E40B0000380D000014020000000D0000000E000000020000C20C00003E0D000014020000000E0000000E0000000200009F0D0000440D000014020000000F0000000E0000000200007C0E0000490D00001402000000100000000E000000020000580F00004E0D00001602000000000000000F0000000200007B010000B50D00000502000000010000000F0000000200005C020000C00D00000A02000000020000000F0000000200003D030000CB0D00000E02000000030000000F0000000200001E040000D50D00001102000000040000000F000000020000FF040000DF0D00001402000000050000000F000000020000E0050000E80D00001502000000060000000F000000020000C1060000F10D00001602000000070000000F000000020000A1070000F90D00001702000000080000000F00000002000082080000010E00001702000000090000000F00000002000062090000090E000017020000000A0000000F000000020000410A0000110E000017020000000B0000000F000000020000200B0000180E000016020000000C0000000F000000020000FF0B00001E0E000016020000000D0000000F000000020000DD0C0000250E000016020000000E0000000F000000020000BB0D00002B0E000016020000000F0000000F000000020000980E0000310E00001702000000100000000F000000020000740F0000360E00001802000000000000001000000002000093010000930E000008020000000100000010000000020000740200009F0E00000E02000000020000001000000002000055030000AA0E00001202000000030000001000000002000037040000B50E00001502000000040000001000000002000018050000BF0E000017020000000500000010000000020000F9050000C90E000019020000000600000010000000020000DA060000D20E00001A020000000700000010000000020000BB070000DB0E00001A0200000008000000100000000200009C080000E30E00001B0200000009000000100000000200007C090000EC0E00001A020000000A000000100000000200005C0A0000F30E00001A020000000B000000100000000200003C0B0000FB0E00001A020000000C000000100000000200001B0C0000020F00001A020000000D00000010000000020000F90C0000090F00001A020000000E00000010000000020000D70D0000100F00001A020000000F00000010000000020000B40E0000160F00001B020000001000000010000000020000910F00001C0F00001C020000000000000000000000030000180000001C000000D8020000000100000000000000030000F500000020000000DD020000000200000000000000030000D101000023000000E2020000000300000000000000030000AE02000027000000E50200000004000000000000000300008B03000029000000E8020000000500000000000000030000680400002B000000EA020000000600000000000000030000440500002D000000EB020000000700000000000000030000210600002F000000EC020000000800000000000000030000FD06000030000000EC020000000900000000000000030000D907000030000000EC020000000A00000000000000030000B408000030000000EC020000000B000000000000000300008F09000030000000EC020000000C000000000000000300006A0A000030000000EC020000000D00000000000000030000440B00002F000000ED020000000E000000000000000300001D0C00002E000000ED020000000F00000000000000030000F60C00002D000000EE020000001000000000000000030000CE0D00002C000000F00200000000000000010000000300003200000008010000E20200000001000000010000000300000F0100000D010000E7020000000200000001000000030000EC01000011010000EC020000000300000001000000030000C902000015010000EF020000000400000001000000030000A603000018010000F2020000000500000001000000030000830400001A010000F4020000000600000001000000030000600500001D010000F50200000007000000010000000300003D0600001E010000F60200000008000000010000000300001907000020010000F6020000000900000001000000030000F607000021010000F7020000000A00000001000000030000D108000022010000F7020000000B00000001000000030000AD09000022010000F7020000000C00000001000000030000870A000022010000F7020000000D00000001000000030000620B000022010000F7020000000E000000010000000300003C0C000022010000F7020000000F00000001000000030000150D000021010000F8020000001000000001000000030000ED0D000020010000FA0200000000000000020000000300004B000000F5010000EA02000000010000000200000003000029010000FA010000EF02000000020000000200000003000006020000FF010000F4020000000300000002000000030000E402000003020000F7020000000400000002000000030000C103000006020000FA0200000005000000020000000300009F0400000A020000FC0200000006000000020000000300007C0500000C020000FD020000000700000002000000030000590600000F020000FE0200000008000000020000000300003607000010020000FE0200000009000000020000000300001208000012020000FF020000000A00000002000000030000EE08000013020000FF020000000B00000002000000030000CA09000014020000FF020000000C00000002000000030000A50A000015020000FF020000000D000000020000000300007F0B000015020000FF020000000E00000002000000030000590C00001502000000030000000F00000002000000030000330D000015020000010300000010000000020000000300000C0E0000140200000203000000000000000300000003000064000000E2020000F002000000010000000300000003000042010000E8020000F502000000020000000300000003000020020000ED020000FA020000000300000003000000030000FE020000F1020000FD020000000400000003000000030000DC030000F502000000030000000500000003000000030000B9040000F90200000203000000060000000300000003000097050000FC0200000303000000070000000300000003000074060000FF020000040300000008000000030000000300005107000001030000050300000009000000030000000300002E0800000303000005030000000A000000030000000300000A0900000503000005030000000B00000003000000030000E60900000603000005030000000C00000003000000030000C20A00000703000005030000000D000000030000000300009D0B00000803000005030000000E00000003000000030000770C00000803000006030000000F00000003000000030000510D000009030000070300000010000000030000000300002A0E000009030000080300000000000000040000000300007D000000CF030000F50200000001000000040000000300005B010000D5030000FA02000000020000000400000003000039020000DA030000FF02000000030000000400000003000018030000DF03000002030000000400000004000000030000F6030000E403000005030000000500000004000000030000D4040000E803000007030000000600000004000000030000B1050000EC030000080300000007000000040000000300008F060000EF030000090300000008000000040000000300006C070000F20300000903000000090000000400000003000049080000F40300000A030000000A0000000400000003000026090000F60300000A030000000B00000004000000030000020A0000F80300000A030000000C00000004000000030000DE0A0000FA0300000A030000000D00000004000000030000B90B0000FB0300000A030000000E00000004000000030000940C0000FC0300000B030000000F000000040000000300006E0D0000FC0300000C030000001000000004000000030000470E0000FD0300000D03000000000000000500000003000096000000BB040000F802000000010000000500000003000074010000C2040000FD02000000020000000500000003000052020000C80400000203000000030000000500000003000031030000CD040000050300000004000000050000000300000F040000D204000008030000000500000005000000030000EE040000D70400000A030000000600000005000000030000CC050000DB0400000C030000000700000005000000030000AA060000DF0400000C03000000080000000500000003000087070000E20400000D03000000090000000500000003000065080000E50400000D030000000A0000000500000003000042090000E80400000D030000000B000000050000000300001E0A0000EA0400000D030000000C00000005000000030000FA0A0000EC0400000D030000000D00000005000000030000D60B0000ED0400000E030000000E00000005000000030000B10C0000EF0400000E030000000F000000050000000300008B0D0000F00400000F030000001000000005000000030000650E0000F104000011030000000000000006000000030000AE000000A7050000FA0200000001000000060000000300008C010000AE050000000300000002000000060000000300006B020000B5050000040300000003000000060000000300004A030000BB0500000803000000040000000600000003000029040000C00500000A03000000050000000600000003000007050000C50500000C030000000600000006000000030000E6050000CA0500000E030000000700000006000000030000C4060000CE0500000F030000000800000006000000030000A2070000D20500000F03000000090000000600000003000080080000D505000010030000000A000000060000000300005D090000D805000010030000000B000000060000000300003A0A0000DB05000010030000000C00000006000000030000160B0000DD05000010030000000D00000006000000030000F20B0000E005000010030000000E00000006000000030000CD0C0000E205000011030000000F00000006000000030000A80D0000E305000012030000001000000006000000030000820E0000E505000013030000000000000007000000030000C600000093060000FB020000000100000007000000030000A50100009A0600000103000000020000000700000003000084020000A10600000603000000030000000700000003000063030000A70600000903000000040000000700000003000042040000AD0600000C03000000050000000700000003000021050000B30600000E030000000600000007000000030000FF050000B80600000F030000000700000007000000030000DE060000BD06000010030000000800000007000000030000BC070000C1060000110300000009000000070000000300009A080000C506000011030000000A0000000700000003000078090000C806000011030000000B00000007000000030000550A0000CC06000011030000000C00000007000000030000320B0000CF06000011030000000D000000070000000300000E0C0000D106000012030000000E00000007000000030000E90C0000D406000012030000000F00000007000000030000C40D0000D6060000140300000010000000070000000300009F0E0000D806000015030000000000000008000000030000DD0000007D070000FC020000000100000008000000030000BD01000085070000020300000002000000080000000300009C0200008D070000060300000003000000080000000300007B030000940700000A0300000004000000080000000300005B0400009A0700000D0300000005000000080000000300003A050000A00700000F03000000060000000800000003000019060000A507000010030000000700000008000000030000F8060000AB07000011030000000800000008000000030000D6070000AF07000012030000000900000008000000030000B5080000B407000012030000000A0000000800000003000093090000B807000012030000000B00000008000000030000700A0000BC07000012030000000C000000080000000300004D0B0000BF07000012030000000D000000080000000300002A0C0000C207000013030000000E00000008000000030000050D0000C507000014030000000F00000008000000030000E10D0000C707000015030000001000000008000000030000BB0E0000CA07000016030000000000000009000000030000F500000067080000FD020000000100000009000000030000D40100007008000002030000000200000009000000030000B40200007708000007030000000300000009000000030000940300007F0800000B03000000040000000900000003000073040000860800000D030000000500000009000000030000530500008C0800000F030000000600000009000000030000320600009208000011030000000700000009000000030000110700009808000012030000000800000009000000030000F00700009D08000012030000000900000009000000030000CF080000A208000013030000000A00000009000000030000AD090000A608000013030000000B000000090000000300008B0A0000AA08000013030000000C00000009000000030000680B0000AE08000013030000000D00000009000000030000450C0000B208000014030000000E00000009000000030000210D0000B508000014030000000F00000009000000030000FD0D0000B808000015030000001000000009000000030000D80E0000BB0800001703000000000000000A0000000300000C01000050090000FD02000000010000000A000000030000EC010000590900000303000000020000000A000000030000CC020000610900000703000000030000000A000000030000AC030000690900000B03000000040000000A0000000300008C040000700900000E03000000050000000A0000000300006C050000770900001003000000060000000A0000000300004C0600007E0900001103000000070000000A0000000300002B070000840900001203000000080000000A0000000300000A080000890900001303000000090000000A000000030000E90800008F09000013030000000A0000000A000000030000C80900009409000013030000000B0000000A000000030000A60A00009809000013030000000C0000000A000000030000830B00009D09000014030000000D0000000A000000030000610C0000A109000014030000000E0000000A0000000300003D0D0000A409000015030000000F0000000A000000030000190E0000A80900001603000000100000000A000000030000F40E0000AB0900001803000000000000000B00000003000024010000370A0000FD02000000010000000B00000003000004020000410A00000303000000020000000B000000030000E4020000490A00000803000000030000000B000000030000C5030000520A00000B03000000040000000B000000030000A5040000590A00000E03000000050000000B00000003000085050000610A00001003000000060000000B00000003000065060000680A00001203000000070000000B000000030000450700006E0A00001303000000080000000B00000003000024080000740A00001303000000090000000B000000030000030900007A0A000014030000000A0000000B000000030000E2090000800A000014030000000B0000000B000000030000C10A0000850A000014030000000C0000000B0000000300009F0B00008A0A000014030000000D0000000B0000000300007C0C00008E0A000015030000000E0000000B000000030000590D0000920A000015030000000F0000000B000000030000350E0000960A00001703000000100000000B000000030000110F00009A0A00001803000000000000000C0000000300003B0100001D0B0000FE02000000010000000C0000000300001C020000270B00000403000000020000000C000000030000FC020000300B00000903000000030000000C000000030000DD030000390B00000C03000000040000000C000000030000BD040000410B00000F03000000050000000C0000000300009E050000490B00001103000000060000000C0000000300007E060000510B00001303000000070000000C0000000300005E070000580B00001403000000080000000C0000000300003E0800005E0B00001403000000090000000C0000000300001E090000640B000015030000000A0000000C000000030000FD0900006A0B000015030000000B0000000C000000030000DB0A0000700B000015030000000C0000000C000000030000BA0B0000750B000015030000000D0000000C000000030000970C00007A0B000016030000000E0000000C000000030000750D00007F0B000016030000000F0000000C000000030000510E0000830B00001803000000100000000C0000000300002D0F0000880B00001903000000000000000D00000003000052010000020C00000003000000010000000D000000030000330200000C0C00000503000000020000000D00000003000014030000150C00000A03000000030000000D000000030000F50300001F0C00000E03000000040000000D000000030000D6040000270C00001003000000050000000D000000030000B7050000300C00001303000000060000000D00000003000097060000380C00001403000000070000000D000000030000780700003F0C00001503000000080000000D00000003000058080000460C00001603000000090000000D000000030000380900004D0C000016030000000A0000000D000000030000170A0000530C000016030000000B0000000D000000030000F60A00005A0C000017030000000C0000000D000000030000D50B00005F0C000017030000000D0000000D000000030000B30C0000650C000017030000000E0000000D000000030000900D00006A0C000018030000000F0000000D0000000300006D0E00006F0C00001903000000100000000D000000030000490F0000740C00001B03000000000000000E0000000300006A010000E40C00000203000000010000000E0000000300004B020000EF0C00000703000000020000000E0000000300002C030000F90C00000C03000000030000000E0000000300000E040000030D00001003000000040000000E000000030000EF0400000C0D00001303000000050000000E000000030000D0050000150D00001503000000060000000E000000030000B10600001D0D00001603000000070000000E00000003000091070000250D00001703000000080000000E000000030000720800002D0D00001803000000090000000E00000003000052090000340D000018030000000A0000000E000000030000320A00003B0D000019030000000B0000000E000000030000110B0000410D000019030000000C0000000E000000030000F00B0000480D000019030000000D0000000E000000030000CE0C00004D0D00001A030000000E0000000E000000030000AC0D0000530D00001A030000000F0000000E000000030000890E0000590D00001C03000000100000000E000000030000660F00005E0D00001D03000000000000000F00000003000082010000C50D00000503000000010000000F00000003000063020000D00D00000B03000000020000000F00000003000045030000DB0D00000F03000000030000000F00000003000026040000E50D00001303000000040000000F00000003000008050000EF0D00001603000000050000000F000000030000E9050000F80D00001803000000060000000F000000030000CA060000010E00001A03000000070000000F000000030000AB070000090E00001B03000000080000000F0000000300008C080000110E00001B03000000090000000F0000000300006C090000190E00001C030000000A0000000F0000000300004C0A0000200E00001C030000000B0000000F0000000300002C0B0000270E00001C030000000C0000000F0000000300000B0C00002E0E00001D030000000D0000000F000000030000EA0C0000340E00001D030000000E0000000F000000030000C80D00003A0E00001E030000000F0000000F000000030000A60E0000400E00001F03000000100000000F000000030000820F0000460E00002103000000000000001000000003000099010000A30E0000090300000001000000100000000300007B020000AF0E00000F0300000002000000100000000300005D030000BA0E0000140300000003000000100000000300003F040000C50E00001803000000040000001000000003000021050000CF0E00001B03000000050000001000000003000002060000D90E00001D030000000600000010000000030000E4060000E20E00001E030000000700000010000000030000C5070000EB0E00001F030000000800000010000000030000A6080000F30E00002003000000090000001000000003000087090000FC0E000021030000000A00000010000000030000670A0000030F000021030000000B00000010000000030000470B00000B0F000021030000000C00000010000000030000270C0000120F000021030000000D00000010000000030000060D0000190F000022030000000E00000010000000030000E40D0000200F000023030000000F00000010000000030000C20E0000260F0000240300000010000000100000000300009F0F00002C0F0000260300000000000000000000000400001B00000025000000C4030000000100000000000000040000F80000002A000000CA030000000200000000000000040000D60100002D000000CF030000000300000000000000040000B302000030000000D40300000004000000000000000400009003000033000000D70300000005000000000000000400006E04000035000000D90300000006000000000000000400004B05000037000000DB0300000007000000000000000400002806000038000000DD0300000008000000000000000400000407000039000000DE030000000900000000000000040000E10700003A000000DE030000000A00000000000000040000BD0800003A000000DF030000000B00000000000000040000980900003A000000DF030000000C00000000000000040000730A00003A000000E0030000000D000000000000000400004E0B000039000000E1030000000E00000000000000040000280C000038000000E2030000000F00000000000000040000010D000037000000E3030000001000000000000000040000DA0D000036000000E60300000000000000010000000400003500000012010000CF0300000001000000010000000400001301000017010000D6030000000200000001000000040000F00100001B010000DB030000000300000001000000040000CE0200001F010000DF030000000400000001000000040000AC03000022010000E20300000005000000010000000400008904000025010000E40300000006000000010000000400006705000027010000E60300000007000000010000000400004406000029010000E8030000000800000001000000040000210700002A010000E9030000000900000001000000040000FE0700002B010000E9030000000A00000001000000040000DA0800002C010000EA030000000B00000001000000040000B60900002C010000EB030000000C00000001000000040000910A00002D010000EB030000000D000000010000000400006C0B00002C010000EC030000000E00000001000000040000460C00002C010000ED030000000F00000001000000040000200D00002B010000EF030000001000000001000000040000F90D00002A010000F10300000000000000020000000400004F00000000020000D80300000001000000020000000400002D01000005020000DF0300000002000000020000000400000B02000009020000E4030000000300000002000000040000E90200000D020000E8030000000400000002000000040000C703000011020000EB030000000500000002000000040000A504000014020000EE0300000006000000020000000400008205000017020000EF0300000007000000020000000400006006000019020000F10300000008000000020000000400003D0700001B020000F20300000009000000020000000400001A0800001D020000F3030000000A00000002000000040000F70800001E020000F3030000000B00000002000000040000D30900001F020000F4030000000C00000002000000040000AF0A00001F020000F4030000000D000000020000000400008A0B000020020000F5030000000E00000002000000040000640C000020020000F6030000000F000000020000000400003E0D00001F020000F8030000001000000002000000040000180E00001F020000FA03000000000000000300000004000068000000ED020000E003000000010000000300000004000046010000F2020000E603000000020000000300000004000025020000F7020000EB03000000030000000300000004000003030000FC020000EF030000000400000003000000040000E103000000030000F2030000000500000003000000040000BF04000004030000F50300000006000000030000000400009D05000007030000F70300000007000000030000000400007B0600000A030000F8030000000800000003000000040000590700000C030000F9030000000900000003000000040000360800000E030000FA030000000A000000030000000400001309000010030000FB030000000B00000003000000040000EF09000011030000FB030000000C00000003000000040000CB0A000012030000FC030000000D00000003000000040000A70B000013030000FD030000000E00000003000000040000820C000014030000FE030000000F000000030000000400005C0D00001403000000040000001000000003000000040000360E0000140300000204000000000000000400000004000081000000DA030000E50300000001000000040000000400005F010000E0030000EC0300000002000000040000000400003E020000E6030000F10300000003000000040000000400001D030000EB030000F5030000000400000004000000040000FB030000EF030000F8030000000500000004000000040000DA040000F3030000FB030000000600000004000000040000B8050000F7030000FD03000000070000000400000004000096060000FA030000FE03000000080000000400000004000074070000FD030000FF030000000900000004000000040000520800000004000000040000000A000000040000000400002F0900000204000001040000000B000000040000000400000C0A00000404000001040000000C00000004000000040000E80A00000504000002040000000D00000004000000040000C40B00000604000003040000000E000000040000000400009F0C00000704000004040000000F00000004000000040000790D00000804000005040000001000000004000000040000530E0000080400000804000000000000000500000004000099000000C7040000EA03000000010000000500000004000078010000CD040000F003000000020000000500000004000057020000D3040000F503000000030000000500000004000036030000D9040000F903000000040000000500000004000015040000DE040000FD030000000500000005000000040000F4040000E2040000FF030000000600000005000000040000D2050000E704000001040000000700000005000000040000B1060000EA040000030400000008000000050000000400008F070000EE040000040400000009000000050000000400006D080000F104000004040000000A000000050000000400004A090000F304000005040000000B00000005000000040000270A0000F604000006040000000C00000005000000040000040B0000F804000006040000000D00000005000000040000E00B0000F904000007040000000E00000005000000040000BC0C0000FB04000009040000000F00000005000000040000970D0000FC0400000A040000001000000005000000040000710E0000FD0400000C040000000000000006000000040000B2000000B3050000ED03000000010000000600000004000091010000BA050000F303000000020000000600000004000070020000C1050000F80300000003000000060000000400004F030000C7050000FD0300000004000000060000000400002E040000CC050000000400000005000000060000000400000E050000D105000003040000000600000006000000040000EC050000D605000005040000000700000006000000040000CB060000DA05000006040000000800000006000000040000AA070000DE0500000704000000090000000600000004000088080000E105000008040000000A0000000600000004000066090000E405000009040000000B00000006000000040000430A0000E705000009040000000C00000006000000040000200B0000EA0500000A040000000D00000006000000040000FC0B0000EC0500000B040000000E00000006000000040000D80C0000EE0500000C040000000F00000006000000040000B30D0000EF0500000E0400000010000000060000000400008E0E0000F105000010040000000000000007000000040000CA0000009F060000F0030000000100000007000000040000A9010000A7060000F603000000020000000700000004000089020000AE060000FB03000000030000000700000004000068030000B4060000FF03000000040000000700000004000048040000BA0600000304000000050000000700000004000027050000BF0600000504000000060000000700000004000006060000C506000007040000000700000007000000040000E5060000C906000009040000000800000007000000040000C4070000CE0600000A040000000900000007000000040000A3080000D10600000B040000000A0000000700000004000081090000D50600000B040000000B000000070000000400005E0A0000D80600000C040000000C000000070000000400003C0B0000DB0600000D040000000D00000007000000040000180C0000DE0600000E040000000E00000007000000040000F40C0000E00600000F040000000F00000007000000040000D00D0000E206000010040000001000000007000000040000AB0E0000E406000013040000000000000008000000040000E10000008A070000F2030000000100000008000000040000C101000092070000F8030000000200000008000000040000A10200009A070000FD03000000030000000800000004000081030000A10700000104000000040000000800000004000061040000A70700000404000000050000000800000004000040050000AD0700000704000000060000000800000004000020060000B207000009040000000700000008000000040000FF060000B80700000B040000000800000008000000040000DE070000BC0700000C040000000900000008000000040000BD080000C10700000D040000000A000000080000000400009B090000C50700000D040000000B00000008000000040000790A0000C90700000E040000000C00000008000000040000570B0000CC0700000F040000000D00000008000000040000340C0000CF07000010040000000E00000008000000040000100D0000D207000011040000000F00000008000000040000EC0D0000D407000013040000001000000008000000040000C70E0000D707000015040000000000000009000000040000F900000075080000F3030000000100000009000000040000D90100007D080000F9030000000200000009000000040000B902000085080000FF030000000300000009000000040000990300008C08000003040000000400000009000000040000790400009308000006040000000500000009000000040000590500009908000009040000000600000009000000040000390600009F0800000B04000000070000000900000004000019070000A50800000C040000000800000009000000040000F8070000AA0800000D040000000900000009000000040000D7080000AF0800000E040000000A00000009000000040000B6090000B40800000F040000000B00000009000000040000940A0000B808000010040000000C00000009000000040000720B0000BC08000010040000000D00000009000000040000500C0000BF08000011040000000E000000090000000400002C0D0000C308000013040000000F00000009000000040000080E0000C608000014040000001000000009000000040000E40E0000C80800001704000000000000000A000000040000100100005E090000F503000000010000000A000000040000F101000066090000FB03000000020000000A000000040000D10200006F0900000004000000030000000A000000040000B2030000770900000404000000040000000A000000040000920400007E0900000804000000050000000A00000004000073050000850900000A04000000060000000A000000040000530600008B0900000C04000000070000000A00000004000033070000910900000E04000000080000000A00000004000012080000970900000F04000000090000000A000000040000F20800009C09000010040000000A0000000A000000040000D1090000A109000011040000000B0000000A000000040000AF0A0000A609000011040000000C0000000A0000000400008D0B0000AA09000012040000000D0000000A0000000400006B0C0000AE09000013040000000E0000000A000000040000480D0000B209000014040000000F0000000A000000040000240E0000B60900001604000000100000000A000000040000000F0000B90900001804000000000000000B00000004000028010000450A0000F603000000010000000B000000040000090200004F0A0000FC03000000020000000B000000040000E9020000570A00000204000000030000000B000000040000CA030000600A00000604000000040000000B000000040000AB040000680A00000904000000050000000B0000000400008C0500006F0A00000C04000000060000000B0000000400006C060000760A00000E04000000070000000B0000000400004C0700007D0A00000F04000000080000000B0000000400002C080000830A00001104000000090000000B0000000400000C090000880A000012040000000A0000000B000000040000EB0900008E0A000012040000000B0000000B000000040000CA0A0000930A000013040000000C0000000B000000040000A90B0000980A000014040000000D0000000B000000040000860C00009C0A000015040000000E0000000B000000040000640D0000A10A000016040000000F0000000B000000040000400E0000A50A00001804000000100000000B0000000400001C0F0000A80A00001A04000000000000000C0000000400003F0100002C0B0000F803000000010000000C00000004000020020000360B0000FE03000000020000000C000000040000010300003F0B00000304000000030000000C000000040000E3030000480B00000804000000040000000C000000040000C4040000500B00000B04000000050000000C000000040000A5050000580B00000E04000000060000000C000000040000850600005F0B00001004000000070000000C00000004000066070000660B00001104000000080000000C000000040000460800006D0B00001304000000090000000C00000004000026090000730B000014040000000A0000000C000000040000060A0000790B000014040000000B0000000C000000040000E50A00007F0B000015040000000C0000000C000000040000C40B0000840B000016040000000D0000000C000000040000A20C0000890B000017040000000E0000000C0000000400007F0D00008E0B000018040000000F0000000C0000000400005C0E0000920B00001A04000000100000000C000000040000390F0000960B00001C04000000000000000D00000004000057010000110C0000FA03000000010000000D000000040000380200001B0C00000104000000020000000D0000000400001A030000250C00000604000000030000000D000000040000FB0300002E0C00000A04000000040000000D000000040000DC040000370C00000E04000000050000000D000000040000BE0500003F0C00001004000000060000000D0000000400009F060000470C00001204000000070000000D0000000400007F0700004E0C00001404000000080000000D00000004000060080000550C00001504000000090000000D000000040000400900005C0C000016040000000A0000000D000000040000200A0000620C000017040000000B0000000D000000040000000B0000690C000018040000000C0000000D000000040000DF0B00006E0C000018040000000D0000000D000000040000BD0C0000740C00001A040000000E0000000D0000000400009B0D0000790C00001B040000000F0000000D000000040000780E00007E0C00001D04000000100000000D000000040000550F0000820C00001F04000000000000000E0000000400006F010000F40C0000FE03000000010000000E00000004000050020000FE0C00000404000000020000000E00000004000032030000080D00000904000000030000000E00000004000013040000120D00000E04000000040000000E000000040000F50400001B0D00001104000000050000000E000000040000D7050000240D00001404000000060000000E000000040000B80600002D0D00001604000000070000000E00000004000099070000350D00001704000000080000000E0000000400007A0800003C0D00001904000000090000000E0000000400005B090000430D00001A040000000A0000000E0000000400003B0A00004A0D00001A040000000B0000000E0000000400001B0B0000510D00001B040000000C0000000E000000040000FA0B0000570D00001C040000000D0000000E000000040000D90C00005D0D00001D040000000E0000000E000000040000B70D0000620D00001E040000000F0000000E000000040000950E0000680D00002004000000100000000E000000040000720F00006D0D00002204000000000000000F00000004000086010000D50D00000204000000010000000F00000004000068020000E00D00000804000000020000000F0000000400004A030000EA0D00000E04000000030000000F0000000400002C040000F50D00001204000000040000000F0000000400000E050000FE0D00001504000000050000000F000000040000F0050000080E00001804000000060000000F000000040000D2060000100E00001A04000000070000000F000000040000B3070000190E00001C04000000080000000F00000004000094080000210E00001D04000000090000000F00000004000075090000290E00001E040000000A0000000F000000040000560A0000300E00001F040000000B0000000F000000040000360B0000370E000020040000000C0000000F000000040000150C00003E0E000020040000000D0000000F000000040000F40C0000440E000022040000000E0000000F000000040000D30D00004A0E000023040000000F0000000F000000040000B10E0000500E00002504000000100000000F0000000400008E0F0000560E0000270400000000000000100000000400009E010000B40E00000804000000010000001000000004000080020000BF0E00000E04000000020000001000000004000063030000CA0E00001304000000030000001000000004000045040000D50E00001804000000040000001000000004000027050000DF0E00001B04000000050000001000000004000009060000E90E00001E040000000600000010000000040000EB060000F20E000020040000000700000010000000040000CD070000FB0E000022040000000800000010000000040000AF080000040F000023040000000900000010000000040000900900000C0F000024040000000A00000010000000040000710A0000140F000025040000000B00000010000000040000510B00001B0F000025040000000C00000010000000040000310C0000220F000026040000000D00000010000000040000100D0000290F000027040000000E00000010000000040000EF0D0000300F000029040000000F00000010000000040000CD0E0000360F00002B040000001000000010000000040000AB0F00003C0F00002D0400000000000000000000000500001C0000002F000000AE040000000100000000000000050000FA00000033000000B5040000000200000000000000050000D801000037000000BB040000000300000000000000050000B60200003A000000BF040000000400000000000000050000940300003D000000C3040000000500000000000000050000720400003F000000C60400000006000000000000000500005005000041000000C90400000007000000000000000500002D06000042000000CB0400000008000000000000000500000A07000043000000CC040000000900000000000000050000E707000044000000CD040000000A00000000000000050000C408000044000000CF040000000B00000000000000050000A009000044000000D0040000000C000000000000000500007B0A000044000000D1040000000D00000000000000050000570B000043000000D2040000000E00000000000000050000310C000042000000D4040000000F000000000000000500000B0D000041000000D6040000001000000000000000050000E40D000040000000D9040000000000000001000000050000370000001D010000BA0400000001000000010000000500001501000021010000C1040000000200000001000000050000F301000025010000C7040000000300000001000000050000D102000029010000CB040000000400000001000000050000B00300002C010000CF0400000005000000010000000500008E0400002F010000D20400000006000000010000000500006C05000031010000D50400000007000000010000000500004906000033010000D70400000008000000010000000500002707000034010000D80400000009000000010000000500000408000036010000DA040000000A00000001000000050000E108000036010000DB040000000B00000001000000050000BD09000037010000DC040000000C00000001000000050000990A000037010000DD040000000D00000001000000050000750B000037010000DF040000000E000000010000000500004F0C000036010000E0040000000F000000010000000500002A0D000036010000E3040000001000000001000000050000030E000035010000E5040000000000000002000000050000500000000A020000C50400000001000000020000000500002F0100000F020000CB0400000002000000020000000500000D02000014020000D1040000000300000002000000050000EC02000018020000D6040000000400000002000000050000CA0300001C020000D9040000000500000002000000050000A90400001F020000DD0400000006000000020000000500008705000021020000DF0400000007000000020000000500006506000024020000E10400000008000000020000000500004307000026020000E30400000009000000020000000500002108000027020000E4040000000A00000002000000050000FE08000029020000E5040000000B00000002000000050000DA0900002A020000E6040000000C00000002000000050000B70A00002A020000E8040000000D00000002000000050000920B00002A020000E9040000000E000000020000000500006D0C00002B020000EB040000000F00000002000000050000480D00002A020000ED040000001000000002000000050000220E00002A020000F00400000000000000030000000500006A000000F8020000CD04000000010000000300000005000048010000FD020000D40400000002000000030000000500002702000002030000D90400000003000000030000000500000603000007030000DE040000000400000003000000050000E50300000B030000E2040000000500000003000000050000C40400000F030000E5040000000600000003000000050000A205000012030000E80400000007000000030000000500008106000015030000EA0400000008000000030000000500005F07000017030000EB0400000009000000030000000500003D08000019030000ED040000000A000000030000000500001A0900001B030000EE040000000B00000003000000050000F70900001C030000EF040000000C00000003000000050000D30A00001D030000F0040000000D00000003000000050000AF0B00001E030000F2040000000E000000030000000500008B0C00001F030000F3040000000F00000003000000050000660D00001F030000F6040000001000000003000000050000400E00001F030000F804000000000000000400000005000083000000E5030000D404000000010000000400000005000062010000EB030000DB04000000020000000400000005000041020000F1030000E004000000030000000400000005000020030000F6030000E5040000000400000004000000050000FF030000FB030000E9040000000500000004000000050000DE040000FF030000EC040000000600000004000000050000BD05000002040000EE0400000007000000040000000500009C06000006040000F00400000008000000040000000500007A07000009040000F2040000000900000004000000050000580800000B040000F3040000000A00000004000000050000360900000D040000F5040000000B00000004000000050000130A00000F040000F6040000000C00000004000000050000F00A000011040000F7040000000D00000004000000050000CC0B000012040000F9040000000E00000004000000050000A80C000013040000FA040000000F00000004000000050000830D000014040000FD0400000010000000040000000500005D0E000014040000FF0400000000000000050000000500009B000000D3040000D90400000001000000050000000500007B010000D9040000E00400000002000000050000000500005A020000DF040000E60400000003000000050000000500003A030000E5040000EA04000000040000000500000005000019040000EA040000EE040000000500000005000000050000F8040000EE040000F1040000000600000005000000050000D7050000F2040000F4040000000700000005000000050000B6060000F6040000F604000000080000000500000005000095070000FA040000F804000000090000000500000005000073080000FD040000F9040000000A0000000500000005000051090000FF040000FA040000000B000000050000000500002F0A000002050000FC040000000C000000050000000500000C0B000004050000FD040000000D00000005000000050000E90B000005050000FE040000000E00000005000000050000C50C00000705000000050000000F00000005000000050000A00D000008050000020500000010000000050000000500007B0E00000905000005050000000000000006000000050000B4000000C0050000DE04000000010000000600000005000093010000C7050000E504000000020000000600000005000073020000CD050000EA04000000030000000600000005000053030000D3050000EF04000000040000000600000005000032040000D8050000F304000000050000000600000005000012050000DE050000F6040000000600000006000000050000F2050000E2050000F9040000000700000006000000050000D1060000E6050000FB040000000800000006000000050000B0070000EA050000FC0400000009000000060000000500008E080000EE050000FE040000000A000000060000000500006D090000F1050000FF040000000B000000060000000500004B0A0000F405000000050000000C00000006000000050000280B0000F605000001050000000D00000006000000050000050C0000F805000003050000000E00000006000000050000E10C0000FA05000005050000000F00000006000000050000BD0D0000FC05000007050000001000000006000000050000980E0000FD0500000A050000000000000007000000050000CC000000AC060000E1040000000100000007000000050000AC010000B3060000E80400000002000000070000000500008C020000BA060000EE0400000003000000070000000500006C030000C1060000F30400000004000000070000000500004C040000C7060000F60400000005000000070000000500002C050000CC060000FA0400000006000000070000000500000B060000D1060000FC040000000700000007000000050000EB060000D6060000FE040000000800000007000000050000CA070000DA06000000050000000900000007000000050000A9080000DE06000001050000000A0000000700000005000088090000E206000003050000000B00000007000000050000660A0000E506000004050000000C00000007000000050000440B0000E806000005050000000D00000007000000050000210C0000EB06000007050000000E00000007000000050000FD0C0000ED06000008050000000F00000007000000050000D90D0000EF0600000B050000001000000007000000050000B50E0000F10600000D050000000000000008000000050000E400000097070000E4040000000100000008000000050000C40100009F070000EB040000000200000008000000050000A4020000A7070000F104000000030000000800000005000085030000AE070000F604000000040000000800000005000065040000B4070000FA04000000050000000800000005000045050000BA070000FD04000000060000000800000005000025060000C0070000FF04000000070000000800000005000005070000C507000001050000000800000008000000050000E4070000C907000003050000000900000008000000050000C4080000CE07000005050000000A00000008000000050000A3090000D207000006050000000B00000008000000050000810A0000D607000007050000000C000000080000000500005F0B0000D907000008050000000D000000080000000500003D0C0000DC0700000A050000000E000000080000000500001A0D0000DF0700000C050000000F00000008000000050000F60D0000E20700000E050000001000000008000000050000D10E0000E407000011050000000000000009000000050000FB00000082080000E7040000000100000009000000050000DC0100008A080000EE040000000200000009000000050000BD02000092080000F40400000003000000090000000500009D0300009A080000F80400000004000000090000000500007E040000A0080000FC0400000005000000090000000500005E050000A7080000FF0400000006000000090000000500003F060000AD080000020500000007000000090000000500001F070000B308000004050000000800000009000000050000FF070000B808000006050000000900000009000000050000DE080000BD08000007050000000A00000009000000050000BD090000C108000009050000000B000000090000000500009C0A0000C50800000A050000000C000000090000000500007A0B0000C90800000B050000000D00000009000000050000580C0000CD0800000D050000000E00000009000000050000350D0000D00800000F050000000F00000009000000050000120E0000D308000011050000001000000009000000050000EE0E0000D60800001405000000000000000A000000050000130100006C090000EA04000000010000000A000000050000F401000074090000F004000000020000000A000000050000D50200007D090000F604000000030000000A000000050000B603000084090000FB04000000040000000A000000050000970400008C090000FF04000000050000000A00000005000077050000930900000205000000060000000A00000005000058060000990900000505000000070000000A000000050000380700009F0900000705000000080000000A00000005000019080000A50900000805000000090000000A000000050000F8080000AA0900000A050000000A0000000A000000050000D8090000AF0900000B050000000B0000000A000000050000B70A0000B40900000D050000000C0000000A000000050000960B0000B80900000E050000000D0000000A000000050000740C0000BC0900000F050000000E0000000A000000050000510D0000C009000011050000000F0000000A0000000500002E0E0000C40900001305000000100000000A0000000500000A0F0000C70900001605000000000000000B0000000500002A010000540A0000EC04000000010000000B0000000500000C0200005D0A0000F304000000020000000B000000050000ED020000660A0000F904000000030000000B000000050000CE0300006E0A0000FE04000000040000000B000000050000AF040000760A00000205000000050000000B000000050000900500007D0A00000505000000060000000B00000005000071060000840A00000705000000070000000B000000050000520700008B0A00000905000000080000000B00000005000033080000910A00000B05000000090000000B00000005000013090000970A00000D050000000A0000000B000000050000F20900009C0A00000E050000000B0000000B000000050000D20A0000A10A00000F050000000C0000000B000000050000B10B0000A60A000011050000000D0000000B0000000500008F0C0000AB0A000012050000000E0000000B0000000500006D0D0000AF0A000014050000000F0000000B0000000500004A0E0000B30A00001605000000100000000B000000050000270F0000B70A00001905000000000000000C000000050000420100003B0B0000EF04000000010000000C00000005000024020000440B0000F604000000020000000C000000050000050300004E0B0000FC04000000030000000C000000050000E7030000560B00000105000000040000000C000000050000C80400005F0B00000505000000050000000C000000050000A9050000660B00000805000000060000000C0000000500008B0600006E0B00000A05000000070000000C0000000500006C070000750B00000D05000000080000000C0000000500004C0800007B0B00000E05000000090000000C0000000500002D090000820B000010050000000A0000000C0000000500000D0A0000880B000011050000000B0000000C000000050000ED0A00008D0B000012050000000C0000000C000000050000CC0B0000930B000014050000000D0000000C000000050000AB0C0000970B000015050000000E0000000C000000050000890D00009C0B000017050000000F0000000C000000050000660E0000A10B00001A05000000100000000C000000050000430F0000A50B00001C05000000000000000D0000000500005A010000200C0000F304000000010000000D0000000500003B0200002A0C0000FA04000000020000000D0000000500001D030000340C0000FF04000000030000000D000000050000FF0300003D0C00000405000000040000000D000000050000E1040000460C00000805000000050000000D000000050000C30500004E0C00000B05000000060000000D000000050000A4060000560C00000E05000000070000000D000000050000850700005D0C00001005000000080000000D00000005000066080000640C00001205000000090000000D000000050000470900006B0C000013050000000A0000000D000000050000280A0000720C000015050000000B0000000D000000050000080B0000780C000016050000000C0000000D000000050000E70B00007D0C000018050000000D0000000D000000050000C60C0000830C000019050000000E0000000D000000050000A40D0000880C00001B050000000F0000000D000000050000820E00008D0C00001D05000000100000000D0000000500005F0F0000910C00002005000000000000000E00000005000071010000030D0000F704000000010000000E000000050000530200000E0D0000FE04000000020000000E00000005000036030000180D00000405000000030000000E00000005000018040000220D00000905000000040000000E000000050000FA0400002B0D00000D05000000050000000E000000050000DC050000340D00001005000000060000000E000000050000BE0600003C0D00001305000000070000000E0000000500009F070000440D00001505000000080000000E000000050000810800004C0D00001605000000090000000E00000005000062090000530D000018050000000A0000000E000000050000420A00005A0D000019050000000B0000000E000000050000230B0000600D00001B050000000C0000000E000000050000020C0000660D00001C050000000D0000000E000000050000E20C00006C0D00001E050000000E0000000E000000050000C00D0000720D000020050000000F0000000E0000000500009E0E0000770D00002205000000100000000E0000000500007C0F00007C0D00002505000000000000000F00000005000089010000E50D0000FD04000000010000000F0000000500006C020000F00D00000305000000020000000F0000000500004E030000FA0D00000905000000030000000F00000005000030040000050E00000E05000000040000000F000000050000130500000E0E00001205000000050000000F000000050000F5050000180E00001505000000060000000F000000050000D7060000200E00001805000000070000000F000000050000B9070000290E00001A05000000080000000F0000000500009B080000310E00001C05000000090000000F0000000500007C090000380E00001E050000000A0000000F0000000500005D0A0000400E00001F050000000B0000000F0000000500003E0B0000470E000020050000000C0000000F0000000500001E0C00004D0E000022050000000D0000000F000000050000FD0C0000540E000023050000000E0000000F000000050000DC0D00005A0E000025050000000F0000000F000000050000BB0E0000600E00002805000000100000000F000000050000980F0000650E00002A050000000000000010000000050000A1010000C40E00000305000000010000001000000005000084020000D00E00000A05000000020000001000000005000067030000DB0E00001005000000030000001000000005000049040000E50E0000150500000004000000100000000500002C050000F00E0000190500000005000000100000000500000F060000F90E00001C050000000600000010000000050000F1060000030F00001F050000000700000010000000050000D30700000B0F000021050000000800000010000000050000B5080000140F000023050000000900000010000000050000970900001C0F000024050000000A00000010000000050000780A0000240F000026050000000B00000010000000050000590B00002B0F000027050000000C00000010000000050000390C0000320F000029050000000D00000010000000050000190D0000390F00002A050000000E00000010000000050000F80D0000400F00002C050000000F00000010000000050000D70E0000460F00002E050000001000000010000000050000B50F00004C0F0000310500000000000000000000000600001C0000003900000096050000000100000000000000060000FB0000003D0000009D050000000200000000000000060000D901000041000000A3050000000300000000000000060000B802000044000000A90500000004000000000000000600009603000047000000AD0500000005000000000000000600007504000049000000B1050000000600000000000000060000530500004B000000B4050000000700000000000000060000310600004C000000B60500000008000000000000000600000F0700004D000000B8050000000900000000000000060000EC0700004E000000BA050000000A00000000000000060000C90800004E000000BC050000000B00000000000000060000A60900004E000000BE050000000C00000000000000060000820A00004E000000C0050000000D000000000000000600005E0B00004D000000C2050000000E00000000000000060000390C00004C000000C4050000000F00000000000000060000130D00004B000000C7050000001000000000000000060000ED0D00004A000000CA0500000000000000010000000600003700000027010000A3050000000100000001000000060000150100002B010000AA050000000200000001000000060000F40100002F010000B1050000000300000001000000060000D302000033010000B6050000000400000001000000060000B203000036010000BA0500000005000000010000000600009104000039010000BE0500000006000000010000000600006F0500003B010000C10500000007000000010000000600004D0600003D010000C40500000008000000010000000600002B0700003F010000C60500000009000000010000000600000908000040010000C8050000000A00000001000000060000E708000041010000C9050000000B00000001000000060000C309000041010000CB050000000C00000001000000060000A00A000041010000CD050000000D000000010000000600007C0B000041010000CF050000000E00000001000000060000570C000041010000D1050000000F00000001000000060000320D000040010000D40500000010000000010000000600000C0E00003F010000D70500000000000000020000000600005100000015020000AE050000000100000002000000060000300100001A020000B60500000002000000020000000600000F0200001E020000BC050000000300000002000000060000EE02000022020000C1050000000400000002000000060000CD03000026020000C6050000000500000002000000060000AC04000029020000C90500000006000000020000000600008B0500002C020000CC050000000700000002000000060000690600002E020000CF0500000008000000020000000600004807000030020000D10500000009000000020000000600002608000032020000D3050000000A000000020000000600000309000033020000D5050000000B00000002000000060000E109000034020000D7050000000C00000002000000060000BD0A000035020000D8050000000D000000020000000600009A0B000035020000DA050000000E00000002000000060000750C000035020000DD050000000F00000002000000060000500D000035020000DF0500000010000000020000000600002B0E000035020000E30500000000000000030000000600006A00000003030000B80500000001000000030000000600004901000008030000BF050000000200000003000000060000290200000D030000C50500000003000000030000000600000803000012030000CB050000000400000003000000060000E803000016030000CF050000000500000003000000060000C70400001A030000D3050000000600000003000000060000A60500001D030000D60500000007000000030000000600008506000020030000D80500000008000000030000000600006307000022030000DB0500000009000000030000000600004208000024030000DD050000000A000000030000000600002009000026030000DE050000000B00000003000000060000FD09000028030000E0050000000C00000003000000060000DA0A000029030000E2050000000D00000003000000060000B70B000029030000E4050000000E00000003000000060000930C00002A030000E6050000000F000000030000000600006E0D00002A030000E9050000001000000003000000060000490E00002A030000EC05000000000000000400000006000083000000F1030000C005000000010000000400000006000063010000F7030000C705000000020000000400000006000042020000FC030000CD0500000003000000040000000600002203000001040000D30500000004000000040000000600000204000006040000D7050000000500000004000000060000E10400000A040000DB050000000600000004000000060000C10500000E040000DE050000000700000004000000060000A006000011040000E00500000008000000040000000600007F07000014040000E30500000009000000040000000600005D08000017040000E5050000000A000000040000000600003C09000019040000E6050000000B00000004000000060000190A00001B040000E8050000000C00000004000000060000F70A00001C040000EA050000000D00000004000000060000D40B00001D040000EC050000000E00000004000000060000B00C00001E040000EE050000000F000000040000000600008B0D00001F040000F1050000001000000004000000060000660E000020040000F40500000000000000050000000600009C000000DF040000C60500000001000000050000000600007C010000E5040000CE0500000002000000050000000600005C020000EB040000D40500000003000000050000000600003C030000F1040000D90500000004000000050000000600001C040000F6040000DE050000000500000005000000060000FB040000FA040000E1050000000600000005000000060000DB050000FE040000E5050000000700000005000000060000BB06000002050000E70500000008000000050000000600009A07000005050000E90500000009000000050000000600007908000008050000EB050000000A00000005000000060000570900000B050000ED050000000B00000005000000060000350A00000D050000EF050000000C00000005000000060000130B000010050000F1050000000D00000005000000060000F00B000011050000F3050000000E00000005000000060000CD0C000013050000F5050000000F00000005000000060000A80D000014050000F8050000001000000005000000060000840E000015050000FB050000000000000006000000060000B4000000CC050000CC05000000010000000600000006000094010000D3050000D305000000020000000600000006000075020000D9050000DA05000000030000000600000006000055030000DF050000DF05000000040000000600000006000035040000E5050000E305000000050000000600000006000015050000EA050000E7050000000600000006000000060000F5050000EE050000EA050000000700000006000000060000D5060000F3050000ED050000000800000006000000060000B5070000F7050000EF05000000090000000600000006000094080000FA050000F1050000000A0000000600000006000073090000FD050000F3050000000B00000006000000060000510A000000060000F5050000000C000000060000000600002F0B000002060000F6050000000D000000060000000600000C0C000005060000F9050000000E00000006000000060000E90C000006060000FB050000000F00000006000000060000C50D000008060000FE050000001000000006000000060000A10E00000A06000001060000000000000007000000060000CC000000B9060000D1050000000100000007000000060000AD010000C0060000D80500000002000000070000000600008D020000C7060000DE0500000003000000070000000600006E030000CD060000E40500000004000000070000000600004F040000D3060000E80500000005000000070000000600002F050000D9060000EC0500000006000000070000000600000F060000DE060000EF050000000700000007000000060000EF060000E3060000F2050000000800000007000000060000CF070000E7060000F4050000000900000007000000060000AF080000EB060000F6050000000A000000070000000600008E090000EE060000F8050000000B000000070000000600006C0A0000F2060000F9050000000C000000070000000600004A0B0000F5060000FB050000000D00000007000000060000280C0000F7060000FD050000000E00000007000000060000050D0000FA06000000060000000F00000007000000060000E20D0000FC06000003060000001000000007000000060000BE0E0000FE06000006060000000000000008000000060000E4000000A5070000D5050000000100000008000000060000C5010000AC070000DC050000000200000008000000060000A6020000B4070000E205000000030000000800000006000087030000BB070000E805000000040000000800000006000068040000C1070000EC05000000050000000800000006000048050000C7070000F005000000060000000800000006000029060000CD070000F305000000070000000800000006000009070000D2070000F6050000000800000008000000060000E9070000D7070000F8050000000900000008000000060000C9080000DB070000FA050000000A00000008000000060000A8090000DF070000FC050000000B00000008000000060000870A0000E3070000FE050000000C00000008000000060000660B0000E607000000060000000D00000008000000060000440C0000E907000002060000000E00000008000000060000210D0000EC07000004060000000F00000008000000060000FE0D0000EF07000007060000001000000008000000060000DA0E0000F10700000A060000000000000009000000060000FC00000090080000D9050000000100000009000000060000DD01000098080000E0050000000200000009000000060000BE020000A0080000E6050000000300000009000000060000A0030000A7080000EC05000000040000000900000006000081040000AE080000F005000000050000000900000006000062050000B4080000F405000000060000000900000006000043060000BA080000F705000000070000000900000006000023070000C0080000FA05000000080000000900000006000003080000C5080000FC050000000900000009000000060000E4080000CA080000FE050000000A00000009000000060000C3090000CF08000000060000000B00000009000000060000A20A0000D308000002060000000C00000009000000060000810B0000D708000003060000000D00000009000000060000600C0000DA08000006060000000E000000090000000600003D0D0000DE08000008060000000F000000090000000600001A0E0000E10800000B060000001000000009000000060000F70E0000E30800000E06000000000000000A0000000600001401000079090000DC05000000010000000A000000060000F501000082090000E405000000020000000A000000060000D70200008B090000EA05000000030000000A000000060000B803000092090000EF05000000040000000A0000000600009A0400009A090000F405000000050000000A0000000600007B050000A1090000F705000000060000000A0000000600005C060000A7090000FB05000000070000000A0000000600003D070000AD090000FD05000000080000000A0000000600001E080000B30900000006000000090000000A000000060000FE080000B809000002060000000A0000000A000000060000DE090000BD09000004060000000B0000000A000000060000BD0A0000C209000005060000000C0000000A0000000600009C0B0000C609000007060000000D0000000A0000000600007B0C0000CA09000009060000000E0000000A000000060000590D0000CE0900000C060000000F0000000A000000060000360E0000D20900000F06000000100000000A000000060000130F0000D50900001206000000000000000B0000000600002C010000620A0000E005000000010000000B0000000600000D0200006B0A0000E705000000020000000B000000060000EF020000740A0000EE05000000030000000B000000060000D10300007C0A0000F305000000040000000B000000060000B2040000840A0000F705000000050000000B000000060000940500008C0A0000FB05000000060000000B00000006000075060000930A0000FE05000000070000000B00000006000057070000990A00000106000000080000000B000000060000380800009F0A00000306000000090000000B00000006000018090000A50A000005060000000A0000000B000000060000F8090000AB0A000007060000000B0000000B000000060000D80A0000B00A000009060000000C0000000B000000060000B80B0000B40A00000B060000000D0000000B000000060000960C0000B90A00000D060000000E0000000B000000060000750D0000BD0A000010060000000F0000000B000000060000520E0000C10A00001306000000100000000B0000000600002F0F0000C50A00001606000000000000000C00000006000043010000490B0000E405000000010000000C00000006000025020000530B0000EB05000000020000000C000000060000070300005C0B0000F205000000030000000C000000060000E9030000650B0000F705000000040000000C000000060000CB0400006D0B0000FC05000000050000000C000000060000AD050000750B0000FF05000000060000000C0000000600008F0600007D0B00000306000000070000000C00000006000070070000840B00000506000000080000000C000000060000520800008A0B00000806000000090000000C00000006000032090000900B00000A060000000A0000000C000000060000130A0000960B00000C060000000B0000000C000000060000F30A00009C0B00000D060000000C0000000C000000060000D30B0000A10B00000F060000000D0000000C000000060000B20C0000A60B000011060000000E0000000C000000060000900D0000AB0B000014060000000F0000000C0000000600006E0E0000AF0B00001706000000100000000C0000000600004C0F0000B30B00001A06000000000000000D0000000600005B0100002F0C0000E905000000010000000D0000000600003D020000390C0000F005000000020000000D00000006000020030000430C0000F605000000030000000D000000060000020400004C0C0000FC05000000040000000D000000060000E4040000550C00000006000000050000000D000000060000C60500005D0C00000406000000060000000D000000060000A8060000650C00000706000000070000000D0000000600008A0700006C0C00000A06000000080000000D0000000600006C080000730C00000C06000000090000000D0000000600004D0900007A0C00000E060000000A0000000D0000000600002E0A0000810C000010060000000B0000000D0000000600000E0B0000870C000012060000000C0000000D000000060000EE0B00008C0C000014060000000D0000000D000000060000CD0C0000920C000016060000000E0000000D000000060000AC0D0000970C000019060000000F0000000D0000000600008A0E00009C0C00001C06000000100000000D000000060000680F0000A10C00001F06000000000000000E00000006000073010000130D0000EE05000000010000000E000000060000550200001D0D0000F605000000020000000E00000006000038030000280D0000FC05000000030000000E0000000600001B040000310D00000106000000040000000E000000060000FD0400003A0D00000606000000050000000E000000060000E0050000430D00000A06000000060000000E000000060000C20600004C0D00000D06000000070000000E000000060000A4070000530D00001006000000080000000E000000060000860800005B0D00001206000000090000000E00000006000067090000620D000014060000000A0000000E000000060000480A0000690D000016060000000B0000000E000000060000290B0000700D000018060000000C0000000E000000060000090C0000760D00001A060000000D0000000E000000060000E90C00007C0D00001C060000000E0000000E000000060000C80D0000810D00001E060000000F0000000E000000060000A70E0000870D00002106000000100000000E000000060000840F00008C0D00002506000000000000000F0000000600008B010000F50D0000F505000000010000000F0000000600006E020000000E0000FC05000000020000000F000000060000500300000A0E00000306000000030000000F00000006000033040000150E00000806000000040000000F000000060000160500001E0E00000C06000000050000000F000000060000F9050000270E00001006000000060000000F000000060000DB060000300E00001406000000070000000F000000060000BE070000390E00001606000000080000000F000000060000A0080000410E00001906000000090000000F00000006000082090000480E00001B060000000A0000000F000000060000630A0000500E00001D060000000B0000000F000000060000440B0000570E00001F060000000C0000000F000000060000250C00005D0E000020060000000D0000000F000000060000050D0000640E000023060000000E0000000F000000060000E40D00006A0E000025060000000F0000000F000000060000C30E0000700E00002806000000100000000F000000060000A10F0000750E00002B060000000000000010000000060000A3010000D40E0000FD05000000010000001000000006000086020000E00E00000406000000020000001000000006000069030000EB0E00000A0600000003000000100000000600004C040000F60E0000100600000004000000100000000600002F050000000F000014060000000500000010000000060000120600000A0F000018060000000600000010000000060000F5060000130F00001B060000000700000010000000060000D80700001C0F00001E060000000800000010000000060000BA080000240F0000210600000009000000100000000600009C0900002C0F000023060000000A000000100000000600007E0A0000340F000025060000000B000000100000000600005F0B00003C0F000027060000000C00000010000000060000400C0000430F000028060000000D00000010000000060000210D0000490F00002B060000000E00000010000000060000000E0000500F00002D060000000F00000010000000060000DF0E0000560F000030060000001000000010000000060000BE0F00005C0F0000330600000000000000000000000700001B000000430000007B060000000100000000000000070000FB0000004700000083060000000200000000000000070000DA0100004A0000008A060000000300000000000000070000B90200004E0000009006000000040000000000000007000098030000500000009506000000050000000000000007000077040000530000009906000000060000000000000007000055050000550000009D0600000007000000000000000700003406000056000000A00600000008000000000000000700001207000057000000A2060000000900000000000000070000F007000058000000A5060000000A00000000000000070000CE08000058000000A7060000000B00000000000000070000AB09000058000000AA060000000C00000000000000070000880A000058000000AC060000000D00000000000000070000640B000057000000AF060000000E00000000000000070000400C000056000000B1060000000F000000000000000700001B0D000055000000B5060000001000000000000000070000F50D000054000000B906000000000000000100000007000036000000310100008A060000000100000001000000070000150100003501000091060000000200000001000000070000F50100003A01000098060000000300000001000000070000D40200003D0100009E060000000400000001000000070000B303000040010000A30600000005000000010000000700009204000043010000A70600000006000000010000000700007205000046010000AB0600000007000000010000000700005006000047010000AE0600000008000000010000000700002F07000049010000B10600000009000000010000000700000D0800004A010000B3060000000A00000001000000070000EB0800004B010000B6060000000B00000001000000070000C90900004B010000B8060000000C00000001000000070000A60A00004C010000BB060000000D00000001000000070000820B00004C010000BD060000000E000000010000000700005E0C00004B010000C0060000000F00000001000000070000390D00004B010000C3060000001000000001000000070000140E00004A010000C7060000000000000002000000070000500000001F0200009606000000010000000200000007000030010000240200009E0600000002000000020000000700000F02000029020000A5060000000300000002000000070000EF0200002D020000AA060000000400000002000000070000CE03000031020000AF060000000500000002000000070000AE04000034020000B40600000006000000020000000700008D05000037020000B70600000007000000020000000700006C06000039020000BB0600000008000000020000000700004B0700003B020000BD0600000009000000020000000700002A0800003D020000C0060000000A00000002000000070000080900003E020000C2060000000B00000002000000070000E60900003F020000C5060000000C00000002000000070000C30A000040020000C7060000000D00000002000000070000A00B000040020000CA060000000E000000020000000700007C0C000040020000CC060000000F00000002000000070000580D000040020000D0060000001000000002000000070000320E00003F020000D4060000000000000003000000070000690000000E030000A10600000001000000030000000700004901000013030000A80600000002000000030000000700002902000018030000AF060000000300000003000000070000090300001D030000B5060000000400000003000000070000E903000021030000BA060000000500000003000000070000C904000025030000BE060000000600000003000000070000A805000028030000C2060000000700000003000000070000880600002B030000C5060000000800000003000000070000670700002D030000C8060000000900000003000000070000460800002F030000CB060000000A000000030000000700002409000031030000CD060000000B00000003000000070000020A000033030000CF060000000C00000003000000070000E00A000034030000D2060000000D00000003000000070000BD0B000035030000D4060000000E000000030000000700009A0C000035030000D7060000000F00000003000000070000750D000035030000DB060000001000000003000000070000510E000035030000DE06000000000000000400000007000083000000FC030000AA0600000001000000040000000700006301000002040000B10600000002000000040000000700004302000008040000B8060000000300000004000000070000230300000D040000BE0600000004000000040000000700000304000011040000C3060000000500000004000000070000E304000016040000C7060000000600000004000000070000C305000019040000CB060000000700000004000000070000A30600001D040000CE060000000800000004000000070000820700001F040000D10600000009000000040000000700006208000022040000D4060000000A000000040000000700004009000024040000D6060000000B000000040000000700001F0A000026040000D8060000000C00000004000000070000FD0A000028040000DB060000000D00000004000000070000DA0B000029040000DD060000000E00000004000000070000B70C00002A040000E0060000000F00000004000000070000930D00002B040000E40600000010000000040000000700006E0E00002B040000E80600000000000000050000000700009B000000EA040000B10600000001000000050000000700007C010000F1040000B90600000002000000050000000700005C020000F7040000C00600000003000000050000000700003D030000FC040000C60600000004000000050000000700001D04000001050000CB060000000500000005000000070000FE04000006050000CF060000000600000005000000070000DE0500000A050000D3060000000700000005000000070000BE0600000E050000D60600000008000000050000000700009E07000011050000D90600000009000000050000000700007D08000014050000DB060000000A000000050000000700005C09000017050000DE060000000B000000050000000700003B0A000019050000E0060000000C00000005000000070000190B00001B050000E3060000000D00000005000000070000F60B00001D050000E5060000000E00000005000000070000D30C00001F050000E8060000000F00000005000000070000B00D000020050000EC0600000010000000050000000700008C0E000021050000EF060000000000000006000000070000B4000000D8050000B806000000010000000600000007000095010000DF050000C006000000020000000600000007000075020000E5050000C706000000030000000600000007000056030000EB050000CD06000000040000000600000007000037040000F1050000D206000000050000000600000007000018050000F6050000D6060000000600000006000000070000F8050000FB050000DA060000000700000006000000070000D8060000FF050000DD060000000800000006000000070000B807000003060000E00600000009000000060000000700009808000006060000E2060000000A000000060000000700007709000009060000E5060000000B00000006000000070000560A00000C060000E7060000000C00000006000000070000350B00000F060000E9060000000D00000006000000070000130C000011060000EC060000000E00000006000000070000F00C000013060000EF060000000F00000006000000070000CD0D000014060000F2060000001000000006000000070000A90E000016060000F6060000000000000007000000070000CC000000C5060000BE060000000100000007000000070000AD010000CD060000C60600000002000000070000000700008E020000D4060000CD0600000003000000070000000700006F030000DA060000D206000000040000000700000007000050040000E0060000D706000000050000000700000007000031050000E5060000DC06000000060000000700000007000012060000EB060000DF060000000700000007000000070000F3060000EF060000E3060000000800000007000000070000D3070000F4060000E6060000000900000007000000070000B3080000F8060000E8060000000A0000000700000007000092090000FB060000EB060000000B00000007000000070000720A0000FE060000ED060000000C00000007000000070000500B000001070000EF060000000D000000070000000700002F0C000004070000F2060000000E000000070000000700000C0D000006070000F5060000000F00000007000000070000E90D000009070000F8060000001000000007000000070000C50E00000A070000FC060000000000000008000000070000E4000000B2070000C3060000000100000008000000070000C6010000B9070000CB060000000200000008000000070000A7020000C1070000D206000000030000000800000007000088030000C8070000D80600000004000000080000000700006A040000CE070000DD0600000005000000080000000700004B050000D4070000E10600000006000000080000000700002C060000DA070000E50600000007000000080000000700000D070000DF070000E8060000000800000008000000070000ED070000E4070000EB060000000900000008000000070000CD080000E8070000ED060000000A00000008000000070000AD090000EC070000F0060000000B000000080000000700008D0A0000F0070000F2060000000C000000080000000700006C0B0000F3070000F5060000000D000000080000000700004A0C0000F6070000F7060000000E00000008000000070000280D0000F9070000FA060000000F00000008000000070000050E0000FC070000FE060000001000000008000000070000E20E0000FE07000002070000000000000009000000070000FC0000009D080000C8060000000100000009000000070000DE010000A5080000D0060000000200000009000000070000BF020000AD080000D7060000000300000009000000070000A1030000B4080000DD06000000040000000900000007000083040000BB080000E206000000050000000900000007000064050000C2080000E606000000060000000900000007000045060000C8080000EA06000000070000000900000007000027070000CE080000ED06000000080000000900000007000007080000D3080000F0060000000900000009000000070000E8080000D8080000F2060000000A00000009000000070000C8090000DC080000F5060000000B00000009000000070000A80A0000E0080000F7060000000C00000009000000070000870B0000E4080000FA060000000D00000009000000070000660C0000E8080000FC060000000E00000009000000070000440D0000EB080000FF060000000F00000009000000070000220E0000EE08000003070000001000000009000000070000FF0E0000F10800000707000000000000000A0000000700001401000087090000CD06000000010000000A000000070000F601000090090000D506000000020000000A000000070000D802000098090000DB06000000030000000A000000070000BA030000A0090000E106000000040000000A0000000700009C040000A8090000E606000000050000000A0000000700007D050000AE090000EB06000000060000000A0000000700005F060000B5090000EE06000000070000000A00000007000040070000BB090000F206000000080000000A00000007000022080000C1090000F506000000090000000A00000007000002090000C6090000F7060000000A0000000A000000070000E3090000CB090000FA060000000B0000000A000000070000C30A0000D0090000FC060000000C0000000A000000070000A20B0000D4090000FE060000000D0000000A000000070000810C0000D809000001070000000E0000000A000000070000600D0000DC09000004070000000F0000000A0000000700003E0E0000DF0900000807000000100000000A0000000700001B0F0000E30900000B07000000000000000B0000000700002C010000700A0000D106000000010000000B0000000700000E0200007A0A0000D906000000020000000B000000070000F0020000820A0000E006000000030000000B000000070000D20300008B0A0000E606000000040000000B000000070000B5040000920A0000EB06000000050000000B000000070000970500009A0A0000F006000000060000000B00000007000079060000A10A0000F306000000070000000B0000000700005A070000A70A0000F706000000080000000B0000000700003C080000AE0A0000FA06000000090000000B0000000700001D090000B30A0000FC060000000A0000000B000000070000FD090000B90A0000FF060000000B0000000B000000070000DE0A0000BE0A000001070000000C0000000B000000070000BE0B0000C30A000003070000000D0000000B0000000700009D0C0000C70A000006070000000E0000000B0000000700007C0D0000CB0A000009070000000F0000000B0000000700005A0E0000CF0A00000D07000000100000000B000000070000370F0000D30A00001007000000000000000C00000007000044010000580B0000D706000000010000000C00000007000026020000620B0000DF06000000020000000C000000070000090300006B0B0000E606000000030000000C000000070000EB030000740B0000EB06000000040000000C000000070000CD0400007C0B0000F106000000050000000C000000070000B0050000840B0000F506000000060000000C000000070000920600008B0B0000F906000000070000000C00000007000074070000920B0000FC06000000080000000C00000007000056080000990B0000FF06000000090000000C000000070000370900009F0B000001070000000A0000000C000000070000180A0000A50B000004070000000B0000000C000000070000F90A0000AB0B000006070000000C0000000C000000070000D90B0000B00B000009070000000D0000000C000000070000B80C0000B50B00000B070000000E0000000C000000070000970D0000B90B00000E070000000F0000000C000000070000760E0000BE0B00001207000000100000000C000000070000540F0000C20B00001607000000000000000D0000000700005C0100003E0C0000DC06000000010000000D0000000700003E020000480C0000E406000000020000000D00000007000021030000520C0000EB06000000030000000D000000070000040400005B0C0000F106000000040000000D000000070000E6040000640C0000F606000000050000000D000000070000C90500006C0C0000FB06000000060000000D000000070000AB060000740C0000FE06000000070000000D0000000700008E0700007B0C00000207000000080000000D00000007000070080000830C00000507000000090000000D00000007000051090000890C000007070000000A0000000D000000070000330A0000900C00000A070000000B0000000D000000070000140B0000960C00000C070000000C0000000D000000070000F40B00009B0C00000F070000000D0000000D000000070000D40C0000A10C000011070000000E0000000D000000070000B30D0000A60C000014070000000F0000000D000000070000920E0000AB0C00001807000000100000000D000000070000700F0000B00C00001C07000000000000000E00000007000073010000220D0000E306000000010000000E000000070000560200002D0D0000EB06000000020000000E00000007000039030000370D0000F206000000030000000E0000000700001C040000410D0000F806000000040000000E000000070000FF0400004A0D0000FD06000000050000000E000000070000E2050000530D00000107000000060000000E000000070000C50600005B0D00000507000000070000000E000000070000A8070000630D00000807000000080000000E0000000700008A0800006B0D00000B07000000090000000E0000000700006C090000720D00000E070000000A0000000E0000000700004D0A0000790D000010070000000B0000000E0000000700002F0B00007F0D000013070000000C0000000E0000000700000F0C0000850D000015070000000D0000000E000000070000EF0C00008B0D000018070000000E0000000E000000070000CF0D0000910D00001B070000000F0000000E000000070000AE0E0000960D00001F07000000100000000E0000000700008C0F00009B0D00002207000000000000000F0000000700008B010000050E0000EB06000000010000000F0000000700006F020000100E0000F306000000020000000F000000070000520300001A0E0000FA06000000030000000F00000007000035040000240E00000007000000040000000F000000070000190500002E0E00000507000000050000000F000000070000FC050000370E00000907000000060000000F000000070000DF060000400E00000D07000000070000000F000000070000C2070000490E00001007000000080000000F000000070000A4080000510E00001307000000090000000F00000007000086090000580E000016070000000A0000000F000000070000680A00005F0E000018070000000B0000000F0000000700004A0B0000660E00001B070000000C0000000F0000000700002B0C00006D0E00001D070000000D0000000F0000000700000B0D0000730E000020070000000E0000000F000000070000EB0D0000790E000023070000000F0000000F000000070000CA0E00007F0E00002607000000100000000F000000070000A90F0000850E00002A070000000000000010000000070000A4010000E50E0000F406000000010000001000000007000087020000F00E0000FC0600000002000000100000000700006B030000FB0E0000030700000003000000100000000700004E040000060F00000907000000040000001000000007000032050000100F00000E070000000500000010000000070000150600001A0F000012070000000600000010000000070000F9060000230F000016070000000700000010000000070000DC0700002C0F000019070000000800000010000000070000BF080000340F00001C070000000900000010000000070000A10900003D0F00001F070000000A00000010000000070000830A0000440F000021070000000B00000010000000070000650B00004C0F000024070000000C00000010000000070000460C0000530F000026070000000D00000010000000070000270D00005A0F000029070000000E00000010000000070000070E0000600F00002C070000000F00000010000000070000E70E0000660F00002F070000001000000010000000070000C60F00006D0F0000330700000000000000000000000800001A0000004C0000005F070000000100000000000000080000FA0000005000000067070000000200000000000000080000D9010000540000006E070000000300000000000000080000B90200005700000075070000000400000000000000080000980300005A0000007A070000000500000000000000080000780400005C0000007F070000000600000000000000080000570500005E0000008407000000070000000000000008000036060000600000008707000000080000000000000008000015070000610000008B070000000900000000000000080000F4070000620000008E070000000A00000000000000080000D20800006200000091070000000B00000000000000080000B00900006200000094070000000C000000000000000800008D0A00006200000097070000000D000000000000000800006A0B0000610000009A070000000E00000000000000080000460C0000600000009D070000000F00000000000000080000210D00005F000000A1070000001000000000000000080000FC0D00005E000000A6070000000000000001000000080000350000003B0100006E070000000100000001000000080000140100003F01000077070000000200000001000000080000F4010000440100007E070000000300000001000000080000D40200004701000084070000000400000001000000080000B40300004A0100008A070000000500000001000000080000940400004D0100008F07000000060000000100000008000073050000500100009307000000070000000100000008000053060000520100009707000000080000000100000008000032070000530100009A07000000090000000100000008000011080000540100009D070000000A00000001000000080000EF08000055010000A0070000000B00000001000000080000CD09000056010000A3070000000C00000001000000080000AB0A000056010000A6070000000D00000001000000080000880B000056010000A9070000000E00000001000000080000640C000055010000AD070000000F00000001000000080000400D000055010000B10700000010000000010000000800001B0E000054010000B50700000000000000020000000800004F0000002A0200007C0700000001000000020000000800002F0100002F020000840700000002000000020000000800000F020000330200008B070000000300000002000000080000EF0200003802000092070000000400000002000000080000CF0300003B02000097070000000500000002000000080000AF0400003E0200009C0700000006000000020000000800008F05000041020000A10700000007000000020000000800006F06000044020000A40700000008000000020000000800004E07000046020000A80700000009000000020000000800002D08000047020000AB070000000A000000020000000800000C09000049020000AE070000000B00000002000000080000EA0900004A020000B1070000000C00000002000000080000C80A00004A020000B4070000000D00000002000000080000A60B00004B020000B7070000000E00000002000000080000820C00004B020000BA070000000F000000020000000800005E0D00004B020000BE0700000010000000020000000800003A0E00004A020000C3070000000000000003000000080000680000001903000087070000000100000003000000080000490100001E030000900700000002000000030000000800002902000023030000970700000003000000030000000800000A030000280300009E070000000400000003000000080000EA0300002C030000A3070000000500000003000000080000CA04000030030000A8070000000600000003000000080000AB05000033030000AC0700000007000000030000000800008A06000036030000B00700000008000000030000000800006A07000038030000B30700000009000000030000000800004A0800003A030000B7070000000A00000003000000080000290900003C030000BA070000000B00000003000000080000070A00003E030000BC070000000C00000003000000080000E50A00003F030000BF070000000D00000003000000080000C30B000040030000C3070000000E00000003000000080000A00C000040030000C6070000000F000000030000000800007C0D000040030000CA070000001000000003000000080000580E000040030000CE070000000000000004000000080000820000000704000091070000000100000004000000080000620100000D0400009A0700000002000000040000000800004302000013040000A10700000003000000040000000800002403000018040000A8070000000400000004000000080000040400001D040000AD070000000500000004000000080000E504000021040000B2070000000600000004000000080000C505000025040000B6070000000700000004000000080000A606000028040000BA070000000800000004000000080000860700002B040000BE070000000900000004000000080000650800002D040000C1070000000A000000040000000800004509000030040000C4070000000B00000004000000080000230A000032040000C7070000000C00000004000000080000020B000033040000CA070000000D00000004000000080000E00B000034040000CD070000000E00000004000000080000BD0C000035040000D0070000000F000000040000000800009A0D000036040000D4070000001000000004000000080000760E000037040000D90700000000000000050000000800009B000000F60400009A0700000001000000050000000800007B010000FD040000A30700000002000000050000000800005C02000003050000AA0700000003000000050000000800003E03000008050000B10700000004000000050000000800001E0400000D050000B6070000000500000005000000080000FF04000012050000BB070000000600000005000000080000E005000016050000BF070000000700000005000000080000C10600001A050000C3070000000800000005000000080000A10700001D050000C70700000009000000050000000800008108000020050000CA070000000A000000050000000800006009000023050000CD070000000B000000050000000800003F0A000025050000D0070000000C000000050000000800001E0B000027050000D3070000000D00000005000000080000FC0B000029050000D6070000000E00000005000000080000DA0C00002A050000D9070000000F00000005000000080000B70D00002C050000DD070000001000000005000000080000930E00002D050000E2070000000000000006000000080000B3000000E4050000A207000000010000000600000008000094010000EB050000AB07000000020000000600000008000076020000F2050000B207000000030000000600000008000057030000F8050000B807000000040000000600000008000038040000FD050000BE0700000005000000060000000800001905000002060000C3070000000600000006000000080000FA05000007060000C7070000000700000006000000080000DB0600000B060000CB070000000800000006000000080000BC0700000F060000CE0700000009000000060000000800009C08000012060000D1070000000A000000060000000800007C09000016060000D4070000000B000000060000000800005B0A000018060000D7070000000C000000060000000800003A0B00001B060000DA070000000D00000006000000080000180C00001D060000DE070000000E00000006000000080000F60C00001F060000E1070000000F00000006000000080000D30D000021060000E5070000001000000006000000080000B00E000022060000EA070000000000000007000000080000CC000000D2060000A9070000000100000007000000080000AD010000D9060000B10700000002000000070000000800008F020000E0060000B907000000030000000700000008000070030000E6060000BF07000000040000000700000008000052040000EC060000C507000000050000000700000008000033050000F2060000CA07000000060000000700000008000014060000F7060000CE070000000700000007000000080000F5060000FC060000D2070000000800000007000000080000D607000000070000D5070000000900000007000000080000B708000004070000D8070000000A000000070000000800009709000008070000DB070000000B00000007000000080000760A00000B070000DE070000000C00000007000000080000560B00000E070000E1070000000D00000007000000080000340C000011070000E5070000000E00000007000000080000120D000013070000E8070000000F00000007000000080000F00D000015070000EC070000001000000007000000080000CD0E000017070000F1070000000000000008000000080000E4000000BE070000AF070000000100000008000000080000C6010000C6070000B8070000000200000008000000080000A7020000CE070000BF07000000030000000800000008000089030000D5070000C60700000004000000080000000800006B040000DB070000CB0700000005000000080000000800004D050000E1070000D00700000006000000080000000800002E060000E7070000D507000000070000000800000008000010070000EC070000D8070000000800000008000000080000F1070000F1070000DC070000000900000008000000080000D1080000F5070000DF070000000A00000008000000080000B2090000F9070000E2070000000B00000008000000080000920A0000FD070000E5070000000C00000008000000080000710B000000080000E8070000000D00000008000000080000500C000003080000EB070000000E000000080000000800002F0D000006080000EF070000000F000000080000000800000C0E000009080000F3070000001000000008000000080000E90E00000B080000F7070000000000000009000000080000FC000000AA080000B5070000000100000009000000080000DE010000B3080000BE070000000200000009000000080000C0020000BA080000C5070000000300000009000000080000A2030000C2080000CC07000000040000000900000008000084040000C9080000D107000000050000000900000008000066050000CF080000D607000000060000000900000008000048060000D5080000DB0700000007000000090000000800002A070000DB080000DE0700000008000000090000000800000B080000E0080000E2070000000900000009000000080000EC080000E5080000E5070000000A00000009000000080000CD090000E9080000E8070000000B00000009000000080000AD0A0000EE080000EB070000000C000000090000000800008D0B0000F2080000EE070000000D000000090000000800006C0C0000F5080000F1070000000E000000090000000800004A0D0000F8080000F5070000000F00000009000000080000280E0000FB080000F9070000001000000009000000080000060F0000FE080000FD07000000000000000A0000000800001401000095090000BB07000000010000000A000000080000F60100009E090000C407000000020000000A000000080000D8020000A6090000CB07000000030000000A000000080000BB030000AE090000D207000000040000000A0000000800009D040000B5090000D707000000050000000A0000000800007F050000BC090000DC07000000060000000A00000008000062060000C3090000E007000000070000000A00000008000043070000C9090000E407000000080000000A00000008000025080000CF090000E807000000090000000A00000008000006090000D4090000EB070000000A0000000A000000080000E7090000D9090000EE070000000B0000000A000000080000C80A0000DD090000F1070000000C0000000A000000080000A80B0000E2090000F4070000000D0000000A000000080000870C0000E6090000F7070000000E0000000A000000080000660D0000EA090000FB070000000F0000000A000000080000450E0000ED090000FF07000000100000000A000000080000220F0000F00900000308000000000000000B0000000800002C0100007F0A0000C107000000010000000B0000000800000E020000880A0000CA07000000020000000B000000080000F1020000910A0000D107000000030000000B000000080000D4030000990A0000D807000000040000000B000000080000B6040000A10A0000DD07000000050000000B00000008000099050000A80A0000E207000000060000000B0000000800007B060000AF0A0000E607000000070000000B0000000800005D070000B50A0000EA07000000080000000B0000000800003F080000BC0A0000EE07000000090000000B00000008000021090000C10A0000F1070000000A0000000B000000080000020A0000C70A0000F4070000000B0000000B000000080000E30A0000CC0A0000F7070000000C0000000B000000080000C30B0000D10A0000FA070000000D0000000B000000080000A30C0000D50A0000FD070000000E0000000B000000080000820D0000DA0A000001080000000F0000000B000000080000610E0000DD0A00000508000000100000000B0000000800003F0F0000E10A00000908000000000000000C00000008000043010000670B0000C707000000010000000C00000008000026020000700B0000D007000000020000000C00000008000009030000790B0000D707000000030000000C000000080000EC030000820B0000DE07000000040000000C000000080000CF0400008B0B0000E407000000050000000C000000080000B2050000920B0000E807000000060000000C000000080000950600009A0B0000ED07000000070000000C00000008000077070000A10B0000F107000000080000000C00000008000059080000A70B0000F407000000090000000C0000000800003B090000AE0B0000F7070000000A0000000C0000000800001D0A0000B40B0000FA070000000B0000000C000000080000FE0A0000B90B0000FD070000000C0000000C000000080000DE0B0000BE0B000000080000000D0000000C000000080000BE0C0000C30B000004080000000E0000000C0000000800009E0D0000C80B000007080000000F0000000C0000000800007D0E0000CC0B00000B08000000100000000C0000000800005B0F0000D10B00001008000000000000000D0000000800005B0100004D0C0000CE07000000010000000D0000000800003F020000570C0000D707000000020000000D00000008000022030000610C0000DE07000000030000000D000000080000050400006A0C0000E507000000040000000D000000080000E8040000730C0000EA07000000050000000D000000080000CB0500007B0C0000EF07000000060000000D000000080000AE060000830C0000F407000000070000000D000000080000910700008A0C0000F807000000080000000D00000008000073080000910C0000FB07000000090000000D00000008000055090000980C0000FE070000000A0000000D000000080000370A00009F0C000001080000000B0000000D000000080000190B0000A50C000004080000000C0000000D000000080000F90B0000AA0C000007080000000D0000000D000000080000DA0C0000B00C00000A080000000E0000000D000000080000BA0D0000B50C00000E080000000F0000000D000000080000990E0000BA0C00001208000000100000000D000000080000770F0000BE0C00001708000000000000000E00000008000073010000320D0000D607000000010000000E000000080000570200003C0D0000DF07000000020000000E0000000800003A030000460D0000E607000000030000000E0000000800001E040000500D0000ED07000000040000000E00000008000001050000590D0000F207000000050000000E000000080000E5050000620D0000F707000000060000000E000000080000C80600006A0D0000FB07000000070000000E000000080000AB070000720D0000FF07000000080000000E0000000800008E0800007A0D00000308000000090000000E00000008000070090000810D000006080000000A0000000E000000080000520A0000880D000009080000000B0000000E000000080000340B00008E0D00000C080000000C0000000E000000080000150C0000950D00000F080000000D0000000E000000080000F50C00009A0D000012080000000E0000000E000000080000D50D0000A00D000016080000000F0000000E000000080000B50E0000A50D00001A08000000100000000E000000080000940F0000AA0D00001E08000000000000000F0000000800008C010000140E0000DF07000000010000000F0000000800006F020000200E0000E707000000020000000F000000080000530300002A0E0000EF07000000030000000F00000008000037040000340E0000F507000000040000000F0000000800001B0500003E0E0000FB07000000050000000F000000080000FE050000470E00000008000000060000000F000000080000E2060000500E00000408000000070000000F000000080000C5070000580E00000808000000080000000F000000080000A8080000600E00000C08000000090000000F0000000800008B090000680E00000F080000000A0000000F0000000800006D0A00006F0E000012080000000B0000000F0000000800004F0B0000760E000015080000000C0000000F000000080000300C00007D0E000018080000000D0000000F000000080000110D0000830E00001B080000000E0000000F000000080000F10D0000890E00001F080000000F0000000F000000080000D10E00008F0E00002308000000100000000F000000080000B00F0000950E000027080000000000000010000000080000A4010000F50E0000E907000000010000001000000008000088020000010F0000F10700000002000000100000000800006C0300000C0F0000F907000000030000001000000008000050040000160F0000FF07000000040000001000000008000034050000200F000005080000000500000010000000080000180600002A0F00000A080000000600000010000000080000FC060000330F00000E080000000700000010000000080000DF0700003C0F000012080000000800000010000000080000C2080000450F000016080000000900000010000000080000A50900004D0F000019080000000A00000010000000080000880A0000540F00001C080000000B000000100000000800006A0B00005C0F00001F080000000C000000100000000800004C0C0000630F000022080000000D000000100000000800002D0D00006A0F000025080000000E000000100000000800000E0E0000700F000029080000000F00000010000000080000EE0E0000770F00002D080000001000000010000000080000CD0F00007D0F000031080000000000000000000000090000180000005600000040080000000100000000000000090000F90000005A00000049080000000200000000000000090000D90100005D00000051080000000300000000000000090000B9020000610000005808000000040000000000000009000099030000640000005F08000000050000000000000009000079040000660000006408000000060000000000000009000059050000680000006908000000070000000000000009000039060000690000006D080000000800000000000000090000180700006A00000071080000000900000000000000090000F70700006B00000075080000000A00000000000000090000D60800006C00000078080000000B00000000000000090000B40900006C0000007C080000000C00000000000000090000920A00006B0000007F080000000D000000000000000900006F0B00006B00000083080000000E000000000000000900004C0C00006A00000087080000000F00000000000000090000280D0000690000008C080000001000000000000000090000030E0000680000009108000000000000000100000009000033000000450100005108000000010000000100000009000014010000490100005A080000000200000001000000090000F40100004D01000062080000000300000001000000090000D40200005101000069080000000400000001000000090000B5030000540100006F080000000500000001000000090000950400005701000075080000000600000001000000090000750500005A01000079080000000700000001000000090000550600005C0100007E080000000800000001000000090000350700005D01000082080000000900000001000000090000140800005E01000085080000000A00000001000000090000F30800005F01000089080000000B00000001000000090000D2090000600100008C080000000C00000001000000090000B00A00006001000090080000000D000000010000000900008D0B00006001000094080000000E000000010000000900006A0C00006001000098080000000F00000001000000090000470D00005F0100009C080000001000000001000000090000220E00005E010000A10800000000000000020000000900004D00000034020000600800000001000000020000000900002E01000039020000690800000002000000020000000900000F0200003E02000071080000000300000002000000090000EF0200004202000078080000000400000002000000090000D0030000460200007E080000000500000002000000090000B10400004902000083080000000600000002000000090000910500004C02000088080000000700000002000000090000710600004E0200008C080000000800000002000000090000510700005002000090080000000900000002000000090000310800005202000094080000000A00000002000000090000100900005302000098080000000B00000002000000090000EF090000540200009B080000000C00000002000000090000CD0A0000550200009F080000000D00000002000000090000AB0B000055020000A2080000000E00000002000000090000880C000055020000A7080000000F00000002000000090000650D000055020000AB080000001000000002000000090000410E000055020000B008000000000000000300000009000067000000230300006C080000000100000003000000090000480100002903000075080000000200000003000000090000290200002E0300007D0800000003000000030000000900000A0300003303000084080000000400000003000000090000EB030000370300008B080000000500000003000000090000CC0400003A03000090080000000600000003000000090000AC0500003E030000950800000007000000030000000900008D06000041030000990800000008000000030000000900006D070000430300009D0800000009000000030000000900004D08000045030000A1080000000A000000030000000900002D09000047030000A4080000000B000000030000000900000C0A000048030000A8080000000C00000003000000090000EA0A00004A030000AC080000000D00000003000000090000C80B00004A030000AF080000000E00000003000000090000A60C00004B030000B3080000000F00000003000000090000830D00004B030000B80800000010000000030000000900005F0E00004B030000BD080000000000000004000000090000800000001304000078080000000100000004000000090000620100001904000081080000000200000004000000090000430200001E04000089080000000300000004000000090000240300002304000090080000000400000004000000090000050400002804000096080000000500000004000000090000E60400002C0400009B080000000600000004000000090000C705000030040000A0080000000700000004000000090000A806000033040000A50800000008000000040000000900008907000036040000A90800000009000000040000000900006908000039040000AC080000000A00000004000000090000490900003B040000B0080000000B00000004000000090000280A00003D040000B3080000000C00000004000000090000070B00003E040000B7080000000D00000004000000090000E50B000040040000BB080000000E00000004000000090000C30C000041040000BF080000000F00000004000000090000A00D000041040000C30800000010000000040000000900007D0E000042040000C80800000000000000050000000900009900000002050000820800000001000000050000000900007B010000080500008B0800000002000000050000000900005C0200000E050000930800000003000000050000000900003E030000140500009A0800000004000000050000000900001F04000019050000A0080000000500000005000000090000010500001D050000A5080000000600000005000000090000E205000021050000AA080000000700000005000000090000C306000025050000AF080000000800000005000000090000A407000029050000B2080000000900000005000000090000840800002C050000B6080000000A00000005000000090000640900002E050000BA080000000B00000005000000090000440A000031050000BD080000000C00000005000000090000230B000033050000C1080000000D00000005000000090000020C000035050000C5080000000E00000005000000090000E00C000036050000C9080000000F00000005000000090000BD0D000037050000CD0800000010000000050000000900009A0E000038050000D2080000000000000006000000090000B2000000F00500008A08000000010000000600000009000094010000F70500009408000000020000000600000009000076020000FE0500009C0800000003000000060000000900005803000003060000A30800000004000000060000000900003904000009060000A90800000005000000060000000900001B0500000E060000AE080000000600000006000000090000FC05000013060000B3080000000700000006000000090000DE06000017060000B7080000000800000006000000090000BF0700001B060000BB0800000009000000060000000900009F0800001E060000BF080000000A000000060000000900008009000022060000C3080000000B00000006000000090000600A000024060000C6080000000C000000060000000900003F0B000027060000CA080000000D000000060000000900001E0C000029060000CE080000000E00000006000000090000FC0C00002B060000D2080000000F00000006000000090000DA0D00002D060000D6080000001000000006000000090000B70E00002E060000DB080000000000000007000000090000CB000000DE06000093080000000100000007000000090000AD010000E50600009C0800000002000000070000000900008F020000EC060000A408000000030000000700000009000071030000F3060000AB08000000040000000700000009000053040000F9060000B108000000050000000700000009000035050000FE060000B60800000006000000070000000900001606000003070000BB080000000700000007000000090000F806000008070000BF080000000800000007000000090000D90700000D070000C3080000000900000007000000090000BA08000010070000C7080000000A000000070000000900009B09000014070000CB080000000B000000070000000900007B0A000017070000CE080000000C000000070000000900005B0B00001A070000D2080000000D000000070000000900003A0C00001D070000D6080000000E00000007000000090000190D00001F070000DA080000000F00000007000000090000F70D000022070000DE080000001000000007000000090000D40E000023070000E3080000000000000008000000090000E3000000CB0700009A080000000100000008000000090000C5010000D3070000A3080000000200000008000000090000A8020000DA070000AB0800000003000000080000000900008A030000E1070000B20800000004000000080000000900006C040000E8070000B80800000005000000080000000900004E050000EE070000BE08000000060000000800000009000030060000F3070000C308000000070000000800000009000012070000F9070000C7080000000800000008000000090000F4070000FD070000CB080000000900000008000000090000D508000002080000CF080000000A00000008000000090000B609000006080000D2080000000B00000008000000090000960A00000A080000D6080000000C00000008000000090000760B00000D080000D9080000000D00000008000000090000560C000010080000DD080000000E00000008000000090000350D000013080000E1080000000F00000008000000090000130E000016080000E6080000001000000008000000090000F10E000018080000EB080000000000000009000000090000FB000000B7080000A1080000000100000009000000090000DE010000C0080000AA080000000200000009000000090000C0020000C8080000B2080000000300000009000000090000A3030000CF080000B908000000040000000900000009000085040000D6080000BF08000000050000000900000009000068050000DC080000C50800000006000000090000000900004A060000E2080000CA0800000007000000090000000900002C070000E8080000CE0800000008000000090000000900000E080000ED080000D2080000000900000009000000090000F0080000F2080000D6080000000A00000009000000090000D1090000F7080000D9080000000B00000009000000090000B10A0000FB080000DD080000000C00000009000000090000920B0000FF080000E0080000000D00000009000000090000710C000002090000E4080000000E00000009000000090000510D000006090000E8080000000F000000090000000900002F0E000009090000ED0800000010000000090000000900000D0F00000C090000F208000000000000000A00000009000013010000A3090000A808000000010000000A000000090000F6010000AB090000B108000000020000000A000000090000D9020000B4090000B908000000030000000A000000090000BC030000BC090000C008000000040000000A0000000900009F040000C3090000C608000000050000000A00000009000081050000CA090000CC08000000060000000A00000009000064060000D0090000D108000000070000000A00000009000046070000D6090000D508000000080000000A00000009000028080000DC090000D908000000090000000A0000000900000A090000E1090000DD080000000A0000000A000000090000EB090000E6090000E0080000000B0000000A000000090000CC0A0000EB090000E4080000000C0000000A000000090000AD0B0000EF090000E8080000000D0000000A0000000900008D0C0000F3090000EB080000000E0000000A0000000900006C0D0000F7090000EF080000000F0000000A0000000900004B0E0000FB090000F408000000100000000A000000090000290F0000FE090000F908000000000000000B0000000900002B0100008D0A0000AF08000000010000000B0000000900000E020000960A0000B808000000020000000B000000090000F10200009F0A0000C008000000030000000B000000090000D5030000A70A0000C708000000040000000B000000090000B8040000AF0A0000CD08000000050000000B0000000900009B050000B60A0000D308000000060000000B0000000900007D060000BD0A0000D808000000070000000B00000009000060070000C30A0000DC08000000080000000B00000009000042080000CA0A0000E008000000090000000B00000009000024090000CF0A0000E4080000000A0000000B000000090000060A0000D50A0000E7080000000B0000000B000000090000E70A0000DA0A0000EB080000000C0000000B000000090000C80B0000DF0A0000EF080000000D0000000B000000090000A80C0000E30A0000F2080000000E0000000B000000090000880D0000E80A0000F7080000000F0000000B000000090000670E0000EB0A0000FB08000000100000000B000000090000460F0000EF0A00000009000000000000000C00000009000043010000750B0000B608000000010000000C000000090000260200007F0B0000C008000000020000000C0000000900000A030000880B0000C808000000030000000C000000090000ED030000910B0000CF08000000040000000C000000090000D1040000990B0000D508000000050000000C000000090000B4050000A10B0000DA08000000060000000C00000009000097060000A80B0000DF08000000070000000C0000000900007A070000AF0B0000E408000000080000000C0000000900005D080000B60B0000E808000000090000000C0000000900003F090000BC0B0000EB080000000A0000000C000000090000210A0000C20B0000EF080000000B0000000C000000090000020B0000C70B0000F2080000000C0000000C000000090000E30B0000CD0B0000F6080000000D0000000C000000090000C40C0000D20B0000FA080000000E0000000C000000090000A40D0000D60B0000FE080000000F0000000C000000090000830E0000DB0B00000309000000100000000C000000090000620F0000DF0B00000809000000000000000D0000000900005B0100005C0C0000BE08000000010000000D0000000900003F020000660C0000C808000000020000000D00000009000022030000700C0000D008000000030000000D00000009000006040000790C0000D708000000040000000D000000090000EA040000820C0000DD08000000050000000D000000090000CD0500008A0C0000E208000000060000000D000000090000B1060000920C0000E708000000070000000D00000009000094070000990C0000EC08000000080000000D00000009000077080000A00C0000F008000000090000000D00000009000059090000A70C0000F3080000000A0000000D0000000900003C0A0000AD0C0000F7080000000B0000000D0000000900001D0B0000B30C0000FB080000000C0000000D000000090000FF0B0000B90C0000FE080000000D0000000D000000090000E00C0000BE0C000002090000000E0000000D000000090000C00D0000C40C000006090000000F0000000D0000000900009F0E0000C80C00000B09000000100000000D0000000900007E0F0000CD0C00001009000000000000000E00000009000073010000410D0000C708000000010000000E000000090000570200004C0D0000D008000000020000000E0000000900003B030000560D0000D808000000030000000E0000000900001F0400005F0D0000DF08000000040000000E00000009000003050000690D0000E608000000050000000E000000090000E7050000710D0000EB08000000060000000E000000090000CA0600007A0D0000F008000000070000000E000000090000AE070000820D0000F408000000080000000E00000009000091080000890D0000F908000000090000000E00000009000074090000900D0000FC080000000A0000000E000000090000560A0000970D000000090000000B0000000E000000090000380B00009D0D000003090000000C0000000E0000000900001A0C0000A40D000007090000000D0000000E000000090000FB0C0000AA0D00000B090000000E0000000E000000090000DC0D0000AF0D00000F090000000F0000000E000000090000BB0E0000B40D00001409000000100000000E0000000900009B0F0000BA0D00001909000000000000000F0000000900008B010000240E0000D108000000010000000F000000090000700200002F0E0000DA08000000020000000F000000090000540300003A0E0000E208000000030000000F00000009000038040000440E0000E908000000040000000F0000000900001C0500004E0E0000F008000000050000000F00000009000000060000570E0000F508000000060000000F000000090000E40600005F0E0000FA08000000070000000F000000090000C8070000680E0000FE08000000080000000F000000090000AB080000700E00000209000000090000000F0000000900008F090000770E000006090000000A0000000F000000090000710A00007F0E00000A090000000B0000000F000000090000540B0000860E00000D090000000C0000000F000000090000360C00008C0E000011090000000D0000000F000000090000170D0000930E000015090000000E0000000F000000090000F80D0000990E000019090000000F0000000F000000090000D80E00009E0E00001D09000000100000000F000000090000B70F0000A40E000023090000000000000010000000090000A4010000050F0000DC08000000010000001000000009000088020000110F0000E50800000002000000100000000900006D0300001C0F0000ED08000000030000001000000009000051040000260F0000F508000000040000001000000009000036050000300F0000FB0800000005000000100000000900001A0600003A0F000000090000000600000010000000090000FE060000430F000005090000000700000010000000090000E20700004C0F00000A090000000800000010000000090000C6080000550F00000E090000000900000010000000090000A90900005D0F000011090000000A000000100000000900008C0A0000640F000015090000000B000000100000000900006F0B00006C0F000019090000000C00000010000000090000510C0000730F00001C090000000D00000010000000090000330D00007A0F000020090000000E00000010000000090000140E0000800F000024090000000F00000010000000090000F40E0000860F000029090000001000000010000000090000D40F00008C0F00002E0900000000000000000000000A0000170000005F000000210900000001000000000000000A0000F8000000630000002A0900000002000000000000000A0000D901000067000000330900000003000000000000000A0000B90200006A0000003B0900000004000000000000000A00009A0300006D000000410900000005000000000000000A00007A0400006F000000470900000006000000000000000A00005B050000710000004D0900000007000000000000000A00003B06000073000000520900000008000000000000000A00001B07000074000000560900000009000000000000000A0000FB070000750000005A090000000A000000000000000A0000DA080000750000005F090000000B000000000000000A0000B90900007500000063090000000C000000000000000A0000970A00007500000067090000000D000000000000000A0000750B0000740000006B090000000E000000000000000A0000520C00007400000070090000000F000000000000000A00002F0D000073000000750900000010000000000000000A00000B0E0000710000007B0900000000000000010000000A0000320000004E010000330900000001000000010000000A000013010000530100003C0900000002000000010000000A0000F401000057010000450900000003000000010000000A0000D50200005B0100004C0900000004000000010000000A0000B60300005E010000530900000005000000010000000A00009704000061010000590900000006000000010000000A000077050000630100005E0900000007000000010000000A00005806000065010000630900000008000000010000000A00003807000067010000680900000009000000010000000A000018080000680100006C090000000A000000010000000A0000F70800006901000070090000000B000000010000000A0000D60900006A01000074090000000C000000010000000A0000B50A00006A01000079090000000D000000010000000A0000930B00006A0100007D090000000E000000010000000A0000710C00006901000082090000000F000000010000000A00004E0D000069010000870900000010000000010000000A00002A0E0000680100008C0900000000000000020000000A00004C0000003E020000420900000001000000020000000A00002D010000430200004C0900000002000000020000000A00000F02000048020000540900000003000000020000000A0000F00200004C0200005C0900000004000000020000000A0000D103000050020000630900000005000000020000000A0000B204000053020000690900000006000000020000000A000093050000560200006E0900000007000000020000000A00007406000058020000730900000008000000020000000A0000540700005A020000780900000009000000020000000A0000340800005C0200007C090000000A000000020000000A0000140900005D02000080090000000B000000020000000A0000F40900005E02000084090000000C000000020000000A0000D30A00005F02000088090000000D000000020000000A0000B10B00005F0200008D090000000E000000020000000A00008F0C00006002000091090000000F000000020000000A00006C0D00005F020000960900000010000000020000000A0000480E00005F0200009C0900000000000000030000000A0000660000002E030000500900000001000000030000000A000047010000330300005A0900000002000000030000000A00002902000038030000620900000003000000030000000A00000A0300003D0300006A0900000004000000030000000A0000EC03000041030000710900000005000000030000000A0000CD04000045030000770900000006000000030000000A0000AF050000480300007C0900000007000000030000000A0000900600004B030000810900000008000000030000000A0000700700004E030000860900000009000000030000000A000051080000500300008A090000000A000000030000000A000031090000520300008E090000000B000000030000000A0000100A00005303000092090000000C000000030000000A0000F00A00005403000096090000000D000000030000000A0000CE0B0000550300009B090000000E000000030000000A0000AC0C0000560300009F090000000F000000030000000A00008A0D000056030000A40900000010000000030000000A0000660E000056030000AA0900000000000000040000000A00007F0000001D0400005C0900000001000000040000000A00006101000023040000660900000002000000040000000A000043020000290400006F0900000003000000040000000A0000250300002E040000760900000004000000040000000A000006040000330400007D0900000005000000040000000A0000E804000037040000830900000006000000040000000A0000CA0500003B040000880900000007000000040000000A0000AB0600003E0400008D0900000008000000040000000A00008C07000041040000920900000009000000040000000A00006D0800004404000096090000000A000000040000000A00004D090000460400009A090000000B000000040000000A00002D0A0000480400009E090000000C000000040000000A00000C0B000049040000A3090000000D000000040000000A0000EB0B00004B040000A7090000000E000000040000000A0000C90C00004C040000AC090000000F000000040000000A0000A70D00004D040000B10900000010000000040000000A0000840E00004D040000B60900000000000000050000000A0000990000000D050000680900000001000000050000000A00007B01000013050000710900000002000000050000000A00005D020000190500007A0900000003000000050000000A00003F0300001F050000810900000004000000050000000A00002104000024050000880900000005000000050000000A000003050000290500008E0900000006000000050000000A0000E40500002D050000940900000007000000050000000A0000C606000031050000980900000008000000050000000A0000A7070000340500009D0900000009000000050000000A00008808000037050000A1090000000A000000050000000A0000690900003A050000A5090000000B000000050000000A0000490A00003C050000AA090000000C000000050000000A0000280B00003E050000AE090000000D000000050000000A0000080C000040050000B2090000000E000000050000000A0000E60C000042050000B7090000000F000000050000000A0000C40D000043050000BC0900000010000000050000000A0000A10E000044050000C10900000000000000060000000A0000B1000000FC050000710900000001000000060000000A000094010000030600007B0900000002000000060000000A00007602000009060000840900000003000000060000000A0000580300000F0600008B0900000004000000060000000A00003B04000015060000920900000005000000060000000A00001D0500001A060000980900000006000000060000000A0000FF0500001F0600009E0900000007000000060000000A0000E006000023060000A20900000008000000060000000A0000C207000027060000A70900000009000000060000000A0000A30800002A060000AB090000000A000000060000000A0000840900002D060000AF090000000B000000060000000A0000640A000030060000B4090000000C000000060000000A0000440B000033060000B8090000000D000000060000000A0000240C000035060000BC090000000E000000060000000A0000030D000037060000C1090000000F000000060000000A0000E10D000039060000C60900000010000000060000000A0000BE0E00003A060000CB0900000000000000070000000A0000CA000000EA0600007B0900000001000000070000000A0000AD010000F2060000840900000002000000070000000A00008F020000F90600008D0900000003000000070000000A000072030000FF060000940900000004000000070000000A000054040000050700009B0900000005000000070000000A0000370500000B070000A10900000006000000070000000A00001906000010070000A70900000007000000070000000A0000FB06000014070000AC0900000008000000070000000A0000DD07000019070000B00900000009000000070000000A0000BE0800001D070000B4090000000A000000070000000A00009F09000020070000B9090000000B000000070000000A0000800A000024070000BD090000000C000000070000000A0000600B000027070000C1090000000D000000070000000A0000400C000029070000C5090000000E000000070000000A00001F0D00002C070000CA090000000F000000070000000A0000FD0D00002E070000CF0900000010000000070000000A0000DB0E000030070000D50900000000000000080000000A0000E2000000D8070000830900000001000000080000000A0000C5010000E00700008D0900000002000000080000000A0000A8020000E7070000950900000003000000080000000A00008B030000EE0700009D0900000004000000080000000A00006E040000F4070000A40900000005000000080000000A000050050000FA070000AA0900000006000000080000000A00003306000000080000AF0900000007000000080000000A00001507000005080000B40900000008000000080000000A0000F70700000A080000B90900000009000000080000000A0000D90800000E080000BD090000000A000000080000000A0000BA09000012080000C1090000000B000000080000000A00009B0A000016080000C5090000000C000000080000000A00007C0B00001A080000C9090000000D000000080000000A00005C0C00001D080000CE090000000E000000080000000A00003B0D000020080000D2090000000F000000080000000A00001A0E000022080000D80900000010000000080000000A0000F80E000025080000DD0900000000000000090000000A0000FB000000C40800008B0900000001000000090000000A0000DE010000CD080000950900000002000000090000000A0000C1020000D50800009E0900000003000000090000000A0000A4030000DC080000A50900000004000000090000000A000087040000E3080000AC0900000005000000090000000A00006A050000E9080000B20900000006000000090000000A00004D060000EF080000B70900000007000000090000000A00002F070000F5080000BC0900000008000000090000000A000012080000FA080000C10900000009000000090000000A0000F4080000FF080000C5090000000A000000090000000A0000D509000004090000C9090000000B000000090000000A0000B60A000008090000CD090000000C000000090000000A0000970B00000C090000D2090000000D000000090000000A0000770C00000F090000D6090000000E000000090000000A0000570D000013090000DB090000000F000000090000000A0000360E000016090000E00900000010000000090000000A0000140F000018090000E509000000000000000A0000000A000013010000B00900009309000000010000000A0000000A0000F6010000B90900009D09000000020000000A0000000A0000D9020000C1090000A609000000030000000A0000000A0000BD030000C9090000AD09000000040000000A0000000A0000A0040000D0090000B409000000050000000A0000000A000083050000D7090000BA09000000060000000A0000000A000066060000DE090000C009000000070000000A0000000A000049070000E4090000C409000000080000000A0000000A00002C080000E9090000C909000000090000000A0000000A00000E090000EF090000CD090000000A0000000A0000000A0000F0090000F4090000D1090000000B0000000A0000000A0000D10A0000F8090000D6090000000C0000000A0000000A0000B20B0000FD090000DA090000000D0000000A0000000A0000930C0000010A0000DE090000000E0000000A0000000A0000730D0000050A0000E3090000000F0000000A0000000A0000520E0000080A0000E809000000100000000A0000000A0000310F00000B0A0000EE09000000000000000B0000000A00002B0100009A0A00009C09000000010000000B0000000A00000E020000A40A0000A509000000020000000B0000000A0000F2020000AC0A0000AE09000000030000000B0000000A0000D6030000B50A0000B509000000040000000B0000000A0000B9040000BC0A0000BC09000000050000000B0000000A00009D050000C40A0000C209000000060000000B0000000A000080060000CB0A0000C809000000070000000B0000000A000063070000D10A0000CD09000000080000000B0000000A000046080000D70A0000D109000000090000000B0000000A000029090000DD0A0000D6090000000A0000000B0000000A00000B0A0000E30A0000DA090000000B0000000B0000000A0000EC0A0000E80A0000DE090000000C0000000B0000000A0000CE0B0000ED0A0000E2090000000D0000000B0000000A0000AE0C0000F10A0000E6090000000E0000000B0000000A00008F0D0000F50A0000EB090000000F0000000B0000000A00006E0E0000F90A0000F009000000100000000B0000000A00004D0F0000FD0A0000F609000000000000000C0000000A000043010000830B0000A409000000010000000C0000000A0000270200008D0B0000AE09000000020000000C0000000A00000B030000960B0000B609000000030000000C0000000A0000EF0300009F0B0000BE09000000040000000C0000000A0000D2040000A70B0000C509000000050000000C0000000A0000B6050000AF0B0000CB09000000060000000C0000000A00009A060000B60B0000D009000000070000000C0000000A00007D070000BD0B0000D509000000080000000C0000000A000060080000C40B0000DA09000000090000000C0000000A000043090000CA0B0000DE090000000A0000000C0000000A0000250A0000D00B0000E2090000000B0000000C0000000A0000070B0000D60B0000E6090000000C0000000C0000000A0000E90B0000DB0B0000EA090000000D0000000C0000000A0000CA0C0000E00B0000EF090000000E0000000C0000000A0000AA0D0000E40B0000F4090000000F0000000C0000000A00008A0E0000E90B0000F909000000100000000C0000000A0000690F0000ED0B0000FE09000000000000000D0000000A00005B0100006A0C0000AD09000000010000000D0000000A00003F020000750C0000B709000000020000000D0000000A0000230300007E0C0000BF09000000030000000D0000000A000007040000870C0000C709000000040000000D0000000A0000EC040000900C0000CE09000000050000000D0000000A0000D0050000980C0000D409000000060000000D0000000A0000B3060000A00C0000D909000000070000000D0000000A000097070000A80C0000DE09000000080000000D0000000A00007A080000AF0C0000E309000000090000000D0000000A00005D090000B60C0000E7090000000A0000000D0000000A0000400A0000BC0C0000EB090000000B0000000D0000000A0000220B0000C20C0000EF090000000C0000000D0000000A0000040C0000C80C0000F4090000000D0000000D0000000A0000E50C0000CD0C0000F8090000000E0000000D0000000A0000C60D0000D20C0000FD090000000F0000000D0000000A0000A60E0000D70C0000020A000000100000000D0000000A0000860F0000DC0C0000070A000000000000000E0000000A000073010000500D0000B709000000010000000E0000000A0000580200005B0D0000C109000000020000000E0000000A00003C030000650D0000C909000000030000000E0000000A0000200400006E0D0000D109000000040000000E0000000A000005050000780D0000D809000000050000000E0000000A0000E9050000800D0000DE09000000060000000E0000000A0000CD060000890D0000E309000000070000000E0000000A0000B1070000900D0000E809000000080000000E0000000A000095080000980D0000ED09000000090000000E0000000A0000780900009F0D0000F1090000000A0000000E0000000A00005B0A0000A60D0000F5090000000B0000000E0000000A00003D0B0000AC0D0000F9090000000C0000000E0000000A0000200C0000B30D0000FE090000000D0000000E0000000A0000010D0000B80D0000020A0000000E0000000E0000000A0000E20D0000BE0D0000070A0000000F0000000E0000000A0000C20E0000C30D00000C0A000000100000000E0000000A0000A20F0000C80D0000110A000000000000000F0000000A00008C010000340E0000C209000000010000000F0000000A0000700200003F0E0000CC09000000020000000F0000000A000055030000490E0000D409000000030000000F0000000A00003A040000530E0000DC09000000040000000F0000000A00001E0500005D0E0000E309000000050000000F0000000A000003060000660E0000E909000000060000000F0000000A0000E70600006F0E0000EE09000000070000000F0000000A0000CB070000770E0000F309000000080000000F0000000A0000AF0800007F0E0000F809000000090000000F0000000A000093090000870E0000FC090000000A0000000F0000000A0000760A00008E0E0000000A0000000B0000000F0000000A0000590B0000950E0000040A0000000C0000000F0000000A00003B0C00009C0E0000090A0000000D0000000F0000000A00001D0D0000A20E00000D0A0000000E0000000F0000000A0000FE0D0000A80E0000120A0000000F0000000F0000000A0000DF0E0000AE0E0000170A000000100000000F0000000A0000BF0F0000B30E00001C0A00000000000000100000000A0000A4010000150F0000CE0900000001000000100000000A000089020000210F0000D80900000002000000100000000A00006E0300002C0F0000E10900000003000000100000000A000053040000360F0000E80900000004000000100000000A000038050000400F0000EF0900000005000000100000000A00001D0600004A0F0000F50900000006000000100000000A000001070000530F0000FB0900000007000000100000000A0000E60700005C0F0000000A00000008000000100000000A0000CA080000640F0000040A00000009000000100000000A0000AE0900006C0F0000080A0000000A000000100000000A0000910A0000740F00000D0A0000000B000000100000000A0000740B00007B0F0000110A0000000C000000100000000A0000570C0000830F0000150A0000000D000000100000000A0000390D0000890F0000190A0000000E000000100000000A00001A0E0000900F00001E0A0000000F000000100000000A0000FB0E0000960F0000230A00000010000000100000000A0000DB0F00009C0F0000290A00000000000000000000000B00001600000068000000000A00000001000000000000000B0000F80000006C0000000A0A00000002000000000000000B0000D901000070000000130A00000003000000000000000B0000BA020000730000001C0A00000004000000000000000B00009B03000076000000230A00000005000000000000000B00007C04000078000000290A00000006000000000000000B00005D0500007A0000002F0A00000007000000000000000B00003E0600007C000000350A00000008000000000000000B00001F0700007D0000003A0A00000009000000000000000B0000FF0700007E0000003F0A0000000A000000000000000B0000DF0800007E000000440A0000000B000000000000000B0000BE0900007E000000480A0000000C000000000000000B00009D0A00007E0000004D0A0000000D000000000000000B00007B0B00007E000000520A0000000E000000000000000B0000590C00007D000000570A0000000F000000000000000B0000360D00007C0000005D0A00000010000000000000000B0000130E00007B000000630A00000000000000010000000B00003100000058010000130A00000001000000010000000B0000130100005C0100001D0A00000002000000010000000B0000F401000060010000260A00000003000000010000000B0000D6020000640100002E0A00000004000000010000000B0000B703000068010000360A00000005000000010000000B0000990400006A0100003C0A00000006000000010000000B00007A0500006D010000420A00000007000000010000000B00005B0600006F010000480A00000008000000010000000B00003C070000700100004D0A00000009000000010000000B00001C08000072010000520A0000000A000000010000000B0000FC08000073010000560A0000000B000000010000000B0000DC090000730100005B0A0000000C000000010000000B0000BB0A000073010000600A0000000D000000010000000B00009A0B000073010000650A0000000E000000010000000B0000780C0000730100006A0A0000000F000000010000000B0000550D000073010000700A00000010000000010000000B0000320E000072010000760A00000000000000020000000B00004C00000048020000240A00000001000000020000000B00002D0100004D0200002E0A00000002000000020000000B00000F02000052020000370A00000003000000020000000B0000F1020000560200003F0A00000004000000020000000B0000D303000059020000460A00000005000000020000000B0000B40400005D0200004D0A00000006000000020000000B00009605000060020000530A00000007000000020000000B00007706000062020000590A00000008000000020000000B000058070000640200005E0A00000009000000020000000B00003908000066020000630A0000000A000000020000000B00001909000067020000670A0000000B000000020000000B0000F9090000680200006C0A0000000C000000020000000B0000D80A000069020000710A0000000D000000020000000B0000B70B000069020000760A0000000E000000020000000B0000960C00006A0200007B0A0000000F000000020000000B0000730D000069020000810A00000010000000020000000B0000500E000069020000870A00000000000000030000000B00006600000038030000330A00000001000000030000000B0000480100003D0300003D0A00000002000000030000000B00002A02000043030000460A00000003000000030000000B00000C030000470300004E0A00000004000000030000000B0000EE0300004B030000550A00000005000000030000000B0000D00400004F0300005C0A00000006000000030000000B0000B105000053030000620A00000007000000030000000B00009306000055030000680A00000008000000030000000B000074070000580300006D0A00000009000000030000000B0000550800005A030000720A0000000A000000030000000B0000360900005C030000760A0000000B000000030000000B0000160A00005D0300007B0A0000000C000000030000000B0000F50A00005F030000800A0000000D000000030000000B0000D50B00005F030000850A0000000E000000030000000B0000B30C0000600300008A0A0000000F000000030000000B0000910D000060030000900A00000010000000030000000B00006E0E000061030000960A00000000000000040000000B00007F00000028040000400A00000001000000040000000B0000610100002E0400004A0A00000002000000040000000B00004402000034040000530A00000003000000040000000B000026030000390400005C0A00000004000000040000000B0000080400003D040000630A00000005000000040000000B0000EA040000420400006A0A00000006000000040000000B0000CC05000045040000700A00000007000000040000000B0000AE06000049040000750A00000008000000040000000B0000900700004C0400007A0A00000009000000040000000B0000710800004E0400007F0A0000000A000000040000000B00005209000051040000840A0000000B000000040000000B0000320A000053040000880A0000000C000000040000000B0000120B0000540400008D0A0000000D000000040000000B0000F20B000055040000920A0000000E000000040000000B0000D00C000057040000970A0000000F000000040000000B0000AF0D0000570400009D0A00000010000000040000000B00008C0E000058040000A30A00000000000000050000000B000098000000180500004C0A00000001000000050000000B00007B0100001E050000560A00000002000000050000000B00005D02000024050000600A00000003000000050000000B0000400300002A050000680A00000004000000050000000B0000220400002F0500006F0A00000005000000050000000B00000505000034050000760A00000006000000050000000B0000E7050000380500007C0A00000007000000050000000B0000C90600003C050000810A00000008000000050000000B0000AB0700003F050000860A00000009000000050000000B00008C080000420500008B0A0000000A000000050000000B00006E09000045050000900A0000000B000000050000000B00004E0A000047050000950A0000000C000000050000000B00002E0B000049050000990A0000000D000000050000000B00000E0C00004B0500009E0A0000000E000000050000000B0000ED0C00004D050000A40A0000000F000000050000000B0000CC0D00004E050000A90A00000010000000050000000B0000A90E00004F050000AF0A00000000000000060000000B0000B100000007060000570A00000001000000060000000B0000940100000E060000620A00000002000000060000000B000077020000150600006B0A00000003000000060000000B00005A0300001B060000730A00000004000000060000000B00003C040000200600007A0A00000005000000060000000B00001F05000025060000810A00000006000000060000000B0000020600002A060000870A00000007000000060000000B0000E40600002E0600008C0A00000008000000060000000B0000C607000032060000910A00000009000000060000000B0000A808000036060000960A0000000A000000060000000B000089090000390600009B0A0000000B000000060000000B00006A0A00003C060000A00A0000000C000000060000000B00004A0B00003E060000A40A0000000D000000060000000B00002A0C000040060000A90A0000000E000000060000000B00000A0D000042060000AF0A0000000F000000060000000B0000E80D000044060000B40A00000010000000060000000B0000C60E000046060000BA0A00000000000000070000000B0000CA000000F6060000620A00000001000000070000000B0000AD010000FD0600006C0A00000002000000070000000B00009002000004070000750A00000003000000070000000B0000730300000B0700007D0A00000004000000070000000B00005604000011070000840A00000005000000070000000B000039050000160700008B0A00000006000000070000000B00001C0600001B070000910A00000007000000070000000B0000FE06000020070000970A00000008000000070000000B0000E1070000250700009C0A00000009000000070000000B0000C308000029070000A10A0000000A000000070000000B0000A40900002C070000A50A0000000B000000070000000B0000850A00002F070000AA0A0000000C000000070000000B0000660B000032070000AF0A0000000D000000070000000B0000460C000035070000B40A0000000E000000070000000B0000260D000038070000B90A0000000F000000070000000B0000050E00003A070000BF0A00000010000000070000000B0000E30E00003C070000C50A00000000000000080000000B0000E2000000E40700006B0A00000001000000080000000B0000C6010000EC070000750A00000002000000080000000B0000A9020000F30700007F0A00000003000000080000000B00008C030000FA070000870A00000004000000080000000B000070040000010800008E0A00000005000000080000000B00005305000007080000950A00000006000000080000000B0000360600000C0800009B0A00000007000000080000000B00001907000011080000A00A00000008000000080000000B0000FB07000016080000A50A00000009000000080000000B0000DD0800001B080000AA0A0000000A000000080000000B0000BF0900001F080000AF0A0000000B000000080000000B0000A10A000022080000B40A0000000C000000080000000B0000820B000026080000B80A0000000D000000080000000B0000620C000029080000BD0A0000000E000000080000000B0000420D00002C080000C30A0000000F000000080000000B0000210E00002E080000C80A00000010000000080000000B0000000F000031080000CE0A00000000000000090000000B0000FB000000D1080000750A00000001000000090000000B0000DE010000D90800007F0A00000002000000090000000B0000C2020000E1080000880A00000003000000090000000B0000A6030000E9080000900A00000004000000090000000B000089040000F0080000970A00000005000000090000000B00006C050000F60800009E0A00000006000000090000000B000050060000FC080000A40A00000007000000090000000B00003307000002090000AA0A00000008000000090000000B00001608000007090000AF0A00000009000000090000000B0000F80800000C090000B40A0000000A000000090000000B0000DA09000010090000B80A0000000B000000090000000B0000BC0A000015090000BD0A0000000C000000090000000B00009D0B000018090000C20A0000000D000000090000000B00007E0C00001C090000C70A0000000E000000090000000B00005E0D00001F090000CC0A0000000F000000090000000B00003E0E000022090000D10A00000010000000090000000B00001C0F000025090000D80A000000000000000A0000000B000013010000BD0900007E0A000000010000000A0000000B0000F7010000C6090000880A000000020000000A0000000B0000DB020000CE090000910A000000030000000A0000000B0000BF030000D6090000990A000000040000000A0000000B0000A2040000DD090000A10A000000050000000A0000000B000086050000E4090000A70A000000060000000A0000000B00006A060000EB090000AD0A000000070000000A0000000B00004D070000F1090000B30A000000080000000A0000000B000030080000F7090000B80A000000090000000A0000000B000013090000FC090000BD0A0000000A0000000A0000000B0000F5090000010A0000C10A0000000B0000000A0000000B0000D70A0000060A0000C60A0000000C0000000A0000000B0000B80B00000A0A0000CB0A0000000D0000000A0000000B0000990C00000E0A0000D00A0000000E0000000A0000000B00007A0D0000120A0000D50A0000000F0000000A0000000B00005A0E0000150A0000DB0A000000100000000A0000000B0000390F0000180A0000E10A000000000000000B0000000B00002B010000A80A0000870A000000010000000B0000000B00000F020000B10A0000910A000000020000000B0000000B0000F3020000BA0A00009A0A000000030000000B0000000B0000D7030000C20A0000A20A000000040000000B0000000B0000BC040000CA0A0000AA0A000000050000000B0000000B00009F050000D10A0000B00A000000060000000B0000000B000083060000D80A0000B60A000000070000000B0000000B000067070000DF0A0000BC0A000000080000000B0000000B00004A080000E50A0000C10A000000090000000B0000000B00002D090000EB0A0000C60A0000000A0000000B0000000B0000100A0000F00A0000CB0A0000000B0000000B0000000B0000F20A0000F50A0000CF0A0000000C0000000B0000000B0000D40B0000FA0A0000D40A0000000D0000000B0000000B0000B50C0000FE0A0000D90A0000000E0000000B0000000B0000960D0000030B0000DE0A0000000F0000000B0000000B0000760E0000070B0000E40A000000100000000B0000000B0000550F00000A0B0000EA0A000000000000000C0000000B000043010000910B0000910A000000010000000C0000000B0000280200009B0B00009B0A000000020000000C0000000B00000C030000A40B0000A40A000000030000000C0000000B0000F0030000AD0B0000AC0A000000040000000C0000000B0000D5040000B50B0000B30A000000050000000C0000000B0000B9050000BD0B0000BA0A000000060000000C0000000B00009D060000C40B0000C00A000000070000000C0000000B000081070000CB0B0000C60A000000080000000C0000000B000064080000D20B0000CB0A000000090000000C0000000B000048090000D80B0000D00A0000000A0000000C0000000B00002B0A0000DE0B0000D40A0000000B0000000C0000000B00000D0B0000E30B0000D90A0000000C0000000C0000000B0000EF0B0000E90B0000DE0A0000000D0000000C0000000B0000D00C0000EE0B0000E30A0000000E0000000C0000000B0000B10D0000F20B0000E80A0000000F0000000C0000000B0000920E0000F70B0000EE0A000000100000000C0000000B0000710F0000FB0B0000F40A000000000000000D0000000B00005C010000790C00009B0A000000010000000D0000000B000040020000830C0000A50A000000020000000D0000000B0000250300008D0C0000AE0A000000030000000D0000000B000009040000960C0000B60A000000040000000D0000000B0000EE0400009E0C0000BE0A000000050000000D0000000B0000D2050000A70C0000C40A000000060000000D0000000B0000B7060000AF0C0000CA0A000000070000000D0000000B00009B070000B60C0000D00A000000080000000D0000000B00007F080000BD0C0000D50A000000090000000D0000000B000062090000C40C0000DA0A0000000A0000000D0000000B0000450A0000CA0C0000DF0A0000000B0000000D0000000B0000280B0000D00C0000E30A0000000C0000000D0000000B00000A0C0000D60C0000E80A0000000D0000000D0000000B0000EC0C0000DB0C0000ED0A0000000E0000000D0000000B0000CD0D0000E00C0000F20A0000000F0000000D0000000B0000AE0E0000E50C0000F80A000000100000000D0000000B00008E0F0000EA0C0000FE0A000000000000000E0000000B0000740100005F0D0000A60A000000010000000E0000000B000059020000690D0000B00A000000020000000E0000000B00003E030000730D0000B90A000000030000000E0000000B0000220400007D0D0000C10A000000040000000E0000000B000007050000860D0000C90A000000050000000E0000000B0000EC0500008F0D0000CF0A000000060000000E0000000B0000D1060000970D0000D50A000000070000000E0000000B0000B50700009F0D0000DB0A000000080000000E0000000B000099080000A70D0000E00A000000090000000E0000000B00007D090000AE0D0000E50A0000000A0000000E0000000B0000600A0000B50D0000EA0A0000000B0000000E0000000B0000430B0000BB0D0000EE0A0000000C0000000E0000000B0000260C0000C10D0000F30A0000000D0000000E0000000B0000080D0000C70D0000F80A0000000E0000000E0000000B0000E90D0000CD0D0000FD0A0000000F0000000E0000000B0000CA0E0000D20D0000030B000000100000000E0000000B0000AA0F0000D70D0000090B000000000000000F0000000B00008C010000430E0000B20A000000010000000F0000000B0000710200004E0E0000BC0A000000020000000F0000000B000057030000580E0000C50A000000030000000F0000000B00003C040000620E0000CD0A000000040000000F0000000B0000210500006C0E0000D50A000000050000000F0000000B000006060000750E0000DB0A000000060000000F0000000B0000EB0600007E0E0000E10A000000070000000F0000000B0000CF070000860E0000E70A000000080000000F0000000B0000B40800008E0E0000EC0A000000090000000F0000000B000098090000960E0000F10A0000000A0000000F0000000B00007B0A00009D0E0000F60A0000000B0000000F0000000B00005E0B0000A40E0000FA0A0000000C0000000F0000000B0000410C0000AB0E0000FF0A0000000D0000000F0000000B0000230D0000B10E0000040B0000000E0000000F0000000B0000050E0000B70E0000090B0000000F0000000F0000000B0000E60E0000BD0E00000F0B000000100000000F0000000B0000C70F0000C20E0000150B00000000000000100000000B0000A5010000250F0000BF0A00000001000000100000000B00008A020000300F0000CA0A00000002000000100000000B0000700300003B0F0000D30A00000003000000100000000B000055040000460F0000DB0A00000004000000100000000B00003A050000500F0000E20A00000005000000100000000B000020060000590F0000E90A00000006000000100000000B000005070000630F0000EF0A00000007000000100000000B0000EA0700006B0F0000F40A00000008000000100000000B0000CE080000740F0000F90A00000009000000100000000B0000B20900007C0F0000FE0A0000000A000000100000000B0000960A0000840F0000030B0000000B000000100000000B00007A0B00008B0F0000080B0000000C000000100000000B00005D0C0000920F00000C0B0000000D000000100000000B00003F0D0000990F0000110B0000000E000000100000000B0000210E00009F0F0000170B0000000F000000100000000B0000030F0000A50F00001C0B00000010000000100000000B0000E30F0000AB0F0000230B00000000000000000000000C00001700000070000000DE0A00000001000000000000000C0000F800000074000000E90A00000002000000000000000C0000DA01000078000000F30A00000003000000000000000C0000BC0200007C000000FC0A00000004000000000000000C00009E0300007E000000030B00000005000000000000000C00007F040000810000000B0B00000006000000000000000C00006105000083000000110B00000007000000000000000C00004206000084000000170B00000008000000000000000C000023070000860000001D0B00000009000000000000000C00000408000086000000230B0000000A000000000000000C0000E408000087000000280B0000000B000000000000000C0000C4090000870000002D0B0000000C000000000000000C0000A40A000087000000320B0000000D000000000000000C0000830B000086000000380B0000000E000000000000000C0000610C0000860000003E0B0000000F000000000000000C00003F0D000085000000440B00000010000000000000000C00001C0E0000830000004B0B00000000000000010000000C00003200000061010000F20A00000001000000010000000C00001401000065010000FD0A00000002000000010000000C0000F60100006A010000070B00000003000000010000000C0000D80200006D0100000F0B00000004000000010000000C0000BA03000071010000170B00000005000000010000000C00009C040000730100001F0B00000006000000010000000C00007D05000076010000250B00000007000000010000000C00005F060000780100002B0B00000008000000010000000C0000400700007A010000310B00000009000000010000000C0000210800007B010000360B0000000A000000010000000C0000020900007C0100003C0B0000000B000000010000000C0000E20900007C010000410B0000000C000000010000000C0000C20A00007D010000460B0000000D000000010000000C0000A10B00007D0100004C0B0000000E000000010000000C0000800C00007C010000520B0000000F000000010000000C00005E0D00007C010000580B00000010000000010000000C00003B0E00007B0100005F0B00000000000000020000000C00004C00000051020000040B00000001000000020000000C00002E010000560200000F0B00000002000000020000000C0000110200005B020000190B00000003000000020000000C0000F30200005F020000210B00000004000000020000000C0000D503000063020000290B00000005000000020000000C0000B704000066020000300B00000006000000020000000C00009905000069020000370B00000007000000020000000C00007B0600006C0200003D0B00000008000000020000000C00005D0700006E020000430B00000009000000020000000C00003E0800006F020000480B0000000A000000020000000C00001F090000710200004E0B0000000B000000020000000C0000FF09000072020000530B0000000C000000020000000C0000DF0A000073020000580B0000000D000000020000000C0000BF0B0000730200005E0B0000000E000000020000000C00009E0C000073020000640B0000000F000000020000000C00007C0D0000730200006A0B00000010000000020000000C0000590E000073020000710B00000000000000030000000C00006600000042030000140B00000001000000030000000C000049010000470300001F0B00000002000000030000000C00002B0200004C030000290B00000003000000030000000C00000E03000051030000310B00000004000000030000000C0000F003000055030000390B00000005000000030000000C0000D304000059030000410B00000006000000030000000C0000B50500005C030000470B00000007000000030000000C0000970600005F0300004D0B00000008000000030000000C00007907000062030000530B00000009000000030000000C00005A08000064030000580B0000000A000000030000000C00003B090000660300005E0B0000000B000000030000000C00001C0A000067030000630B0000000C000000030000000C0000FC0A000069030000680B0000000D000000030000000C0000DC0B00006A0300006E0B0000000E000000030000000C0000BB0C00006A030000740B0000000F000000030000000C00009A0D00006A0300007A0B00000010000000030000000C0000770E00006B030000810B00000000000000040000000C00008000000032040000230B00000001000000040000000C000063010000380400002E0B00000002000000040000000C0000450200003E040000370B00000003000000040000000C00002803000043040000400B00000004000000040000000C00000B04000048040000480B00000005000000040000000C0000EE0400004C0400004F0B00000006000000040000000C0000D005000050040000560B00000007000000040000000C0000B2060000530400005C0B00000008000000040000000C00009507000056040000610B00000009000000040000000C00007608000059040000670B0000000A000000040000000C0000580900005B0400006C0B0000000B000000040000000C0000390A00005D040000710B0000000C000000040000000C0000190B00005F040000770B0000000D000000040000000C0000F90B0000600400007C0B0000000E000000040000000C0000D80C000061040000820B0000000F000000040000000C0000B70D000062040000880B00000010000000040000000C0000950E0000620400008F0B00000000000000050000000C00009900000022050000300B00000001000000050000000C00007C010000290500003B0B00000002000000050000000C00005F0200002F050000440B00000003000000050000000C000042030000350500004D0B00000004000000050000000C0000250400003A050000550B00000005000000050000000C0000080500003E0500005C0B00000006000000050000000C0000EB05000043050000630B00000007000000050000000C0000CE06000046050000690B00000008000000050000000C0000B00700004A0500006F0B00000009000000050000000C0000920800004D050000740B0000000A000000050000000C00007309000050050000790B0000000B000000050000000C0000550A0000520500007F0B0000000C000000050000000C0000350B000054050000840B0000000D000000050000000C0000160C0000560500008A0B0000000E000000050000000C0000F50C0000570500008F0B0000000F000000050000000C0000D40D000059050000960B00000010000000050000000C0000B20E00005A0500009C0B00000000000000060000000C0000B2000000120600003C0B00000001000000060000000C00009501000019060000470B00000002000000060000000C00007902000020060000510B00000003000000060000000C00005C03000026060000590B00000004000000060000000C00003F0400002B060000610B00000005000000060000000C00002305000030060000690B00000006000000060000000C000006060000350600006F0B00000007000000060000000C0000E806000039060000750B00000008000000060000000C0000CB0700003D0600007B0B00000009000000060000000C0000AD08000041060000800B0000000A000000060000000C00008F09000044060000860B0000000B000000060000000C0000700A0000470600008B0B0000000C000000060000000C0000510B000049060000900B0000000D000000060000000C0000320C00004C060000960B0000000E000000060000000C0000120D00004E0600009C0B0000000F000000060000000C0000F10D00004F060000A20B00000010000000060000000C0000CF0E000051060000A90B00000000000000070000000C0000CB00000001070000480B00000001000000070000000C0000AE01000009070000520B00000002000000070000000C000092020000100700005C0B00000003000000070000000C00007603000016070000650B00000004000000070000000C0000590400001C0700006D0B00000005000000070000000C00003D05000022070000740B00000006000000070000000C000020060000270700007A0B00000007000000070000000C0000030700002C070000810B00000008000000070000000C0000E607000030070000860B00000009000000070000000C0000C8080000340700008C0B0000000A000000070000000C0000AA09000038070000910B0000000B000000070000000C00008C0A00003B070000960B0000000C000000070000000C00006D0B00003E0700009C0B0000000D000000070000000C00004E0C000041070000A10B0000000E000000070000000C00002E0D000043070000A70B0000000F000000070000000C00000D0E000045070000AD0B00000010000000070000000C0000EC0E000047070000B40B00000000000000080000000C0000E4000000F0070000520B00000001000000080000000C0000C7010000F80700005D0B00000002000000080000000C0000AB020000FF070000670B00000003000000080000000C00008F03000006080000700B00000004000000080000000C0000730400000D080000770B00000005000000080000000C000056050000130800007F0B00000006000000080000000C00003A06000018080000850B00000007000000080000000C00001D0700001D0800008B0B00000008000000080000000C00000008000022080000910B00000009000000080000000C0000E308000027080000960B0000000A000000080000000C0000C50900002B0800009C0B0000000B000000080000000C0000A70A00002E080000A10B0000000C000000080000000C0000890B000032080000A60B0000000D000000080000000C00006A0C000035080000AC0B0000000E000000080000000C00004A0D000038080000B20B0000000F000000080000000C00002A0E00003A080000B80B00000010000000080000000C0000090F00003D080000BF0B00000000000000090000000C0000FC000000DD0800005D0B00000001000000090000000C0000E0010000E6080000670B00000002000000090000000C0000C4020000EE080000710B00000003000000090000000C0000A8030000F50800007A0B00000004000000090000000C00008C040000FC080000820B00000005000000090000000C00007005000002090000890B00000006000000090000000C00005406000008090000900B00000007000000090000000C0000370700000E090000960B00000008000000090000000C00001B080000130900009B0B00000009000000090000000C0000FE08000018090000A10B0000000A000000090000000C0000E00900001D090000A60B0000000B000000090000000C0000C20A000021090000AB0B0000000C000000090000000C0000A40B000025090000B10B0000000D000000090000000C0000850C000028090000B60B0000000E000000090000000C0000660D00002C090000BC0B0000000F000000090000000C0000460E00002F090000C20B00000010000000090000000C0000250F000032090000C90B000000000000000A0000000C000014010000CA090000670B000000010000000A0000000C0000F9010000D3090000720B000000020000000A0000000C0000DD020000DB0900007B0B000000030000000A0000000C0000C1030000E3090000840B000000040000000A0000000C0000A6040000EA0900008C0B000000050000000A0000000C00008A050000F1090000930B000000060000000A0000000C00006E060000F70900009A0B000000070000000A0000000C000051070000FE090000A00B000000080000000A0000000C000035080000030A0000A60B000000090000000A0000000C000018090000090A0000AB0B0000000A0000000A0000000C0000FB0900000E0A0000B00B0000000B0000000A0000000C0000DE0A0000120A0000B60B0000000C0000000A0000000C0000C00B0000170A0000BB0B0000000D0000000A0000000C0000A10C00001B0A0000C00B0000000E0000000A0000000C0000820D00001E0A0000C60B0000000F0000000A0000000C0000620E0000220A0000CC0B000000100000000A0000000C0000420F0000250A0000D30B000000000000000B0000000C00002D010000B50A0000710B000000010000000B0000000C000011020000BE0A00007C0B000000020000000B0000000C0000F6020000C70A0000860B000000030000000B0000000C0000DA030000CF0A00008F0B000000040000000B0000000C0000BF040000D70A0000970B000000050000000B0000000C0000A3050000DE0A00009E0B000000060000000B0000000C000087060000E50A0000A40B000000070000000B0000000C00006C070000EC0A0000AA0B000000080000000B0000000C00004F080000F20A0000B00B000000090000000B0000000C000033090000F80A0000B50B0000000A0000000B0000000C0000160A0000FD0A0000BB0B0000000B0000000B0000000C0000F90A0000020B0000C00B0000000C0000000B0000000C0000DB0B0000070B0000C50B0000000D0000000B0000000C0000BD0C00000C0B0000CB0B0000000E0000000B0000000C00009E0D0000100B0000D10B0000000F0000000B0000000C00007E0E0000140B0000D70B000000100000000B0000000C00005E0F0000180B0000DE0B000000000000000C0000000C0000450100009F0B00007C0B000000010000000C0000000C00002A020000A80B0000870B000000020000000C0000000C00000F030000B20B0000910B000000030000000C0000000C0000F3030000BA0B0000990B000000040000000C0000000C0000D8040000C30B0000A10B000000050000000C0000000C0000BD050000CA0B0000A80B000000060000000C0000000C0000A1060000D20B0000AF0B000000070000000C0000000C000086070000D90B0000B50B000000080000000C0000000C00006A080000DF0B0000BB0B000000090000000C0000000C00004D090000E60B0000C00B0000000A0000000C0000000C0000310A0000EB0B0000C50B0000000B0000000C0000000C0000140B0000F10B0000CB0B0000000C0000000C0000000C0000F60B0000F60B0000D00B0000000D0000000C0000000C0000D80C0000FB0B0000D50B0000000E0000000C0000000C0000B90D0000000C0000DB0B0000000F0000000C0000000C00009A0E0000040C0000E20B000000100000000C0000000C00007A0F0000080C0000E80B000000000000000D0000000C00005D010000870C0000870B000000010000000D0000000C000042020000910C0000920B000000020000000D0000000C0000270300009B0C00009C0B000000030000000D0000000C00000C040000A40C0000A50B000000040000000D0000000C0000F1040000AC0C0000AD0B000000050000000D0000000C0000D6050000B50C0000B40B000000060000000D0000000C0000BB060000BD0C0000BA0B000000070000000D0000000C0000A0070000C40C0000C00B000000080000000D0000000C000084080000CB0C0000C60B000000090000000D0000000C000068090000D20C0000CB0B0000000A0000000D0000000C00004C0A0000D80C0000D10B0000000B0000000D0000000C00002F0B0000DE0C0000D60B0000000C0000000D0000000C0000110C0000E40C0000DB0B0000000D0000000D0000000C0000F40C0000E90C0000E10B0000000E0000000D0000000C0000D50D0000EE0C0000E70B0000000F0000000D0000000C0000B60E0000F30C0000ED0B000000100000000D0000000C0000970F0000F80C0000F40B000000000000000E0000000C0000760100006D0D0000940B000000010000000E0000000C00005B020000780D00009E0B000000020000000E0000000C000040030000820D0000A80B000000030000000E0000000C0000260400008B0D0000B10B000000040000000E0000000C00000B050000950D0000B90B000000050000000E0000000C0000F00500009D0D0000C00B000000060000000E0000000C0000D5060000A60D0000C60B000000070000000E0000000C0000BA070000AD0D0000CC0B000000080000000E0000000C00009E080000B50D0000D20B000000090000000E0000000C000083090000BC0D0000D80B0000000A0000000E0000000C0000660A0000C30D0000DD0B0000000B0000000E0000000C00004A0B0000C90D0000E20B0000000C0000000E0000000C00002D0C0000D00D0000E70B0000000D0000000E0000000C00000F0D0000D50D0000ED0B0000000E0000000E0000000C0000F10D0000DB0D0000F30B0000000F0000000E0000000C0000D20E0000E00D0000F90B000000100000000E0000000C0000B30F0000E50D0000000C000000000000000F0000000C00008E010000520E0000A10B000000010000000F0000000C0000740200005D0E0000AC0B000000020000000F0000000C000059030000670E0000B50B000000030000000F0000000C00003F040000710E0000BE0B000000040000000F0000000C0000240500007B0E0000C60B000000050000000F0000000C00000A060000840E0000CD0B000000060000000F0000000C0000EF0600008D0E0000D40B000000070000000F0000000C0000D4070000950E0000DA0B000000080000000F0000000C0000B90800009D0E0000DF0B000000090000000F0000000C00009D090000A50E0000E50B0000000A0000000F0000000C0000810A0000AC0E0000EA0B0000000B0000000F0000000C0000650B0000B30E0000EF0B0000000C0000000F0000000C0000480C0000B90E0000F50B0000000D0000000F0000000C00002B0D0000C00E0000FA0B0000000E0000000F0000000C00000D0E0000C60E0000000C0000000F0000000F0000000C0000EF0E0000CB0E0000060C000000100000000F0000000C0000CF0F0000D10E00000D0C00000000000000100000000C0000A7010000340F0000AF0B00000001000000100000000C00008D0200003F0F0000BA0B00000002000000100000000C0000720300004A0F0000C40B00000003000000100000000C000058040000550F0000CC0B00000004000000100000000C00003E0500005F0F0000D40B00000005000000100000000C000024060000690F0000DC0B00000006000000100000000C000009070000720F0000E20B00000007000000100000000C0000EF0700007B0F0000E80B00000008000000100000000C0000D4080000830F0000EE0B00000009000000100000000C0000B80900008B0F0000F30B0000000A000000100000000C00009D0A0000930F0000F90B0000000B000000100000000C0000810B00009A0F0000FE0B0000000C000000100000000C0000640C0000A10F0000030C0000000D000000100000000C0000470D0000A80F0000090C0000000E000000100000000C0000290E0000AE0F00000E0C0000000F000000100000000C00000B0F0000B40F0000150C00000010000000100000000C0000EC0F0000BA0F00001B0C00000000000000000000000D00001800000078000000BC0B00000001000000000000000D0000FB0000007D000000C70B00000002000000000000000D0000DD01000080000000D10B00000003000000000000000D0000BF02000084000000DB0B00000004000000000000000D0000A203000087000000E30B00000005000000000000000D00008404000089000000EB0B00000006000000000000000D0000660500008B000000F20B00000007000000000000000D0000480600008D000000F90B00000008000000000000000D0000290700008E000000FF0B00000009000000000000000D00000B0800008F000000050C0000000A000000000000000D0000EC0800008F0000000B0C0000000B000000000000000D0000CC0900008F000000110C0000000C000000000000000D0000AC0A00008F000000170C0000000D000000000000000D00008C0B00008F0000001D0C0000000E000000000000000D00006B0C00008E000000240C0000000F000000000000000D0000490D00008D0000002A0C00000010000000000000000D0000260E00008C000000320C00000000000000010000000D00003300000069010000D10B00000001000000010000000D0000160100006E010000DC0B00000002000000010000000D0000F901000072010000E60B00000003000000010000000D0000DB02000076010000F00B00000004000000010000000D0000BE03000079010000F80B00000005000000010000000D0000A00400007C010000000C00000006000000010000000D0000820500007F010000070C00000007000000010000000D000065060000810100000E0C00000008000000010000000D00004607000082010000140C00000009000000010000000D000028080000840100001A0C0000000A000000010000000D00000909000085010000200C0000000B000000010000000D0000EA09000085010000260C0000000C000000010000000D0000CA0A0000850100002C0C0000000D000000010000000D0000AA0B000085010000320C0000000E000000010000000D0000890C000085010000380C0000000F000000010000000D0000680D0000850100003F0C00000010000000010000000D0000450E000084010000470C00000000000000020000000D00004E0000005A020000E40B00000001000000020000000D0000310100005F020000EF0B00000002000000020000000D00001402000064020000F90B00000003000000020000000D0000F602000068020000030C00000004000000020000000D0000D90300006C0200000B0C00000005000000020000000D0000BC0400006F020000130C00000006000000020000000D00009F050000720200001A0C00000007000000020000000D00008106000075020000210C00000008000000020000000D00006307000077020000270C00000009000000020000000D000045080000790200002D0C0000000A000000020000000D0000260900007A020000330C0000000B000000020000000D0000070A00007B020000390C0000000C000000020000000D0000E80A00007C0200003F0C0000000D000000020000000D0000C80B00007C020000450C0000000E000000020000000D0000A70C00007C0200004B0C0000000F000000020000000D0000860D00007C020000520C00000010000000020000000D0000640E00007C0200005A0C00000000000000030000000D0000680000004B030000F50B00000001000000030000000D00004B01000051030000000C00000002000000030000000D00002E020000560300000B0C00000003000000030000000D0000110300005B030000140C00000004000000030000000D0000F40300005F0300001D0C00000005000000030000000D0000D704000063030000240C00000006000000030000000D0000BA050000660300002B0C00000007000000030000000D00009D06000069030000320C00000008000000030000000D00007F0700006B030000380C00000009000000030000000D0000610800006E0300003E0C0000000A000000030000000D00004309000070030000440C0000000B000000030000000D0000240A0000710300004A0C0000000C000000030000000D0000050B000072030000500C0000000D000000030000000D0000E50B000073030000560C0000000E000000030000000D0000C50C0000740300005D0C0000000F000000030000000D0000A40D000074030000630C00000010000000030000000D0000820E0000740300006B0C00000000000000040000000D0000820000003C040000050C00000001000000040000000D00006501000042040000100C00000002000000040000000D000049020000480400001A0C00000003000000040000000D00002C0300004D040000240C00000004000000040000000D00000F040000520400002C0C00000005000000040000000D0000F204000056040000340C00000006000000040000000D0000D50500005A0400003B0C00000007000000040000000D0000B80600005D040000420C00000008000000040000000D00009B07000060040000480C00000009000000040000000D00007D080000630400004E0C0000000A000000040000000D00005F09000065040000540C0000000B000000040000000D0000400A0000670400005A0C0000000C000000040000000D0000210B000069040000600C0000000D000000040000000D0000020C00006A040000660C0000000E000000040000000D0000E20C00006B0400006C0C0000000F000000040000000D0000C10D00006C040000730C00000010000000040000000D0000A00E00006C0400007A0C00000000000000050000000D00009B0000002D050000130C00000001000000050000000D00007F010000330500001E0C00000002000000050000000D00006202000039050000290C00000003000000050000000D0000460300003F050000320C00000004000000050000000D00002A040000440500003B0C00000005000000050000000D00000D05000049050000420C00000006000000050000000D0000F00500004D050000490C00000007000000050000000D0000D306000051050000500C00000008000000050000000D0000B607000054050000560C00000009000000050000000D000099080000570500005C0C0000000A000000050000000D00007B0900005A050000620C0000000B000000050000000D00005C0A00005C050000680C0000000C000000050000000D00003E0B00005F0500006E0C0000000D000000050000000D00001E0C000060050000740C0000000E000000050000000D0000FF0C0000620500007B0C0000000F000000050000000D0000DE0D000063050000810C00000010000000050000000D0000BD0E000064050000890C00000000000000060000000D0000B40000001D060000200C00000001000000060000000D000098010000240600002C0C00000002000000060000000D00007C0200002A060000360C00000003000000060000000D000060030000300600003F0C00000004000000060000000D00004404000036060000480C00000005000000060000000D0000270500003B060000500C00000006000000060000000D00000B06000040060000570C00000007000000060000000D0000EE060000440600005D0C00000008000000060000000D0000D107000048060000640C00000009000000060000000D0000B40800004C0600006A0C0000000A000000060000000D0000960900004F060000700C0000000B000000060000000D0000780A000052060000750C0000000C000000060000000D00005A0B0000540600007B0C0000000D000000060000000D00003B0C000056060000810C0000000E000000060000000D00001B0D000058060000880C0000000F000000060000000D0000FB0D00005A0600008F0C00000010000000060000000D0000DA0E00005C060000960C00000000000000070000000D0000CD0000000D0700002D0C00000001000000070000000D0000B101000014070000380C00000002000000070000000D0000950200001B070000420C00000003000000070000000D000079030000210700004C0C00000004000000070000000D00005E04000027070000540C00000005000000070000000D0000410500002D0700005C0C00000006000000070000000D00002506000032070000630C00000007000000070000000D000009070000370700006A0C00000008000000070000000D0000EC0700003B070000700C00000009000000070000000D0000CF0800003F070000760C0000000A000000070000000D0000B2090000430700007C0C0000000B000000070000000D0000940A000046070000820C0000000C000000070000000D0000760B000049070000880C0000000D000000070000000D0000570C00004C0700008E0C0000000E000000070000000D0000370D00004E070000940C0000000F000000070000000D0000170E0000500700009B0C00000010000000070000000D0000F70E000052070000A20C00000000000000080000000D0000E6000000FB070000390C00000001000000080000000D0000CA01000003080000440C00000002000000080000000D0000AF0200000B0800004E0C00000003000000080000000D00009303000012080000580C00000004000000080000000D00007704000018080000600C00000005000000080000000D00005B0500001E080000680C00000006000000080000000D00003F060000240800006F0C00000007000000080000000D00002307000029080000760C00000008000000080000000D0000070800002E0800007C0C00000009000000080000000D0000EA08000032080000820C0000000A000000080000000D0000CD09000036080000880C0000000B000000080000000D0000AF0A00003A0800008E0C0000000C000000080000000D0000910B00003D080000940C0000000D000000080000000D0000730C0000410800009A0C0000000E000000080000000D0000530D000043080000A00C0000000F000000080000000D0000340E000046080000A70C00000010000000080000000D0000130F000048080000AE0C00000000000000090000000D0000FF000000E9080000440C00000001000000090000000D0000E3010000F2080000500C00000002000000090000000D0000C8020000FA0800005A0C00000003000000090000000D0000AC03000001090000630C00000004000000090000000D000091040000080900006C0C00000005000000090000000D0000750500000E090000730C00000006000000090000000D000059060000140900007B0C00000007000000090000000D00003D0700001A090000810C00000008000000090000000D0000210800001F090000870C00000009000000090000000D000005090000240900008D0C0000000A000000090000000D0000E809000029090000930C0000000B000000090000000D0000CA0A00002D090000990C0000000C000000090000000D0000AD0B0000310900009F0C0000000D000000090000000D00008E0C000034090000A50C0000000E000000090000000D00006F0D000038090000AB0C0000000F000000090000000D0000500E00003B090000B20C00000010000000090000000D0000300F00003D090000BA0C000000000000000A0000000D000017010000D6090000500C000000010000000A0000000D0000FC010000DF0900005B0C000000020000000A0000000D0000E1020000E7090000650C000000030000000A0000000D0000C5030000EF0900006F0C000000040000000A0000000D0000AA040000F6090000770C000000050000000A0000000D00008F050000FD0900007F0C000000060000000A0000000D000073060000040A0000860C000000070000000A0000000D0000580700000A0A00008D0C000000080000000A0000000D00003C080000100A0000930C000000090000000A0000000D00001F090000150A0000990C0000000A0000000A0000000D0000030A00001A0A00009F0C0000000B0000000A0000000D0000E60A00001F0A0000A40C0000000C0000000A0000000D0000C80B0000230A0000AA0C0000000D0000000A0000000D0000AA0C0000270A0000B00C0000000E0000000A0000000D00008B0D00002B0A0000B70C0000000F0000000A0000000D00006C0E00002E0A0000BE0C000000100000000A0000000D00004C0F0000310A0000C50C000000000000000B0000000D00002F010000C20A00005B0C000000010000000B0000000D000014020000CB0A0000660C000000020000000B0000000D0000F9020000D40A0000710C000000030000000B0000000D0000DE030000DC0A00007A0C000000040000000B0000000D0000C3040000E40A0000820C000000050000000B0000000D0000A8050000EB0A00008A0C000000060000000B0000000D00008D060000F20A0000910C000000070000000B0000000D000072070000F90A0000980C000000080000000B0000000D000056080000FF0A00009E0C000000090000000B0000000D00003A090000050B0000A40C0000000A0000000B0000000D00001D0A00000A0B0000AA0C0000000B0000000B0000000D0000010B00000F0B0000B00C0000000C0000000B0000000D0000E30B0000140B0000B60C0000000D0000000B0000000D0000C50C0000180B0000BC0C0000000E0000000B0000000D0000A70D00001D0B0000C20C0000000F0000000B0000000D0000880E0000200B0000C90C000000100000000B0000000D0000680F0000240B0000D00C000000000000000C0000000D000048010000AC0B0000670C000000010000000C0000000D00002D020000B60B0000720C000000020000000C0000000D000012030000BF0B00007D0C000000030000000C0000000D0000F8030000C70B0000860C000000040000000C0000000D0000DD040000D00B00008E0C000000050000000C0000000D0000C2050000D70B0000960C000000060000000C0000000D0000A7060000DF0B00009D0C000000070000000C0000000D00008C070000E60B0000A40C000000080000000C0000000D000070080000EC0B0000AA0C000000090000000C0000000D000054090000F30B0000B00C0000000A0000000C0000000D0000380A0000F90B0000B60C0000000B0000000C0000000D00001C0B0000FE0B0000BC0C0000000C0000000C0000000D0000FF0B0000030C0000C20C0000000D0000000C0000000D0000E10C0000080C0000C80C0000000E0000000C0000000D0000C30D00000D0C0000CE0C0000000F0000000C0000000D0000A40E0000110C0000D50C000000100000000C0000000D0000850F0000160C0000DC0C000000000000000D0000000D000060010000940C0000730C000000010000000D0000000D0000460200009F0C00007F0C000000020000000D0000000D00002B030000A80C0000890C000000030000000D0000000D000011040000B10C0000920C000000040000000D0000000D0000F6040000BA0C00009B0C000000050000000D0000000D0000DC050000C20C0000A20C000000060000000D0000000D0000C1060000CA0C0000AA0C000000070000000D0000000D0000A6070000D20C0000B00C000000080000000D0000000D00008B080000D90C0000B60C000000090000000D0000000D00006F090000DF0C0000BC0C0000000A0000000D0000000D0000530A0000E60C0000C20C0000000B0000000D0000000D0000370B0000EC0C0000C80C0000000C0000000D0000000D00001A0C0000F10C0000CE0C0000000D0000000D0000000D0000FD0C0000F70C0000D40C0000000E0000000D0000000D0000DF0D0000FC0C0000DA0C0000000F0000000D0000000D0000C00E0000010D0000E10C000000100000000D0000000D0000A10F0000050D0000E80C000000000000000E0000000D0000790100007B0D0000810C000000010000000E0000000D00005E020000860D00008C0C000000020000000E0000000D000044030000900D0000960C000000030000000E0000000D00002A040000990D00009F0C000000040000000E0000000D000010050000A30D0000A80C000000050000000E0000000D0000F5050000AB0D0000B00C000000060000000E0000000D0000DB060000B40D0000B70C000000070000000E0000000D0000C0070000BB0D0000BD0C000000080000000E0000000D0000A5080000C30D0000C40C000000090000000E0000000D00008A090000CA0D0000CA0C0000000A0000000E0000000D00006E0A0000D10D0000CF0C0000000B0000000E0000000D0000520B0000D70D0000D50C0000000C0000000E0000000D0000350C0000DD0D0000DB0C0000000D0000000E0000000D0000180D0000E30D0000E10C0000000E0000000E0000000D0000FB0D0000E90D0000E80C0000000F0000000E0000000D0000DC0E0000EE0D0000EE0C000000100000000E0000000D0000BD0F0000F30D0000F60C000000000000000F0000000D000091010000600E00008F0C000000010000000F0000000D0000770200006B0E00009A0C000000020000000F0000000D00005D030000760E0000A40C000000030000000F0000000D000043040000800E0000AE0C000000040000000F0000000D000029050000890E0000B60C000000050000000F0000000D00000F060000920E0000BE0C000000060000000F0000000D0000F50600009B0E0000C50C000000070000000F0000000D0000DA070000A30E0000CC0C000000080000000F0000000D0000C0080000AB0E0000D20C000000090000000F0000000D0000A5090000B30E0000D80C0000000A0000000F0000000D0000890A0000BA0E0000DE0C0000000B0000000F0000000D00006D0B0000C10E0000E40C0000000C0000000F0000000D0000510C0000C80E0000E90C0000000D0000000F0000000D0000340D0000CE0E0000EF0C0000000E0000000F0000000D0000170E0000D40E0000F60C0000000F0000000F0000000D0000F90E0000DA0E0000FD0C000000100000000F0000000D0000DA0F0000DF0E0000040D00000000000000100000000D0000AA010000430F00009F0C00000001000000100000000D0000900200004E0F0000AA0C00000002000000100000000D000077030000590F0000B40C00000003000000100000000D00005D040000640F0000BD0C00000004000000100000000D0000430500006E0F0000C60C00000005000000100000000D000029060000770F0000CE0C00000006000000100000000D00000F070000810F0000D50C00000007000000100000000D0000F5070000890F0000DB0C00000008000000100000000D0000DA080000920F0000E20C00000009000000100000000D0000C00900009A0F0000E70C0000000A000000100000000D0000A40A0000A10F0000ED0C0000000B000000100000000D0000890B0000A90F0000F30C0000000C000000100000000D00006D0C0000B00F0000F90C0000000D000000100000000D0000500D0000B60F0000FF0C0000000E000000100000000D0000330E0000BD0F0000050D0000000F000000100000000D0000150F0000C30F00000C0D00000010000000100000000D0000F70F0000C90F0000130D00000000000000000000000E00001C00000080000000990C00000001000000000000000E0000FF00000084000000A50C00000002000000000000000E0000E201000088000000B00C00000003000000000000000E0000C40200008C000000BA0C00000004000000000000000E0000A70300008E000000C30C00000005000000000000000E00008A04000091000000CB0C00000006000000000000000E00006D05000093000000D30C00000007000000000000000E00004F06000095000000DA0C00000008000000000000000E00003107000096000000E10C00000009000000000000000E00001308000097000000E80C0000000A000000000000000E0000F508000097000000EE0C0000000B000000000000000E0000D609000097000000F50C0000000C000000000000000E0000B60A000097000000FB0C0000000D000000000000000E0000960B000097000000020D0000000E000000000000000E0000760C000096000000090D0000000F000000000000000E0000540D000095000000100D00000010000000000000000E0000330E000094000000180D00000000000000010000000E00003700000071010000AF0C00000001000000010000000E00001A01000076010000BB0C00000002000000010000000E0000FD0100007A010000C60C00000003000000010000000E0000E00200007E010000D00C00000004000000010000000E0000C303000081010000D90C00000005000000010000000E0000A604000084010000E10C00000006000000010000000E00008905000087010000E90C00000007000000010000000E00006C06000089010000F00C00000008000000010000000E00004E0700008B010000F70C00000009000000010000000E0000300800008C010000FE0C0000000A000000010000000E0000120900008D010000040D0000000B000000010000000E0000F30900008D0100000B0D0000000C000000010000000E0000D40A00008E010000110D0000000D000000010000000E0000B40B00008E010000180D0000000E000000010000000E0000940C00008E0100001F0D0000000F000000010000000E0000730D00008D010000260D00000010000000010000000E0000520E00008C0100002E0D00000000000000020000000E00005200000063020000C30C00000001000000020000000E00003501000068020000CF0C00000002000000020000000E0000180200006D020000DA0C00000003000000020000000E0000FC02000071020000E40C00000004000000020000000E0000DF03000075020000ED0C00000005000000020000000E0000C204000078020000F50C00000006000000020000000E0000A50500007B020000FD0C00000007000000020000000E0000880600007D020000040D00000008000000020000000E00006B070000800200000B0D00000009000000020000000E00004D08000081020000120D0000000A000000020000000E00002F09000083020000180D0000000B000000020000000E0000110A0000840200001F0D0000000C000000020000000E0000F20A000085020000250D0000000D000000020000000E0000D20B0000850200002C0D0000000E000000020000000E0000B20C000085020000330D0000000F000000020000000E0000910D0000850200003A0D00000010000000020000000E0000700E000085020000420D00000000000000030000000E00006C00000054030000D50C00000001000000030000000E00004F0100005A030000E10C00000002000000030000000E0000330200005F030000EC0C00000003000000030000000E00001703000064030000F60C00000004000000030000000E0000FA03000068030000FF0C00000005000000030000000E0000DE0400006C030000080D00000006000000030000000E0000C10500006F0300000F0D00000007000000030000000E0000A406000072030000170D00000008000000030000000E000087070000750300001D0D00000009000000030000000E00006A08000077030000240D0000000A000000030000000E00004C090000790300002B0D0000000B000000030000000E00002D0A00007A030000310D0000000C000000030000000E00000F0B00007B030000370D0000000D000000030000000E0000F00B00007C0300003E0D0000000E000000030000000E0000D00C00007D030000450D0000000F000000030000000E0000AF0D00007D0300004D0D00000010000000030000000E00008E0E00007D030000540D00000000000000040000000E00008600000045040000E60C00000001000000040000000E00006A0100004C040000F20C00000002000000040000000E00004D02000051040000FD0C00000003000000040000000E00003103000056040000070D00000004000000040000000E0000150400005B040000100D00000005000000040000000E0000F90400005F040000180D00000006000000040000000E0000DC05000063040000200D00000007000000040000000E0000C006000066040000270D00000008000000040000000E0000A3070000690400002E0D00000009000000040000000E0000860800006C040000350D0000000A000000040000000E0000680900006E0400003B0D0000000B000000040000000E00004A0A000070040000420D0000000C000000040000000E00002B0B000072040000480D0000000D000000040000000E00000C0C0000730400004F0D0000000E000000040000000E0000ED0C000075040000560D0000000F000000040000000E0000CD0D0000750400005D0D00000010000000040000000E0000AC0E000076040000650D00000000000000050000000E00009F00000036050000F60C00000001000000050000000E0000830100003D050000020D00000002000000050000000E000067020000430500000C0D00000003000000050000000E00004C03000049050000160D00000004000000050000000E0000300400004E0500001F0D00000005000000050000000E00001405000052050000280D00000006000000050000000E0000F705000057050000300D00000007000000050000000E0000DB0600005B050000370D00000008000000050000000E0000BE0700005E0500003E0D00000009000000050000000E0000A108000061050000440D0000000A000000050000000E000084090000640500004B0D0000000B000000050000000E0000660A000066050000510D0000000C000000050000000E0000480B000068050000580D0000000D000000050000000E0000290C00006A0500005E0D0000000E000000050000000E00000A0D00006C050000650D0000000F000000050000000E0000EA0D00006D0500006D0D00000010000000050000000E0000C90E00006E050000750D00000000000000060000000E0000B900000027060000040D00000001000000060000000E00009D0100002E060000100D00000002000000060000000E000081020000350600001B0D00000003000000060000000E0000650300003B060000250D00000004000000060000000E00004A040000400600002E0D00000005000000060000000E00002E05000045060000360D00000006000000060000000E0000120600004A0600003E0D00000007000000060000000E0000F60600004E060000450D00000008000000060000000E0000D9070000520600004C0D00000009000000060000000E0000BD08000056060000530D0000000A000000060000000E00009F09000059060000590D0000000B000000060000000E0000820A00005C0600005F0D0000000C000000060000000E0000640B00005E060000660D0000000D000000060000000E0000450C0000610600006D0D0000000E000000060000000E0000260D000063060000740D0000000F000000060000000E0000070E0000640600007B0D00000010000000060000000E0000E60E000066060000830D00000000000000070000000E0000D200000017070000120D00000001000000070000000E0000B60100001F0700001E0D00000002000000070000000E00009B02000026070000280D00000003000000070000000E00007F0300002C070000320D00000004000000070000000E000064040000320700003B0D00000005000000070000000E00004805000038070000440D00000006000000070000000E00002C0600003D0700004B0D00000007000000070000000E00001007000042070000530D00000008000000070000000E0000F4070000460700005A0D00000009000000070000000E0000D80800004A070000600D0000000A000000070000000E0000BB0900004E070000670D0000000B000000070000000E00009E0A0000510700006D0D0000000C000000070000000E0000800B000054070000730D0000000D000000070000000E0000610C0000570700007A0D0000000E000000070000000E0000430D000059070000810D0000000F000000070000000E0000230E00005B070000880D00000010000000070000000E0000030F00005D070000900D00000000000000080000000E0000EA000000060800001F0D00000001000000080000000E0000CF0100000E0800002B0D00000002000000080000000E0000B402000016080000350D00000003000000080000000E0000990300001D0800003F0D00000004000000080000000E00007D04000023080000480D00000005000000080000000E00006205000029080000510D00000006000000080000000E0000470600002F080000580D00000007000000080000000E00002B07000034080000600D00000008000000080000000E00000F08000039080000660D00000009000000080000000E0000F30800003D0800006D0D0000000A000000080000000E0000D609000041080000730D0000000B000000080000000E0000B90A0000450800007A0D0000000C000000080000000E00009B0B000048080000800D0000000D000000080000000E00007D0C00004C080000870D0000000E000000080000000E00005F0D00004F0800008E0D0000000F000000080000000E00003F0E000051080000950D00000010000000080000000E00001F0F0000530800009D0D00000000000000090000000E000003010000F50800002B0D00000001000000090000000E0000E8010000FD080000370D00000002000000090000000E0000CD02000005090000420D00000003000000090000000E0000B20300000C0900004C0D00000004000000090000000E00009704000013090000550D00000005000000090000000E00007C0500001A0900005D0D00000006000000090000000E00006106000020090000650D00000007000000090000000E000045070000250900006C0D00000008000000090000000E0000290800002B090000730D00000009000000090000000E00000D090000300900007A0D0000000A000000090000000E0000F109000034090000800D0000000B000000090000000E0000D40A000038090000860D0000000C000000090000000E0000B70B00003C0900008D0D0000000D000000090000000E0000990C000040090000930D0000000E000000090000000E00007B0D0000430900009A0D0000000F000000090000000E00005C0E000046090000A20D00000010000000090000000E00003C0F000049090000AA0D000000000000000A0000000E00001C010000E2090000380D000000010000000A0000000E000001020000EB090000440D000000020000000A0000000E0000E6020000F30900004E0D000000030000000A0000000E0000CB030000FB090000580D000000040000000A0000000E0000B1040000020A0000610D000000050000000A0000000E000096050000090A00006A0D000000060000000A0000000E00007B060000100A0000710D000000070000000A0000000E00005F070000160A0000790D000000080000000A0000000E0000440800001B0A00007F0D000000090000000A0000000E000028090000210A0000860D0000000A0000000A0000000E00000C0A0000260A00008C0D0000000B0000000A0000000E0000EF0A00002A0A0000930D0000000C0000000A0000000E0000D20B00002F0A0000990D0000000D0000000A0000000E0000B50C0000330A0000A00D0000000E0000000A0000000E0000970D0000370A0000A70D0000000F0000000A0000000E0000780E00003A0A0000AE0D000000100000000A0000000E0000580F00003D0A0000B60D000000000000000B0000000E000034010000CE0A0000440D000000010000000B0000000E000019020000D70A0000500D000000020000000B0000000E0000FF020000E00A00005B0D000000030000000B0000000E0000E4030000E80A0000650D000000040000000B0000000E0000CA040000F00A00006E0D000000050000000B0000000E0000AF050000F70A0000760D000000060000000B0000000E000095060000FE0A00007E0D000000070000000B0000000E00007A070000050B0000850D000000080000000B0000000E00005E0800000B0B00008C0D000000090000000B0000000E000043090000110B0000930D0000000A0000000B0000000E0000270A0000160B0000990D0000000B0000000B0000000E00000A0B00001B0B00009F0D0000000C0000000B0000000E0000EE0B0000200B0000A60D0000000D0000000B0000000E0000D00C0000250B0000AC0D0000000E0000000B0000000E0000B20D0000290B0000B30D0000000F0000000B0000000E0000940E00002D0B0000BB0D000000100000000B0000000E0000750F0000300B0000C30D000000000000000C0000000E00004C010000B90B0000510D000000010000000C0000000E000032020000C20B00005D0D000000020000000C0000000E000018030000CB0B0000680D000000030000000C0000000E0000FE030000D40B0000720D000000040000000C0000000E0000E3040000DC0B00007B0D000000050000000C0000000E0000C9050000E40B0000830D000000060000000C0000000E0000AE060000EC0B00008B0D000000070000000C0000000E000094070000F30B0000920D000000080000000C0000000E000079080000F90B0000990D000000090000000C0000000E00005D090000FF0B00009F0D0000000A0000000C0000000E0000420A0000050C0000A60D0000000B0000000C0000000E0000260B00000B0C0000AC0D0000000C0000000C0000000E0000090C0000100C0000B30D0000000D0000000C0000000E0000EC0C0000150C0000B90D0000000E0000000C0000000E0000CE0D00001A0C0000C00D0000000F0000000C0000000E0000B00E00001E0C0000C80D000000100000000C0000000E0000910F0000220C0000CF0D000000000000000D0000000E000065010000A10C00005F0D000000010000000D0000000E00004B020000AC0C00006B0D000000020000000D0000000E000031030000B50C0000760D000000030000000D0000000E000017040000BE0C00007F0D000000040000000D0000000E0000FD040000C70C0000880D000000050000000D0000000E0000E3050000CF0C0000910D000000060000000D0000000E0000C8060000D70C0000980D000000070000000D0000000E0000AE070000DF0C0000A00D000000080000000D0000000E000093080000E60C0000A60D000000090000000D0000000E000078090000EC0C0000AD0D0000000A0000000D0000000E00005D0A0000F30C0000B30D0000000B0000000D0000000E0000410B0000F90C0000BA0D0000000C0000000D0000000E0000240C0000FE0C0000C00D0000000D0000000D0000000E0000070D0000040D0000C70D0000000E0000000D0000000E0000EA0D0000090D0000CE0D0000000F0000000D0000000E0000CC0E00000E0D0000D50D000000100000000D0000000E0000AD0F0000120D0000DD0D000000000000000E0000000E00007E010000890D00006D0D000000010000000E0000000E000064020000930D0000790D000000020000000E0000000E00004A0300009D0D0000840D000000030000000E0000000E000030040000A70D00008E0D000000040000000E0000000E000016050000B00D0000970D000000050000000E0000000E0000FC050000B90D00009F0D000000060000000E0000000E0000E2060000C10D0000A70D000000070000000E0000000E0000C8070000C90D0000AE0D000000080000000E0000000E0000AE080000D00D0000B50D000000090000000E0000000E000093090000D80D0000BB0D0000000A0000000E0000000E0000770A0000DE0D0000C20D0000000B0000000E0000000E00005C0B0000E50D0000C80D0000000C0000000E0000000E0000400C0000EB0D0000CE0D0000000D0000000E0000000E0000230D0000F10D0000D50D0000000E0000000E0000000E0000060E0000F60D0000DC0D0000000F0000000E0000000E0000E80E0000FB0D0000E30D000000100000000E0000000E0000C90F0000010E0000EB0D000000000000000F0000000E0000960100006E0E00007D0D000000010000000F0000000E00007D020000790E0000880D000000020000000F0000000E000063030000830E0000930D000000030000000F0000000E00004A0400008E0E00009D0D000000040000000F0000000E000030050000970E0000A60D000000050000000F0000000E000016060000A00E0000AE0D000000060000000F0000000E0000FD060000A90E0000B60D000000070000000F0000000E0000E3070000B10E0000BD0D000000080000000F0000000E0000C8080000B90E0000C40D000000090000000F0000000E0000AE090000C10E0000CB0D0000000A0000000F0000000E0000930A0000C80E0000D10D0000000B0000000F0000000E0000770B0000CF0E0000D70D0000000C0000000F0000000E00005B0C0000D50E0000DE0D0000000D0000000F0000000E00003F0D0000DC0E0000E40D0000000E0000000F0000000E0000220E0000E20E0000EB0D0000000F0000000F0000000E0000040F0000E70E0000F30D000000100000000F0000000E0000E60F0000ED0E0000FA0D00000000000000100000000E0000AF010000510F00008D0D00000001000000100000000E0000960200005D0F0000990D00000002000000100000000E00007D030000680F0000A40D00000003000000100000000E000063040000720F0000AE0D00000004000000100000000E00004A0500007C0F0000B70D00000005000000100000000E000031060000860F0000BF0D00000006000000100000000E0000170700008F0F0000C70D00000007000000100000000E0000FD070000980F0000CE0D00000008000000100000000E0000E3080000A00F0000D50D00000009000000100000000E0000C9090000A80F0000DB0D0000000A000000100000000E0000AE0A0000B00F0000E20D0000000B000000100000000E0000930B0000B70F0000E80D0000000C000000100000000E0000770C0000BE0F0000EE0D0000000D000000100000000E00005B0D0000C50F0000F50D0000000E000000100000000E00003E0E0000CB0F0000FC0D0000000F000000100000000E0000210F0000D10F0000030E00000010000000100000000E0000FF0F0000D70F00000B0E00000000000000000000000F00002100000087000000760D00000001000000000000000F0000050100008C000000820D00000002000000000000000F0000E80100008F0000008E0D00000003000000000000000F0000CC02000093000000980D00000004000000000000000F0000AF03000096000000A20D00000005000000000000000F00009204000098000000AB0D00000006000000000000000F0000760500009A000000B30D00000007000000000000000F0000590600009C000000BB0D00000008000000000000000F00003B0700009D000000C30D00000009000000000000000F00001E0800009E000000CA0D0000000A000000000000000F0000000900009F000000D10D0000000B000000000000000F0000E10900009F000000D80D0000000C000000000000000F0000C20A00009F000000DF0D0000000D000000000000000F0000A30B00009E000000E60D0000000E000000000000000F0000830C00009E000000EE0D0000000F000000000000000F0000620D00009D000000F60D00000010000000000000000F0000410E00009C000000FE0D00000000000000010000000F00003D000000790100008D0D00000001000000010000000F0000200100007E010000990D00000002000000010000000F00000402000082010000A50D00000003000000010000000F0000E802000086010000AF0D00000004000000010000000F0000CB03000089010000B90D00000005000000010000000F0000AF0400008C010000C20D00000006000000010000000F0000920500008F010000CA0D00000007000000010000000F00007506000091010000D20D00000008000000010000000F00005807000092010000DA0D00000009000000010000000F00003B08000094010000E10D0000000A000000010000000F00001D09000095010000E80D0000000B000000010000000F0000FF09000095010000EF0D0000000C000000010000000F0000E00A000096010000F60D0000000D000000010000000F0000C10B000096010000FD0D0000000E000000010000000F0000A10C000095010000050E0000000F000000010000000F0000810D0000950100000D0E00000010000000010000000F0000600E000094010000160E00000000000000020000000F0000570000006B020000A20D00000001000000020000000F00003B01000070020000AF0D00000002000000020000000F00001F02000075020000BA0D00000003000000020000000F00000303000079020000C50D00000004000000020000000F0000E70300007D020000CE0D00000005000000020000000F0000CB04000080020000D70D00000006000000020000000F0000AE05000083020000E00D00000007000000020000000F00009206000086020000E70D00000008000000020000000F00007507000088020000EF0D00000009000000020000000F00005808000089020000F60D0000000A000000020000000F00003A0900008B020000FD0D0000000B000000020000000F00001C0A00008C020000040E0000000C000000020000000F0000FE0A00008D0200000B0E0000000D000000020000000F0000DF0B00008D020000130E0000000E000000020000000F0000BF0C00008D0200001A0E0000000F000000020000000F00009F0D00008D020000220E00000010000000020000000F00007E0E00008D0200002B0E00000000000000030000000F0000720000005C030000B60D00000001000000030000000F00005601000062030000C20D00000002000000030000000F00003A02000067030000CE0D00000003000000030000000F00001E0300006C030000D80D00000004000000030000000F00000204000070030000E20D00000005000000030000000F0000E604000074030000EB0D00000006000000030000000F0000CA05000078030000F30D00000007000000030000000F0000AE0600007A030000FB0D00000008000000030000000F0000910700007D030000020E00000009000000030000000F0000740800007F030000090E0000000A000000030000000F00005709000081030000110E0000000B000000030000000F0000390A000083030000180E0000000C000000030000000F00001B0B0000840300001F0E0000000D000000030000000F0000FC0B000085030000260E0000000E000000030000000F0000DD0C0000860300002D0E0000000F000000030000000F0000BD0D000086030000350E00000010000000030000000F00009D0E0000860300003E0E00000000000000040000000F00008C0000004E040000C70D00000001000000040000000F00007001000054040000D40D00000002000000040000000F0000540200005A040000DF0D00000003000000040000000F0000390300005F040000EA0D00000004000000040000000F00001D04000064040000F40D00000005000000040000000F00000105000068040000FD0D00000006000000040000000F0000E60500006C040000050E00000007000000040000000F0000C90600006F0400000D0E00000008000000040000000F0000AD07000072040000140E00000009000000040000000F000090080000750400001B0E0000000A000000040000000F00007309000077040000220E0000000B000000040000000F0000560A000079040000290E0000000C000000040000000F0000380B00007B040000300E0000000D000000040000000F0000190C00007C040000380E0000000E000000040000000F0000FA0C00007E0400003F0E0000000F000000040000000F0000DB0D00007E040000470E00000010000000040000000F0000BA0E00007F040000500E00000000000000050000000F0000A500000040050000D80D00000001000000050000000F00008A01000046050000E50D00000002000000050000000F00006F0200004C050000F00D00000003000000050000000F00005303000052050000FA0D00000004000000050000000F00003804000057050000040E00000005000000050000000F00001C0500005C0500000D0E00000006000000050000000F00000106000060050000150E00000007000000050000000F0000E5060000640500001D0E00000008000000050000000F0000C807000067050000250E00000009000000050000000F0000AC0800006B0500002C0E0000000A000000050000000F00008F0900006D050000330E0000000B000000050000000F0000720A0000700500003A0E0000000C000000050000000F0000540B000072050000410E0000000D000000050000000F0000360C000074050000480E0000000E000000050000000F0000170D000075050000500E0000000F000000050000000F0000F80D000077050000580E00000010000000050000000F0000D70E000078050000600E00000000000000060000000F0000BF00000031060000E80D00000001000000060000000F0000A401000038060000F40D00000002000000060000000F0000880200003E060000FF0D00000003000000060000000F00006D030000440600000A0E00000004000000060000000F0000520400004A060000140E00000005000000060000000F0000370500004F0600001D0E00000006000000060000000F00001B06000054060000250E00000007000000060000000F000000070000580600002D0E00000008000000060000000F0000E40700005C060000340E00000009000000060000000F0000C7080000600600003B0E0000000A000000060000000F0000AB09000063060000420E0000000B000000060000000F00008E0A000066060000490E0000000C000000060000000F0000700B000068060000500E0000000D000000060000000F0000520C00006B060000580E0000000E000000060000000F0000340D00006D0600005F0E0000000F000000060000000F0000140E00006E060000670E00000010000000060000000F0000F40E000070060000700E00000000000000070000000F0000D800000021070000F60D00000001000000070000000F0000BD01000029070000030E00000002000000070000000F0000A2020000300700000E0E00000003000000070000000F00008703000036070000190E00000004000000070000000F00006C0400003C070000220E00000005000000070000000F000051050000420700002B0E00000006000000070000000F00003606000047070000330E00000007000000070000000F00001A0700004C0700003B0E00000008000000070000000F0000FF07000050070000430E00000009000000070000000F0000E3080000540700004A0E0000000A000000070000000F0000C609000058070000510E0000000B000000070000000F0000A90A00005B070000580E0000000C000000070000000F00008C0B00005E0700005F0E0000000D000000070000000F00006E0C000061070000660E0000000E000000070000000F0000500D0000630700006E0E0000000F000000070000000F0000310E000065070000760E00000010000000070000000F0000110F0000670700007E0E00000000000000080000000F0000F100000011080000040E00000001000000080000000F0000D601000019080000110E00000002000000080000000F0000BB020000200800001C0E00000003000000080000000F0000A103000027080000270E00000004000000080000000F0000860400002E080000300E00000005000000080000000F00006B05000034080000390E00000006000000080000000F00005006000039080000420E00000007000000080000000F0000350700003E080000490E00000008000000080000000F00001908000043080000510E00000009000000080000000F0000FE08000048080000580E0000000A000000080000000F0000E10900004C0800005F0E0000000B000000080000000F0000C50A000050080000660E0000000C000000080000000F0000A80B0000530800006D0E0000000D000000080000000F00008A0C000056080000740E0000000E000000080000000F00006C0D0000590800007C0E0000000F000000080000000F00004D0E00005C080000840E00000010000000080000000F00002E0F00005E0800008C0E00000000000000090000000F00000A01000000090000120E00000001000000090000000F0000EF010000080900001F0E00000002000000090000000F0000D5020000100900002A0E00000003000000090000000F0000BA03000017090000340E00000004000000090000000F0000A00400001E0900003E0E00000005000000090000000F00008505000025090000470E00000006000000090000000F00006A0600002B0900004F0E00000007000000090000000F00004F07000030090000570E00000008000000090000000F000034080000360900005E0E00000009000000090000000F0000180900003A090000660E0000000A000000090000000F0000FC0900003F0900006C0E0000000B000000090000000F0000E00A000043090000730E0000000C000000090000000F0000C30B0000470900007A0E0000000D000000090000000F0000A60C00004B090000820E0000000E000000090000000F0000880D00004E090000890E0000000F000000090000000F0000690E000051090000910E00000010000000090000000F00004A0F0000540900009A0E000000000000000A0000000F000022010000ED090000200E000000010000000A0000000F000008020000F60900002C0E000000020000000A0000000F0000EE020000FE090000380E000000030000000A0000000F0000D3030000060A0000420E000000040000000A0000000F0000B90400000E0A00004C0E000000050000000A0000000F00009F050000150A0000540E000000060000000A0000000F0000840600001B0A00005D0E000000070000000A0000000F000069070000210A0000650E000000080000000A0000000F00004E080000270A00006C0E000000090000000A0000000F0000330900002C0A0000730E0000000A0000000A0000000F0000170A0000310A00007A0E0000000B0000000A0000000F0000FB0A0000360A0000810E0000000C0000000A0000000F0000DF0B00003A0A0000880E0000000D0000000A0000000F0000C20C00003E0A00008F0E0000000E0000000A0000000F0000A40D0000420A0000970E0000000F0000000A0000000F0000860E0000450A00009F0E000000100000000A0000000F0000670F0000490A0000A70E000000000000000B0000000F00003B010000DA0A00002D0E000000010000000B0000000F000021020000E30A00003A0E000000020000000B0000000F000007030000EC0A0000450E000000030000000B0000000F0000ED030000F40A0000500E000000040000000B0000000F0000D3040000FC0A0000590E000000050000000B0000000F0000B8050000030B0000620E000000060000000B0000000F00009E0600000A0B00006A0E000000070000000B0000000F000084070000110B0000720E000000080000000B0000000F000069080000170B00007A0E000000090000000B0000000F00004E0900001D0B0000810E0000000A0000000B0000000F0000320A0000220B0000880E0000000B0000000B0000000F0000160B0000270B00008F0E0000000C0000000B0000000F0000FA0B00002C0B0000960E0000000D0000000B0000000F0000DD0C0000300B00009D0E0000000E0000000B0000000F0000C00D0000350B0000A40E0000000F0000000B0000000F0000A20E0000380B0000AC0E000000100000000B0000000F0000830F00003C0B0000B50E000000000000000C0000000F000053010000C50B00003B0E000000010000000C0000000F000039020000CE0B0000480E000000020000000C0000000F000020030000D80B0000530E000000030000000C0000000F000006040000E00B00005E0E000000040000000C0000000F0000EC040000E90B0000670E000000050000000C0000000F0000D2050000F00B0000700E000000060000000C0000000F0000B8060000F80B0000780E000000070000000C0000000F00009E070000FF0B0000800E000000080000000C0000000F000083080000050C0000880E000000090000000C0000000F0000680900000B0C00008F0E0000000A0000000C0000000F00004D0A0000110C0000960E0000000B0000000C0000000F0000320B0000170C00009D0E0000000C0000000C0000000F0000150C00001C0C0000A40E0000000D0000000C0000000F0000F90C0000210C0000AB0E0000000E0000000C0000000F0000DC0D0000260C0000B20E0000000F0000000C0000000F0000BE0E00002A0C0000BA0E000000100000000C0000000F00009F0F00002E0C0000C30E000000000000000D0000000F00006C010000AE0C00004A0E000000010000000D0000000F000052020000B80C0000560E000000020000000D0000000F000039030000C20C0000620E000000030000000D0000000F00001F040000CB0C00006C0E000000040000000D0000000F000006050000D40C0000760E000000050000000D0000000F0000EC050000DC0C00007F0E000000060000000D0000000F0000D2060000E40C0000870E000000070000000D0000000F0000B8070000EB0C00008F0E000000080000000D0000000F00009E080000F20C0000960E000000090000000D0000000F000083090000F90C00009D0E0000000A0000000D0000000F0000680A0000FF0C0000A40E0000000B0000000D0000000F00004D0B0000050D0000AB0E0000000C0000000D0000000F0000310C00000B0D0000B20E0000000D0000000D0000000F0000140D0000100D0000B90E0000000E0000000D0000000F0000F70D0000150D0000C10E0000000F0000000D0000000F0000DA0E00001A0D0000C90E000000100000000D0000000F0000BB0F00001F0D0000D10E000000000000000E0000000F000085010000960D00005A0E000000010000000E0000000F00006B020000A00D0000660E000000020000000E0000000F000052030000AA0D0000710E000000030000000E0000000F000039040000B40D00007C0E000000040000000E0000000F00001F050000BD0D0000850E000000050000000E0000000F000006060000C60D00008E0E000000060000000E0000000F0000EC060000CE0D0000960E000000070000000E0000000F0000D2070000D60D00009E0E000000080000000E0000000F0000B8080000DD0D0000A60E000000090000000E0000000F00009E090000E40D0000AD0E0000000A0000000E0000000F0000830A0000EB0D0000B40E0000000B0000000E0000000F0000680B0000F20D0000BA0E0000000C0000000E0000000F00004C0C0000F80D0000C10E0000000D0000000E0000000F0000300D0000FE0D0000C90E0000000E0000000E0000000F0000130E0000030E0000D00E0000000F0000000E0000000F0000F60E0000080E0000D80E000000100000000E0000000F0000D80F00000D0E0000E00E000000000000000F0000000F00009E0100007B0E00006A0E000000010000000F0000000F000084020000860E0000760E000000020000000F0000000F00006B030000910E0000820E000000030000000F0000000F0000520400009B0E00008C0E000000040000000F0000000F000039050000A40E0000960E000000050000000F0000000F000020060000AE0E00009F0E000000060000000F0000000F000006070000B60E0000A70E000000070000000F0000000F0000ED070000BF0E0000AF0E000000080000000F0000000F0000D3080000C70E0000B60E000000090000000F0000000F0000B9090000CE0E0000BD0E0000000A0000000F0000000F00009E0A0000D50E0000C40E0000000B0000000F0000000F0000830B0000DC0E0000CB0E0000000C0000000F0000000F0000680C0000E30E0000D20E0000000D0000000F0000000F00004C0D0000E90E0000D90E0000000E0000000F0000000F00002F0E0000EF0E0000E00E0000000F0000000F0000000F0000120F0000F50E0000E80E000000100000000F0000000F0000F40F0000FA0E0000F10E00000000000000100000000F0000B70100005F0F00007C0E00000001000000100000000F00009E0200006A0F0000880E00000002000000100000000F000085030000750F0000940E00000003000000100000000F00006C040000800F00009E0E00000004000000100000000F0000530500008A0F0000A80E00000005000000100000000F00003A060000930F0000B00E00000006000000100000000F0000210700009D0F0000B90E00000007000000100000000F000007080000A50F0000C00E00000008000000100000000F0000EE080000AE0F0000C80E00000009000000100000000F0000D4090000B60F0000CF0E0000000A000000100000000F0000BA0A0000BD0F0000D60E0000000B000000100000000F00009F0B0000C50F0000DD0E0000000C000000100000000F0000840C0000CC0F0000E40E0000000D000000100000000F0000680D0000D20F0000EB0E0000000E000000100000000F00004C0E0000D90F0000F20E0000000F000000100000000F00002F0F0000DF0F0000FA0E00000010000000100000000F0000FF0F0000E50F0000020F00000000000000000000001000002A0000008E000000530E00000001000000000000001000000E01000092000000600E0000000200000000000000100000F2010000960000006C0E0000000300000000000000100000D602000099000000770E0000000400000000000000100000BA0300009C000000810E00000005000000000000001000009D0400009F0000008B0E000000060000000000000010000081050000A1000000940E000000070000000000000010000065060000A30000009C0E000000080000000000000010000048070000A4000000A40E00000009000000000000001000002B080000A5000000AC0E0000000A000000000000001000000D090000A5000000B40E0000000B00000000000000100000EF090000A6000000BB0E0000000C00000000000000100000D10A0000A6000000C30E0000000D00000000000000100000B20B0000A5000000CB0E0000000E00000000000000100000930C0000A5000000D30E0000000F00000000000000100000730D0000A4000000DC0E0000001000000000000000100000520E0000A3000000E50E000000000000000100000010000045000000800100006B0E00000001000000010000001000002901000085010000780E00000002000000010000001000000D02000089010000840E0000000300000001000000100000F20200008D0100008F0E0000000400000001000000100000D603000090010000990E0000000500000001000000100000BA04000093010000A30E00000006000000010000001000009E05000096010000AC0E00000007000000010000001000008206000098010000B40E00000008000000010000001000006507000099010000BC0E0000000900000001000000100000480800009B010000C40E0000000A000000010000001000002B0900009C010000CC0E0000000B000000010000001000000D0A00009D010000D30E0000000C00000001000000100000EF0A00009D010000DB0E0000000D00000001000000100000D10B00009D010000E30E0000000E00000001000000100000B10C00009D010000EB0E0000000F00000001000000100000920D00009C010000F40E0000001000000001000000100000710E00009C010000FD0E00000000000000020000001000006000000072020000810E000000010000000200000010000044010000770200008E0E0000000200000002000000100000290200007C0200009A0E00000003000000020000001000000D03000080020000A50E0000000400000002000000100000F203000084020000B00E0000000500000002000000100000D604000088020000B90E0000000600000002000000100000BA0500008A020000C20E00000007000000020000001000009E0600008D020000CB0E0000000800000002000000100000820700008F020000D30E00000009000000020000001000006508000091020000DA0E0000000A000000020000001000004809000092020000E20E0000000B000000020000001000002B0A000094020000EA0E0000000C000000020000001000000D0B000094020000F10E0000000D00000002000000100000EE0B000095020000F90E0000000E00000002000000100000CF0C000095020000010F0000000F00000002000000100000B00D0000950200000A0F00000010000000020000001000008F0E000095020000130F00000000000000030000001000007A00000064030000960E00000001000000030000001000005F0100006A030000A30E0000000200000003000000100000440200006F030000AF0E00000003000000030000001000002803000074030000BA0E00000004000000030000001000000D04000078030000C40E0000000500000003000000100000F10400007C030000CE0E0000000600000003000000100000D60500007F030000D70E0000000700000003000000100000BA06000082030000DF0E00000008000000030000001000009E07000085030000E70E00000009000000030000001000008208000087030000EF0E0000000A000000030000001000006509000089030000F70E0000000B00000003000000100000480A00008B030000FE0E0000000C000000030000001000002A0B00008C030000060F0000000D000000030000001000000C0C00008D0300000E0F0000000E00000003000000100000ED0C00008E030000160F0000000F00000003000000100000CE0D00008E0300001E0F0000001000000003000000100000AD0E00008E030000270F00000000000000040000001000009400000056040000A90E0000000100000004000000100000790100005D040000B60E00000002000000040000001000005E02000062040000C20E00000003000000040000001000004303000067040000CD0E0000000400000004000000100000280400006C040000D70E00000005000000040000001000000D05000070040000E10E0000000600000004000000100000F105000074040000EA0E0000000700000004000000100000D606000078040000F20E0000000800000004000000100000BA0700007B040000FA0E00000009000000040000001000009E0800007D040000020F0000000A000000040000001000008109000080040000090F0000000B00000004000000100000640A000082040000110F0000000C00000004000000100000470B000083040000190F0000000D00000004000000100000290C000085040000200F0000000E000000040000001000000A0D000086040000290F0000000F00000004000000100000EB0D000087040000310F0000001000000004000000100000CB0E0000870400003A0F0000000000000005000000100000AE00000048050000BA0E0000000100000005000000100000930100004F050000C80E00000002000000050000001000007802000055050000D40E00000003000000050000001000005D0300005B050000DF0E00000004000000050000001000004304000060050000E90E00000005000000050000001000002805000065050000F20E00000006000000050000001000000C06000069050000FB0E0000000700000005000000100000F10600006D050000040F0000000800000005000000100000D5070000700500000C0F0000000900000005000000100000B908000073050000130F0000000A000000050000001000009D090000760500001B0F0000000B00000005000000100000800A000079050000230F0000000C00000005000000100000630B00007B0500002A0F0000000D00000005000000100000450C00007D050000320F0000000E00000005000000100000270D00007E0500003A0F0000000F00000005000000100000080E00007F050000430F0000001000000005000000100000E80E0000800500004C0F0000000000000006000000100000C80000003A060000CB0E0000000100000006000000100000AD01000041060000D80E00000002000000060000001000009202000047060000E40E0000000300000006000000100000780300004D060000EF0E00000004000000060000001000005D04000053060000F90E00000005000000060000001000004205000058060000030F0000000600000006000000100000270600005D0600000C0F00000007000000060000001000000C07000061060000140F0000000800000006000000100000F1070000650600001C0F0000000900000006000000100000D508000069060000240F0000000A00000006000000100000B90900006C0600002C0F0000000B000000060000001000009C0A00006F060000330F0000000C000000060000001000007F0B0000710600003B0F0000000D00000006000000100000620C000074060000430F0000000E00000006000000100000440D0000760600004B0F0000000F00000006000000100000250E000077060000530F0000001000000006000000100000050F0000790600005C0F0000000000000007000000100000E10000002B070000DB0E0000000100000007000000100000C601000032070000E80E0000000200000007000000100000AC02000039070000F40E00000003000000070000001000009103000040070000FF0E00000004000000070000001000007704000046070000090F00000005000000070000001000005C0500004B070000130F000000060000000700000010000042060000500700001C0F00000007000000070000001000002707000055070000240F00000008000000070000001000000C0800005A0700002C0F0000000900000007000000100000F00800005E070000340F0000000A00000007000000100000D4090000610700003B0F0000000B00000007000000100000B80A000065070000430F0000000C000000070000001000009B0B0000680700004A0F0000000D000000070000001000007E0C00006A070000520F0000000E00000007000000100000600D00006D0700005A0F0000000F00000007000000100000410E00006F070000630F0000001000000007000000100000220F0000710700006C0F0000000000000008000000100000FA0000001B080000EA0E0000000100000008000000100000E001000023080000F70E0000000200000008000000100000C50200002A080000030F0000000300000008000000100000AB030000310800000E0F00000004000000080000001000009104000038080000180F0000000500000008000000100000770500003E080000220F00000006000000080000001000005C060000430800002B0F00000007000000080000001000004107000048080000330F0000000800000008000000100000260800004D0800003B0F00000009000000080000001000000B09000052080000430F0000000A00000008000000100000EF090000560800004A0F0000000B00000008000000100000D30A00005A080000520F0000000C00000008000000100000B70B00005D080000590F0000000D000000080000001000009A0C000060080000610F0000000E000000080000001000007C0D000063080000690F0000000F000000080000001000005E0E000066080000720F00000010000000080000001000003F0F0000680800007B0F0000000000000009000000100000130100000A090000F90E0000000100000009000000100000F901000012090000060F0000000200000009000000100000DF0200001A090000120F0000000300000009000000100000C5030000220900001D0F0000000400000009000000100000AB04000029090000270F0000000500000009000000100000900500002F090000310F00000006000000090000001000007606000035090000390F00000007000000090000001000005C0700003B090000420F000000080000000900000010000041080000400900004A0F00000009000000090000001000002609000045090000510F0000000A000000090000001000000A0A000049090000590F0000000B00000009000000100000EF0A00004E090000610F0000000C00000009000000100000D20B000051090000680F0000000D00000009000000100000B50C000055090000700F0000000E00000009000000100000980D000058090000780F0000000F000000090000001000007A0E00005B090000810F00000010000000090000001000005B0F00005E0900008A0F000000000000000A0000001000002B010000F8090000080F000000010000000A00000010000012020000010A0000150F000000020000000A000000100000F8020000090A0000210F000000030000000A000000100000DE030000110A00002C0F000000040000000A000000100000C4040000180A0000360F000000050000000A000000100000AA0500001F0A00003F0F000000060000000A00000010000090060000260A0000480F000000070000000A000000100000760700002C0A0000500F000000080000000A0000001000005B080000320A0000580F000000090000000A00000010000041090000370A0000600F0000000A0000000A000000100000250A00003C0A0000680F0000000B0000000A0000001000000A0B0000410A00006F0F0000000C0000000A000000100000EE0B0000450A0000770F0000000D0000000A000000100000D10C0000490A00007E0F0000000E0000000A000000100000B40D00004D0A0000870F0000000F0000000A000000100000960E0000500A00008F0F000000100000000A000000100000780F0000530A0000980F000000000000000B00000010000044010000E50A0000160F000000010000000B0000001000002A020000EE0A0000230F000000020000000B00000010000011030000F70A00002F0F000000030000000B000000100000F7030000FF0A00003A0F000000040000000B000000100000DE040000070B0000450F000000050000000B000000100000C40500000E0B00004E0F000000060000000B000000100000AA060000150B0000570F000000070000000B000000100000900700001C0B00005F0F000000080000000B00000010000076080000220B0000670F000000090000000B0000001000005B090000280B00006F0F0000000A0000000B000000100000400A00002D0B0000760F0000000B0000000B000000100000250B0000320B00007E0F0000000C0000000B000000100000090C0000370B0000850F0000000D0000000B000000100000ED0C00003B0B00008D0F0000000E0000000B000000100000D00D0000400B0000950F0000000F0000000B000000100000B20E0000440B00009E0F000000100000000B000000100000940F0000470B0000A70F000000000000000C0000001000005D010000D00B0000260F000000010000000C00000010000043020000DA0B0000330F000000020000000C0000001000002A030000E30B00003F0F000000030000000C00000010000011040000EC0B00004A0F000000040000000C000000100000F7040000F40B0000540F000000050000000C000000100000DE050000FC0B00005D0F000000060000000C000000100000C4060000030C0000660F000000070000000C000000100000AB0700000A0C00006E0F000000080000000C00000010000090080000110C0000760F000000090000000C00000010000076090000170C00007E0F0000000A0000000C0000001000005B0A00001D0C0000850F0000000B0000000C000000100000400B0000220C00008D0F0000000C0000000C000000100000240C0000280C0000940F0000000D0000000C000000100000080D00002D0C00009C0F0000000E0000000C000000100000EC0D0000310C0000A40F0000000F0000000C000000100000CE0E0000360C0000AD0F000000100000000C000000100000B00F00003A0C0000B60F000000000000000D00000010000075010000BA0C0000350F000000010000000D0000001000005C020000C40C0000420F000000020000000D00000010000043030000CE0C00004E0F000000030000000D0000001000002A040000D70C0000590F000000040000000D00000010000011050000E00C0000630F000000050000000D000000100000F8050000E80C00006D0F000000060000000D000000100000DE060000F00C0000760F000000070000000D000000100000C5070000F70C00007E0F000000080000000D000000100000AB080000FE0C0000860F000000090000000D00000010000091090000050D00008E0F0000000A0000000D000000100000760A00000B0D0000950F0000000B0000000D0000001000005B0B0000110D00009C0F0000000C0000000D000000100000400C0000170D0000A40F0000000D0000000D000000100000240D00001C0D0000AC0F0000000E0000000D000000100000070E0000210D0000B40F0000000F0000000D000000100000EA0E0000260D0000BC0F000000100000000D000000100000CC0F00002B0D0000C50F000000000000000E0000001000008E010000A20D0000460F000000010000000E00000010000075020000AD0D0000530F000000020000000E0000001000005D030000B70D00005F0F000000030000000E00000010000044040000C00D00006A0F000000040000000E0000001000002B050000C90D0000740F000000050000000E00000010000012060000D20D00007D0F000000060000000E000000100000F9060000DA0D0000860F000000070000000E000000100000DF070000E20D00008E0F000000080000000E000000100000C6080000EA0D0000960F000000090000000E000000100000AC090000F10D00009E0F0000000A0000000E000000100000910A0000F80D0000A50F0000000B0000000E000000100000770B0000FE0D0000AD0F0000000C0000000E0000001000005B0C0000040E0000B40F0000000D0000000E000000100000400D00000A0E0000BC0F0000000E0000000E000000100000230E00000F0E0000C40F0000000F0000000E000000100000060F0000150E0000CD0F000000100000000E000000100000E90F00001A0E0000D60F000000000000000F000000100000A7010000880E0000570F000000010000000F0000001000008F020000930E0000640F000000020000000F000000100000760300009E0E0000700F000000030000000F0000001000005D040000A80E00007B0F000000040000000F00000010000045050000B10E0000850F000000050000000F0000001000002C060000BA0E00008F0F000000060000000F00000010000013070000C30E0000980F000000070000000F000000100000FA070000CB0E0000A00F000000080000000F000000100000E0080000D30E0000A80F000000090000000F000000100000C7090000DB0E0000B00F0000000A0000000F000000100000AC0A0000E20E0000B70F0000000B0000000F000000100000920B0000E90E0000BE0F0000000C0000000F000000100000770C0000EF0E0000C60F0000000D0000000F0000001000005B0D0000F60E0000CE0F0000000E0000000F0000001000003F0E0000FC0E0000D60F0000000F0000000F000000100000230F0000010F0000DE0F000000100000000F000000100000FF0F0000070F0000E70F0000000000000010000000100000C00100006C0F00006A0F0000000100000010000000100000A8020000780F0000770F00000002000000100000001000008F030000830F0000830F0000000300000010000000100000770400008D0F00008E0F00000004000000100000001000005F050000970F0000980F000000050000001000000010000046060000A10F0000A20F00000006000000100000001000002D070000AA0F0000AB0F000000070000001000000010000014080000B20F0000B30F0000000800000010000000100000FB080000BB0F0000BB0F0000000900000010000000100000E2090000C30F0000C20F0000000A00000010000000100000C80A0000CA0F0000CA0F0000000B00000010000000100000AE0B0000D20F0000D10F0000000C00000010000000100000930C0000D90F0000D90F0000000D00000010000000100000770D0000DF0F0000E00F0000000E000000100000001000005C0E0000E60F0000E90F0000000F000000100000001000003F0F0000EC0F0000F10F0000001000000010000000100000FF0F0000F20F0000FA0F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D0000000000000000000000000000000000000000000000000000000004000000000000000000006D0300000D00000009000000000800000000000000000000D80600001300000006000000000C000000000000000000003E0A000013000000000000000010000000000000000000009C0D00000F0000000000000000000000000400000000000064000000AE0300000F000000000400000004000000000000D6030000C30300001900000000080000000400000000000047070000D103000016000000000C00000004000000000000B20A0000D803000010000000001000000004000000000000150E0000DB0300000C000000000000000008000000000000C3000000580700000A0000000004000000080000000000003B0400007407000014000000000800000008000000000000B00700008907000012000000000C00000008000000000000210B0000990700000B000000001000000008000000000000890E0000A40700000800000000000000000C00000000000020010000F20A00000000000000040000000C0000000000009C040000160B00000900000000080000000C00000000000017080000330B000007000000000C0000000C0000000000008D0B00004B0B00000100000000100000000C000000000000FB0E00005D0B0000000000000000000000100000000000007D010000740E000000000000000400000010000000000000FF0400009F0E0000070000000008000000100000000000007F080000C40E000006000000000C00000010000000000000FA0B0000E30E0000000000000010000000100000000000006D0F0000FD0E0000000000000000000000000000000400001B00000025000000C40300000004000000000000000400009003000033000000D70300000008000000000000000400000407000039000000DE030000000C00000000000000040000730A00003A000000E0030000001000000000000000040000DA0D000036000000E603000000000000000400000004000081000000DA030000E5030000000400000004000000040000FB030000EF030000F803000000080000000400000004000074070000FD030000FF030000000C00000004000000040000E80A00000504000002040000001000000004000000040000530E00000804000008040000000000000008000000040000E10000008A070000F203000000040000000800000004000061040000A707000004040000000800000008000000040000DE070000BC0700000C040000000C00000008000000040000570B0000CC0700000F040000001000000008000000040000C70E0000D70700001504000000000000000C0000000400003F0100002C0B0000F803000000040000000C000000040000C4040000500B00000B04000000080000000C000000040000460800006D0B000013040000000C0000000C000000040000C40B0000840B00001604000000100000000C000000040000390F0000960B00001C0400000000000000100000000400009E010000B40E00000804000000040000001000000004000027050000DF0E00001B040000000800000010000000040000AF080000040F000023040000000C00000010000000040000310C0000220F000026040000001000000010000000040000AB0F00003C0F00002D0400000000000000000000000800001A0000004C0000005F070000000400000000000000080000980300005A0000007A07000000080000000000000008000015070000610000008B070000000C000000000000000800008D0A00006200000097070000001000000000000000080000FC0D00005E000000A6070000000000000004000000080000820000000704000091070000000400000004000000080000040400001D040000AD070000000800000004000000080000860700002B040000BE070000000C00000004000000080000020B000033040000CA070000001000000004000000080000760E000037040000D9070000000000000008000000080000E4000000BE070000AF0700000004000000080000000800006B040000DB070000CB070000000800000008000000080000F1070000F1070000DC070000000C00000008000000080000710B000000080000E8070000001000000008000000080000E90E00000B080000F707000000000000000C00000008000043010000670B0000C707000000040000000C000000080000CF0400008B0B0000E407000000080000000C00000008000059080000A70B0000F4070000000C0000000C000000080000DE0B0000BE0B00000008000000100000000C0000000800005B0F0000D10B000010080000000000000010000000080000A4010000F50E0000E907000000040000001000000008000034050000200F000005080000000800000010000000080000C2080000450F000016080000000C000000100000000800004C0C0000630F000022080000001000000010000000080000CD0F00007D0F0000310800000000000000000000000C00001700000070000000DE0A00000004000000000000000C00009E0300007E000000030B00000008000000000000000C000023070000860000001D0B0000000C000000000000000C0000A40A000087000000320B00000010000000000000000C00001C0E0000830000004B0B00000000000000040000000C00008000000032040000230B00000004000000040000000C00000B04000048040000480B00000008000000040000000C00009507000056040000610B0000000C000000040000000C0000190B00005F040000770B00000010000000040000000C0000950E0000620400008F0B00000000000000080000000C0000E4000000F0070000520B00000004000000080000000C0000730400000D080000770B00000008000000080000000C00000008000022080000910B0000000C000000080000000C0000890B000032080000A60B00000010000000080000000C0000090F00003D080000BF0B000000000000000C0000000C0000450100009F0B00007C0B000000040000000C0000000C0000D8040000C30B0000A10B000000080000000C0000000C00006A080000DF0B0000BB0B0000000C0000000C0000000C0000F60B0000F60B0000D00B000000100000000C0000000C00007A0F0000080C0000E80B00000000000000100000000C0000A7010000340F0000AF0B00000004000000100000000C00003E0500005F0F0000D40B00000008000000100000000C0000D4080000830F0000EE0B0000000C000000100000000C0000640C0000A10F0000030C00000010000000100000000C0000EC0F0000BA0F00001B0C00000000000000000000001000002A0000008E000000530E0000000400000000000000100000BA0300009C000000810E000000080000000000000010000048070000A4000000A40E0000000C00000000000000100000D10A0000A6000000C30E0000001000000000000000100000520E0000A3000000E50E00000000000000040000001000009400000056040000A90E0000000400000004000000100000280400006C040000D70E0000000800000004000000100000BA0700007B040000FA0E0000000C00000004000000100000470B000083040000190F0000001000000004000000100000CB0E0000870400003A0F0000000000000008000000100000FA0000001B080000EA0E00000004000000080000001000009104000038080000180F0000000800000008000000100000260800004D0800003B0F0000000C00000008000000100000B70B00005D080000590F00000010000000080000001000003F0F0000680800007B0F000000000000000C0000001000005D010000D00B0000260F000000040000000C000000100000F7040000F40B0000540F000000080000000C00000010000090080000110C0000760F0000000C0000000C000000100000240C0000280C0000940F000000100000000C000000100000B00F00003A0C0000B60F0000000000000010000000100000C00100006C0F00006A0F00000004000000100000001000005F050000970F0000980F0000000800000010000000100000FB080000BB0F0000BB0F0000000C00000010000000100000930C0000D90F0000D90F0000001000000010000000100000FF0F0000F20F0000FA0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000400000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000003100000043000000510000005F0000006A00000070000000780000007F000000860000008D000000950000009A000000A0000000A5000000AA000000AF000000B4000000B9000000BD000000C2000000C6000000CB000000CF000000D3000000D7000000DA000000DE000000E1000000E5000000E8000000EC000000F0000000F3000000F6000000F9000000FD000000FF0000000301000006010000090100000B0100000F010000110100001401000017010000180100001C0100001E010000210100002401000026010000280100002B0100002F010000310100003401000037010000390100003B0100003D0100003F010000420100004301000046010000490100004B0100004D0100004E01000051010000530100005401000058010000590100005B0100005D0100005F010000610100006301000065010000680100006A0100006C0100006D010000700100007101000073010000750100007701000078010000790100007B0100007D0100007F0100008101000083010000840100008701000088010000890100008C0100008E0100009001000092010000930100009401000096010000980100009B0100009C0100009E0100009F010000A1010000A2010000A4010000A5010000A7010000A9010000AA010000AC010000AD010000AE010000AF010000B1010000B3010000B4010000B6010000B7010000B8010000BA010000BB010000BD010000BE010000BF010000C1010000C3010000C4010000C6010000C7010000C9010000CA010000CB010000CC010000CF010000D0010000D1010000D3010000D5010000D6010000D8010000D9010000DA010000DB010000DD010000DE010000DF010000E0010000E1010000E2010000E4010000E5010000E7010000E8010000E9010000EB010000EC010000ED010000EE010000F0010000F0010000F2010000F3010000F4010000F5010000F6010000F7010000FA010000FB010000FC010000FD010000FF0100000002000001020000020200000302000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E02000010020000110200001202000013020000130200001402000015020000160200001802000019020000190200001A0200001C0200001D0200001E02000020020000220200002202000024020000240200002502000026020000270200002802000029020000290200002A0200002B0200002C0200002D0200002E0200002F020000310200003202000034020000340200003502000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000420200004302000043020000440200004502000046020000470200004702000049020000490200004A0200004B0200004C0200004C0200004E0200004E0200004F020000500200005102000053020000530200005402000055020000570200005802000058020000580200005A0200005A0200005B0200005C0200005E0200005F020000610200006202000063020000630200006502000065020000660200006702000068020000690200006A0200006A0200006B0200006C0200006C0200006D0200006F0200006F020000710200007202000072020000730200007402000076020000760200007702000078020000780200007A0200007A0200007B0200007C0200007D0200007E0200007F0200007F0200008102000081020000820200008202000083020000840200008502000086020000860200008802000089020000890200008A0200008B0200008B0200008C0200008D0200008E0200008F0200009002000090020000910200009302000094020000940200009502000096020000960200009702000099020000990200009A0200009B0200009C0200009D0200009E0200009E0200009F020000A0020000A1020000A1020000A2020000A3020000A4020000A5020000A5020000A6020000A7020000A7020000A8020000AA020000AB020000AC020000AC020000AD020000AD020000AD020000AE020000AF020000B0020000B0020000B1020000B1020000B2020000B3020000B3020000B5020000B6020000B6020000B6020000B8020000B8020000B9020000BA020000BA020000BA020000BC020000BC020000BD020000BE020000BE020000BE020000BF020000C1020000C1020000C2020000C3020000C3020000C3020000C4020000C5020000C5020000C6020000C7020000C7020000C8020000C8020000C9020000CA020000CB020000CB020000CD020000CD020000CF020000CF020000D0020000D0020000D1020000D2020000D2020000D3020000D4020000D4020000D6020000D6020000D6020000D7020000D8020000D9020000D9020000DA020000DA020000DC020000DC020000DD020000DD020000DE020000DE020000DF020000DF020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E5020000E5020000E5020000E6020000E8020000E8020000E8020000E9020000E9020000EA020000EA020000EB020000EC020000EC020000ED020000ED020000EE020000EF020000F0020000F1020000F2020000F2020000F3020000F3020000F4020000F6020000F6020000F6020000F7020000F7020000F8020000F8020000F9020000FA020000FA020000FA020000FB020000FC020000FC020000FD020000FD020000FE020000FF0200000003000001030000010300000203000003030000030300000403000005030000070300000703000007030000080300000803000009030000090300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000F0300000F030000100300001103000011030000120300001203000013030000130300001403000015030000150300001603000016030000170300001803000019030000190300001A0300001A0300001C0300001C0300001D0300001D0300001D0300001E0300001E0300001E0300001F0300001F030000210300002103000022030000220300002203000023030000230300002403000024030000240300002503000025030000260300002603000027030000280300002803000029030000290300002A0300002A0300002A0300002B0300002C0300002C0300002E0300002E0300002E0300002F0300002F030000310300003103000031030000320300003203000032030000330300003403000034030000350300003503000036030000370300003703000037030000390300003A0300003A0300003B0300003B0300003C0300003C0300003C0300003D0300003D0300003F0300003F0300004003000041030000410300004103000041030000420300004403000044030000450300004503000046030000460300004703000047030000480300004803000048030000490300004A0300004A0300004A0300004B0300004B0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300004F030000500300005103000051030000520300005203000053030000540300005403000054030000540300005603000057030000570300005703000057030000570300005803000058030000590300005A0300005A0300005A0300005B0300005B0300005C0300005C0300005D0300005D0300005E0300005E0300005E0300005F0300005F03000061030000610300006303000063030000630300006403000064030000650300006603000066030000670300006703000068030000680300006803000069030000690300006A0300006A0300006B0300006C0300006C0300006D0300006D0300006D0300006E0300006E0300006F0300007003000070030000700300007203000072030000720300007203000073030000730300007503000075030000750300007503000075030000760300007703000077030000780300007803000078030000780300007A0300007A0300007B0300007B0300007B0300007B0300007B0300007C0300007D0300007D0300007E0300007E0300007E0300007E0300008003000080030000800300008003000081030000810300008203000082030000830300008403000084030000840300008503000085030000860300008603000086030000870300008703000089030000890300008A0300008A0300008B0300008B0300008B0300008B0300008C0300008C0300008E0300008E0300008F0300008F0300008F0300008F03000090030000900300009203000092030000930300009303000093030000940300009403000094030000950300009503000095030000960300009603000097030000980300009803000098030000990300009A0300009A0300009A0300009A0300009B0300009B0300009D0300009D0300009E0300009E0300009E0300009E0300009F030000A0030000A1030000A1030000A1030000A2030000A2030000A3030000A4030000A4030000A4030000A5030000A5030000A5030000A5030000A6030000A7030000A7030000A8030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AA030000AB030000AC030000AC030000AD030000AD030000AD030000AE030000AE030000AF030000AF030000AF030000B0030000B0030000B1030000B1030000B1030000B2030000B3030000B3030000B4030000B4030000B4030000B6030000B6030000B7030000B7030000B7030000B7030000B7030000B8030000B8030000B9030000B9030000B9030000BA030000BA030000BB030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BE030000BF030000BF030000BF030000C0030000C0030000C0030000C1030000C1030000C1030000C2030000C2030000C3030000C3030000C3030000C4030000C5030000C5030000C5030000C5030000C6030000C7030000C7030000C8030000C9030000C9030000C9030000C9030000C9030000CB030000CB030000CC030000CC030000CD030000CD030000CD030000CD030000CD030000CE030000CE030000CE030000CF030000CF030000CF030000D0030000D0030000D2030000D2030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D5030000D5030000D7030000D7030000D8030000D8030000D8030000D9030000D9030000D9030000DA030000DA030000DB030000DB030000DB030000DB030000DC030000DC030000DC030000DD030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E2030000E2030000E3030000E3030000E3030000E3030000E4030000E4030000E4030000E5030000E6030000E6030000E6030000E7030000E7030000E7030000E7030000E7030000E8030000E9030000E9030000E9030000EA030000EA030000EA030000EA030000EA030000EB030000EB030000EB030000EC030000EC030000EC030000EE030000EE030000EE030000EE030000EF030000EF030000F0030000F0030000F1030000F1030000F1030000F1030000F2030000F2030000F2030000F3030000F3030000F4030000F4030000F5030000F6030000F6030000F6030000F7030000F7030000F7030000F7030000F8030000F8030000F8030000F9030000FA030000FA030000FB030000FB030000FD030000FE030000FF0300000000000030000000400000004E0000005C000000660000006C000000740000007B000000820000008900000091000000960000009C000000A1000000A6000000AB000000B1000000B5000000B9000000BE000000C2000000C7000000CA000000CE000000D2000000D6000000D9000000DC000000E0000000E3000000E7000000EB000000EE000000F1000000F4000000F7000000F9000000FD000000000100000201000004010000080100000A0100000D010000100100001101000015010000170100001A0100001D0100001F0100002101000024010000280100002A0100002D01000030010000320100003401000036010000380100003A0100003C0100003F01000041010000430100004501000046010000490100004B0100004D01000050010000510100005301000055010000580100005A0100005B0100005D0100006001000062010000640100006501000068010000690100006B0100006D0100006F0100007001000071010000730100007501000076010000780100007A0100007B0100007E0100007F01000080010000830100008501000087010000890100008A0100008B0100008D0100008F0100009101000092010000940100009501000097010000980100009A0100009B0100009D0100009E0100009F010000A1010000A3010000A4010000A5010000A7010000A8010000AA010000AC010000AD010000AE010000B0010000B1010000B3010000B4010000B5010000B7010000B9010000BA010000BC010000BD010000BF010000C0010000C1010000C2010000C4010000C5010000C6010000C8010000CA010000CB010000CD010000CE010000CF010000D0010000D2010000D3010000D4010000D5010000D6010000D7010000D9010000DA010000DC010000DD010000DE010000E0010000E1010000E2010000E3010000E5010000E5010000E7010000E8010000E9010000EA010000EB010000EC010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000040200000502000006020000070200000702000008020000090200000B0200000D0200000E0200000E0200000F0200001102000012020000130200001402000015020000150200001702000017020000180200001A0200001B0200001C0200001D0200001D0200001E0200001F02000020020000210200002202000024020000250200002502000027020000270200002802000028020000290200002B0200002C0200002D0200002E0200002F0200003002000031020000320200003302000035020000360200003602000037020000390200003A0200003A0200003A0200003B0200003B0200003D0200003E0200003F0200003F020000410200004102000042020000430200004402000045020000450200004602000047020000490200004A0200004A0200004A0200004C0200004C0200004F02000050020000510200005202000053020000540200005502000055020000570200005702000058020000590200005A0200005B0200005C0200005C0200005D0200005E0200005E0200005F020000620200006202000064020000650200006502000066020000670200006802000068020000690200006A0200006A0200006C0200006C0200006D0200006E0200006F0200007002000071020000710200007302000073020000740200007402000075020000760200007702000078020000780200007A0200007B0200007B0200007C0200007D0200007D0200007E0200007F0200008002000081020000820200008202000083020000840200008502000085020000860200008702000087020000880200008A0200008A0200008B0200008C0200008D0200008E0200008F0200008F0200009002000091020000920200009202000093020000940200009502000096020000960200009702000099020000990200009A0200009B0200009C0200009D0200009D0200009E0200009E0200009E0200009F020000A0020000A1020000A1020000A2020000A2020000A3020000A5020000A5020000A6020000A7020000A7020000A7020000A9020000A9020000AA020000AB020000AB020000AB020000AD020000AD020000AE020000AF020000AF020000AF020000B0020000B1020000B1020000B2020000B3020000B3020000B3020000B4020000B5020000B5020000B7020000B8020000B8020000B9020000B9020000BA020000BB020000BD020000BD020000BE020000BE020000BF020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C4020000C4020000C6020000C6020000C6020000C7020000C8020000C9020000C9020000CA020000CA020000CC020000CC020000CD020000CD020000CE020000CE020000CF020000CF020000D0020000D1020000D1020000D2020000D3020000D3020000D5020000D6020000D6020000D6020000D7020000D8020000D8020000D8020000D9020000D9020000DA020000DA020000DB020000DC020000DC020000DD020000DD020000DE020000E0020000E0020000E1020000E2020000E2020000E3020000E3020000E4020000E5020000E5020000E5020000E6020000E6020000E7020000E7020000E8020000E9020000E9020000E9020000EA020000EB020000EB020000EC020000EC020000ED020000EE020000EF020000F0020000F0020000F1020000F2020000F2020000F3020000F4020000F5020000F5020000F5020000F6020000F6020000F7020000F8020000F9020000F9020000FA020000FA020000FB020000FB020000FC020000FD020000FE020000FE020000FF02000000030000000300000103000001030000020300000203000003030000040300000403000005030000050300000603000007030000080300000803000009030000090300000A0300000A0300000B0300000B0300000C0300000D0300000D0300000D0300000E0300000E030000100300001003000011030000110300001103000012030000120300001303000013030000130300001403000014030000150300001503000016030000170300001703000018030000180300001A0300001A0300001A0300001B0300001C0300001C0300001D0300001D0300001D0300001E0300001E0300001F030000200300002003000021030000210300002103000022030000230300002303000024030000240300002503000026030000260300002603000027030000280300002803000029030000290300002A0300002A0300002A0300002B0300002B0300002D0300002D0300002E0300002F0300002F0300002F0300002F030000300300003103000031030000320300003203000033030000330300003403000034030000350300003503000035030000360300003703000037030000370300003803000038030000390300003A0300003A0300003B0300003B0300003C0300003C0300003C0300003D0300003E0300003E03000040030000400300004103000042030000420300004203000042030000430300004403000044030000440300004403000044030000450300004503000046030000470300004703000047030000480300004803000049030000490300004B0300004B0300004C0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300004F03000050030000500300005203000053030000530300005403000054030000550300005503000055030000560300005603000057030000570300005803000059030000590300005A0300005A0300005A0300005C0300005C0300005D0300005E0300005E0300005E0300005F0300005F0300005F0300005F030000600300006003000061030000610300006203000062030000620300006403000065030000650300006603000066030000660300006603000067030000670300006803000068030000680300006803000068030000690300006A0300006A0300006B0300006B0300006B0300006B0300006D0300006D0300006D0300006D0300006E0300006E0300006F0300006F03000070030000710300007103000071030000730300007303000074030000740300007403000075030000750300007603000076030000760300007603000077030000770300007703000077030000780300007803000079030000790300007A0300007A0300007A0300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007D0300007E0300007E0300007E0300007F0300007F0300007F03000080030000800300008203000083030000830300008303000084030000850300008503000085030000850300008603000086030000870300008703000088030000880300008803000088030000890300008A0300008B0300008B0300008B0300008C0300008C0300008D0300008E0300008E0300008E0300008F0300008F0300008F0300008F03000090030000910300009103000092030000920300009203000093030000930300009403000094030000940300009403000095030000960300009603000097030000970300009703000098030000980300009903000099030000990300009A0300009A0300009B0300009B0300009B0300009C0300009D0300009D0300009E0300009E0300009F030000A0030000A0030000A1030000A1030000A1030000A1030000A1030000A2030000A2030000A3030000A3030000A3030000A4030000A4030000A5030000A5030000A5030000A7030000A7030000A8030000A8030000A9030000A9030000A9030000AA030000AA030000AA030000AB030000AB030000AB030000AC030000AC030000AC030000AD030000AD030000AE030000AE030000AE030000AF030000B0030000B0030000B0030000B0030000B1030000B2030000B2030000B3030000B4030000B4030000B4030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B7030000B7030000B7030000B8030000B8030000B8030000B9030000B9030000B9030000BA030000BA030000BB030000BB030000BB030000BB030000BD030000BD030000BE030000BE030000BF030000BF030000BF030000BF030000C0030000C0030000C1030000C1030000C1030000C2030000C2030000C2030000C3030000C3030000C4030000C4030000C4030000C4030000C6030000C6030000C6030000C7030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CC030000CC030000CC030000CC030000CD030000CD030000CD030000CE030000CF030000CF030000CF030000D0030000D0030000D0030000D0030000D0030000D1030000D2030000D2030000D2030000D3030000D3030000D3030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D5030000D6030000D6030000D6030000D6030000D8030000D8030000D9030000D9030000DA030000DA030000DA030000DA030000DB030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DF030000DF030000DF030000E0030000E0030000E0030000E0030000E1030000E1030000E1030000E2030000E3030000E3030000E4030000E4030000E5030000E6030000E7030000000000002D0000003D0000004C00000058000000630000006C000000720000007A0000007F000000860000008F00000094000000980000009C000000A0000000A3000000A8000000AC000000AF000000B3000000B6000000BD000000C1000000C5000000C7000000CA000000CE000000D1000000D4000000D7000000DB000000DE000000E0000000E3000000E6000000EB000000EE000000F2000000F5000000F7000000F9000000FC000000FE00000000010000020100000301000007010000080100000B0100000D0100000F0100001101000014010000170100001C0100001F01000022010000240100002501000026010000280100002B0100002D0100003001000031010000330100003501000036010000380100003A0100003B0100003D0100003E01000040010000420100004401000046010000470100004B0100004E0100005001000052010000530100005501000056010000580100005A0100005C0100005D0100005E0100006001000061010000630100006501000067010000670100006A0100006B0100006C0100006E0100006F01000071010000730100007401000075010000770100007C0100007D0100007E01000080010000810100008301000084010000850100008601000088010000890100008A0100008C0100008D0100008E0100008F01000091010000910100009301000095010000960100009701000099010000990100009C0100009C0100009D0100009F010000A1010000A2010000A3010000A4010000A6010000A7010000A9010000AC010000AE010000AF010000B0010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C3010000C4010000C5010000C7010000C8010000C9010000CA010000CB010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D3010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E4010000E5010000E6010000E7010000E9010000EA010000EA010000EB010000EB010000EC010000ED010000EF010000F0010000F1010000F1010000F2010000F4010000F4010000F5010000F7010000F9010000F9010000FB010000FB010000FB010000FC010000FC010000FD010000FE010000FE010000FF0100000002000001020000020200000202000004020000040200000702000009020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001302000014020000150200001602000017020000180200001A0200001B0200001B0200001C0200001D0200001D0200001E0200001F02000020020000200200002202000022020000230200002402000025020000260200002602000027020000280200002A0200002B0200002B0200002B0200002C0200002C0200002D0200002E0200003002000031020000320200003302000034020000340200003802000038020000390200003A0200003B0200003C0200003D0200003D0200003E0200003F0200003F020000400200004102000041020000420200004302000043020000440200004602000047020000470200004802000049020000490200004A0200004A0200004B0200004C0200004D0200004E0200004F0200004F0200005002000050020000510200005102000052020000530200005402000055020000550200005702000059020000590200005A0200005A0200005A0200005B0200005C0200005C0200005D0200005E0200005E020000600200006102000062020000620200006302000064020000670200006702000069020000690200006A0200006B0200006C0200006C0200006D0200006D0200006E0200006F0200007002000070020000710200007202000072020000730200007302000074020000760200007602000077020000770200007802000079020000790200007A0200007A0200007A0200007B0200007C0200007D0200007D0200007E0200007E0200007F0200008002000081020000810200008202000082020000830200008402000084020000850200008602000086020000860200008802000088020000890200008A0200008A0200008A0200008B0200008C0200008D0200008E0200008F0200008F0200008F020000900200009102000091020000930200009402000094020000980200009802000099020000990200009A0200009A0200009B0200009B0200009D0200009D0200009E0200009E020000A0020000A0020000A0020000A1020000A2020000A2020000A3020000A3020000A3020000A3020000A4020000A5020000A5020000A6020000A6020000A8020000A8020000A9020000A9020000AA020000AA020000AB020000AB020000AB020000AC020000AC020000AD020000AE020000AE020000AF020000AF020000AF020000AF020000B0020000B1020000B2020000B2020000B3020000B3020000B4020000B4020000B5020000B6020000B6020000B7020000B7020000B8020000BA020000BA020000BA020000BB020000BB020000BC020000BC020000BD020000BE020000BE020000BE020000BF020000BF020000C0020000C0020000C1020000C1020000C2020000C2020000C2020000C3020000C3020000C7020000C7020000C8020000C9020000CA020000CB020000CB020000CB020000CC020000CC020000CD020000CE020000CF020000CF020000CF020000D0020000D0020000D1020000D2020000D2020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D6020000D6020000D7020000D8020000D8020000D9020000D9020000DA020000DA020000DB020000DC020000DC020000DC020000DC020000DD020000DE020000DE020000DE020000DF020000DF020000E0020000E0020000E1020000E1020000E1020000E2020000E2020000E2020000E3020000E3020000E5020000E5020000E6020000E6020000E6020000E7020000E7020000E8020000E8020000E8020000E9020000E9020000EA020000EA020000EA020000EB020000EB020000EB020000EB020000EC020000ED020000ED020000EE020000F0020000F0020000F1020000F1020000F1020000F2020000F2020000F3020000F4020000F4020000F4020000F8020000F8020000F9020000FA020000FA020000FB020000FB020000FC020000FC020000FC020000FD020000FE020000FF020000FF020000000300000003000001030000010300000103000002030000020300000303000003030000040300000503000005030000050300000603000006030000070300000703000009030000090300000A0300000A0300000B0300000B0300000C0300000C0300000C0300000D0300000E0300000E0300000E0300000E0300000E0300000F0300000F0300000F03000010030000100300001103000011030000110300001203000013030000130300001403000014030000150300001603000016030000160300001603000017030000180300001803000018030000180300001903000019030000190300001A0300001A0300001A0300001A0300001B0300001B0300001C0300001C0300001D0300001D0300001E0300001F0300001F03000020030000200300002103000021030000220300002203000022030000230300002303000026030000270300002803000028030000280300002903000029030000290300002A0300002A0300002B0300002B0300002C0300002D0300002D0300002E0300002E0300002E0300002F0300002F0300002F0300003003000030030000300300003103000031030000310300003103000032030000320300003303000033030000330300003303000033030000350300003503000035030000360300003603000037030000370300003803000038030000390300003903000039030000390300003A0300003B0300003C0300003C0300003D0300003D0300003D0300003D0300003E0300003E0300003E0300003E0300003F0300003F03000040030000400300004103000042030000420300004203000043030000430300004403000044030000440300004403000044030000460300004603000047030000470300004803000048030000480300004903000049030000490300004A0300004A0300004B0300004B0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004E030000500300005003000050030000510300005103000051030000520300005203000053030000530300005303000053030000540300005603000057030000570300005803000059030000590300005B0300005B0300005C0300005C0300005C0300005C0300005D0300005D0300005E0300005E0300005E0300005E0300005E0300005F0300006003000060030000600300006103000061030000610300006103000062030000620300006203000063030000630300006303000064030000640300006503000065030000650300006503000065030000660300006603000067030000670300006703000068030000680300006903000069030000690300006A0300006A0300006B0300006B0300006B0300006C0300006C0300006C0300006D0300006D0300006D0300006E0300006E0300006E0300006E0300006E0300006E0300006E0300006F0300006F03000070030000700300007003000070030000710300007103000071030000720300007303000073030000740300007403000074030000740300007403000075030000750300007503000076030000760300007603000077030000770300007703000078030000780300007903000079030000790300007A0300007A0300007A0300007A0300007A0300007B0300007B0300007B0300007C0300007D0300007D0300007D0300007D0300007D0300007E0300007E030000800300008003000081030000810300008103000081030000810300008203000082030000830300008403000084030000850300008703000087030000880300008903000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008C0300008C0300008D0300008D0300008E0300008E0300008E0300008F0300008F0300008F0300009003000090030000910300009103000091030000910300009203000092030000920300009303000093030000930300009403000094030000950300009503000096030000960300009603000097030000970300009803000098030000980300009903000099030000990300009A0300009B0300009C0300009C0300009C0300009D0300009D0300009D0300009D0300009D0300009E0300009E0300009E0300009E0300009F0300009F0300009F0300009F0300009F030000A0030000A0030000A0030000A1030000A1030000A1030000A3030000A3030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A6030000A6030000A7030000A7030000A7030000A8030000A8030000A9030000A9030000A9030000AA030000AA030000AA030000AB030000AB030000AB030000AB030000AC030000AC030000AC030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="false" DataSize="88">0000000005000000050000000500000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="80">00000000680000001A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="28" Disable="false" DataSize="8192">3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D227574662D38223F3E3C6864725F6C69622076657273696F6E3D22322E30223E3C5144434D5F76657273696F6E3E362E31333C2F5144434D5F76657273696F6E3E3C70616E656C5F636F6C6F725F6D6F64653E44434950333C2F70616E656C5F636F6C6F725F6D6F64653E3C70616E656C5F6D61785F6C756D696E616E63653E3534372E323839303632353C2F70616E656C5F6D61785F6C756D696E616E63653E3C70616E656C5F6D696E5F6C756D696E616E63653E302E3030323C2F70616E656C5F6D696E5F6C756D696E616E63653E3C6E6F6D696E616C5F7065616B5F6C756D696E616E63653E313530303C2F6E6F6D696E616C5F7065616B5F6C756D696E616E63653E3C5344525F7065616B5F6C756D696E616E63653E3430303C2F5344525F7065616B5F6C756D696E616E63653E3C6F75747075745F67616D6D615F73706163653E3C73706163653E3270323C2F73706163653E3C76616C3E322E323C2F76616C3E3C2F6F75747075745F67616D6D615F73706163653E3C70616E656C5F7063633E3C723E3C633E303C2F633E3C723E313C2F723E3C673E303C2F673E3C623E303C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F723E3C673E3C633E303C2F633E3C723E303C2F723E3C673E313C2F673E3C623E303C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F673E3C623E3C633E303C2F633E3C723E303C2F723E3C673E303C2F673E3C623E313C2F623E3C72673E303C2F72673E3C67623E303C2F67623E3C72623E303C2F72623E3C72723E303C2F72723E3C67673E303C2F67673E3C62623E303C2F62623E3C7267623E303C2F7267623E3C2F623E3C2F70616E656C5F7063633E3C746F6E655F6D61703E3C706F696E74733E3C783E303C2F783E3C793E303C2F793E3C783E36323C2F783E3C793E32333C2F793E3C783E3132333C2F783E3C793E34363C2F793E3C783E3138353C2F783E3C793E37353C2F793E3C783E3235343C2F783E3C793E3132313C2F793E3C783E3330383C2F783E3C793E3136373C2F793E3C783E3338363C2F783E3C793E3235333C2F793E3C783E3435313C2F783E3C793E3334363C2F793E3C783E3438323C2F783E3C793E3339393C2F793E3C783E3531333C2F783E3C793E3435383C2F793E3C783E3534343C2F783E3C793E3532353C2F793E3C783E3537353C2F783E3C793E3630313C2F793E3C783E3630363C2F783E3C793E3638363C2F793E3C783E3633373C2F783E3C793E3738313C2F793E3C783E3636383C2F783E3C793E3838393C2F793E3C783E3830303C2F783E3C793E3938333C2F793E3C783E3932333C2F783E3C793E313032333C2F793E3C2F706F696E74733E3C2F746F6E655F6D61703E3C73616D706C696E675F677269643E3C7265643E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F7265643E3C677265656E3E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F677265656E3E3C626C75653E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F626C75653E3C2F73616D706C696E675F677269643E3C647370705F73616D706C696E675F677269643E3C747970653E637573746F6D3C2F747970653E3C73697A653E31373C2F73697A653E3C2F647370705F73616D706C696E675F677269643E3C2F6864725F6C69623E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ </Mode>
+ <Mode ModeID="1" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="native" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" PictureQuality="standard" IsMerge="1">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">000000000800000008000000080000000000000010000000030000000F000000010000000D0000000B000000070000000900000005000000000000000C000000020000000E00000008000000040000000A00000006000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="80">00000000680000001A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ </Mode>
+ <Mode ModeID="2" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="P3" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="dcip3" PictureQuality="standard" IsMerge="1">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000D50000000300000003000000000200000000000000000000A90100000B0000000B0000000003000000000000000000007B02000011000000120000000004000000000000000000004A0300001700000018000000000500000000000000000000160400001C0000001E000000000600000000000000000000E00400002100000022000000000700000000000000000000A705000025000000250000000008000000000000000000006C06000028000000270000000009000000000000000000002E0700002B00000029000000000A00000000000000000000EE0700002C00000029000000000B00000000000000000000AB0800002D00000028000000000C00000000000000000000650900002E00000026000000000D000000000000000000001D0A00002D00000023000000000E00000000000000000000D20A00002C0000001F000000000F00000000000000000000850B00002B0000001A000000001000000000000000000000350C000028000000140000000000000000010000000000001C000000E200000000000000000100000001000000000000F3000000EB00000008000000000200000001000000000000C8010000F3000000100000000003000000010000000000009A020000FB000000170000000004000000010000000000006A030000020100001D000000000500000001000000000000360400000801000022000000000600000001000000000000010500000E01000026000000000700000001000000000000C905000012010000290000000008000000010000000000008E060000170100002C000000000900000001000000000000500700001A0100002D000000000A00000001000000000000100800001D0100002D000000000B00000001000000000000CE0800001F0100002C000000000C0000000100000000000089090000200100002A000000000D00000001000000000000410A00002001000027000000000E00000001000000000000F70A00002001000023000000000F00000001000000000000AA0B00001F0100001E0000000010000000010000000000005A0C00001E0100001800000000000000000200000000000039000000C60100000300000000010000000200000000000011010000D00100000C000000000200000002000000000000E6010000D901000014000000000300000002000000000000B9020000E10100001B00000000040000000200000000000089030000E90100002100000000050000000200000000000056040000F00100002600000000060000000200000000000021050000F70100002A000000000700000002000000000000E9050000FD0100002D000000000800000002000000000000AF060000020200002F000000000900000002000000000000720700000602000030000000000A00000002000000000000320800000A02000030000000000B00000002000000000000F00800000D0200002F000000000C00000002000000000000AC0900000F0200002D000000000D00000002000000000000640A0000100200002A000000000E000000020000000000001B0B00001102000026000000000F00000002000000000000CE0B000011020000210000000010000000020000000000007F0C0000110200001B00000000000000000300000000000056000000A6020000070000000001000000030000000000002E010000B10200001000000000020000000300000000000004020000BB02000018000000000300000003000000000000D7020000C50200001F000000000400000003000000000000A7030000CE0200002500000000050000000300000000000075040000D60200002A00000000060000000300000000000040050000DD0200002E00000000070000000300000000000009060000E402000031000000000800000003000000000000CF060000EA0200003300000000090000000300000000000093070000EF02000034000000000A0000000300000000000054080000F302000034000000000B0000000300000000000012090000F702000032000000000C00000003000000000000CE090000FA02000030000000000D00000003000000000000870A0000FD0200002D000000000E000000030000000000003E0B0000FF02000029000000000F00000003000000000000F20B00000003000024000000001000000003000000000000A40C0000000300001D00000000000000000400000000000072000000830300000B0000000001000000040000000000004B0100008F03000014000000000200000004000000000000210200009A0300001C000000000300000004000000000000F4020000A503000023000000000400000004000000000000C5030000AF0300002900000000050000000400000000000094040000B80300002D0000000006000000040000000000005F050000C00300003100000000070000000400000000000029060000C803000034000000000800000004000000000000EF060000CE03000036000000000900000004000000000000B3070000D503000037000000000A0000000400000000000075080000DA03000036000000000B0000000400000000000034090000DF03000035000000000C00000004000000000000F0090000E303000033000000000D00000004000000000000AA0A0000E60300002F000000000E00000004000000000000610B0000E90300002B000000000F00000004000000000000150C0000EB03000026000000001000000004000000000000C70C0000EC030000200000000000000000050000000000008E0000005E0400000F000000000100000005000000000000670100006A040000170000000002000000050000000000003D020000760400001F000000000300000005000000000000110300008204000026000000000400000005000000000000E30300008C0400002C000000000500000005000000000000B104000096040000300000000006000000050000000000007E050000A00400003400000000070000000500000000000047060000A8040000370000000008000000050000000000000F070000B004000038000000000900000005000000000000D3070000B704000039000000000A0000000500000000000095080000BD04000039000000000B0000000500000000000054090000C304000037000000000C00000005000000000000110A0000C804000035000000000D00000005000000000000CB0A0000CD04000032000000000E00000005000000000000830B0000D00400002D000000000F00000005000000000000380C0000D304000028000000001000000005000000000000EA0C0000D504000021000000000000000006000000000000A8000000340500001200000000010000000600000000000082010000420500001A000000000200000006000000000000590200004F050000220000000003000000060000000000002E0300005B0500002800000000040000000600000000000000040000670500002E000000000500000006000000000000CF04000072050000330000000006000000060000000000009C0500007C050000360000000007000000060000000000006606000085050000390000000008000000060000000000002D0700008E0500003A000000000900000006000000000000F2070000960500003B000000000A00000006000000000000B50800009E0500003B000000000B0000000600000000000075090000A405000039000000000C00000006000000000000320A0000AA05000037000000000D00000006000000000000EC0A0000AF05000033000000000E00000006000000000000A50B0000B40500002F000000000F000000060000000000005A0C0000B8050000290000000010000000060000000000000D0D0000BB05000023000000000000000007000000000000C300000008060000140000000001000000070000000000009D010000170600001D0000000002000000070000000000007502000025060000240000000003000000070000000000004A030000320600002B0000000004000000070000000000001C0400003E06000030000000000500000007000000000000EC0400004A06000035000000000600000007000000000000B9050000550600003800000000070000000700000000000084060000600600003B0000000008000000070000000000004C070000690600003C00000000090000000700000000000011080000720600003D000000000A00000007000000000000D40800007B0600003C000000000B0000000700000000000094090000820600003B000000000C00000007000000000000520A00008906000038000000000D000000070000000000000D0B00008F06000034000000000E00000007000000000000C60B00009506000030000000000F000000070000000000007C0C0000990600002A0000000010000000070000000000002F0D00009D06000023000000000000000008000000000000DD000000D806000016000000000100000008000000000000B7010000E80600001F0000000002000000080000000000008F020000F70600002600000000030000000800000000000065030000050700002D000000000400000008000000000000380400001207000032000000000500000008000000000000080500001F07000036000000000600000008000000000000D60500002B0700003A000000000700000008000000000000A1060000370700003C00000000080000000800000000000069070000410700003D0000000009000000080000000000002F0800004B0700003E000000000A00000008000000000000F3080000540700003D000000000B00000008000000000000B30900005D0700003C000000000C00000008000000000000720A00006507000039000000000D000000080000000000002D0B00006C07000035000000000E00000008000000000000E60B00007207000030000000000F000000080000000000009D0C0000780700002B000000001000000008000000000000510D00007D07000024000000000000000009000000000000F6000000A607000018000000000100000009000000000000D1010000B607000020000000000200000009000000000000AA020000C60700002800000000030000000900000000000080030000D50700002E00000000040000000900000000000053040000E30700003300000000050000000900000000000024050000F107000038000000000600000009000000000000F2050000FE0700003B000000000700000009000000000000BD0600000A0800003D00000000080000000900000000000086070000160800003E0000000009000000090000000000004D080000210800003F000000000A00000009000000000000110900002B0800003E000000000B00000009000000000000D2090000340800003C000000000C00000009000000000000910A00003D08000039000000000D000000090000000000004D0B00004508000035000000000E00000009000000000000060C00004C08000031000000000F00000009000000000000BD0C0000530800002B000000001000000009000000000000720D0000590800002400000000000000000A0000000000000F0100006F0800001900000000010000000A000000000000EA010000810800002100000000020000000A000000000000C3020000920800002900000000030000000A0000000000009A030000A20800002F00000000040000000A0000000000006E040000B10800003400000000050000000A0000000000003F050000C00800003800000000060000000A0000000000000D060000CD0800003B00000000070000000A000000000000D9060000DB0800003E00000000080000000A000000000000A3070000E70800003F00000000090000000A0000000000006A080000F30800003F000000000A0000000A0000000000002E090000FE0800003E000000000B0000000A000000000000F0090000080900003C000000000C0000000A000000000000AF0A00001209000039000000000D0000000A0000000000006C0B00001B09000035000000000E0000000A000000000000260C00002309000031000000000F0000000A000000000000DD0C00002B0900002B00000000100000000A000000000000920D0000320900002400000000000000000B00000000000027010000360900001A00000000010000000B00000000000003020000490900002200000000020000000B000000000000DD0200005A0900002900000000030000000B000000000000B30300006B0900002F00000000040000000B000000000000880400007B0900003500000000050000000B000000000000590500008B0900003900000000060000000B000000000000280600009A0900003C00000000070000000B000000000000F5060000A80900003E00000000080000000B000000000000BF070000B50900003F00000000090000000B00000000000086080000C20900003F000000000A0000000B0000000000004B090000CE0900003E000000000B0000000B0000000000000D0A0000D90900003C000000000C0000000B000000000000CD0A0000E409000039000000000D0000000B0000000000008A0B0000EE09000035000000000E0000000B000000000000450C0000F709000030000000000F0000000B000000000000FC0C0000000A00002A00000000100000000B000000000000B20D0000070A00002300000000000000000C0000000000003F010000FA0900001B00000000010000000C0000000000001B0200000D0A00002300000000020000000C000000000000F5020000200A00002A00000000030000000C000000000000CC030000310A00003000000000040000000C000000000000A1040000430A00003500000000050000000C00000000000073050000530A00003900000000060000000C00000000000043060000630A00003C00000000070000000C00000000000010070000720A00003E00000000080000000C000000000000DA070000800A00003E00000000090000000C000000000000A20800008E0A00003E000000000A0000000C000000000000680900009B0A00003D000000000B0000000C0000000000002A0A0000A70A00003B000000000C0000000C000000000000EA0A0000B30A000038000000000D0000000C000000000000A80B0000BE0A000034000000000E0000000C000000000000630C0000C80A00002F000000000F0000000C0000000000001B0D0000D10A00002900000000100000000C000000000000D10D0000DA0A00002200000000000000000D00000000000056010000BA0A00001B00000000010000000D00000000000033020000CE0A00002200000000020000000D0000000000000D030000E20A00002900000000030000000D000000000000E5030000F50A00002F00000000040000000D000000000000BA040000070B00003400000000050000000D0000000000008D050000180B00003800000000060000000D0000000000005D060000290B00003B00000000070000000D0000000000002A070000390B00003D00000000080000000D000000000000F5070000480B00003E00000000090000000D000000000000BE080000570B00003E000000000A0000000D00000000000083090000640B00003C000000000B0000000D000000000000470A0000720B00003A000000000C0000000D000000000000070B00007E0B000037000000000D0000000D000000000000C50B00008A0B000033000000000E0000000D000000000000810C0000950B00002D000000000F0000000D000000000000390D00009F0B00002700000000100000000D000000000000F00D0000A90B00002000000000000000000E0000000000006C010000770B00001A00000000010000000E0000000000004A0200008C0B00002200000000020000000E00000000000025030000A10B00002900000000030000000E000000000000FD030000B40B00002F00000000040000000E000000000000D3040000C70B00003300000000050000000E000000000000A6050000DA0B00003700000000060000000E00000000000076060000EB0B00003A00000000070000000E00000000000044070000FC0B00003C00000000080000000E000000000000100800000D0C00003C00000000090000000E000000000000D80800001C0C00003C000000000A0000000E0000000000009F0900002B0C00003B000000000B0000000E000000000000620A0000390C000039000000000C0000000E000000000000230B0000460C000035000000000D0000000E000000000000E20B0000530C000031000000000E0000000E0000000000009E0C00005F0C00002C000000000F0000000E000000000000570D00006A0C00002500000000100000000E0000000000000E0E0000750C00001E00000000000000000F00000000000082010000310C00001900000000010000000F00000000000060020000470C00002100000000020000000F0000000000003C0300005C0C00002800000000030000000F00000000000014040000710C00002E00000000040000000F000000000000EA040000850C00003200000000050000000F000000000000BE050000980C00003600000000060000000F0000000000008F060000AB0C00003900000000070000000F0000000000005E070000BD0C00003A00000000080000000F00000000000029080000CE0C00003B00000000090000000F000000000000F3080000DE0C00003A000000000A0000000F000000000000B9090000EE0C000039000000000B0000000F0000000000007E0A0000FD0C000037000000000C0000000F0000000000003F0B00000B0D000033000000000D0000000F000000000000FE0B0000190D00002F000000000E0000000F000000000000BA0C0000260D000029000000000F0000000F000000000000740D0000320D00002300000000100000000F0000000000002B0E00003E0D00001B00000000000000001000000000000098010000E70C00001800000000010000001000000000000076020000FE0C00002000000000020000001000000000000052030000150D0000260000000003000000100000000000002B0400002A0D00002C000000000400000010000000000000020500003F0D000031000000000500000010000000000000D6050000530D000034000000000600000010000000000000A7060000670D000037000000000700000010000000000000760700007A0D000038000000000800000010000000000000430800008C0D0000390000000009000000100000000000000C0900009D0D000038000000000A00000010000000000000D4090000AE0D000037000000000B00000010000000000000980A0000BE0D000034000000000C000000100000000000005A0B0000CD0D000031000000000D000000100000000000001A0C0000DC0D00002C000000000E00000010000000000000D70C0000EA0D000027000000000F00000010000000000000910D0000F70D000020000000001000000010000000000000490E0000030E000019000000000000000000000000010000080000000C000000EB000000000100000000000000010000E000000014000000F6000000000200000000000000010000B60100001B000000FF00000000030000000000000001000088020000220000000701000000040000000000000001000059030000280000000F010000000500000000000000010000260400002D00000015010000000600000000000000010000F2040000310000001A010000000700000000000000010000BA050000350000001F010000000800000000000000010000800600003800000022010000000900000000000000010000440700003B00000024010000000A00000000000000010000040800003D00000026010000000B00000000000000010000C30800003E00000026010000000C000000000000000100007E0900003E00000025010000000D00000000000000010000370A00003D00000023010000000E00000000000000010000EE0A00003C00000021010000000F00000000000000010000A20B00003B0000001D010000001000000000000000010000530C0000380000001801000000000000000100000001000026000000F4000000F2000000000100000001000000010000000100000001000000010000000200000001000000010000D40100000501000005010000000300000001000000010000A80200000D0100000E010000000400000001000000010000790300001301000015010000000500000001000000010000470400001A0100001B010000000600000001000000010000120500001F01000020010000000700000001000000010000DB0500002401000025010000000800000001000000010000A20600002801000028010000000900000001000000010000660700002B0100002A010000000A00000001000000010000270800002E0100002B010000000B00000001000000010000E6080000300100002B010000000C00000001000000010000A2090000310100002B010000000D000000010000000100005C0A00003201000029010000000E00000001000000010000130B00003201000026010000000F00000001000000010000C70B00003101000022010000001000000001000000010000790C00002F0100001D01000000000000000200000001000043000000D9010000F80000000001000000020000000100001C010000E201000002010000000200000002000000010000F3010000EC0100000B010000000300000002000000010000C6020000F40100001401000000040000000200000001000098030000FC0100001B010000000500000002000000010000660400000302000021010000000600000002000000010000330500000A02000026010000000700000002000000010000FC0500000F0200002A010000000800000002000000010000C3060000140200002D01000000090000000200000001000087070000190200002F010000000A00000002000000010000490800001C02000031010000000B00000002000000010000080900001F02000031010000000C00000002000000010000C50900002102000030010000000D000000020000000100007F0A0000230200002E010000000E00000002000000010000370B0000240200002B010000000F00000002000000010000EB0B000024020000270100000010000000020000000100009E0C0000230200002201000000000000000300000001000060000000BA020000FE00000000010000000300000001000039010000C50200000801000000020000000300000001000010020000CF02000011010000000300000003000000010000E5020000D902000019010000000400000003000000010000B6030000E20200002001000000050000000300000001000086040000EA0200002601000000060000000300000001000052050000F10200002B0100000007000000030000000100001C060000F80200002F010000000800000003000000010000E4060000FE02000032010000000900000003000000010000A80700000303000034010000000A000000030000000100006B0800000803000035010000000B000000030000000100002A0900000B03000035010000000C00000003000000010000E70900000E03000034010000000D00000003000000010000A20A00001103000032010000000E000000030000000100005A0B0000130300002F010000000F000000030000000100000F0C0000140300002B010000001000000003000000010000C20C000014030000260100000000000000040000000100007C000000990300000301000000010000000400000001000056010000A40300000D0100000002000000040000000100002D020000B00300001601000000030000000400000001000002030000BA0300001E010000000400000004000000010000D4030000C403000025010000000500000004000000010000A4040000CD0300002B01000000060000000400000001000071050000D5030000300100000007000000040000000100003C060000DD0300003401000000080000000400000001000004070000E403000037010000000900000004000000010000C9070000EA03000039010000000A000000040000000100008C080000EF0300003A010000000B000000040000000100004C090000F40300003A010000000C00000004000000010000090A0000F803000039010000000D00000004000000010000C40A0000FC03000037010000000E000000040000000100007D0B0000FE03000034010000000F00000004000000010000330C0000000400002F010000001000000004000000010000E60C0000020400002A0100000000000000050000000100009800000074040000080100000001000000050000000100007201000081040000120100000002000000050000000100004A0200008D0400001B0100000003000000050000000100001F0300009804000023010000000400000005000000010000F2030000A30400002A010000000500000005000000010000C2040000AD0400003001000000060000000500000001000090050000B6040000350100000007000000050000000100005B060000BF0400003801000000080000000500000001000023070000C60400003B010000000900000005000000010000E9070000CE0400003D010000000A00000005000000010000AC080000D40400003E010000000B000000050000000100006D090000DA0400003E010000000C000000050000000100002B0A0000DF0400003D010000000D00000005000000010000E60A0000E30400003A010000000E000000050000000100009F0B0000E704000037010000000F00000005000000010000550C0000EA04000033010000001000000005000000010000090D0000EC0400002E010000000000000006000000010000B30000004C0500000C0100000001000000060000000100008E0100005A0500001601000000020000000600000001000066020000670500001F0100000003000000060000000100003C03000073050000270100000004000000060000000100000F0400007F0500002E010000000500000006000000010000E00400008905000034010000000600000006000000010000AE0500009405000038010000000700000006000000010000790600009D0500003C01000000080000000600000001000042070000A60500003F01000000090000000600000001000008080000AE05000041010000000A00000006000000010000CC080000B505000042010000000B000000060000000100008D090000BC05000041010000000C000000060000000100004C0A0000C205000040010000000D00000006000000010000080B0000C70500003E010000000E00000006000000010000C10B0000CC0500003A010000000F00000006000000010000780C0000D0050000360100000010000000060000000100002C0D0000D305000031010000000000000007000000010000CD0000002106000011010000000100000007000000010000A90100002F0600001A010000000200000007000000010000810200003D06000023010000000300000007000000010000580300004B0600002B0100000004000000070000000100002B0400005706000032010000000500000007000000010000FC0400006306000037010000000600000007000000010000CB0500006E0600003C010000000700000007000000010000970600007906000040010000000800000007000000010000600700008206000042010000000900000007000000010000270800008B06000044010000000A00000007000000010000EB0800009406000045010000000B00000007000000010000AD0900009B06000044010000000C000000070000000100006C0A0000A206000043010000000D00000007000000010000280B0000A806000041010000000E00000007000000010000E20B0000AE0600003D010000000F00000007000000010000990C0000B3060000390100000010000000070000000100004E0D0000B706000034010000000000000008000000010000E7000000F206000014010000000100000008000000010000C3010000020700001E0100000002000000080000000100009C0200001107000027010000000300000008000000010000730300001F0700002E010000000400000008000000010000470400002C0700003501000000050000000800000001000019050000390700003B010000000600000008000000010000E8050000450700003F010000000700000008000000010000B406000051070000430100000008000000080000000100007E0700005B07000045010000000900000008000000010000450800006507000047010000000A000000080000000100000A0900006F07000048010000000B00000008000000010000CC0900007707000047010000000C000000080000000100008C0A00007F07000046010000000D00000008000000010000480B00008607000043010000000E00000008000000010000030C00008D07000040010000000F00000008000000010000BB0C0000920700003B010000001000000008000000010000700D0000980700003601000000000000000900000001000000010000C007000017010000000100000009000000010000DD010000D107000021010000000200000009000000010000B7020000E10700002A0100000003000000090000000100008E030000F00700003101000000040000000900000001000062040000FE07000038010000000500000009000000010000350500000C0800003D010000000600000009000000010000040600001908000042010000000700000009000000010000D106000026080000450100000008000000090000000100009B0700003108000048010000000900000009000000010000630800003C08000049010000000A0000000900000001000028090000460800004A010000000B00000009000000010000EB0900005008000049010000000C00000009000000010000AB0A00005908000048010000000D00000009000000010000680B00006108000045010000000E00000009000000010000230C00006808000042010000000F00000009000000010000DB0C00006F0800003D010000001000000009000000010000910D0000750800003801000000000000000A000000010000190100008C0800001A01000000010000000A000000010000F60100009D0800002401000000020000000A000000010000D0020000AE0800002C01000000030000000A000000010000A8030000BE0800003401000000040000000A0000000100007D040000CD0800003A01000000050000000A00000001000050050000DC0800004001000000060000000A00000001000020060000EA0800004401000000070000000A000000010000ED060000F70800004801000000080000000A000000010000B8070000040900004A01000000090000000A00000001000080080000100900004B010000000A0000000A000000010000460900001B0900004C010000000B0000000A000000010000090A0000250900004B010000000C0000000A000000010000C90A00002F0900004A010000000D0000000A000000010000870B00003809000047010000000E0000000A000000010000420C00004109000043010000000F0000000A000000010000FB0C0000480900003F01000000100000000A000000010000B10D00004F0900003901000000000000000B00000001000032010000530900001D01000000010000000B0000000100000F020000660900002601000000020000000B000000010000EA020000780900002E01000000030000000B000000010000C2030000890900003601000000040000000B00000001000097040000990900003C01000000050000000B0000000100006A050000A90900004201000000060000000B0000000100003B060000B80900004601000000070000000B00000001000009070000C60900004901000000080000000B000000010000D4070000D30900004C01000000090000000B0000000100009D080000E00900004D010000000A0000000B00000001000063090000EC0900004D010000000B0000000B000000010000260A0000F80900004D010000000C0000000B000000010000E70A0000020A00004B010000000D0000000B000000010000A60B00000C0A000048010000000E0000000B000000010000610C0000160A000045010000000F0000000B0000000100001B0D00001E0A00004001000000100000000B000000010000D10D0000260A00003A01000000000000000C00000001000049010000180A00001F01000000010000000C000000010000270200002B0A00002801000000020000000C000000010000020300003E0A00003001000000030000000C000000010000DB030000500A00003801000000040000000C000000010000B1040000610A00003E01000000050000000C00000001000085050000720A00004301000000060000000C00000001000055060000820A00004701000000070000000C00000001000024070000910A00004B01000000080000000C000000010000F0070000A00A00004D01000000090000000C000000010000B9080000AD0A00004E010000000A0000000C0000000100007F090000BA0A00004F010000000B0000000C000000010000430A0000C70A00004E010000000C0000000C000000010000050B0000D20A00004C010000000D0000000C000000010000C40B0000DD0A000049010000000E0000000C000000010000800C0000E80A000045010000000F0000000C0000000100003A0D0000F10A00004101000000100000000C000000010000F10D0000FA0A00003B01000000000000000D00000001000060010000D90A00002001000000010000000D0000000100003F020000EE0A00002901000000020000000D0000000100001A030000010B00003201000000030000000D000000010000F4030000140B00003901000000040000000D000000010000CA040000270B00003F01000000050000000D0000000100009E050000380B00004401000000060000000D0000000100006F060000490B00004901000000070000000D0000000100003E070000590B00004C01000000080000000D0000000100000B080000690B00004E01000000090000000D000000010000D4080000770B00004F010000000A0000000D0000000100009B090000850B00004F010000000B0000000D000000010000600A0000930B00004E010000000C0000000D000000010000220B00009F0B00004D010000000D0000000D000000010000E10B0000AB0B00004A010000000E0000000D0000000100009E0C0000B60B000046010000000F0000000D000000010000580D0000C10B00004101000000100000000D000000010000100E0000CA0B00003B01000000000000000E00000001000077010000980B00002101000000010000000E00000001000056020000AD0B00002A01000000020000000E00000001000032030000C20B00003301000000030000000E0000000100000C040000D50B00003A01000000040000000E000000010000E3040000E90B00004001000000050000000E000000010000B7050000FB0B00004501000000060000000E000000010000890600000D0C00004901000000070000000E000000010000580700001E0C00004C01000000080000000E000000010000250800002E0C00004E01000000090000000E000000010000EF0800003E0C00004F010000000A0000000E000000010000B70900004D0C00004F010000000B0000000E0000000100007C0A00005B0C00004F010000000C0000000E0000000100003E0B0000690C00004D010000000D0000000E000000010000FE0B0000750C00004A010000000E0000000E000000010000BB0C0000820C000046010000000F0000000E000000010000760D00008D0C00004101000000100000000E0000000100002E0E0000980C00003B01000000000000000F0000000100008D010000530C00002201000000010000000F0000000100006C020000690C00002B01000000020000000F000000010000490300007E0C00003301000000030000000F00000001000023040000930C00003A01000000040000000F000000010000FB040000A70C00004001000000050000000F000000010000CF050000BB0C00004501000000060000000F000000010000A2060000CD0C00004901000000070000000F00000001000072070000DF0C00004C01000000080000000F0000000100003F080000F10C00004E01000000090000000F00000001000009090000010D00004F010000000A0000000F000000010000D1090000110D00004F010000000B0000000F000000010000970A0000200D00004E010000000C0000000F0000000100005A0B00002F0D00004C010000000D0000000F0000000100001A0C00003D0D000049010000000E0000000F000000010000D80C00004A0D000045010000000F0000000F000000010000930D0000560D00004001000000100000000F0000000100004C0E0000620D00003A010000000000000010000000010000A20100000A0D00002201000000010000001000000001000082020000220D00002B0100000002000000100000000100005F030000380D0000330100000003000000100000000100003A0400004E0D00003A01000000040000001000000001000012050000630D000040010000000500000010000000010000E7050000770D000045010000000600000010000000010000BA0600008B0D0000490100000007000000100000000100008A0700009E0D00004C01000000080000001000000001000058080000B00D00004E01000000090000001000000001000023090000C20D00004F010000000A00000010000000010000EC090000D20D00004F010000000B00000010000000010000B20A0000E30D00004E010000000C00000010000000010000750B0000F20D00004C010000000D00000010000000010000360C0000010E000048010000000E00000010000000010000F40C00000F0E000044010000000F00000010000000010000B00D00001C0E00003F010000001000000010000000010000690E0000290E000039010000000000000000000000020000110000001B000000D9010000000100000000000000020000EB00000023000000E4010000000200000000000000020000C10100002B000000EF0100000003000000000000000200009502000031000000F8010000000400000000000000020000670300003700000001020000000500000000000000020000360400003C0000000802000000060000000000000002000002050000410000000E020000000700000000000000020000CC0500004500000014020000000800000000000000020000940600004800000018020000000900000000000000020000580700004A0000001C020000000A000000000000000200001A0800004C0000001E020000000B00000000000000020000DA0800004D0000001F020000000C00000000000000020000970900004D00000020020000000D00000000000000020000510A00004D0000001F020000000E00000000000000020000090B00004C0000001D020000000F00000000000000020000BE0B00004A0000001B020000001000000000000000020000710C000047000000170200000000000000010000000200002F00000005010000E1010000000100000001000000020000090100000E010000EC010000000200000001000000020000E001000016010000F7010000000300000001000000020000B50200001D01000000020000000400000001000000020000870300002401000008020000000500000001000000020000560400002A01000010020000000600000001000000020000230500003001000016020000000700000001000000020000EE050000350100001B020000000800000001000000020000B506000039010000200200000009000000010000000200007B0700003C01000023020000000A000000010000000200003D0800003F01000025020000000B00000001000000020000FD0800004101000027020000000C00000001000000020000BB0900004201000027020000000D00000001000000020000750A00004201000026020000000E000000010000000200002E0B00004201000024020000000F00000001000000020000E30B00004101000022020000001000000001000000020000960C0000400100001E0200000000000000020000000200004C000000EB010000E801000000010000000200000002000027010000F5010000F4010000000200000002000000020000000200000002000000020000000300000002000000020000D40200000602000007020000000400000002000000020000A60300000E02000010020000000500000002000000020000760400001502000017020000000600000002000000020000440500001C0200001D0200000007000000020000000200000E0600002102000023020000000800000002000000020000D706000026020000270200000009000000020000000200009C0700002B0200002A020000000A000000020000000200005F0800002E0200002C020000000B0000000200000002000020090000310200002E020000000C00000002000000020000DE090000330200002E020000000D00000002000000020000990A0000350200002D020000000E00000002000000020000520B0000360200002B020000000F00000002000000020000080C00003602000028020000001000000002000000020000BC0C0000350200002402000000000000000300000002000069000000CD020000F001000000010000000300000002000044010000D8020000FB0100000002000000030000000200001C020000E302000005020000000300000003000000020000F2020000EC0200000E020000000400000003000000020000C5030000F50200001702000000050000000300000002000095040000FD0200001E0200000006000000030000000200006305000004030000240200000007000000030000000200002F0600000B03000029020000000800000003000000020000F7060000110300002E020000000900000003000000020000BD0700001603000031020000000A00000003000000020000810800001B03000033020000000B00000003000000020000420900001F03000034020000000C00000003000000020000000A00002203000034020000000D00000003000000020000BC0A00002403000033020000000E00000003000000020000750B00002603000031020000000F000000030000000200002C0C0000270300002F020000001000000003000000020000E00C0000270300002B02000000000000000400000002000085000000AD030000F701000000010000000400000002000061010000B90300000202000000020000000400000002000039020000C40300000C02000000030000000400000002000010030000CE03000015020000000400000004000000020000E3030000D80300001D020000000500000004000000020000B4040000E10300002402000000060000000400000002000082050000EA0300002B0200000007000000040000000200004E060000F10300003002000000080000000400000002000017070000F803000034020000000900000004000000020000DE070000FE03000037020000000A00000004000000020000A20800000404000039020000000B0000000400000002000063090000090400003A020000000C00000004000000020000220A00000D0400003A020000000D00000004000000020000DF0A00001004000039020000000E00000004000000020000980B00001304000037020000000F000000040000000200004F0C00001504000034020000001000000004000000020000040D00001604000030020000000000000005000000020000A100000089040000FD0100000001000000050000000200007D010000960400000802000000020000000500000002000056020000A2040000120200000003000000050000000200002D030000AE0400001B02000000040000000500000002000001040000B804000023020000000500000005000000020000D2040000C20400002B020000000600000005000000020000A1050000CC040000310200000007000000050000000200006D060000D40400003602000000080000000500000002000037070000DC0400003A020000000900000005000000020000FE070000E30400003D020000000A00000005000000020000C2080000EA0400003F020000000B0000000500000002000084090000F004000040020000000C00000005000000020000440A0000F504000040020000000D00000005000000020000010B0000F90400003F020000000E00000005000000020000BB0B0000FD0400003D020000000F00000005000000020000720C0000000500003A020000001000000005000000020000270D00000205000036020000000000000006000000020000BC000000630500000302000000010000000600000002000098010000700500000E020000000200000006000000020000720200007D05000018020000000300000006000000020000490300008A050000210200000004000000060000000200001E0400009505000029020000000500000006000000020000F0040000A005000030020000000600000006000000020000BF050000AB050000360200000007000000060000000200008C060000B40500003B02000000080000000600000002000056070000BD0500003F0200000009000000060000000200001D080000C505000042020000000A00000006000000020000E2080000CD05000044020000000B00000006000000020000A5090000D305000045020000000C00000006000000020000650A0000D905000045020000000D00000006000000020000220B0000DF05000044020000000E00000006000000020000DD0B0000E305000042020000000F00000006000000020000950C0000E70500003F0200000010000000060000000200004A0D0000EA0500003B020000000000000007000000020000D70000003806000008020000000100000007000000020000B301000047060000130200000002000000070000000200008E020000550600001D0200000003000000070000000200006503000063060000260200000004000000070000000200003A0400006F0600002E0200000005000000070000000200000D0500007B06000035020000000600000007000000020000DC050000860600003B020000000700000007000000020000AA0600009106000040020000000800000007000000020000740700009B060000440200000009000000070000000200003C080000A406000047020000000A0000000700000002000002090000AC06000049020000000B00000007000000020000C5090000B40600004A020000000C00000007000000020000850A0000BB0600004A020000000D00000007000000020000430B0000C106000049020000000E00000007000000020000FE0B0000C706000046020000000F00000007000000020000B70C0000CB060000430200000010000000070000000200006D0D0000D00600003F020000000000000008000000020000F10000000B0700000E020000000100000008000000020000CE0100001B07000019020000000200000008000000020000A90200002A0700002202000000030000000800000002000081030000380700002B02000000040000000800000002000056040000460700003302000000050000000800000002000029050000530700003A020000000600000008000000020000F90500005F07000040020000000700000008000000020000C70600006A070000450200000008000000080000000200009207000075070000490200000009000000080000000200005B0800007F0700004C020000000A0000000800000002000021090000880700004D020000000B00000008000000020000E4090000910700004E020000000C00000008000000020000A50A0000990700004E020000000D00000008000000020000630B0000A00700004D020000000E000000080000000200001F0C0000A70700004B020000000F00000008000000020000D80C0000AC070000470200000010000000080000000200008E0D0000B2070000430200000000000000090000000200000A010000DB07000012020000000100000009000000020000E8010000EB0700001D020000000200000009000000020000C3020000FB070000270200000003000000090000000200009C0300000A0800003002000000040000000900000002000071040000190800003802000000050000000900000002000045050000270800003F020000000600000009000000020000160600003408000044020000000700000009000000020000E40600004008000049020000000800000009000000020000AF0700004C0800004D020000000900000009000000020000780800005708000050020000000A000000090000000200003F0900006108000052020000000B00000009000000020000030A00006B08000052020000000C00000009000000020000C40A00007408000052020000000D00000009000000020000830B00007C08000051020000000E000000090000000200003F0C0000830800004E020000000F00000009000000020000F90C00008A0800004B020000001000000009000000020000B00D0000900800004702000000000000000A00000002000023010000A70800001702000000010000000A00000002000001020000B80800002102000000020000000A000000020000DD020000C90800002B02000000030000000A000000020000B6030000DA0800003402000000040000000A0000000200008C040000E90800003C02000000050000000A00000002000060050000F80800004302000000060000000A00000002000031060000060900004802000000070000000A00000002000000070000130900004D02000000080000000A000000020000CC070000200900005102000000090000000A000000020000960800002C09000053020000000A0000000A0000000200005D0900003709000055020000000B0000000A000000020000210A00004209000056020000000C0000000A000000020000E30A00004C09000056020000000D0000000A000000020000A20B00005509000054020000000E0000000A0000000200005F0C00005D09000052020000000F0000000A000000020000190D0000650900004E02000000100000000A000000020000D00D00006C0900004A02000000000000000B0000000200003B010000700900001B02000000010000000B0000000200001A020000820900002502000000020000000B000000020000F6020000940900002F02000000030000000B000000020000D0030000A50900003802000000040000000B000000020000A7040000B60900003F02000000050000000B0000000200007B050000C60900004602000000060000000B0000000200004D060000D50900004C02000000070000000B0000000200001C070000E30900005002000000080000000B000000020000E8070000F10900005402000000090000000B000000020000B2080000FD09000057020000000A0000000B0000000200007A0900000A0A000058020000000B0000000B0000000200003F0A0000150A000059020000000C0000000B000000020000010B0000200A000059020000000D0000000B000000020000C10B00002A0A000057020000000E0000000B0000000200007E0C0000330A000055020000000F0000000B000000020000380D00003C0A00005102000000100000000B000000020000F00D0000440A00004D02000000000000000C00000002000053010000360A00001E02000000010000000C00000002000032020000490A00002902000000020000000C0000000200000F0300005C0A00003202000000030000000C000000020000E90300006E0A00003B02000000040000000C000000020000C00400007F0A00004302000000050000000C00000002000095050000900A00004902000000060000000C00000002000067060000A00A00004F02000000070000000C00000002000037070000AF0A00005302000000080000000C00000002000004080000BE0A00005702000000090000000C000000020000CF080000CC0A00005A020000000A0000000C00000002000096090000D90A00005B020000000B0000000C0000000200005C0A0000E60A00005C020000000C0000000C0000000200001F0B0000F10A00005B020000000D0000000C000000020000DF0B0000FC0A00005A020000000E0000000C0000000200009C0C0000070B000057020000000F0000000C000000020000570D0000100B00005402000000100000000C000000020000100E0000190B00004F02000000000000000D0000000200006A010000F80A00002102000000010000000D0000000200004A0200000D0B00002C02000000020000000D00000002000027030000200B00003502000000030000000D00000002000002040000330B00003E02000000040000000D000000020000D9040000460B00004502000000050000000D000000020000AF050000580B00004C02000000060000000D00000002000081060000680B00005202000000070000000D00000002000052070000790B00005602000000080000000D0000000200001F080000880B00005A02000000090000000D000000020000EA080000970B00005C020000000A0000000D000000020000B3090000A50B00005E020000000B0000000D000000020000780A0000B30B00005E020000000C0000000D0000000200003C0B0000BF0B00005E020000000D0000000D000000020000FC0B0000CB0B00005C020000000E0000000D000000020000BA0C0000D70B000059020000000F0000000D000000020000760D0000E10B00005602000000100000000D0000000200002F0E0000EB0B00005102000000000000000E00000002000081010000B80B00002402000000010000000E00000002000061020000CD0B00002E02000000020000000E0000000200003F030000E20B00003802000000030000000E0000000200001A040000F60B00004002000000040000000E000000020000F2040000090C00004802000000050000000E000000020000C80500001C0C00004E02000000060000000E0000000200009B0600002E0C00005402000000070000000E0000000200006C0700003F0C00005802000000080000000E0000000200003A0800004F0C00005C02000000090000000E000000020000050900005F0C00005E020000000A0000000E000000020000CE0900006E0C000060020000000B0000000E000000020000940A00007C0C000060020000000C0000000E000000020000580B00008A0C00005F020000000D0000000E000000020000190C0000970C00005E020000000E0000000E000000020000D80C0000A30C00005B020000000F0000000E000000020000940D0000AF0C00005802000000100000000E0000000200004D0E0000BA0C00005302000000000000000F00000002000097010000740C00002602000000010000000F000000020000780200008A0C00003002000000020000000F00000002000056030000A00C00003A02000000030000000F00000002000031040000B50C00004202000000040000000F0000000200000A050000C90C00004A02000000050000000F000000020000E0050000DD0C00005002000000060000000F000000020000B4060000EF0C00005602000000070000000F00000002000085070000020D00005A02000000080000000F00000002000054080000130D00005D02000000090000000F00000002000020090000240D000060020000000A0000000F000000020000E9090000340D000061020000000B0000000F000000020000B00A0000430D000061020000000C0000000F000000020000740B0000520D000061020000000D0000000F000000020000360C0000600D00005F020000000E0000000F000000020000F50C00006D0D00005C020000000F0000000F000000020000B10D0000790D00005902000000100000000F0000000200006B0E0000850D000054020000000000000010000000020000AD0100002D0D0000280200000001000000100000000200008E020000440D0000320200000002000000100000000200006C0300005B0D00003B02000000030000001000000002000048040000700D00004402000000040000001000000002000021050000860D00004B020000000500000010000000020000F80500009A0D000052020000000600000010000000020000CC060000AE0D0000570200000007000000100000000200009E070000C10D00005B0200000008000000100000000200006D080000D40D00005F02000000090000001000000002000039090000E50D000061020000000A00000010000000020000030A0000F60D000062020000000B00000010000000020000CB0A0000070E000063020000000C000000100000000200008F0B0000160E000062020000000D00000010000000020000510C0000250E000060020000000E00000010000000020000110D0000330E00005D020000000F00000010000000020000CE0D0000410E00005A020000001000000010000000020000880E00004D0E0000550200000000000000000000000300001A0000002A000000C2020000000100000000000000030000F400000032000000CE020000000200000000000000030000CC0100003A000000DA020000000300000000000000030000A202000040000000E40200000004000000000000000300007503000046000000EE020000000500000000000000030000450400004B000000F60200000006000000000000000300001305000050000000FE020000000700000000000000030000DE0500005400000004030000000800000000000000030000A6060000570000000A0300000009000000000000000300006C070000590000000E030000000A00000000000000030000300800005B00000012030000000B00000000000000030000F10800005C00000014030000000C00000000000000030000AF0900005C00000016030000000D000000000000000300006A0A00005B00000016030000000E00000000000000030000230B00005A00000015030000000F00000000000000030000DA0B000058000000140300000010000000000000000300008E0C000056000000110300000000000000010000000300003800000015010000CB020000000100000001000000030000130100001E010000D8020000000200000001000000030000EB01000026010000E3020000000300000001000000030000C10200002E010000EE0200000004000000010000000300009503000034010000F7020000000500000001000000030000650400003B01000000030000000600000001000000030000340500004001000007030000000700000001000000030000FF050000450100000E030000000800000001000000030000C806000049010000130300000009000000010000000300008F0700004C01000017030000000A00000001000000030000530800004F0100001B030000000B0000000100000003000014090000510100001D030000000C00000001000000030000D3090000520100001F030000000D000000010000000300008F0A0000520100001F030000000E00000001000000030000480B0000520100001E030000000F00000001000000030000FF0B0000510100001D030000001000000001000000030000B40C0000500100001A03000000000000000200000003000055000000FC010000D40200000001000000020000000300003101000006020000E10200000002000000020000000300000A0200000F020000EC020000000300000002000000030000E002000018020000F7020000000400000002000000030000B40300001F02000000030000000500000002000000030000850400002702000009030000000600000002000000030000540500002D02000010030000000700000002000000030000200600003302000016030000000800000002000000030000EA060000380200001C030000000900000002000000030000B00700003C02000020030000000A00000002000000030000750800004002000024030000000B00000002000000030000370900004202000026030000000C00000002000000030000F60900004502000027030000000D00000002000000030000B20A00004602000028030000000E000000020000000300006C0B00004702000027030000000F00000002000000030000240C00004702000025030000001000000002000000030000D90C0000460200002203000000000000000300000003000072000000E0020000DD0200000001000000030000000300004E010000EB020000EA02000000020000000300000003000028020000F5020000F5020000000300000003000000030000000300000003000000030000000400000003000000030000D30300000703000009030000000500000003000000030000A50400000F03000011030000000600000003000000030000740500001703000018030000000700000003000000030000400600001D0300001F0300000008000000030000000300000A0700002303000024030000000900000003000000030000D20700002903000028030000000A00000003000000030000970800002D0300002C030000000B0000000300000003000059090000310300002E030000000C00000003000000030000180A0000340300002F030000000D00000003000000030000D60A00003703000030030000000E00000003000000030000900B0000380300002F030000000F00000003000000030000480C0000390300002D030000001000000003000000030000FD0C00003A0300002A0300000000000000040000000300008E000000C1030000E50200000001000000040000000300006B010000CD030000F202000000020000000400000003000045020000D8030000FD0200000003000000040000000300001C030000E203000008030000000400000004000000030000F1030000EC03000011030000000500000004000000030000C3040000F50300001903000000060000000400000003000093050000FD030000210300000007000000040000000300006006000005040000270300000008000000040000000300002A0700000C0400002C030000000900000004000000030000F20700001204000030030000000A00000004000000030000B80800001804000034030000000B000000040000000300007A0900001D04000036030000000C000000040000000300003B0A00002104000037030000000D00000004000000030000F80A00002404000037030000000E00000004000000030000B30B00002704000037030000000F000000040000000300006C0C00002904000035030000001000000004000000030000220D00002A04000032030000000000000005000000030000AA0000009E040000ED02000000010000000500000003000087010000AB040000FA02000000020000000500000003000062020000B70400000503000000030000000500000003000039030000C30400000F0300000004000000050000000300000F040000CD04000019030000000500000005000000030000E1040000D704000021030000000600000005000000030000B2050000E1040000280300000007000000050000000300007F060000E90400002E0300000008000000050000000300004A070000F10400003403000000090000000500000003000012080000F804000038030000000A00000005000000030000D8080000FF0400003B030000000B000000050000000300009C090000050500003D030000000C000000050000000300005C0A00000A0500003E030000000D000000050000000300001A0B00000E0500003F030000000E00000005000000030000D60B0000120500003E030000000F000000050000000300008F0C0000150500003C030000001000000005000000030000450D00001705000039030000000000000006000000030000C500000078050000F5020000000100000006000000030000A301000086050000010300000002000000060000000300007E020000930500000C03000000030000000600000003000056030000A0050000170300000004000000060000000300002C040000AB05000020030000000500000006000000030000FF040000B605000028030000000600000006000000030000D0050000C10500002F0300000007000000060000000300009E060000CA0500003603000000080000000600000003000069070000D30500003B03000000090000000600000003000032080000DB0500003F030000000A00000006000000030000F8080000E305000042030000000B00000006000000030000BC090000EA05000044030000000C000000060000000300007D0A0000F005000045030000000D000000060000000300003C0B0000F505000046030000000E00000006000000030000F80B0000FA05000045030000000F00000006000000030000B10C0000FE05000043030000001000000006000000030000680D00000106000040030000000000000007000000030000E000000050060000FC020000000100000007000000030000BE0100005E06000008030000000200000007000000030000990200006C06000013030000000300000007000000030000720300007A0600001E0300000004000000070000000300004804000086060000270300000005000000070000000300001C050000920600002F030000000600000007000000030000ED0500009E06000036030000000700000007000000030000BC060000A80600003C03000000080000000700000003000088070000B20600004103000000090000000700000003000051080000BB06000046030000000A0000000700000003000018090000C406000049030000000B00000007000000030000DC090000CB0600004B030000000C000000070000000300009E0A0000D20600004C030000000D000000070000000300005D0B0000D90600004C030000000E00000007000000030000190C0000DE0600004B030000000F00000007000000030000D30C0000E3060000490300000010000000070000000300008A0D0000E706000046030000000000000008000000030000FA0000002307000003030000000100000008000000030000D8010000330700000F030000000200000008000000030000B4020000420700001A0300000003000000080000000300008E0300005107000024030000000400000008000000030000640400005E0700002D030000000500000008000000030000390500006B070000350300000006000000080000000300000A060000770700003C030000000700000008000000030000D90600008307000043030000000800000008000000030000A60700008E0700004803000000090000000800000003000070080000980700004C030000000A0000000800000003000037090000A10700004F030000000B00000008000000030000FC090000AA07000051030000000C00000008000000030000BE0A0000B207000052030000000D000000080000000300007D0B0000B907000052030000000E000000080000000300003A0C0000C007000051030000000F00000008000000030000F50C0000C60700004F030000001000000008000000030000AC0D0000CB0700004C03000000000000000900000003000013010000F407000009030000000100000009000000030000F20100000508000015030000000200000009000000030000CF0200001508000020030000000300000009000000030000A9030000240800002A03000000040000000900000003000080040000330800003303000000050000000900000003000055050000410800003B030000000600000009000000030000270600004E08000042030000000700000009000000030000F60600005A08000048030000000800000009000000030000C3070000660800004E0300000009000000090000000300008D0800007108000052030000000A00000009000000030000550900007B08000055030000000B000000090000000300001A0A00008508000057030000000C00000009000000030000DD0A00008E08000058030000000D000000090000000300009D0B00009608000058030000000E000000090000000300005A0C00009E08000057030000000F00000009000000030000150D0000A508000055030000001000000009000000030000CE0D0000AB0800005203000000000000000A0000000300002C010000C10800000F03000000010000000A0000000300000C020000D30800001B03000000020000000A000000030000E9020000E40800002603000000030000000A000000030000C3030000F40800003003000000040000000A0000000300009B040000040900003903000000050000000A00000003000070050000130900004103000000060000000A00000003000042060000210900004803000000070000000A000000030000120700002E0900004E03000000080000000A000000030000E00700003B0900005303000000090000000A000000030000AB0800004709000057030000000A0000000A00000003000073090000530900005A030000000B0000000A000000030000390A00005D0900005C030000000C0000000A000000030000FC0A0000670900005D030000000D0000000A000000030000BC0B0000700900005D030000000E0000000A0000000300007A0C0000790900005C030000000F0000000A000000030000360D0000810900005A03000000100000000A000000030000EE0D0000880900005703000000000000000B000000030000450100008C0900001403000000010000000B000000030000250200009E0900002003000000020000000B00000003000002030000B00900002B03000000030000000B000000030000DD030000C10900003503000000040000000B000000030000B5040000D20900003E03000000050000000B0000000300008B050000E20900004603000000060000000B0000000300005E060000F10900004D03000000070000000B0000000300002E070000FF0900005303000000080000000B000000030000FC0700000D0A00005803000000090000000B000000030000C80800001A0A00005C030000000A0000000B00000003000090090000260A00005F030000000B0000000B000000030000560A0000320A000061030000000C0000000B0000000300001A0B00003D0A000062030000000D0000000B000000030000DB0B0000470A000062030000000E0000000B000000030000990C0000510A000060030000000F0000000B000000030000550D0000590A00005E03000000100000000B0000000300000F0E0000610A00005B03000000000000000C0000000300005C010000520A00001903000000010000000C0000000300003D020000660A00002503000000020000000C0000000300001B030000790A00003003000000030000000C000000030000F60300008B0A00003A03000000040000000C000000030000CF0400009D0A00004303000000050000000C000000030000A5050000AE0A00004B03000000060000000C00000003000079060000BE0A00005203000000070000000C0000000300004A070000CD0A00005803000000080000000C00000003000018080000DC0A00005D03000000090000000C000000030000E4080000EA0A000060030000000A0000000C000000030000AD090000F70A000063030000000B0000000C000000030000740A0000040B000065030000000C0000000C000000030000380B00000F0B000066030000000D0000000C000000030000F90B00001B0B000066030000000E0000000C000000030000B80C0000250B000065030000000F0000000C000000030000750D00002F0B00006303000000100000000C0000000300002E0E0000380B00005F03000000000000000D00000003000074010000160B00001D03000000010000000D000000030000550200002B0B00002903000000020000000D000000030000330300003F0B00003403000000030000000D0000000300000F040000520B00003E03000000040000000D000000030000E8040000640B00004703000000050000000D000000030000BF050000760B00004F03000000060000000D00000003000093060000870B00005603000000070000000D00000003000064070000980B00005C03000000080000000D00000003000033080000A70B00006103000000090000000D000000030000FF080000B60B000065030000000A0000000D000000030000C9090000C40B000067030000000B0000000D000000030000900A0000D20B000069030000000C0000000D000000030000550B0000DF0B00006A030000000D0000000D000000030000170C0000EB0B00006A030000000E0000000D000000030000D60C0000F60B000069030000000F0000000D000000030000930D0000010C00006603000000100000000D0000000300004D0E00000B0C00006303000000000000000E0000000300008A010000D70B00002203000000010000000E0000000300006C020000EC0B00002E03000000020000000E0000000300004B030000010C00003803000000030000000E00000003000027040000150C00004203000000040000000E00000003000001050000290C00004B03000000050000000E000000030000D80500003B0C00005303000000060000000E000000030000AC0600004D0C00005A03000000070000000E0000000300007E0700005F0C00006003000000080000000E0000000300004E0800006F0C00006503000000090000000E0000000300001B0900007F0C000068030000000A0000000E000000030000E50900008F0C00006B030000000B0000000E000000030000AC0A00009D0C00006D030000000C0000000E000000030000710B0000AB0C00006E030000000D0000000E000000030000340C0000B80C00006D030000000E0000000E000000030000F40C0000C40C00006C030000000F0000000E000000030000B10D0000D00C00006A03000000100000000E0000000300006C0E0000DB0C00006703000000000000000F000000030000A1010000940C00002503000000010000000F00000003000083020000AA0C00003103000000020000000F00000003000062030000C00C00003C03000000030000000F0000000300003F040000D50C00004603000000040000000F00000003000019050000EA0C00004F03000000050000000F000000030000F0050000FE0C00005603000000060000000F000000030000C5060000110D00005D03000000070000000F00000003000098070000230D00006303000000080000000F00000003000068080000340D00006803000000090000000F00000003000035090000450D00006C030000000A0000000F000000030000000A0000560D00006E030000000B0000000F000000030000C80A0000650D000070030000000C0000000F0000000300008D0B0000740D000071030000000D0000000F000000030000500C0000820D000071030000000E0000000F000000030000110D00008F0D00006F030000000F0000000F000000030000CF0D00009C0D00006D03000000100000000F0000000300008A0E0000A80D00006A030000000000000010000000030000B60100004E0D00002903000000010000001000000003000099020000660D000034030000000200000010000000030000780300007C0D00003F03000000030000001000000003000056040000920D00004903000000040000001000000003000030050000A80D00005203000000050000001000000003000009060000BC0D00005A030000000600000010000000030000DE060000D00D000060030000000700000010000000030000B1070000E40D00006603000000080000001000000003000081080000F60D00006B0300000009000000100000000300004F090000080E00006E030000000A000000100000000300001A0A0000190E000071030000000B00000010000000030000E30A00002A0E000073030000000C00000010000000030000A90B0000390E000074030000000D000000100000000300006C0C0000490E000073030000000E000000100000000300002D0D0000570E000072030000000F00000010000000030000EC0D0000640E00006F030000001000000010000000030000A70E0000710E00006C0300000000000000000000000400002200000039000000A6030000000100000000000000040000FE00000041000000B4030000000200000000000000040000D701000048000000C0030000000300000000000000040000AE0200004E000000CC0300000004000000000000000400008203000054000000D70300000005000000000000000400005304000059000000E0030000000600000000000000040000220500005E000000E9030000000700000000000000040000EF05000062000000F0030000000800000000000000040000B906000065000000F70300000009000000000000000400008007000067000000FC030000000A00000000000000040000440800006900000001040000000B00000000000000040000060900006900000005040000000C00000000000000040000C60900006A00000007040000000D00000000000000040000830A00006900000009040000000E000000000000000400003D0B00006800000009040000000F00000000000000040000F50B00006600000009040000001000000000000000040000AA0C000063000000070400000000000000010000000400004000000024010000B10300000001000000010000000400001C0100002D010000BF030000000200000001000000040000F601000035010000CB030000000300000001000000040000CD0200003D010000D7030000000400000001000000040000A203000044010000E2030000000500000001000000040000740400004A010000EB030000000600000001000000040000430500004F010000F40300000007000000010000000400001006000054010000FB030000000800000001000000040000DA0600005801000002040000000900000001000000040000A20700005B01000007040000000A00000001000000040000670800005E0100000C040000000B000000010000000400002A090000600100000F040000000C00000001000000040000EA0900006101000012040000000D00000001000000040000A70A00006201000013040000000E00000001000000040000620B00006101000014040000000F000000010000000400001A0C00006001000013040000001000000001000000040000D00C00005F010000120400000000000000020000000400005D0000000D020000BC0300000001000000020000000400003A01000016020000C90300000002000000020000000400001402000020020000D6030000000300000002000000040000EC02000028020000E1030000000400000002000000040000C103000030020000EC0300000005000000020000000400009404000037020000F6030000000600000002000000040000640500003E020000FE030000000700000002000000040000310600004302000006040000000800000002000000040000FC060000480200000C040000000900000002000000040000C40700004D02000012040000000A000000020000000400008A0800005002000016040000000B000000020000000400004D090000530200001A040000000C000000020000000400000D0A0000550200001C040000000D00000002000000040000CB0A0000570200001E040000000E00000002000000040000860B0000570200001E040000000F000000020000000400003F0C0000570200001E040000001000000002000000040000F50C0000570200001C0400000000000000030000000400007A000000F2020000C603000000010000000300000004000058010000FD020000D40300000002000000030000000400003202000007030000E00300000003000000030000000400000A03000010030000EC030000000400000003000000040000E003000019030000F6030000000500000003000000040000B30400002103000000040000000600000003000000040000840500002903000008040000000700000003000000040000510600002F030000100400000008000000030000000400001D0700003503000016040000000900000003000000040000E50700003A0300001C040000000A00000003000000040000AC0800003F03000020040000000B000000030000000400006F0900004303000024040000000C00000003000000040000300A00004603000026040000000D00000003000000040000EE0A00004803000028040000000E00000003000000040000AA0B00004A03000028040000000F00000003000000040000640C00004B030000270400000010000000030000000400001A0D00004C0300002604000000000000000400000004000097000000D4030000D003000000010000000400000004000074010000DF030000DD03000000020000000400000004000050020000EB030000EA03000000030000000400000004000028030000F5030000F5030000000400000004000000040000000400000004000000040000000500000004000000040000D20400000804000009040000000600000004000000040000A305000010040000120400000007000000040000000400007106000018040000190400000008000000040000000400003D0700001F04000020040000000900000004000000040000060800002504000025040000000A00000004000000040000CD0800002B0400002A040000000B0000000400000004000091090000300400002D040000000C00000004000000040000520A00003404000030040000000D00000004000000040000110B00003704000031040000000E00000004000000040000CE0B00003A04000031040000000F00000004000000040000870C00003C040000310400000010000000040000000400003E0D00003D0400002F040000000000000005000000040000B2000000B2040000D903000000010000000500000004000091010000BF040000E70300000002000000050000000400006C020000CB040000F303000000030000000500000004000046030000D7040000FF0300000004000000050000000400001C040000E104000009040000000500000005000000040000F0040000EC04000013040000000600000005000000040000C2050000F50400001B04000000070000000500000004000090060000FD040000230400000008000000050000000400005D0700000505000029040000000900000005000000040000260800000D0500002E040000000A00000005000000040000EE0800001305000033040000000B00000005000000040000B20900001905000036040000000C00000005000000040000740A00001E05000039040000000D00000005000000040000330B0000230500003A040000000E00000005000000040000F00B0000260500003A040000000F00000005000000040000AA0C0000290500003A040000001000000005000000040000620D00002C05000038040000000000000006000000040000CE0000008E050000E2030000000100000006000000040000AC0100009B050000F003000000020000000600000004000089020000A9050000FC03000000030000000600000004000062030000B50500000804000000040000000600000004000039040000C1050000120400000005000000060000000400000E050000CC0500001C040000000600000006000000040000E0050000D605000024040000000700000006000000040000AF060000E00500002B0400000008000000060000000400007C070000E90500003204000000090000000600000004000046080000F105000037040000000A000000060000000400000E090000F80500003C040000000B00000006000000040000D3090000FF0500003F040000000C00000006000000040000950A00000506000041040000000D00000006000000040000550B00000B06000043040000000E00000006000000040000120C00000F06000043040000000F00000006000000040000CD0C00001306000042040000001000000006000000040000850D00001706000041040000000000000007000000040000E800000066060000EB030000000100000007000000040000C801000075060000F8030000000200000007000000040000A402000083060000050400000003000000070000000400007E0300009006000010040000000400000007000000040000560400009D0600001B0400000005000000070000000400002B050000A906000024040000000600000007000000040000FD050000B40600002C040000000700000007000000040000CD060000BF060000340400000008000000070000000400009B070000C90600003A04000000090000000700000004000065080000D206000040040000000A000000070000000400002D090000DA06000044040000000B00000007000000040000F3090000E206000047040000000C00000007000000040000B60A0000E90600004A040000000D00000007000000040000760B0000F00600004B040000000E00000007000000040000340C0000F50600004B040000000F00000007000000040000EF0C0000FA0600004A040000001000000007000000040000A80D0000FF06000049040000000000000008000000040000020100003B070000F3030000000100000008000000040000E20100004B07000000040000000200000008000000040000BF0200005A0700000D0400000003000000080000000400009A030000680700001804000000040000000800000004000072040000760700002304000000050000000800000004000048050000830700002C0400000006000000080000000400001A0600008F07000034040000000700000008000000040000EB0600009B0700003C040000000800000008000000040000B9070000A60700004204000000090000000800000004000084080000B007000047040000000A000000080000000400004C090000B90700004C040000000B00000008000000040000120A0000C20700004F040000000C00000008000000040000D60A0000CA07000051040000000D00000008000000040000970B0000D107000053040000000E00000008000000040000550C0000D807000053040000000F00000008000000040000110D0000DE07000052040000001000000008000000040000CA0D0000E3070000500400000000000000090000000400001C0100000D080000FB030000000100000009000000040000FC0100001D08000008040000000200000009000000040000DA0200002E08000014040000000300000009000000040000B50300003D080000200400000004000000090000000400008E0400004C0800002A040000000500000009000000040000640500005A0800003404000000060000000900000004000037060000670800003C040000000700000009000000040000080700007308000043040000000800000009000000040000D60700007F0800004A040000000900000009000000040000A20800008A0800004F040000000A000000090000000400006B0900009508000053040000000B00000009000000040000310A00009F08000056040000000C00000009000000040000F50A0000A808000059040000000D00000009000000040000B70B0000B00800005A040000000E00000009000000040000750C0000B80800005A040000000F00000009000000040000320D0000BE08000059040000001000000009000000040000EB0D0000C50800005804000000000000000A00000004000035010000DB0800000204000000010000000A00000004000016020000ED0800000F04000000020000000A000000040000F4020000FE0800001C04000000030000000A000000040000D00300000E0900002704000000040000000A000000040000A90400001E0900003104000000050000000A0000000400007F0500002D0900003B04000000060000000A000000040000530600003B0900004304000000070000000A00000004000024070000490900004A04000000080000000A000000040000F3070000560900005104000000090000000A000000040000BF0800006209000056040000000A0000000A000000040000890900006D0900005A040000000B0000000A000000040000500A0000780900005D040000000C0000000A000000040000140B00008209000060040000000D0000000A000000040000D60B00008B09000061040000000E0000000A000000040000950C00009409000061040000000F0000000A000000040000520D00009C0900006004000000100000000A0000000400000C0E0000A30900005F04000000000000000B0000000400004D010000A60900000904000000010000000B0000000400002F020000B90900001604000000020000000B0000000400000D030000CB0900002304000000030000000B000000040000E9030000DD0900002E04000000040000000B000000040000C3040000ED0900003804000000050000000B0000000400009A050000FD0900004204000000060000000B0000000400006E0600000C0A00004A04000000070000000B000000040000400700001B0A00005104000000080000000B0000000400000F080000290A00005704000000090000000B000000040000DC080000360A00005D040000000A0000000B000000040000A6090000420A000061040000000B0000000B0000000400006E0A00004E0A000064040000000C0000000B000000040000330B0000590A000066040000000D0000000B000000040000F50B0000630A000067040000000E0000000B000000040000B50C00006D0A000068040000000F0000000B000000040000720D0000760A00006704000000100000000B0000000400002C0E00007E0A00006504000000000000000C000000040000650100006F0A00000F04000000010000000C00000004000047020000820A00001D04000000020000000C00000004000026030000950A00002904000000030000000C00000004000003040000A80A00003404000000040000000C000000040000DD040000B90A00003F04000000050000000C000000040000B4050000CA0A00004804000000060000000C00000004000089060000DA0A00005004000000070000000C0000000400005B070000EA0A00005704000000080000000C0000000400002B080000F90A00005E04000000090000000C000000040000F8080000070B000063040000000A0000000C000000040000C3090000140B000067040000000B0000000C0000000400008B0A0000210B00006A040000000C0000000C000000040000500B00002D0B00006C040000000D0000000C000000040000130C0000380B00006E040000000E0000000C000000040000D30C0000430B00006E040000000F0000000C000000040000910D00004D0B00006D04000000100000000C0000000400004C0E0000560B00006B04000000000000000D0000000400007D010000330B00001504000000010000000D0000000400005F020000480B00002304000000020000000D0000000400003F0300005C0B00002F04000000030000000D0000000400001C0400006F0B00003A04000000040000000D000000040000F6040000820B00004504000000050000000D000000040000CE050000940B00004E04000000060000000D000000040000A3060000A50B00005604000000070000000D00000004000076070000B60B00005D04000000080000000D00000004000046080000C50B00006304000000090000000D00000004000014090000D50B000069040000000A0000000D000000040000DF090000E30B00006D040000000B0000000D000000040000A80A0000F10B000070040000000C0000000D0000000400006E0B0000FE0B000072040000000D0000000D000000040000310C00000A0C000073040000000E0000000D000000040000F20C0000150C000073040000000F0000000D000000040000B00D0000200C00007304000000100000000D0000000400006B0E00002A0C00007104000000000000000E00000004000093010000F50B00001B04000000010000000E000000040000760200000B0C00002804000000020000000E00000004000056030000200C00003504000000030000000E00000004000034040000340C00004004000000040000000E0000000400000F050000480C00004A04000000050000000E000000040000E70500005B0C00005304000000060000000E000000040000BD0600006D0C00005B04000000070000000E000000040000910700007E0C00006304000000080000000E000000040000610800008F0C00006904000000090000000E0000000400002F0900009F0C00006E040000000A0000000E000000040000FB090000AE0C000072040000000B0000000E000000040000C40A0000BD0C000075040000000C0000000E0000000400008A0B0000CB0C000077040000000D0000000E0000000400004E0C0000D80C000079040000000E0000000E0000000400000F0D0000E50C000079040000000F0000000E000000040000CE0D0000F10C00007804000000100000000E0000000400008A0E0000FC0C00007604000000000000000F000000040000AA010000B40C00002004000000010000000F0000000400008D020000CA0C00002D04000000020000000F0000000400006D030000E00C00003A04000000030000000F0000000400004C040000F50C00004504000000040000000F000000040000270500000A0D00004F04000000050000000F000000040000000600001E0D00005804000000060000000F000000040000D6060000310D00006004000000070000000F000000040000AA070000430D00006804000000080000000F0000000400007B080000550D00006E04000000090000000F0000000400004A090000660D000073040000000A0000000F000000040000160A0000770D000077040000000B0000000F000000040000DF0A0000860D00007A040000000C0000000F000000040000A60B0000950D00007C040000000D0000000F0000000400006B0C0000A30D00007D040000000E0000000F0000000400002C0D0000B10D00007D040000000F0000000F000000040000EC0D0000BE0D00007D04000000100000000F000000040000A80E0000CA0D00007B040000000000000010000000040000BF0100006F0D000025040000000100000010000000040000A3020000860D000032040000000200000010000000040000840300009D0D00003E04000000030000001000000004000063040000B40D00004A0400000004000000100000000400003F050000C90D00005404000000050000001000000004000018060000DE0D00005D040000000600000010000000040000EF060000F20D000065040000000700000010000000040000C3070000060E00006C04000000080000001000000004000095080000180E000072040000000900000010000000040000640900002A0E000077040000000A00000010000000040000310A00003C0E00007C040000000B00000010000000040000FB0A00004C0E00007F040000000C00000010000000040000C20B00005C0E000081040000000D00000010000000040000870C00006B0E000082040000000E00000010000000040000490D00007A0E000082040000000F00000010000000040000090E0000880E000081040000001000000010000000040000C60E0000950E00007F040000000000000000000000050000290000004600000086040000000100000000000000050000060100004E00000095040000000200000000000000050000E101000055000000A2040000000300000000000000050000B90200005C000000AF0400000004000000000000000500008E03000062000000BB0400000005000000000000000500006104000067000000C5040000000600000000000000050000310500006B000000CF040000000700000000000000050000FF0500006F000000D8040000000800000000000000050000CA06000072000000E00400000009000000000000000500009307000074000000E6040000000A000000000000000500005908000076000000EC040000000B000000000000000500001C09000077000000F0040000000C00000000000000050000DD09000077000000F4040000000D000000000000000500009B0A000076000000F7040000000E00000000000000050000560B000075000000F8040000000F000000000000000500000F0C000073000000F9040000001000000000000000050000C60C000070000000F8040000000000000001000000050000470000003301000092040000000100000001000000050000250100003C010000A10400000002000000010000000500000002000044010000AF040000000300000001000000050000D80200004C010000BC040000000400000001000000050000AE03000052010000C70400000005000000010000000500008204000058010000D2040000000600000001000000050000520500005E010000DC0400000007000000010000000500002106000063010000E4040000000800000001000000050000EC06000067010000EC040000000900000001000000050000B50700006A010000F3040000000A000000010000000500007C0800006C010000F8040000000B000000010000000500003F0900006E010000FD040000000C00000001000000050000010A00006F01000001050000000D00000001000000050000BF0A00007001000003050000000E000000010000000500007B0B00007001000005050000000F00000001000000050000350C00006F01000005050000001000000001000000050000EC0C00006D01000005050000000000000002000000050000650000001C0200009F0400000001000000020000000500004301000026020000AD0400000002000000020000000500001E0200002F020000BB040000000300000002000000050000F702000038020000C8040000000400000002000000050000CE03000040020000D3040000000500000002000000050000A204000047020000DE040000000600000002000000050000730500004D020000E80400000007000000020000000500004206000053020000F00400000008000000020000000500000E07000058020000F8040000000900000002000000050000D70700005C020000FF040000000A000000020000000500009E0800006002000004050000000B00000002000000050000620900006302000009050000000C00000002000000050000240A0000650200000D050000000D00000002000000050000E30A0000660200000F050000000E00000002000000050000A00B00006702000011050000000F000000020000000500005A0C00006702000011050000001000000002000000050000110D000066020000110500000000000000030000000500008200000003030000AA040000000100000003000000050000600100000E030000B90400000002000000030000000500003C02000018030000C70400000003000000030000000500001603000021030000D3040000000400000003000000050000ED0300002A030000DF040000000500000003000000050000C104000032030000EA040000000600000003000000050000930500003A030000F40400000007000000030000000500006206000040030000FC0400000008000000030000000500002F0700004603000004050000000900000003000000050000F90700004B0300000A050000000A00000003000000050000C00800005003000010050000000B00000003000000050000850900005403000015050000000C00000003000000050000470A00005703000018050000000D00000003000000050000070B0000590300001B050000000E00000003000000050000C40B00005B0300001C050000000F000000030000000500007E0C00005C0300001D050000001000000003000000050000360D00005D0300001D0500000000000000040000000500009E000000E6030000B60400000001000000040000000500007D010000F2030000C40400000002000000040000000500005A020000FD030000D20400000003000000040000000500003403000007040000DF0400000004000000040000000500000B04000011040000EA040000000500000004000000050000E00400001A040000F5040000000600000004000000050000B205000023040000FF040000000700000004000000050000820600002A040000070500000008000000040000000500004F070000310400000F050000000900000004000000050000190800003704000016050000000A00000004000000050000E10800003D0400001B050000000B00000004000000050000A70900004204000020050000000C00000004000000050000690A00004604000023050000000D000000040000000500002A0B00004904000026050000000E00000004000000050000E70B00004C04000028050000000F00000004000000050000A20C00004E040000280500000010000000040000000500005B0D00005004000028050000000000000005000000050000BA000000C5040000C10400000001000000050000000500009A010000D2040000CF04000000020000000500000005000077020000DF040000DD04000000030000000500000005000051030000EA040000EA04000000040000000500000005000029040000F5040000F5040000000500000005000000050000000500000005000000050000000600000005000000050000D1050000080500000A050000000700000005000000050000A106000011050000120500000008000000050000000500006F070000190500001A0500000009000000050000000500003A0800002005000021050000000A00000005000000050000020900002705000026050000000B00000005000000050000C80900002D0500002B050000000C000000050000000500008B0A0000320500002E050000000D000000050000000500004C0B00003605000031050000000E000000050000000500000A0C00003A05000032050000000F00000005000000050000C50C00003D050000330500000010000000050000000500007E0D00003F05000032050000000000000006000000050000D5000000A2050000CB040000000100000006000000050000B5010000B0050000DA04000000020000000600000005000093020000BD050000E70400000003000000060000000500006E030000CA050000F404000000040000000600000005000046040000D5050000000500000005000000060000000500001C050000E00500000A050000000600000006000000050000EF050000EB05000014050000000700000006000000050000C0060000F50500001D0500000008000000060000000500008E070000FD0500002405000000090000000600000005000059080000060600002B050000000A00000006000000050000220900000D06000031050000000B00000006000000050000E90900001406000035050000000C00000006000000050000AC0A00001A06000039050000000D000000060000000500006E0B0000200600003B050000000E000000060000000500002C0C0000240600003D050000000F00000006000000050000E80C0000280600003D050000001000000006000000050000A20D00002C0600003D050000000000000007000000050000F00000007B060000D5040000000100000007000000050000D10100008A060000E4040000000200000007000000050000AF02000099060000F20400000003000000070000000500008A030000A6060000FE04000000040000000700000005000063040000B30600000A05000000050000000700000005000039050000BF060000140500000006000000070000000500000D060000CA0600001E050000000700000007000000050000DE060000D506000027050000000800000007000000050000AD070000DF0600002E05000000090000000700000005000079080000E806000035050000000A0000000700000005000042090000F10600003B050000000B00000007000000050000090A0000F80600003F050000000C00000007000000050000CD0A00000007000043050000000D000000070000000500008F0B00000607000045050000000E000000070000000500004E0C00000C07000047050000000F000000070000000500000A0D00001107000047050000001000000007000000050000C40D000015070000470500000000000000080000000500000A01000052070000DF040000000100000008000000050000EB01000061070000ED040000000200000008000000050000CA02000071070000FB040000000300000008000000050000A60300007F070000080500000004000000080000000500007F0400008D07000013050000000500000008000000050000560500009A0700001E0500000006000000080000000500002A060000A607000028050000000700000008000000050000FC060000B207000030050000000800000008000000050000CB070000BD0700003805000000090000000800000005000097080000C70700003F050000000A0000000800000005000061090000D107000044050000000B00000008000000050000290A0000D907000049050000000C00000008000000050000ED0A0000E20700004C050000000D00000008000000050000AF0B0000E90700004F050000000E000000080000000500006F0C0000F007000050050000000F000000080000000500002C0D0000F607000051050000001000000008000000050000E60D0000FB070000500500000000000000090000000500002401000025080000E80400000001000000090000000500000502000035080000F7040000000200000009000000050000E40200004608000004050000000300000009000000050000C103000055080000110500000004000000090000000500009B040000640800001D050000000500000009000000050000720500007208000027050000000600000009000000050000470600007F08000031050000000700000009000000050000190700008C0800003A050000000800000009000000050000E80700009808000041050000000900000009000000050000B5080000A308000048050000000A0000000900000005000080090000AD0800004D050000000B00000009000000050000480A0000B708000052050000000C000000090000000500000D0B0000C008000055050000000D00000009000000050000D00B0000C908000058050000000E00000009000000050000900C0000D008000059050000000F000000090000000500004D0D0000D70800005A050000001000000009000000050000080E0000DE0800005905000000000000000A0000000500003D010000F4080000F104000000010000000A0000000500001F020000060900000005000000020000000A000000050000FE020000170900000D05000000030000000A000000050000DB030000280900001A05000000040000000A000000050000B6040000370900002505000000050000000A0000000500008E050000460900003005000000060000000A00000005000063060000550900003A05000000070000000A00000005000035070000620900004205000000080000000A000000050000050800006F0900004A05000000090000000A000000050000D30800007C09000050050000000A0000000A0000000500009E0900008709000056050000000B0000000A000000050000660A0000920900005A050000000C0000000A0000000500002C0B00009C0900005E050000000D0000000A000000050000EF0B0000A509000061050000000E0000000A000000050000B00C0000AE09000062050000000F0000000A0000000500006E0D0000B60900006305000000100000000A000000050000290E0000BD0900006205000000000000000B00000005000055010000C1090000F904000000010000000B00000005000038020000D40900000805000000020000000B00000005000018030000E60900001605000000030000000B000000050000F5030000F70900002205000000040000000B000000050000D0040000080A00002E05000000050000000B000000050000A9050000180A00003805000000060000000B0000000500007E060000270A00004205000000070000000B00000005000051070000360A00004B05000000080000000B00000005000022080000440A00005205000000090000000B000000050000F0080000510A000059050000000A0000000B000000050000BB0900005D0A00005E050000000B0000000B000000050000840A0000690A000063050000000C0000000B0000000500004A0B0000740A000066050000000D0000000B0000000500000E0C00007F0A000069050000000E0000000B000000050000CF0C0000880A00006A050000000F0000000B0000000500008E0D0000910A00006B05000000100000000B000000050000490E00009A0A00006A05000000000000000C0000000500006D0100008A0A00000105000000010000000C000000050000500200009E0A00001005000000020000000C00000005000031030000B10A00001E05000000030000000C0000000500000F040000C30A00002A05000000040000000C000000050000EA040000D50A00003605000000050000000C000000050000C3050000E60A00004005000000060000000C00000005000099060000F60A00004A05000000070000000C0000000500006D070000060B00005305000000080000000C0000000500003E080000150B00005A05000000090000000C0000000500000C090000230B000061050000000A0000000C000000050000D8090000310B000066050000000B0000000C000000050000A20A00003D0B00006B050000000C0000000C000000050000680B00004A0B00006E050000000D0000000C0000000500002C0C0000550B000071050000000E0000000C000000050000EE0C0000600B000072050000000F0000000C000000050000AD0D00006A0B00007305000000100000000C000000050000690E0000730B00007205000000000000000D00000005000085010000500B00000905000000010000000D00000005000068020000650B00001705000000020000000D00000005000049030000790B00002505000000030000000D000000050000280400008C0B00003205000000040000000D000000050000040500009F0B00003D05000000050000000D000000050000DD050000B10B00004805000000060000000D000000050000B4060000C20B00005105000000070000000D00000005000088070000D30B00005A05000000080000000D00000005000059080000E30B00006205000000090000000D00000005000028090000F20B000068050000000A0000000D000000050000F5090000010C00006E050000000B0000000D000000050000BE0A00000E0C000072050000000C0000000D000000050000860B00001B0C000076050000000D0000000D0000000500004A0C0000280C000078050000000E0000000D0000000500000C0D0000340C00007A050000000F0000000D000000050000CC0D00003E0C00007A05000000100000000D000000050000890E0000490C00007905000000000000000E0000000500009C010000130C00001005000000010000000E00000005000080020000290C00001F05000000020000000E000000050000610300003E0C00002C05000000030000000E00000005000040040000520C00003905000000040000000E0000000500001C050000660C00004405000000050000000E000000050000F6050000790C00004F05000000060000000E000000050000CD0600008B0C00005905000000070000000E000000050000A20700009D0C00006105000000080000000E00000005000074080000AE0C00006905000000090000000E00000005000044090000BE0C00006F050000000A0000000E000000050000100A0000CD0C000075050000000B0000000E000000050000DB0A0000DC0C000079050000000C0000000E000000050000A20B0000EA0C00007D050000000D0000000E000000050000680C0000F80C00007F050000000E0000000E0000000500002A0D0000040D000081050000000F0000000E000000050000EA0D0000100D00008105000000100000000E000000050000A70E00001B0D00008005000000000000000F000000050000B2010000D20C00001705000000010000000F00000005000096020000E90C00002505000000020000000F00000005000078030000FF0C00003305000000030000000F00000005000058040000150D00003F05000000040000000F00000005000035050000290D00004B05000000050000000F0000000500000F0600003D0D00005605000000060000000F000000050000E7060000510D00005F05000000070000000F000000050000BC070000630D00006805000000080000000F0000000500008E080000750D00006F05000000090000000F0000000500005E090000860D000076050000000A0000000F0000000500002C0A0000970D00007B050000000B0000000F000000050000F60A0000A70D000080050000000C0000000F000000050000BF0B0000B60D000083050000000D0000000F000000050000840C0000C40D000086050000000E0000000F000000050000470D0000D20D000087050000000F0000000F000000050000080E0000DF0D00008805000000100000000F000000050000C60E0000EB0D000087050000000000000010000000050000C80100008F0D00001D050000000100000010000000050000AD020000A60D00002C0500000002000000100000000500008F030000BE0D0000390500000003000000100000000500006F040000D40D0000460500000004000000100000000500004C050000EA0D00005105000000050000001000000005000027060000FF0D00005C050000000600000010000000050000FF060000130E000065050000000700000010000000050000D5070000270E00006E050000000800000010000000050000A8080000390E000075050000000900000010000000050000780900004C0E00007C050000000A00000010000000050000460A00005D0E000081050000000B00000010000000050000120B00006E0E000086050000000C00000010000000050000DA0B00007E0E000089050000000D00000010000000050000A00C00008D0E00008C050000000E00000010000000050000640D00009C0E00008D050000000F00000010000000050000250E0000AA0E00008E050000001000000010000000050000E30E0000B70E00008D0500000000000000000000000600003000000053000000610500000001000000000000000600000E0100005B00000071050000000200000000000000060000EA0100006200000080050000000300000000000000060000C3020000680000008E0500000004000000000000000600009A0300006E0000009A0500000005000000000000000600006E04000073000000A60500000006000000000000000600004005000078000000B10500000007000000000000000600000F0600007B000000BB050000000800000000000000060000DB0600007E000000C4050000000900000000000000060000A507000081000000CB050000000A000000000000000600006C08000082000000D2050000000B000000000000000600003109000083000000D8050000000C00000000000000060000F309000083000000DD050000000D00000000000000060000B20A000083000000E0050000000E000000000000000600006F0B000081000000E3050000000F00000000000000060000290C00007F000000E5050000001000000000000000060000E10C00007D000000E50500000000000000010000000600004E000000410100006F0500000001000000010000000600002D0100004A0100007F05000000020000000100000006000009020000520100008E050000000300000001000000060000E3020000590100009C050000000400000001000000060000BA03000060010000A90500000005000000010000000600008F04000066010000B4050000000600000001000000060000610500006C010000BF0500000007000000010000000600003006000070010000C9050000000800000001000000060000FD06000074010000D2050000000900000001000000060000C707000078010000DA050000000A000000010000000600008F0800007A010000E0050000000B00000001000000060000540900007C010000E6050000000C00000001000000060000170A00007D010000EB050000000D00000001000000060000D70A00007E010000EE050000000E00000001000000060000940B00007D010000F1050000000F000000010000000600004F0C00007C010000F3050000001000000001000000060000070D00007B010000F40500000000000000020000000600006C0000002B0200007D0500000001000000020000000600004B010000350200008D050000000200000002000000060000280200003F0200009C0500000003000000020000000600000203000047020000A9050000000400000002000000060000DA0300004F020000B6050000000500000002000000060000AF04000056020000C2050000000600000002000000060000810500005C020000CD0500000007000000020000000600005106000062020000D70500000008000000020000000600001F07000067020000E0050000000900000002000000060000EA0700006B020000E7050000000A00000002000000060000B20800006F020000EE050000000B000000020000000600007709000072020000F4050000000C000000020000000600003A0A000074020000F9050000000D00000002000000060000FB0A000075020000FC050000000E00000002000000060000B90B000076020000FF050000000F00000002000000060000740C000076020000010600000010000000020000000600002D0D0000750200000106000000000000000300000006000089000000130300008A050000000100000003000000060000690100001E0300009A0500000002000000030000000600004602000028030000A90500000003000000030000000600002103000031030000B7050000000400000003000000060000F90300003A030000C4050000000500000003000000060000CE04000042030000CF050000000600000003000000060000A10500004A030000DA0500000007000000030000000600007206000050030000E40500000008000000030000000600004007000056030000ED0500000009000000030000000600000B0800005C030000F5050000000A00000003000000060000D408000060030000FB050000000B000000030000000600009A0900006403000001060000000C000000030000000600005D0A00006703000006060000000D000000030000000600001E0B00006A0300000A060000000E00000003000000060000DD0B00006B0300000C060000000F00000003000000060000990C00006D0300000E060000001000000003000000060000520D00006D0300000F060000000000000004000000060000A5000000F7030000970500000001000000040000000600008601000003040000A7050000000200000004000000060000630200000E040000B60500000003000000040000000600003F03000019040000C40500000004000000040000000600001704000022040000D0050000000500000004000000060000ED0400002C040000DC050000000600000004000000060000C105000034040000E7050000000700000004000000060000920600003C040000F10500000008000000040000000600006007000043040000FA0500000009000000040000000600002C0800004904000002060000000A00000004000000060000F50800004F04000008060000000B00000004000000060000BC090000530400000E060000000C00000004000000060000800A00005804000013060000000D00000004000000060000410B00005B04000017060000000E00000004000000060000000C00005E04000019060000000F00000004000000060000BD0C0000600400001B060000001000000004000000060000760D0000610400001C060000000000000005000000060000C1000000D8040000A3050000000100000005000000060000A2010000E5040000B305000000020000000500000006000080020000F1040000C20500000003000000050000000600005C030000FD040000D00500000004000000050000000600003504000007050000DD0500000005000000050000000600000C05000012050000E9050000000600000005000000060000E00500001B050000F4050000000700000005000000060000B106000024050000FD050000000800000005000000060000800700002C050000060600000009000000050000000600004C080000330500000E060000000A00000005000000060000160900003A05000015060000000B00000005000000060000DD0900003F0500001B060000000C00000005000000060000A20A0000450500001F060000000D00000005000000060000640B00004905000023060000000E00000005000000060000230C00004D05000026060000000F00000005000000060000E00C000050050000280600000010000000050000000600009A0D00005205000028060000000000000006000000060000DC000000B6050000AF050000000100000006000000060000BE010000C4050000BF0500000002000000060000000600009D020000D1050000CE05000000030000000600000006000079030000DD050000DC05000000040000000600000006000053040000E9050000E90500000005000000060000000600002A050000F4050000F5050000000600000006000000060000000600000006000000060000000700000006000000060000D0060000080600000A060000000800000006000000060000A007000011060000120600000009000000060000000600006C0800001A0600001A060000000A00000006000000060000360900002106000021060000000B00000006000000060000FE0900002806000027060000000C00000006000000060000C30A00002E0600002C060000000D00000006000000060000860B0000340600002F060000000E00000006000000060000460C00003906000032060000000F00000006000000060000030D00003D06000034060000001000000006000000060000BE0D00004006000034060000000000000007000000060000F700000090060000BB050000000100000007000000060000D90100009F060000CB050000000200000007000000060000B8020000AD060000DA05000000030000000700000006000095030000BB060000E80500000004000000070000000600006F040000C8060000F505000000050000000700000006000047050000D4060000000600000006000000070000000600001C060000DF0600000B060000000700000007000000060000EE060000EA06000015060000000800000007000000060000BE070000F40600001E0600000009000000070000000600008C080000FD06000026060000000A0000000700000006000056090000060700002D060000000B000000070000000600001E0A00000E07000032060000000C00000007000000060000E40A00001507000037060000000D00000007000000060000A70B00001B0700003B060000000E00000007000000060000670C0000210700003E060000000F00000007000000060000250D0000260700003F060000001000000007000000060000E00D00002B070000400600000000000000080000000600001101000068070000C6050000000100000008000000060000F401000078070000D6050000000200000008000000060000D402000087070000E5050000000300000008000000060000B103000095070000F30500000004000000080000000600008C040000A30700000006000000050000000800000006000064050000B00700000C06000000060000000800000006000039060000BD070000170600000007000000080000000600000C070000C807000020060000000800000008000000060000DD070000D307000029060000000900000008000000060000AA080000DE07000031060000000A0000000800000006000076090000E707000038060000000B000000080000000600003E0A0000F00700003E060000000C00000008000000060000040B0000F807000043060000000D00000008000000060000C80B00000008000046060000000E00000008000000060000890C00000708000049060000000F00000008000000060000470D00000D0800004B060000001000000008000000060000030E0000120800004C0600000000000000090000000600002B0100003C080000D10500000001000000090000000600000E0200004D080000E1050000000200000009000000060000EE0200005D080000F0050000000300000009000000060000CC0300006C080000FE050000000400000009000000060000A70400007B0800000B06000000050000000900000006000080050000890800001606000000060000000900000006000056060000970800002106000000070000000900000006000029070000A30800002B060000000800000009000000060000FA070000AF08000034060000000900000009000000060000C9080000BB0800003C060000000A0000000900000006000094090000C508000043060000000B000000090000000600005D0A0000CF08000049060000000C00000009000000060000240B0000D80800004D060000000D00000009000000060000E80B0000E108000051060000000E00000009000000060000A90C0000E908000054060000000F00000009000000060000680D0000F008000056060000001000000009000000060000240E0000F60800005606000000000000000A000000060000440100000D090000DB05000000010000000A000000060000280200001E090000EB05000000020000000A0000000600000803000030090000FA05000000030000000A000000060000E7030000400900000806000000040000000A000000060000C2040000500900001506000000050000000A0000000600009C0500005F0900002106000000060000000A000000060000720600006E0900002C06000000070000000A000000060000460700007B0900003606000000080000000A00000006000017080000880900003E06000000090000000A000000060000E60800009509000046060000000A0000000A000000060000B2090000A00900004D060000000B0000000A0000000600007C0A0000AB09000053060000000C0000000A000000060000430B0000B509000058060000000D0000000A000000060000070C0000BF0900005C060000000E0000000A000000060000C90C0000C80900005E060000000F0000000A000000060000890D0000D00900006006000000100000000A000000060000450E0000D70900006106000000000000000B0000000600005D010000DA090000E505000000010000000B00000006000041020000ED090000F505000000020000000B00000006000022030000FF0900000406000000030000000B00000006000001040000110A00001206000000040000000B000000060000DD040000220A00001F06000000050000000B000000060000B7050000320A00002B06000000060000000B0000000600008E060000410A00003606000000070000000B00000006000062070000500A00004006000000080000000B000000060000340800005E0A00004806000000090000000B000000060000030900006B0A000050060000000A0000000B000000060000D0090000780A000057060000000B0000000B0000000600009A0A0000840A00005D060000000C0000000B000000060000620B00008F0A000062060000000D0000000B000000060000270C00009A0A000066060000000E0000000B000000060000E90C0000A30A000068060000000F0000000B000000060000A90D0000AC0A00006A06000000100000000B000000060000660E0000B50A00006B06000000000000000C00000006000075010000A50A0000EF05000000010000000C00000006000059020000B80A0000FF05000000020000000C0000000600003B030000CC0A00000E06000000030000000C0000000600001A040000DE0A00001C06000000040000000C000000060000F7040000F00A00002806000000050000000C000000060000D1050000010B00003406000000060000000C000000060000A9060000120B00003F06000000070000000C0000000600007E070000210B00004906000000080000000C00000006000050080000300B00005206000000090000000C000000060000200900003F0B00005A060000000A0000000C000000060000ED0900004C0B000061060000000B0000000C000000060000B80A0000590B000067060000000C0000000C000000060000800B0000650B00006B060000000D0000000C000000060000450C0000710B00006F060000000E0000000C000000060000080D00007C0B000072060000000F0000000C000000060000C80D0000860B00007406000000100000000C000000060000860E00008F0B00007506000000000000000D0000000600008C0100006C0B0000F805000000010000000D00000006000071020000810B00000806000000020000000D00000006000054030000950B00001706000000030000000D00000006000033040000A80B00002506000000040000000D00000006000010050000BB0B00003206000000050000000D000000060000EB050000CD0B00003D06000000060000000D000000060000C3060000DF0B00004806000000070000000D00000006000099070000F00B00005206000000080000000D0000000600006B080000000C00005B06000000090000000D0000000600003C0900000F0C000063060000000A0000000D000000060000090A00001E0C00006A060000000B0000000D000000060000D50A00002B0C000070060000000C0000000D0000000600009D0B0000390C000075060000000D0000000D000000060000630C0000450C000078060000000E0000000D000000060000260D0000510C00007B060000000F0000000D000000060000E70D00005C0C00007D06000000100000000D000000060000A50E0000660C00007E06000000000000000E000000060000A3010000300C00000006000000010000000E00000006000089020000460C00001006000000020000000E0000000600006B0300005B0C00001F06000000030000000E0000000600004C0400006F0C00002D06000000040000000E00000006000029050000830C00003A06000000050000000E00000006000004060000960C00004606000000060000000E000000060000DD060000A90C00005106000000070000000E000000060000B3070000BB0C00005B06000000080000000E00000006000086080000CC0C00006406000000090000000E00000006000057090000DC0C00006C060000000A0000000E000000060000250A0000EC0C000073060000000B0000000E000000060000F10A0000FA0C000079060000000C0000000E000000060000BA0B0000090D00007D060000000D0000000E000000060000800C0000160D000081060000000E0000000E000000060000440D0000230D000084060000000F0000000E000000060000060E00002F0D00008606000000100000000E000000060000C40E00003A0D00008706000000000000000F000000060000B9010000F00C00000906000000010000000F0000000600009F020000070D00001906000000020000000F000000060000830300001E0D00002806000000030000000F00000006000064040000330D00003606000000040000000F00000006000042050000480D00004206000000050000000F0000000600001D0600005C0D00004E06000000060000000F000000060000F6060000700D00005906000000070000000F000000060000CD070000820D00006306000000080000000F000000060000A1080000940D00006C06000000090000000F00000006000072090000A60D000074060000000A0000000F000000060000410A0000B60D00007B060000000B0000000F0000000600000D0B0000C60D000081060000000C0000000F000000060000D60B0000D50D000086060000000D0000000F0000000600009D0C0000E40D00008A060000000E0000000F000000060000620D0000F20D00008C060000000F0000000F000000060000230E0000FF0D00008E06000000100000000F000000060000E30E00000B0E00008F060000000000000010000000060000CF010000AE0D000010060000000100000010000000060000B6020000C60D0000200600000002000000100000000600009A030000DD0D00002F0600000003000000100000000600007B040000F40D00003D0600000004000000100000000600005A0500000A0E00004A060000000500000010000000060000360600001F0E0000560600000006000000100000000600000F070000330E000061060000000700000010000000060000E6070000470E00006B060000000800000010000000060000BA0800005A0E0000740600000009000000100000000600008C0900006C0E00007C060000000A000000100000000600005B0A00007E0E000083060000000B00000010000000060000280B00008F0E000089060000000C00000010000000060000F20B00009F0E00008E060000000D00000010000000060000BA0C0000AF0E000091060000000E000000100000000600007E0D0000BD0E000094060000000F00000010000000060000410E0000CB0E000096060000001000000010000000060000010F0000D90E000097060000000000000000000000070000360000005F00000038060000000100000000000000070000160100006700000049060000000200000000000000070000F30100006E00000059060000000300000000000000070000CD0200007400000068060000000400000000000000070000A50300007A000000760600000005000000000000000700007B0400007F000000830600000006000000000000000700004D050000840000008E0600000007000000000000000700001E0600008700000099060000000800000000000000070000EB0600008A000000A3060000000900000000000000070000B60700008C000000AC060000000A000000000000000700007F0800008E000000B4060000000B00000000000000070000450900008F000000BB060000000C00000000000000070000080A00008F000000C0060000000D00000000000000070000C90A00008E000000C5060000000E00000000000000070000870B00008D000000C9060000000F00000000000000070000430C00008B000000CC060000001000000000000000070000FC0C000088000000CE060000000000000001000000070000540000004E01000048060000000100000001000000070000340100005701000059060000000200000001000000070000120200005F01000068060000000300000001000000070000ED0200006601000077060000000400000001000000070000C60300006D010000850600000005000000010000000700009B04000073010000920600000006000000010000000700006F050000790100009E0600000007000000010000000700003F0600007D010000A90600000008000000010000000700000E07000081010000B3060000000900000001000000070000D907000085010000BC060000000A00000001000000070000A208000087010000C4060000000B000000010000000700006909000089010000CB060000000C000000010000000700002C0A00008A010000D0060000000D00000001000000070000EE0A00008A010000D5060000000E00000001000000070000AC0B00008A010000D9060000000F00000001000000070000680C000089010000DC060000001000000001000000070000220D000087010000DE060000000000000002000000070000720000003A02000057060000000100000002000000070000530100004402000068060000000200000002000000070000310200004D020000780600000003000000020000000700000C0300005502000087060000000400000002000000070000E50300005D02000095060000000500000002000000070000BC04000064020000A20600000006000000020000000700008F0500006B020000AE0600000007000000020000000700006106000070020000B80600000008000000020000000700002F07000075020000C2060000000900000002000000070000FB07000079020000CB060000000A00000002000000070000C50800007D020000D3060000000B000000020000000700008C09000080020000DA060000000C00000002000000070000500A000082020000E0060000000D00000002000000070000120B000083020000E5060000000E00000002000000070000D10B000084020000E9060000000F000000020000000700008E0C000084020000EB060000001000000002000000070000480D000084020000ED0600000000000000030000000700008F0000002203000065060000000100000003000000070000700100002D030000770600000002000000030000000700004F02000037030000870600000003000000030000000700002B0300004103000096060000000400000003000000070000040400004A030000A4060000000500000003000000070000DB04000052030000B1060000000600000003000000070000AF05000059030000BD0600000007000000030000000700008106000060030000C70600000008000000030000000700005007000066030000D10600000009000000030000000700001D0800006B030000DA060000000A00000003000000070000E708000070030000E2060000000B00000003000000070000AE09000074030000E9060000000C00000003000000070000730A000077030000EF060000000D00000003000000070000350B000079030000F4060000000E00000003000000070000F50B00007B030000F8060000000F00000003000000070000B20C00007C030000FB0600000010000000030000000700006D0D00007C030000FD060000000000000004000000070000AB00000008040000740600000001000000040000000700008D01000014040000850600000002000000040000000700006C0200001F040000950600000003000000040000000700004903000029040000A40600000004000000040000000700002304000033040000B2060000000500000004000000070000FA0400003C040000BF060000000600000004000000070000CF05000045040000CB060000000700000004000000070000A10600004C040000D60600000008000000040000000700007107000053040000E00600000009000000040000000700003E0800005A040000E9060000000A00000004000000070000090900005F040000F1060000000B00000004000000070000D009000064040000F8060000000C00000004000000070000960A000068040000FE060000000D00000004000000070000590B00006C04000003070000000E00000004000000070000190C00006F04000007070000000F00000004000000070000D60C00007104000009070000001000000004000000070000910D0000720400000B070000000000000005000000070000C7000000EA04000082060000000100000005000000070000AA010000F7040000930600000002000000050000000700008902000003050000A3060000000300000005000000070000660300000F050000B20600000004000000050000000700004104000019050000C00600000005000000050000000700001905000024050000CD060000000600000005000000070000EE0500002D050000D9060000000700000005000000070000C106000036050000E4060000000800000005000000070000910700003E050000EE0600000009000000050000000700005F08000045050000F7060000000A000000050000000700002A0900004C050000FF060000000B00000005000000070000F20900005105000006070000000C00000005000000070000B80A0000570500000C070000000D000000050000000700007B0B00005B05000011070000000E000000050000000700003C0C00005F05000015070000000F00000005000000070000FA0C00006205000018070000001000000005000000070000B50D0000640500001A070000000000000006000000070000E3000000C90500008F060000000100000006000000070000C6010000D7050000A0060000000200000006000000070000A6020000E4050000B006000000030000000600000007000083030000F0050000C00600000004000000060000000700005E040000FC050000CE0600000005000000060000000700003705000007060000DB0600000006000000060000000700000C06000012060000E7060000000700000006000000070000E00600001C060000F2060000000800000006000000070000B007000025060000FC0600000009000000060000000700007E0800002D06000005070000000A000000060000000700004A090000350600000D070000000B00000006000000070000130A00003C06000014070000000C00000006000000070000D90A0000420600001A070000000D000000060000000700009D0B0000470600001F070000000E000000060000000700005E0C00004C06000023070000000F000000060000000700001D0D00005006000026070000001000000006000000070000D90D00005406000028070000000000000007000000070000FE000000A40600009C060000000100000007000000070000E1010000B3060000AE060000000200000007000000070000C2020000C2060000BE060000000300000007000000070000A0030000CF060000CD0600000004000000070000000700007B040000DC060000DB06000000050000000700000007000054050000E8060000E80600000006000000070000000700002A060000F4060000F4060000000700000007000000070000000700000007000000070000000800000007000000070000CF07000009070000090700000009000000070000000700009E0800001207000012070000000A000000070000000700006A0900001A0700001A070000000B00000007000000070000330A00002207000021070000000C00000007000000070000FA0A00002A07000027070000000D00000007000000070000BE0B0000300700002C070000000E00000007000000070000800C00003607000030070000000F000000070000000700003F0D00003B07000033070000001000000007000000070000FC0D00003F07000035070000000000000008000000070000180100007D070000A9060000000100000008000000070000FC0100008D070000BA060000000200000008000000070000DD0200009C070000CA060000000300000008000000070000BB030000AB070000DA06000000040000000800000007000097040000B9070000E806000000050000000800000007000071050000C6070000F506000000060000000800000007000048060000D2070000010700000007000000080000000700001C070000DE0700000C070000000800000008000000070000EE070000E907000016070000000900000008000000070000BD080000F30700001F070000000A0000000800000007000089090000FD07000027070000000B00000008000000070000530A0000060800002E070000000C000000080000000700001B0B00000E08000034070000000D00000008000000070000DF0B00001608000039070000000E00000008000000070000A10C00001D0800003D070000000F00000008000000070000610D000023080000400700000010000000080000000700001E0E000028080000420700000000000000090000000700003201000052080000B50600000001000000090000000700001602000063080000C6060000000200000009000000070000F802000073080000D7060000000300000009000000070000D703000083080000E6060000000400000009000000070000B304000092080000F40600000005000000090000000700008D050000A00800000107000000060000000900000007000064060000AE0800000D07000000070000000900000007000039070000BA080000180700000008000000090000000700000B080000C608000023070000000900000009000000070000DB080000D20800002C070000000A00000009000000070000A8090000DC08000034070000000B00000009000000070000720A0000E60800003B070000000C000000090000000700003A0B0000F008000041070000000D00000009000000070000000C0000F808000046070000000E00000009000000070000C20C0000000900004A070000000F00000009000000070000820D0000070900004D070000001000000009000000070000400E00000E0900004F07000000000000000A0000000700004B01000024090000C106000000010000000A0000000700003002000036090000D206000000020000000A0000000700001203000047090000E306000000030000000A000000070000F103000058090000F206000000040000000A000000070000CE040000680900000007000000050000000A000000070000A9050000770900000D07000000060000000A00000007000081060000860900001907000000070000000A00000007000056070000930900002407000000080000000A00000007000029080000A10900002F07000000090000000A000000070000F9080000AD09000038070000000A0000000A000000070000C6090000B909000040070000000B0000000A000000070000910A0000C409000047070000000C0000000A0000000700005A0B0000CE0900004D070000000D0000000A0000000700001F0C0000D709000052070000000E0000000A000000070000E30C0000E009000056070000000F0000000A000000070000A30D0000E90900005907000000100000000A000000070000610E0000F00900005B07000000000000000B00000007000064010000F3090000CD06000000010000000B00000007000049020000060A0000DE06000000020000000B0000000700002B030000180A0000EE06000000030000000B0000000700000C0400002A0A0000FD06000000040000000B000000070000E90400003B0A00000B07000000050000000B000000070000C40500004B0A00001907000000060000000B0000000700009C0600005B0A00002507000000070000000B00000007000072070000690A00003007000000080000000B00000007000045080000770A00003A07000000090000000B00000007000016090000850A000043070000000A0000000B000000070000E4090000920A00004C070000000B0000000B000000070000AF0A00009E0A000053070000000C0000000B000000070000780B0000A90A000059070000000D0000000B0000000700003F0C0000B30A00005E070000000E0000000B000000070000020D0000BD0A000062070000000F0000000B000000070000C30D0000C70A00006507000000100000000B000000070000820E0000CF0A00006707000000000000000C0000000700007C010000BE0A0000D806000000010000000C00000007000061020000D20A0000E906000000020000000C00000007000045030000E60A0000F906000000030000000C00000007000025040000F80A00000807000000040000000C000000070000030500000A0B00001707000000050000000C000000070000DF0500001C0B00002407000000060000000C000000070000B70600002C0B00003007000000070000000C0000000700008E0700003C0B00003B07000000080000000C000000070000610800004B0B00004507000000090000000C000000070000330900005A0B00004F070000000A0000000C000000070000010A0000670B000057070000000B0000000C000000070000CD0A0000740B00005E070000000C0000000C000000070000960B0000810B000064070000000D0000000C0000000700005D0C00008C0B000069070000000E0000000C000000070000210D0000970B00006D070000000F0000000C000000070000E30D0000A10B00007107000000100000000C000000070000A20E0000AB0B00007307000000000000000D00000007000093010000870B0000E206000000010000000D000000070000790200009C0B0000F306000000020000000D0000000700005D030000B00B00000407000000030000000D0000000700003E040000C40B00001307000000040000000D0000000700001D050000D70B00002107000000050000000D000000070000F9050000E90B00002F07000000060000000D000000070000D2060000FB0B00003B07000000070000000D000000070000A90700000B0C00004607000000080000000D0000000700007D0800001C0C00005007000000090000000D0000000700004F0900002B0C000059070000000A0000000D0000000700001E0A00003A0C000062070000000B0000000D000000070000EA0A0000480C000069070000000C0000000D000000070000B40B0000550C00006F070000000D0000000D0000000700007B0C0000620C000074070000000E0000000D000000070000400D00006E0C000078070000000F0000000D000000070000020E0000790C00007C07000000100000000D000000070000C20E0000830C00007E07000000000000000E000000070000AA0100004C0C0000EC06000000010000000E00000007000091020000620C0000FE06000000020000000E00000007000075030000770C00000E07000000030000000E000000070000570400008C0C00001D07000000040000000E00000007000036050000A00C00002C07000000050000000E00000007000012060000B30C00003907000000060000000E000000070000EC060000C60C00004507000000070000000E000000070000C3070000D80C00005007000000080000000E00000007000098080000E90C00005B07000000090000000E0000000700006A090000F90C000064070000000A0000000E0000000700003A0A0000090D00006C070000000B0000000E000000070000070B0000180D000073070000000C0000000E000000070000D10B0000260D00007A070000000D0000000E000000070000990C0000340D00007F070000000E0000000E0000000700005E0D0000410D000083070000000F0000000E000000070000210E00004D0D00008607000000100000000E000000070000E10E0000590D00008807000000000000000F000000070000C10100000E0D0000F606000000010000000F000000070000A8020000250D00000707000000020000000F0000000700008C0300003B0D00001807000000030000000F0000000700006F040000510D00002707000000040000000F0000000700004E050000660D00003507000000050000000F0000000700002B0600007A0D00004307000000060000000F000000070000050700008E0D00004F07000000070000000F000000070000DD070000A10D00005A07000000080000000F000000070000B2080000B30D00006507000000090000000F00000007000085090000C40D00006E070000000A0000000F000000070000550A0000D50D000076070000000B0000000F000000070000230B0000E50D00007D070000000C0000000F000000070000ED0B0000F50D000084070000000D0000000F000000070000B60C0000030E000089070000000E0000000F0000000700007B0D0000110E00008D070000000F0000000F0000000700003F0E00001E0E00009007000000100000000F000000070000FF0E00002B0E000092070000000000000010000000070000D6010000CC0D0000FF060000000100000010000000070000BE020000E40D000011070000000200000010000000070000A3030000FC0D00002107000000030000001000000007000086040000130E00003007000000040000001000000007000066050000290E00003F070000000500000010000000070000430600003E0E00004C0700000006000000100000000700001E070000530E000059070000000700000010000000070000F7070000660E000064070000000800000010000000070000CC0800007A0E00006E0700000009000000100000000700009F0900008C0E000077070000000A00000010000000070000700A00009E0E000080070000000B000000100000000700003E0B0000AF0E000087070000000C00000010000000070000090C0000BF0E00008D070000000D00000010000000070000D20C0000CF0E000093070000000E00000010000000070000980D0000DE0E000097070000000F000000100000000700005C0E0000EC0E00009A0700000010000000100000000700001D0F0000FA0E00009C0700000000000000000000000800003C0000006A0000000A0700000001000000000000000800001C010000720000001C070000000200000000000000080000FB010000790000002D070000000300000000000000080000D7020000800000003D070000000400000000000000080000B0030000850000004C070000000500000000000000080000870400008A0000005A0700000006000000000000000800005B0500008F000000670700000007000000000000000800002C0600009200000073070000000800000000000000080000FB060000950000007E070000000900000000000000080000C70700009700000088070000000A00000000000000080000910800009900000091070000000B00000000000000080000580900009A00000099070000000C000000000000000800001D0A00009A000000A0070000000D00000000000000080000DF0A000099000000A6070000000E000000000000000800009E0B000098000000AB070000000F000000000000000800005B0C000096000000AF070000001000000000000000080000150D000093000000B10700000000000000010000000800005A0000005A0100001B0700000001000000010000000800003B010000630100002D0700000002000000010000000800001A0200006B0100003E070000000300000001000000080000F6020000730100004F070000000400000001000000080000D00300007A0100005E070000000500000001000000080000A7040000800100006C0700000006000000010000000800007C05000085010000790700000007000000010000000800004E0600008A010000850700000008000000010000000800001D0700008E01000090070000000900000001000000080000EA070000910100009A070000000A00000001000000080000B408000093010000A3070000000B000000010000000800007C09000095010000AB070000000C00000001000000080000410A000096010000B2070000000D00000001000000080000040B000097010000B8070000000E00000001000000080000C40B000096010000BC070000000F00000001000000080000810C000095010000C00700000010000000010000000800003C0D000094010000C307000000000000000200000008000077000000470200002C07000000010000000200000008000059010000510200003E070000000200000002000000080000390200005A0200004F07000000030000000200000008000016030000630200005F070000000400000002000000080000F00300006B0200006E070000000500000002000000080000C8040000720200007D0700000006000000020000000800009D050000780200008A0700000007000000020000000800006F0600007E020000960700000008000000020000000800003F07000083020000A10700000009000000020000000800000D08000087020000AB070000000A00000002000000080000D70800008B020000B4070000000B000000020000000800009F0900008D020000BC070000000C00000002000000080000650A00008F020000C3070000000D00000002000000080000280B000091020000C9070000000E00000002000000080000E90B000092020000CE070000000F00000002000000080000A60C000092020000D2070000001000000002000000080000620D000091020000D507000000000000000300000008000095000000310300003C070000000100000003000000080000770100003C0300004E0700000002000000030000000800005702000046030000600700000003000000030000000800003403000050030000700700000004000000030000000800000F040000590300007F070000000500000003000000080000E7040000610300008D070000000600000003000000080000BD050000680300009A070000000700000003000000080000900600006F030000A60700000008000000030000000800006007000075030000B10700000009000000030000000800002E0800007A030000BC070000000A00000003000000080000FA0800007F030000C5070000000B00000003000000080000C209000082030000CD070000000C00000003000000080000880A000086030000D4070000000D000000030000000800004C0B000088030000DA070000000E000000030000000800000D0C00008A030000DF070000000F00000003000000080000CB0C00008B030000E3070000001000000003000000080000870D00008B030000E6070000000000000004000000080000B1000000180400004C07000000010000000400000008000094010000240400005E070000000200000004000000080000750200002F040000700700000003000000040000000800005303000039040000800700000004000000040000000800002E040000430400008F070000000500000004000000080000060500004C0400009D070000000600000004000000080000DD05000055040000AA070000000700000004000000080000B00600005C040000B70700000008000000040000000800008107000063040000C20700000009000000040000000800004F0800006A040000CC070000000A000000040000000800001B0900006F040000D5070000000B00000004000000080000E409000074040000DD070000000C00000004000000080000AB0A000078040000E4070000000D000000040000000800006F0B00007C040000EA070000000E00000004000000080000310C00007F040000EF070000000F00000004000000080000EF0C000081040000F3070000001000000004000000080000AC0D000082040000F6070000000000000005000000080000CD000000FB0400005C070000000100000005000000080000B1010000080500006E07000000020000000500000008000092020000140500007F07000000030000000500000008000070030000200500008F0700000004000000050000000800004C0400002B0500009F0700000005000000050000000800002505000035050000AD070000000600000005000000080000FC0500003E050000BA070000000700000005000000080000D006000047050000C6070000000800000005000000080000A10700004F050000D10700000009000000050000000800007008000056050000DC070000000A000000050000000800003C0900005D050000E5070000000B00000005000000080000060A000063050000ED070000000C00000005000000080000CD0A000068050000F4070000000D00000005000000080000920B00006D050000FA070000000E00000005000000080000540C000070050000FF070000000F00000005000000080000130D00007305000003080000001000000005000000080000D00D00007605000007080000000000000006000000080000E9000000DB0500006B070000000100000006000000080000CD010000E90500007D070000000200000006000000080000AE020000F60500008E0700000003000000060000000800008D030000030600009F070000000400000006000000080000690400000F060000AE070000000500000006000000080000430500001A060000BC0700000006000000060000000800001A06000024060000C9070000000700000006000000080000EF0600002E060000D6070000000800000006000000080000C107000037060000E10700000009000000060000000800009008000040060000EB070000000A000000060000000800005D09000047060000F4070000000B00000006000000080000270A00004E060000FD070000000C00000006000000080000EF0A00005406000004080000000D00000006000000080000B40B00005A0600000A080000000E00000006000000080000760C00005F0600000F080000000F00000006000000080000360D00006306000013080000001000000006000000080000F30D0000660600001608000000000000000700000008000004010000B806000079070000000100000007000000080000E8010000C70600008C070000000200000007000000080000CA020000D50600009D070000000300000007000000080000AA030000E3060000AD07000000040000000700000008000086040000F0060000BD07000000050000000700000008000061050000FC060000CB0700000006000000070000000800003806000007070000D80700000007000000070000000800000D07000012070000E5070000000800000007000000080000E00700001C070000F0070000000900000007000000080000B008000026070000FA070000000A000000070000000800007D0900002E07000003080000000B00000007000000080000480A0000360700000C080000000C00000007000000080000100B00003E07000013080000000D00000007000000080000D50B00004407000019080000000E00000007000000080000980C00004A0700001E080000000F00000007000000080000590D00004F07000022080000001000000007000000080000170E000054070000260800000000000000080000000800001E010000910700008707000000010000000800000008000003020000A10700009A070000000200000008000000080000E6020000B1070000AB070000000300000008000000080000C5030000BF070000BC070000000400000008000000080000A3040000CD070000CB0700000005000000080000000800007D050000DB070000D907000000060000000800000008000056060000E7070000E70700000007000000080000000800002B070000F3070000F3070000000800000008000000080000000800000008000000080000000900000008000000080000CE0800000908000009080000000A000000080000000800009C0900001208000012080000000B00000008000000080000680A00001B0800001A080000000C00000008000000080000300B00002408000022080000000D00000008000000080000F60B00002B08000028080000000E00000008000000080000BA0C0000320800002D080000000F000000080000000800007B0D00003808000031080000001000000008000000080000390E00003E080000350800000000000000090000000800003801000068080000950700000001000000090000000800001D02000079080000A80700000002000000090000000800000003000089080000B9070000000300000009000000080000E103000099080000C9070000000400000009000000080000BF040000A8080000D90700000005000000090000000800009A050000B6080000E707000000060000000900000008000072060000C4080000F507000000070000000900000008000048070000D1080000010800000008000000090000000800001C080000DD0800000D080000000900000009000000080000ED080000E808000017080000000A00000009000000080000BB090000F308000020080000000B00000009000000080000870A0000FD08000029080000000C00000009000000080000500B00000609000030080000000D00000009000000080000170C00000F09000036080000000E00000009000000080000DB0C0000170900003C080000000F000000090000000800009C0D00001E090000400800000010000000090000000800005B0E0000250900004308000000000000000A000000080000510100003B090000A207000000010000000A000000080000370200004D090000B507000000020000000A0000000800001B0300005E090000C607000000030000000A000000080000FC0300006F090000D707000000040000000A000000080000DA0400007F090000E607000000050000000A000000080000B60500008E090000F507000000060000000A0000000800008F0600009D0900000208000000070000000A00000008000065070000AB0900000F08000000080000000A00000008000039080000B80900001A08000000090000000A0000000800000B090000C509000025080000000A0000000A000000080000DA090000D00900002E080000000B0000000A000000080000A60A0000DB09000036080000000C0000000A0000000800006F0B0000E60900003E080000000D0000000A000000080000370C0000EF09000044080000000E0000000A000000080000FB0C0000F80900004A080000000F0000000A000000080000BD0D0000010A00004E08000000100000000A0000000800007C0E0000080A00005108000000000000000B0000000800006A0100000B0A0000AF07000000010000000B000000080000500200001E0A0000C207000000020000000B00000008000034030000300A0000D307000000030000000B00000008000016040000420A0000E407000000040000000B000000080000F5040000530A0000F407000000050000000B000000080000D1050000630A00000208000000060000000B000000080000AA060000730A00001008000000070000000B00000008000082070000820A00001C08000000080000000B00000008000056080000900A00002808000000090000000B000000080000280900009E0A000032080000000A0000000B000000080000F7090000AB0A00003B080000000B0000000B000000080000C40A0000B70A000044080000000C0000000B0000000800008E0B0000C20A00004B080000000D0000000B000000080000560C0000CD0A000052080000000E0000000B0000000800001B0D0000D70A000057080000000F0000000B000000080000DD0D0000E00A00005B08000000100000000B0000000800009D0E0000E90A00005F08000000000000000C00000008000082010000D70A0000BC07000000010000000C00000008000069020000EC0A0000CE07000000020000000C0000000800004D030000FF0A0000E007000000030000000C0000000800002F040000120B0000F107000000040000000C0000000800000F050000240B00000008000000050000000C000000080000EB050000350B00000F08000000060000000C000000080000C6060000460B00001C08000000070000000C0000000800009D070000560B00002908000000080000000C00000008000072080000650B00003408000000090000000C00000008000045090000740B00003F080000000A0000000C000000080000150A0000820B000048080000000B0000000C000000080000E20A00008F0B000051080000000C0000000C000000080000AC0B00009B0B000058080000000D0000000C000000080000750C0000A70B00005F080000000E0000000C0000000800003A0D0000B20B000064080000000F0000000C000000080000FD0D0000BC0B00006908000000100000000C000000080000BD0E0000C60B00006C08000000000000000D00000008000099010000A10B0000C807000000010000000D00000008000081020000B60B0000DB07000000020000000D00000008000066030000CB0B0000EC07000000030000000D00000008000048040000DE0B0000FD07000000040000000D00000008000028050000F20B00000D08000000050000000D00000008000006060000040C00001B08000000060000000D000000080000E0060000160C00002908000000070000000D000000080000B8070000270C00003508000000080000000D0000000800008E080000370C00004108000000090000000D00000008000061090000460C00004B080000000A0000000D000000080000310A0000550C000055080000000B0000000D000000080000FF0A0000630C00005D080000000C0000000D000000080000CA0B0000710C000065080000000D0000000D000000080000930C00007E0C00006C080000000E0000000D000000080000590D00008A0C000071080000000F0000000D0000000800001C0E0000950C00007508000000100000000D000000080000DD0E0000A00C00007908000000000000000E000000080000B1010000670C0000D407000000010000000E000000080000990200007D0C0000E607000000020000000E0000000800007E030000930C0000F807000000030000000E00000008000061040000A80C00000908000000040000000E00000008000041050000BC0C00001808000000050000000E0000000800001F060000CF0C00002708000000060000000E000000080000FA060000E20C00003508000000070000000E000000080000D3070000F40C00004108000000080000000E000000080000A9080000050D00004D08000000090000000E0000000800007C090000160D000058080000000A0000000E0000000800004D0A0000260D000061080000000B0000000E0000000800001C0B0000350D00006A080000000C0000000E000000080000E70B0000430D000071080000000D0000000E000000080000B00C0000510D000078080000000E0000000E000000080000770D00005E0D00007D080000000F0000000E0000000800003B0E00006B0D00008208000000100000000E000000080000FC0E0000760D00008508000000000000000F000000080000C70100002A0D0000DF07000000010000000F000000080000B0020000420D0000F207000000020000000F00000008000096030000580D00000308000000030000000F000000080000790400006E0D00001408000000040000000F0000000800005A050000830D00002408000000050000000F00000008000038060000980D00003208000000060000000F00000008000014070000AB0D00004008000000070000000F000000080000ED070000BE0D00004D08000000080000000F000000080000C4080000D10D00005908000000090000000F00000008000097090000E20D000063080000000A0000000F000000080000690A0000F30D00006D080000000B0000000F000000080000380B0000030E000075080000000C0000000F000000080000040C0000130E00007D080000000D0000000F000000080000CD0C0000220E000084080000000E0000000F000000080000950D0000300E000089080000000F0000000F000000080000590E00003D0E00008E08000000100000000F0000000800001B0F00004A0E000091080000000000000010000000080000DD010000EA0D0000EA070000000100000010000000080000C6020000020E0000FC070000000200000010000000080000AD0300001A0E00000E08000000030000001000000008000090040000310E00001F08000000040000001000000008000072050000470E00002F080000000500000010000000080000510600005C0E00003E0800000006000000100000000800002D070000710E00004B08000000070000001000000008000006080000850E000058080000000800000010000000080000DD080000990E000064080000000900000010000000080000B2090000AB0E00006E080000000A00000010000000080000840A0000BD0E000078080000000B00000010000000080000530B0000CE0E000081080000000C00000010000000080000200C0000DF0E000088080000000D00000010000000080000EA0C0000EF0E00008F080000000E00000010000000080000B20D0000FE0E000095080000000F00000010000000080000770E00000C0F000099080000001000000010000000080000390F00001A0F00009D0800000000000000000000000900004000000075000000D8070000000100000000000000090000230100007D000000EB0700000002000000000000000900000202000084000000FD070000000300000000000000090000DF0200008A0000000E080000000400000000000000090000BA030000900000001E08000000050000000000000009000092040000950000002E08000000060000000000000009000067050000990000003C0800000007000000000000000900003A0600009D000000490800000008000000000000000900000A0700009F00000055080000000900000000000000090000D8070000A200000060080000000A00000000000000090000A3080000A30000006A080000000B000000000000000900006B090000A400000073080000000C00000000000000090000310A0000A40000007B080000000D00000000000000090000F40A0000A300000082080000000E00000000000000090000B50B0000A200000088080000000F00000000000000090000730C0000A00000008D0800000010000000000000000900002F0D00009D000000910800000000000000010000000900005F00000066010000EB070000000100000001000000090000420100006F010000FE070000000200000001000000090000220200007701000010080000000300000001000000090000FF0200007E01000021080000000400000001000000090000DA0300008501000031080000000500000001000000090000B30400008B0100004108000000060000000100000009000089050000910100004F0800000007000000010000000900005C060000950100005C0800000008000000010000000900002D0700009901000068080000000900000001000000090000FB0700009C01000073080000000A00000001000000090000C60800009F0100007D080000000B000000010000000900008F090000A101000086080000000C00000001000000090000560A0000A20100008E080000000D00000001000000090000190B0000A201000095080000000E00000001000000090000DB0B0000A20100009B080000000F00000001000000090000990C0000A1010000A0080000001000000001000000090000550D00009F010000A40800000000000000020000000900007D00000054020000FD070000000100000002000000090000600100005E020000100800000002000000020000000900004002000067020000220800000003000000020000000900001F0300007002000034080000000400000002000000090000FA0300007702000044080000000500000002000000090000D30400007F02000053080000000600000002000000090000A905000085020000610800000007000000020000000900007D0600008B0200006E0800000008000000020000000900004E0700008F0200007B0800000009000000020000000900001D0800009402000086080000000A00000002000000090000E90800009702000090080000000B00000002000000090000B30900009A02000099080000000C00000002000000090000790A00009C020000A1080000000D000000020000000900003E0B00009E020000A8080000000E00000002000000090000000C00009E020000AE080000000F00000002000000090000BF0C00009E020000B40800000010000000020000000900007B0D00009E020000B80800000000000000030000000900009A0000003F0300000F0800000001000000030000000900007E0100004A030000220800000002000000030000000900005F02000054030000340800000003000000030000000900003D0300005E03000046080000000400000003000000090000190400006603000056080000000500000003000000090000F30400006F03000065080000000600000003000000090000CA05000076030000730800000007000000030000000900009E0600007D0300008108000000080000000300000009000070070000830300008D0800000009000000030000000900003F0800008803000098080000000A000000030000000900000B0900008D030000A2080000000B00000003000000090000D509000090030000AC080000000C000000030000000900009D0A000094030000B4080000000D00000003000000090000620B000096030000BB080000000E00000003000000090000240C000098030000C1080000000F00000003000000090000E40C000099030000C6080000001000000003000000090000A10D000099030000CA080000000000000004000000090000B600000027040000200800000001000000040000000900009B01000033040000330800000002000000040000000900007C0200003E040000460800000003000000040000000900005C0300004804000057080000000400000004000000090000380400005204000067080000000500000004000000090000120500005B04000077080000000600000004000000090000E90500006404000085080000000700000004000000090000BE0600006C0400009308000000080000000400000009000090070000730400009F0800000009000000040000000900006008000079040000AA080000000A000000040000000900002D0900007F040000B4080000000B00000004000000090000F809000084040000BE080000000C00000004000000090000C00A000088040000C6080000000D00000004000000090000850B00008B040000CD080000000E00000004000000090000480C00008E040000D3080000000F00000004000000090000080D000090040000D9080000001000000004000000090000C60D000091040000DD080000000000000005000000090000D20000000B05000031080000000100000005000000090000B701000018050000440800000002000000050000000900009A0200002405000057080000000300000005000000090000790300003005000068080000000400000005000000090000560400003B05000079080000000500000005000000090000310500004505000088080000000600000005000000090000090600004F05000097080000000700000005000000090000DE06000057050000A4080000000800000005000000090000B10700005F050000B00800000009000000050000000900008108000067050000BC080000000A000000050000000900004E0900006D050000C6080000000B00000005000000090000190A000073050000CF080000000C00000005000000090000E20A000079050000D8080000000D00000005000000090000A80B00007D050000DF080000000E000000050000000900006B0C000081050000E5080000000F000000050000000900002C0D000084050000EB080000001000000005000000090000EA0D000087050000EF080000000000000006000000090000EE000000EC05000041080000000100000006000000090000D3010000FA05000055080000000200000006000000090000B602000008060000670800000003000000060000000900009603000014060000790800000004000000060000000900007404000020060000890800000005000000060000000900004F0500002B060000990800000006000000060000000900002706000036060000A7080000000700000006000000090000FD06000040060000B5080000000800000006000000090000D007000049060000C1080000000900000006000000090000A108000051060000CD080000000A000000060000000900006F09000059060000D7080000000B000000060000000900003B0A000060060000E1080000000C00000006000000090000040B000066060000E9080000000D00000006000000090000CA0B00006C060000F0080000000E000000060000000900008E0C000071060000F7080000000F000000060000000900004F0D000075060000FC0800000010000000060000000900000E0E0000780600000009000000000000000700000009000009010000CA06000052080000000100000007000000090000EF010000D906000065080000000200000007000000090000D2020000E806000078080000000300000007000000090000B3030000F50600008908000000040000000700000009000091040000020700009A0800000005000000070000000900006C0500000F070000A9080000000600000007000000090000450600001A070000B80800000007000000070000000900001C07000025070000C5080000000800000007000000090000EF0700002F070000D2080000000900000007000000090000C108000039070000DD080000000A000000070000000900008F09000041070000E8080000000B000000070000000900005B0A000049070000F1080000000C00000007000000090000250B000051070000FA080000000D00000007000000090000EC0B00005707000001090000000E00000007000000090000B00C00005D07000008090000000F00000007000000090000720D0000630700000D090000001000000007000000090000310E0000670700001209000000000000000800000009000023010000A5070000610800000001000000080000000900000A020000B507000075080000000200000008000000090000EE020000C507000088080000000300000008000000090000CF030000D307000099080000000400000008000000090000AD040000E1070000AA08000000050000000800000009000089050000EF070000B908000000060000000800000009000063060000FB070000C80800000007000000080000000900003A07000007080000D60800000008000000080000000900000E08000012080000E2080000000900000008000000090000E00800001D080000EE080000000A00000008000000090000AF09000027080000F8080000000B000000080000000900007B0A00003008000002090000000C00000008000000090000450B0000380800000A090000000D000000080000000900000D0C00004008000012090000000E00000008000000090000D10C00004708000018090000000F00000008000000090000940D00004D0800001E090000001000000008000000090000530E000052080000220900000000000000090000000900003D0100007D08000070080000000100000009000000090000240200008E08000084080000000200000009000000090000080300009E08000097080000000300000009000000090000EA030000AE080000A9080000000400000009000000090000C9040000BD080000B9080000000500000009000000090000A6050000CB080000C908000000060000000900000009000080060000D9080000D808000000070000000900000009000057070000E6080000E50800000008000000090000000900002C080000F2080000F2080000000900000009000000090000FF080000FF080000FF080000000A00000009000000090000CE0900000909000008090000000B000000090000000900009B0A00001309000012090000000C00000009000000090000650B00001C0900001A090000000D000000090000000900002D0C00002509000022090000000E00000009000000090000F20C00002D09000029090000000F00000009000000090000B50D0000340900002E090000001000000009000000090000750E00003B0900003309000000000000000A00000009000057010000510900007F08000000010000000A0000000900003E020000630900009308000000020000000A0000000900002303000075090000A608000000030000000A0000000900000504000085090000B808000000040000000A000000090000E504000095090000C808000000050000000A000000090000C2050000A5090000D808000000060000000A0000000900009C060000B4090000E708000000070000000A00000009000074070000C2090000F508000000080000000A00000009000049080000CF0900000109000000090000000A0000000900001C090000DB0900000D090000000A0000000A000000090000EC090000E709000018090000000B0000000A000000090000BA0A0000F209000021090000000C0000000A000000090000850B0000FD0900002A090000000D0000000A0000000900004D0C0000070A000032090000000E0000000A000000090000130D0000100A000038090000000F0000000A000000090000D60D0000180A00003E09000000100000000A000000090000970E0000200A00004309000000000000000B0000000900006F010000220A00008E08000000010000000B00000009000057020000350A0000A208000000020000000B0000000900003D030000480A0000B408000000030000000B0000000900001F0400005A0A0000C608000000040000000B000000090000FF0400006B0A0000D708000000050000000B000000090000DD0500007B0A0000E708000000060000000B000000090000B80600008B0A0000F608000000070000000B000000090000900700009A0A00000409000000080000000B00000009000066080000A80A00001009000000090000000B00000009000039090000B60A00001C090000000A0000000B0000000900000A0A0000C30A000027090000000B0000000B000000090000D80A0000CF0A000031090000000C0000000B000000090000A40B0000DA0A000039090000000D0000000B0000000900006D0C0000E50A000041090000000E0000000B000000090000330D0000EF0A000048090000000F0000000B000000090000F70D0000F90A00004D09000000100000000B000000090000B80E0000010B00005209000000000000000C00000009000088010000F00A00009C08000000010000000C00000009000070020000040B0000B008000000020000000C00000009000056030000180B0000C308000000030000000C000000090000390400002B0B0000D408000000040000000C0000000900001A0500003D0B0000E508000000050000000C000000090000F80500004E0B0000F508000000060000000C000000090000D30600005F0B00000409000000070000000C000000090000AC0700006F0B00001209000000080000000C000000090000820800007E0B00001F09000000090000000C000000090000560900008D0B00002B090000000A0000000C000000090000270A00009B0B000035090000000B0000000C000000090000F60A0000A80B00003F090000000C0000000C000000090000C20B0000B50B000048090000000D0000000C0000000900008B0C0000C10B000050090000000E0000000C000000090000520D0000CC0B000057090000000F0000000C000000090000170E0000D60B00005C09000000100000000C000000090000D80E0000E00B00006109000000000000000D0000000900009F010000BA0B0000A908000000010000000D00000009000088020000D00B0000BD08000000020000000D0000000900006E030000E40B0000D008000000030000000D00000009000052040000F80B0000E208000000040000000D000000090000330500000C0C0000F308000000050000000D000000090000120600001E0C00000309000000060000000D000000090000EE060000300C00001209000000070000000D000000090000C7070000410C00002009000000080000000D0000000900009E080000510C00002D09000000090000000D00000009000072090000610C000039090000000A0000000D000000090000440A0000700C000044090000000B0000000D000000090000130B00007E0C00004E090000000C0000000D000000090000E00B00008C0C000056090000000D0000000D000000090000AA0C0000990C00005E090000000E0000000D000000090000710D0000A50C000065090000000F0000000D000000090000360E0000B00C00006B09000000100000000D000000090000F80E0000BB0C00007009000000000000000E000000090000B6010000820C0000B608000000010000000E000000090000A0020000980C0000CB08000000020000000E00000009000087030000AE0C0000DE08000000030000000E0000000900006B040000C30C0000F008000000040000000E0000000900004C050000D70C00000109000000050000000E0000000900002C060000EB0C00001109000000060000000E00000009000008070000FE0C00002009000000070000000E000000090000E2070000100D00002E09000000080000000E000000090000B9080000210D00003B09000000090000000E0000000900008E090000320D000047090000000A0000000E000000090000600A0000420D000052090000000B0000000E000000090000300B0000510D00005B090000000C0000000E000000090000FD0B0000600D000064090000000D0000000E000000090000C70C00006E0D00006C090000000E0000000E0000000900008F0D00007B0D000073090000000F0000000E000000090000550E0000870D00007909000000100000000E000000090000170F0000930D00007E09000000000000000F000000090000CD010000460D0000C308000000010000000F000000090000B70200005D0D0000D708000000020000000F0000000900009E030000740D0000EA08000000030000000F000000090000830400008A0D0000FD08000000040000000F000000090000650500009F0D00000E09000000050000000F00000009000045060000B40D00001E09000000060000000F00000009000022070000C80D00002D09000000070000000F000000090000FC070000DB0D00003B09000000080000000F000000090000D4080000EE0D00004809000000090000000F000000090000A9090000FF0D000054090000000A0000000F0000000900007C0A0000100E00005F090000000B0000000F0000000900004C0B0000210E000069090000000C0000000F0000000900001A0C0000300E000072090000000D0000000F000000090000E50C00003F0E00007A090000000E0000000F000000090000AD0D00004E0E000081090000000F0000000F000000090000730E00005B0E00008709000000100000000F000000090000360F0000680E00008C090000000000000010000000090000E3010000070E0000D0080000000100000010000000090000CD0200001F0E0000E4080000000200000010000000090000B5030000370E0000F70800000003000000100000000900009A0400004E0E0000090900000004000000100000000900007D050000650E00001A0900000005000000100000000900005D0600007A0E00002A0900000006000000100000000900003B0700008F0E00003A09000000070000001000000009000016080000A30E000048090000000800000010000000090000EE080000B70E000055090000000900000010000000090000C4090000CA0E000061090000000A00000010000000090000970A0000DC0E00006C090000000B00000010000000090000680B0000ED0E000076090000000C00000010000000090000360C0000FE0E00007F090000000D00000010000000090000010D00000E0F000087090000000E00000010000000090000CA0D00001D0F00008E090000000F00000010000000090000910E00002C0F000094090000001000000010000000090000540F00003A0F0000990900000000000000000000000A0000450000007E000000A10800000001000000000000000A00002801000086000000B50800000002000000000000000A0000090200008D000000C90800000003000000000000000A0000E802000094000000DB0800000004000000000000000A0000C303000099000000EC0800000005000000000000000A00009D0400009E000000FC0800000006000000000000000A000073050000A30000000B0900000007000000000000000A000047060000A60000001A0900000008000000000000000A000019070000A9000000270900000009000000000000000A0000E8070000AB00000033090000000A000000000000000A0000B4080000AC0000003E090000000B000000000000000A00007E090000AD00000048090000000C000000000000000A0000450A0000AD00000051090000000D000000000000000A0000090B0000AC00000059090000000E000000000000000A0000CB0B0000AB00000060090000000F000000000000000A00008B0C0000A9000000660900000010000000000000000A0000470D0000A60000006B0900000000000000010000000A00006300000071010000B50800000001000000010000000A0000470100007A010000CA0800000002000000010000000A00002902000082010000DD0800000003000000010000000A00000703000089010000EF0800000004000000010000000A0000E403000090010000010900000005000000010000000A0000BD04000096010000110900000006000000010000000A0000950500009B010000200900000007000000010000000A000069060000A00100002E0900000008000000010000000A00003B070000A40100003C0900000009000000010000000A00000B080000A701000048090000000A000000010000000A0000D7080000A901000053090000000B000000010000000A0000A2090000AB0100005D090000000C000000010000000A0000690A0000AC01000066090000000D000000010000000A00002E0B0000AD0100006F090000000E000000010000000A0000F10B0000AC01000076090000000F000000010000000A0000B10C0000AB0100007C0900000010000000010000000A00006E0D0000A9010000810900000000000000020000000A00008100000060020000C90800000001000000020000000A0000650100006A020000DD0800000002000000020000000A00004702000073020000F10800000003000000020000000A0000270300007C020000030900000004000000020000000A00000404000083020000150900000005000000020000000A0000DE0400008B020000250900000006000000020000000A0000B605000091020000340900000007000000020000000A00008B06000097020000430900000008000000020000000A00005D0700009B020000500900000009000000020000000A00002D080000A00200005C090000000A000000020000000A0000FA080000A302000068090000000B000000020000000A0000C5090000A602000072090000000C000000020000000A00008D0A0000A80200007B090000000D000000020000000A0000530B0000AA02000083090000000E000000020000000A0000160C0000AA0200008B090000000F000000020000000A0000D60C0000AA020000910900000010000000020000000A0000940D0000AA020000960900000000000000030000000A00009E0000004C030000DC0800000001000000030000000A00008301000057030000F10800000002000000030000000A00006602000061030000040900000003000000030000000A0000460300006B030000170900000004000000030000000A00002304000074030000280900000005000000030000000A0000FE0400007C030000390900000006000000030000000A0000D605000083030000480900000007000000030000000A0000AC0600008A030000570900000008000000030000000A00007F07000090030000640900000009000000030000000A00004F0800009503000070090000000A000000030000000A00001D0900009A0300007C090000000B000000030000000A0000E80900009E03000086090000000C000000030000000A0000B10A0000A10300008F090000000D000000030000000A0000770B0000A303000098090000000E000000030000000A00003A0C0000A50300009F090000000F000000030000000A0000FB0C0000A6030000A50900000010000000030000000A0000BA0D0000A6030000AB0900000000000000040000000A0000BB00000035040000EF0800000001000000040000000A0000A001000041040000040900000002000000040000000A0000830200004C040000170900000003000000040000000A000064030000570400002A0900000004000000040000000A000042040000610400003B0900000005000000040000000A00001D0500006A0400004C0900000006000000040000000A0000F6050000720400005B0900000007000000040000000A0000CC0600007A0400006A0900000008000000040000000A00009F07000081040000770900000009000000040000000A0000700800008704000084090000000A000000040000000A00003F0900008D0400008F090000000B000000040000000A00000A0A0000920400009A090000000C000000040000000A0000D40A000096040000A3090000000D000000040000000A00009A0B00009A040000AC090000000E000000040000000A00005E0C00009D040000B3090000000F000000040000000A0000200D00009F040000BA0900000010000000040000000A0000DF0D0000A0040000BF0900000000000000050000000A0000D70000001B050000020900000001000000050000000A0000BD01000028050000160900000002000000050000000A0000A1020000340500002A0900000003000000050000000A000082030000400500003D0900000004000000050000000A0000600400004B0500004E0900000005000000050000000A00003C050000550500005F0900000006000000050000000A0000150600005E0500006E0900000007000000050000000A0000EC060000670500007D0900000008000000050000000A0000C00700006F0500008B0900000009000000050000000A0000910800007705000097090000000A000000050000000A0000600900007D050000A3090000000B000000050000000A00002C0A000083050000AD090000000C000000050000000A0000F60A000088050000B7090000000D000000050000000A0000BD0B00008D050000BF090000000E000000050000000A0000820C000091050000C7090000000F000000050000000A0000440D000094050000CD0900000010000000050000000A0000030E000096050000D30900000000000000060000000A0000F3000000FD050000140900000001000000060000000A0000D90100000B060000280900000002000000060000000A0000BD020000180600003C0900000003000000060000000A00009F030000250600004F0900000004000000060000000A00007E04000031060000610900000005000000060000000A00005A0500003C060000710900000006000000060000000A00003406000047060000810900000007000000060000000A00000B07000051060000900900000008000000060000000A0000DF0700005A0600009D0900000009000000060000000A0000B108000062060000AA090000000A000000060000000A0000810900006A060000B6090000000B000000060000000A00004E0A000071060000C0090000000C000000060000000A0000180B000077060000CA090000000D000000060000000A0000DF0B00007D060000D2090000000E000000060000000A0000A50C000082060000DA090000000F000000060000000A0000670D000086060000E10900000010000000060000000A0000270E00008A060000E60900000000000000070000000A00000E010000DC060000250900000001000000070000000A0000F5010000EB0600003A0900000002000000070000000A0000D9020000FA0600004E0900000003000000070000000A0000BB03000007070000610900000004000000070000000A00009B04000014070000730900000005000000070000000A00007805000021070000830900000006000000070000000A0000520600002C070000930900000007000000070000000A00002907000037070000A20900000008000000070000000A0000FF07000041070000B00900000009000000070000000A0000D10800004B070000BC090000000A000000070000000A0000A109000054070000C8090000000B000000070000000A00006E0A00005C070000D3090000000C000000070000000A0000390B000063070000DC090000000D000000070000000A0000010C00006A070000E5090000000E000000070000000A0000C70C000070070000ED090000000F000000070000000A00008A0D000075070000F30900000010000000070000000A00004A0E00007A070000F90900000000000000080000000A000028010000B8070000360900000001000000080000000A000010020000C80700004B0900000002000000080000000A0000F5020000D80700005F0900000003000000080000000A0000D7030000E7070000720900000004000000080000000A0000B7040000F5070000840900000005000000080000000A00009505000002080000950900000006000000080000000A00006F0600000F080000A50900000007000000080000000A0000480700001B080000B40900000008000000080000000A00001D08000026080000C10900000009000000080000000A0000F008000030080000CE090000000A000000080000000A0000C10900003A080000DA090000000B000000080000000A00008E0A000043080000E5090000000C000000080000000A00005A0B00004C080000EF090000000D000000080000000A0000220C000053080000F7090000000E000000080000000A0000E90C00005A080000FF090000000F000000080000000A0000AC0D000061080000060A00000010000000080000000A00006D0E0000660800000C0A00000000000000090000000A00004201000091080000470900000001000000090000000A00002A020000A20800005C0900000002000000090000000A000010030000B3080000700900000003000000090000000A0000F3030000C2080000830900000004000000090000000A0000D3040000D1080000950900000005000000090000000A0000B1050000E0080000A60900000006000000090000000A00008C060000EE080000B60900000007000000090000000A000065070000FB080000C50900000008000000090000000A00003B08000007090000D30900000009000000090000000A00000F09000013090000E0090000000A000000090000000A0000E00900001D090000EC090000000B000000090000000A0000AE0A000028090000F7090000000C000000090000000A00007A0B000031090000000A0000000D000000090000000A0000430C00003A090000090A0000000E000000090000000A00000A0D000042090000110A0000000F000000090000000A0000CE0D000049090000180A00000010000000090000000A00008F0E0000500900001E0A000000000000000A0000000A00005C010000660900005809000000010000000A0000000A000044020000780900006D09000000020000000A0000000A00002A0300008A0900008109000000030000000A0000000A00000E0400009B0900009409000000040000000A0000000A0000EF040000AB090000A609000000050000000A0000000A0000CD050000BB090000B709000000060000000A0000000A0000A9060000C9090000C709000000070000000A0000000A000082070000D7090000D609000000080000000A0000000A000059080000E5090000E409000000090000000A0000000A00002D090000F1090000F1090000000A0000000A0000000A0000FF090000FF090000FF090000000B0000000A0000000A0000CD0A0000090A0000080A0000000C0000000A0000000A0000990B0000130A0000120A0000000D0000000A0000000A0000630C00001D0A00001B0A0000000E0000000A0000000A00002A0D0000260A0000230A0000000F0000000A0000000A0000EF0D00002F0A00002A0A000000100000000A0000000A0000B10E0000360A00002F0A000000000000000B0000000A000074010000380A00006809000000010000000B0000000A00005E0200004C0A00007D09000000020000000B0000000A0000440300005E0A00009109000000030000000B0000000A000028040000700A0000A409000000040000000B0000000A00000A050000820A0000B609000000050000000B0000000A0000E9050000920A0000C709000000060000000B0000000A0000C5060000A20A0000D709000000070000000B0000000A00009F070000B10A0000E609000000080000000B0000000A000076080000BF0A0000F509000000090000000B0000000A00004A090000CD0A0000020A0000000A0000000B0000000A00001C0A0000DA0A00000E0A0000000B0000000B0000000A0000EC0A0000E60A0000190A0000000C0000000B0000000A0000B80B0000F20A0000230A0000000D0000000B0000000A0000830C0000FD0A00002C0A0000000E0000000B0000000A00004A0D0000070B0000340A0000000F0000000B0000000A00000F0E0000110B00003B0A000000100000000B0000000A0000D20E0000190B0000410A000000000000000C0000000A00008D010000070B00007709000000010000000C0000000A0000760200001C0B00008C09000000020000000C0000000A00005D030000300B0000A109000000030000000C0000000A000042040000430B0000B409000000040000000C0000000A000024050000550B0000C609000000050000000C0000000A000003060000660B0000D709000000060000000C0000000A0000E0060000770B0000E709000000070000000C0000000A0000BA070000870B0000F709000000080000000C0000000A000092080000970B0000050A000000090000000C0000000A000067090000A60B0000120A0000000A0000000C0000000A00003A0A0000B40B00001E0A0000000B0000000C0000000A00000A0B0000C10B0000290A0000000C0000000C0000000A0000D70B0000CE0B0000330A0000000D0000000C0000000A0000A20C0000DA0B00003C0A0000000E0000000C0000000A00006A0D0000E50B0000440A0000000F0000000C0000000A00002F0E0000EF0B00004C0A000000100000000C0000000A0000F20E0000F90B0000520A000000000000000D0000000A0000A4010000D30B00008609000000010000000D0000000A00008F020000E90B00009B09000000020000000D0000000A000076030000FD0B0000B009000000030000000D0000000A00005B040000110C0000C309000000040000000D0000000A00003E050000250C0000D509000000050000000D0000000A00001E060000370C0000E709000000060000000D0000000A0000FB060000490C0000F709000000070000000D0000000A0000D60700005B0C0000060A000000080000000D0000000A0000AE0800006B0C0000140A000000090000000D0000000A0000830900007B0C0000220A0000000A0000000D0000000A0000560A00008A0C00002E0A0000000B0000000D0000000A0000270B0000980C0000390A0000000C0000000D0000000A0000F50B0000A60C0000430A0000000D0000000D0000000A0000C00C0000B30C00004D0A0000000E0000000D0000000A0000890D0000BF0C0000550A0000000F0000000D0000000A00004F0E0000CB0C00005C0A000000100000000D0000000A0000120F0000D60C0000620A000000000000000E0000000A0000BB0100009C0C00009509000000010000000E0000000A0000A6020000B20C0000AA09000000020000000E0000000A00008E030000C80C0000BF09000000030000000E0000000A000074040000DD0C0000D209000000040000000E0000000A000057050000F20C0000E409000000050000000E0000000A000037060000050D0000F609000000060000000E0000000A000015070000180D0000060A000000070000000E0000000A0000F00700002A0D0000160A000000080000000E0000000A0000C90800003C0D0000240A000000090000000E0000000A00009F0900004D0D0000310A0000000A0000000E0000000A0000730A00005D0D00003D0A0000000B0000000E0000000A0000440B00006D0D0000490A0000000C0000000E0000000A0000120C00007B0D0000530A0000000D0000000E0000000A0000DE0C0000890D00005C0A0000000E0000000E0000000A0000A70D0000970D0000650A0000000F0000000E0000000A00006E0E0000A30D00006C0A000000100000000E0000000A0000320F0000AF0D0000720A000000000000000F0000000A0000D2010000610D0000A309000000010000000F0000000A0000BD020000790D0000B909000000020000000F0000000A0000A6030000900D0000CD09000000030000000F0000000A00008C040000A60D0000E109000000040000000F0000000A000070050000BB0D0000F309000000050000000F0000000A000051060000D00D0000040A000000060000000F0000000A00002F070000E40D0000150A000000070000000F0000000A00000B080000F70D0000240A000000080000000F0000000A0000E40800000A0E0000330A000000090000000F0000000A0000BB0900001C0E0000400A0000000A0000000F0000000A00008F0A00002D0E00004D0A0000000B0000000F0000000A0000600B00003D0E0000580A0000000C0000000F0000000A00002F0C00004D0E0000620A0000000D0000000F0000000A0000FB0C00005C0E00006C0A0000000E0000000F0000000A0000C50D00006B0E0000740A0000000F0000000F0000000A00008C0E0000780E00007B0A000000100000000F0000000A0000510F0000850E0000820A00000000000000100000000A0000E8010000230E0000B10900000001000000100000000A0000D40200003C0E0000C60900000002000000100000000A0000BD030000540E0000DB0900000003000000100000000A0000A40400006B0E0000EF0900000004000000100000000A000088050000810E0000010A00000005000000100000000A000069060000970E0000130A00000006000000100000000A000048070000AC0E0000230A00000007000000100000000A000024080000C10E0000330A00000008000000100000000A0000FE080000D40E0000410A00000009000000100000000A0000D5090000E70E00004F0A0000000A000000100000000A0000AA0A0000FA0E00005B0A0000000B000000100000000A00007C0B00000B0F0000670A0000000C000000100000000A00004B0C00001C0F0000710A0000000D000000100000000A0000180D00002C0F00007B0A0000000E000000100000000A0000E20D00003C0F0000830A0000000F000000100000000A0000AA0E00004A0F00008A0A00000010000000100000000A00006F0F0000580F0000910A00000000000000000000000B00004800000088000000660900000001000000000000000B00002D0100008F0000007B0900000002000000000000000B00000F02000096000000900900000003000000000000000B0000EF0200009D000000A30900000004000000000000000B0000CC030000A2000000B50900000005000000000000000B0000A7040000A7000000C60900000006000000000000000B00007E050000AB000000D70900000007000000000000000B000054060000AF000000E60900000008000000000000000B000027070000B2000000F40900000009000000000000000B0000F7070000B4000000010A0000000A000000000000000B0000C4080000B50000000E0A0000000B000000000000000B00008F090000B6000000190A0000000C000000000000000B0000580A0000B6000000230A0000000D000000000000000B00001E0B0000B50000002C0A0000000E000000000000000B0000E10B0000B4000000340A0000000F000000000000000B0000A10C0000B10000003C0A00000010000000000000000B0000600D0000AF000000420A00000000000000010000000B0000670000007B0100007C0900000001000000010000000B00004C01000084010000910900000002000000010000000B00002F0200008C010000A50900000003000000010000000B00000F03000093010000B90900000004000000010000000B0000ED0300009A010000CB0900000005000000010000000B0000C8040000A0010000DD0900000006000000010000000B0000A0050000A5010000ED0900000007000000010000000B000076060000AA010000FC0900000008000000010000000B000049070000AE0100000B0A00000009000000010000000B00001A080000B1010000180A0000000A000000010000000B0000E8080000B3010000240A0000000B000000010000000B0000B3090000B5010000300A0000000C000000010000000B00007C0A0000B60100003A0A0000000D000000010000000B0000430B0000B7010000430A0000000E000000010000000B0000060C0000B60100004C0A0000000F000000010000000B0000C80C0000B5010000530A00000010000000010000000B0000860D0000B3010000590A00000000000000020000000B0000850000006C020000910900000001000000020000000B00006B01000075020000A60900000002000000020000000B00004E0200007F020000BB0900000003000000020000000B00002E03000087020000CE0900000004000000020000000B00000D0400008F020000E10900000005000000020000000B0000E804000096020000F20900000006000000020000000B0000C10500009C020000030A00000007000000020000000B000097060000A2020000120A00000008000000020000000B00006B070000A7020000210A00000009000000020000000B00003C080000AB0200002E0A0000000A000000020000000B00000B090000AE0200003B0A0000000B000000020000000B0000D7090000B1020000460A0000000C000000020000000B0000A00A0000B3020000500A0000000D000000020000000B0000670B0000B50200005A0A0000000E000000020000000B00002C0C0000B5020000620A0000000F000000020000000B0000ED0C0000B50200006A0A00000010000000020000000B0000AD0D0000B5020000700A00000000000000030000000B0000A200000059030000A60900000001000000030000000B00008801000064030000BB0900000002000000030000000B00006C0200006E030000D00900000003000000030000000B00004D03000077030000E30900000004000000030000000B00002C04000080030000F60900000005000000030000000B00000805000088030000080A00000006000000030000000B0000E105000090030000180A00000007000000030000000B0000B806000096030000280A00000008000000030000000B00008D0700009C030000360A00000009000000030000000B00005E080000A2030000440A0000000A000000030000000B00002E090000A6030000500A0000000B000000030000000B0000FA090000AA0300005C0A0000000C000000030000000B0000C40A0000AD030000660A0000000D000000030000000B00008B0B0000B0030000700A0000000E000000030000000B0000500C0000B2030000780A0000000F000000030000000B0000130D0000B3030000800A00000010000000030000000B0000D20D0000B3030000860A00000000000000040000000B0000BF00000043040000BA0900000001000000040000000B0000A60100004F040000D00900000002000000040000000B00008A0200005A040000E40900000003000000040000000B00006C03000065040000F80900000004000000040000000B00004B0400006E0400000B0A00000005000000040000000B000027050000780400001D0A00000006000000040000000B000001060000800400002D0A00000007000000040000000B0000D9060000880400003D0A00000008000000040000000B0000AE0700008F0400004C0A00000009000000040000000B00008008000095040000590A0000000A000000040000000B00004F0900009B040000660A0000000B000000040000000B00001D0A0000A0040000710A0000000C000000040000000B0000E70A0000A40400007C0A0000000D000000040000000B0000AF0B0000A8040000860A0000000E000000040000000B0000740C0000AA0400008E0A0000000F000000040000000B0000370D0000AD040000960A00000010000000040000000B0000F70D0000AE0400009C0A00000000000000050000000B0000DB00000029050000CE0900000001000000050000000B0000C201000036050000E40900000002000000050000000B0000A702000043050000F90900000003000000050000000B0000890300004E0500000C0A00000004000000050000000B000069040000590500001F0A00000005000000050000000B00004605000064050000310A00000006000000050000000B0000210600006D050000420A00000007000000050000000B0000F906000076050000520A00000008000000050000000B0000CE0700007E050000600A00000009000000050000000B0000A1080000860500006E0A0000000A000000050000000B0000710900008C0500007B0A0000000B000000050000000B00003F0A000092050000870A0000000C000000050000000B00000A0B000098050000910A0000000D000000050000000B0000D20B00009C0500009B0A0000000E000000050000000B0000980C0000A0050000A40A0000000F000000050000000B00005B0D0000A3050000AB0A00000010000000050000000B00001C0E0000A6050000B20A00000000000000060000000B0000F70000000D060000E10900000001000000060000000B0000DF0100001B060000F70900000002000000060000000B0000C4020000280600000C0A00000003000000060000000B0000A703000035060000200A00000004000000060000000B00008704000041060000330A00000005000000060000000B0000640500004D060000450A00000006000000060000000B00004006000057060000560A00000007000000060000000B00001807000061060000660A00000008000000060000000B0000EE0700006A060000750A00000009000000060000000B0000C108000073060000830A0000000A000000060000000B0000920900007A0600008F0A0000000B000000060000000B0000600A0000810600009B0A0000000C000000060000000B00002B0B000088060000A60A0000000D000000060000000B0000F40B00008E060000B00A0000000E000000060000000B0000BB0C000092060000B90A0000000F000000060000000B00007F0D000097060000C00A00000010000000060000000B0000400E00009A060000C70A00000000000000070000000B000012010000ED060000F50900000001000000070000000B0000FA010000FC0600000B0A00000002000000070000000B0000E00200000B070000200A00000003000000070000000B0000C303000019070000340A00000004000000070000000B0000A404000026070000470A00000005000000070000000B00008205000032070000590A00000006000000070000000B00005E0600003E0700006A0A00000007000000070000000B000037070000490700007A0A00000008000000070000000B00000D08000053070000890A00000009000000070000000B0000E10800005D070000970A0000000A000000070000000B0000B209000065070000A40A0000000B000000070000000B0000810A00006D070000AF0A0000000C000000070000000B00004D0B000075070000BA0A0000000D000000070000000B0000160C00007C070000C40A0000000E000000070000000B0000DD0C000082070000CD0A0000000F000000070000000B0000A10D000087070000D50A00000010000000070000000B0000630E00008C070000DC0A00000000000000080000000B00002C010000CA070000070A00000001000000080000000B000015020000DB0700001D0A00000002000000080000000B0000FC020000EA070000330A00000003000000080000000B0000DF030000F9070000470A00000004000000080000000B0000C1040000070800005A0A00000005000000080000000B00009F050000140800006C0A00000006000000080000000B00007B060000210800007D0A00000007000000080000000B0000550700002D0800008D0A00000008000000080000000B00002C080000390800009C0A00000009000000080000000B00000009000043080000AA0A0000000A000000080000000B0000D20900004D080000B70A0000000B000000080000000B0000A10A000056080000C30A0000000C000000080000000B00006E0B00005F080000CE0A0000000D000000080000000B0000380C000067080000D80A0000000E000000080000000B0000FF0C00006E080000E10A0000000F000000080000000B0000C40D000074080000E90A00000010000000080000000B0000860E00007A080000F00A00000000000000090000000B000046010000A40800001A0A00000001000000090000000B000030020000B5080000300A00000002000000090000000B000017030000C6080000450A00000003000000090000000B0000FB030000D6080000590A00000004000000090000000B0000DD040000E50800006D0A00000005000000090000000B0000BC050000F40800007F0A00000006000000090000000B00009906000001090000900A00000007000000090000000B0000730700000F090000A00A00000008000000090000000B00004A0800001B090000AF0A00000009000000090000000B00001F09000027090000BD0A0000000A000000090000000B0000F109000032090000CB0A0000000B000000090000000B0000C10A00003C090000D70A0000000C000000090000000B00008E0B000045090000E20A0000000D000000090000000B0000580C00004E090000EC0A0000000E000000090000000B0000200D000056090000F50A0000000F000000090000000B0000E60D00005E090000FD0A00000010000000090000000B0000A80E000065090000040B000000000000000A0000000B0000600100007B0900002B0A000000010000000A0000000B00004A0200008D090000420A000000020000000A0000000B0000310300009F090000570A000000030000000A0000000B000016040000B00900006B0A000000040000000A0000000B0000F8040000C00900007F0A000000050000000A0000000B0000D8050000D0090000910A000000060000000A0000000B0000B5060000DE090000A20A000000070000000A0000000B000090070000ED090000B30A000000080000000A0000000B000068080000FA090000C20A000000090000000A0000000B00003D090000070A0000D00A0000000A0000000A0000000B0000100A0000130A0000DE0A0000000B0000000A0000000B0000E00A00001E0A0000EA0A0000000C0000000A0000000B0000AD0B0000290A0000F50A0000000D0000000A0000000B0000790C0000330A0000FF0A0000000E0000000A0000000B0000410D00003C0A0000080B0000000F0000000A0000000B0000070E0000440A0000110B000000100000000A0000000B0000CA0E00004C0A0000180B000000000000000B0000000B0000790100004E0A00003D0A000000010000000B0000000B000063020000620A0000530A000000020000000B0000000B00004B030000740A0000690A000000030000000B0000000B000030040000860A00007D0A000000040000000B0000000B000013050000980A0000910A000000050000000B0000000B0000F3050000A80A0000A30A000000060000000B0000000B0000D1060000B80A0000B40A000000070000000B0000000B0000AC070000C70A0000C50A000000080000000B0000000B000085080000D60A0000D40A000000090000000B0000000B00005A090000E40A0000E30A0000000A0000000B0000000B00002E0A0000F10A0000F00A0000000B0000000B0000000B0000FF0A0000FF0A0000FF0A0000000C0000000B0000000B0000CD0B0000090B0000080B0000000D0000000B0000000B0000980C0000140B0000120B0000000E0000000B0000000B0000610D00001E0B00001B0B0000000F0000000B0000000B0000280E0000280B0000240B000000100000000B0000000B0000EB0E0000310B00002B0B000000000000000C0000000B0000910100001E0B00004E0A000000010000000C0000000B00007C020000330B0000640A000000020000000C0000000B000064030000470B00007A0A000000030000000C0000000B00004A0400005A0B00008F0A000000040000000C0000000B00002E0500006C0B0000A20A000000050000000C0000000B00000E0600007E0B0000B50A000000060000000C0000000B0000ED0600008F0B0000C60A000000070000000C0000000B0000C80700009F0B0000D70A000000080000000C0000000B0000A1080000AF0B0000E60A000000090000000C0000000B000077090000BD0B0000F50A0000000A0000000C0000000B00004B0A0000CC0B0000020B0000000B0000000C0000000B00001D0B0000D90B00000E0B0000000C0000000C0000000B0000EB0B0000E60B00001A0B0000000D0000000C0000000B0000B70C0000F20B0000240B0000000E0000000C0000000B0000810D0000FD0B00002E0B0000000F0000000C0000000B0000480E0000080C0000360B000000100000000C0000000B00000C0F0000120C00003E0B000000000000000D0000000B0000A9010000EB0B00005E0A000000010000000D0000000B000094020000010C0000750A000000020000000D0000000B00007D030000160C00008B0A000000030000000D0000000B0000640400002A0C00009F0A000000040000000D0000000B0000480500003D0C0000B30A000000050000000D0000000B000029060000500C0000C60A000000060000000D0000000B000007070000620C0000D70A000000070000000D0000000B0000E3070000730C0000E80A000000080000000D0000000B0000BD080000840C0000F80A000000090000000D0000000B000094090000940C0000060B0000000A0000000D0000000B0000680A0000A30C0000140B0000000B0000000D0000000B00003A0B0000B20C0000200B0000000C0000000D0000000B0000090C0000C00C00002C0B0000000D0000000D0000000B0000D60C0000CD0C0000360B0000000E0000000D0000000B0000A00D0000D90C0000400B0000000F0000000D0000000B0000670E0000E50C0000480B000000100000000D0000000B00002C0F0000F00C0000500B000000000000000E0000000B0000C0010000B50C00006F0A000000010000000E0000000B0000AC020000CC0C0000850A000000020000000E0000000B000096030000E20C00009B0A000000030000000E0000000B00007C040000F70C0000B00A000000040000000E0000000B0000610500000B0D0000C40A000000050000000E0000000B0000430600001F0D0000D60A000000060000000E0000000B000022070000320D0000E80A000000070000000E0000000B0000FE070000450D0000F90A000000080000000E0000000B0000D8080000560D0000090B000000090000000E0000000B0000B0090000670D0000170B0000000A0000000E0000000B0000850A0000780D0000250B0000000B0000000E0000000B0000570B0000870D0000320B0000000C0000000E0000000B0000270C0000960D00003D0B0000000D0000000E0000000B0000F40C0000A40D0000480B0000000E0000000E0000000B0000BE0D0000B20D0000510B0000000F0000000E0000000B0000860E0000BE0D00005A0B000000100000000E0000000B00004C0F0000CA0D0000620B000000000000000F0000000B0000D70100007B0D00007E0A000000010000000F0000000B0000C3020000930D0000950A000000020000000F0000000B0000AD030000AA0D0000AB0A000000030000000F0000000B000095040000C00D0000C00A000000040000000F0000000B00007A050000D60D0000D40A000000050000000F0000000B00005C060000EB0D0000E70A000000060000000F0000000B00003C070000FF0D0000F90A000000070000000F0000000B000019080000130E0000090B000000080000000F0000000B0000F3080000250E0000190B000000090000000F0000000B0000CB090000370E0000280B0000000A0000000F0000000B0000A00A0000490E0000360B0000000B0000000F0000000B0000730B0000590E0000420B0000000C0000000F0000000B0000440C0000690E00004E0B0000000D0000000F0000000B0000110D0000790E0000590B0000000E0000000F0000000B0000DC0D0000870E0000630B0000000F0000000F0000000B0000A50E0000950E00006B0B000000100000000F0000000B00006B0F0000A20E0000730B00000000000000100000000B0000ED0100003F0E00008E0A00000001000000100000000B0000DA020000570E0000A50A00000002000000100000000B0000C4030000700E0000BB0A00000003000000100000000B0000AC040000870E0000D00A00000004000000100000000B0000920500009E0E0000E40A00000005000000100000000B000075060000B30E0000F70A00000006000000100000000B000055070000C90E0000080B00000007000000100000000B000032080000DD0E0000190B00000008000000100000000B00000D090000F10E0000290B00000009000000100000000B0000E6090000040F0000380B0000000A000000100000000B0000BC0A0000170F0000460B0000000B000000100000000B00008F0B0000280F0000530B0000000C000000100000000B0000600C0000390F00005F0B0000000D000000100000000B00002E0D00004A0F00006A0B0000000E000000100000000B0000FA0D0000590F0000730B0000000F000000100000000B0000C30E0000680F00007C0B00000010000000100000000B0000890F0000760F0000840B00000000000000000000000C00004B00000090000000260A00000001000000000000000C000032010000970000003D0A00000002000000000000000C0000150200009E000000520A00000003000000000000000C0000F6020000A5000000660A00000004000000000000000C0000D4030000AA0000007A0A00000005000000000000000C0000B0040000AF0000008C0A00000006000000000000000C000089050000B30000009E0A00000007000000000000000C000060060000B7000000AE0A00000008000000000000000C000034070000BA000000BD0A00000009000000000000000C000005080000BC000000CC0A0000000A000000000000000C0000D4080000BD000000D90A0000000B000000000000000C0000A0090000BE000000E50A0000000C000000000000000C00006A0A0000BE000000F00A0000000D000000000000000C0000310B0000BD000000FB0A0000000E000000000000000C0000F60B0000BB000000040B0000000F000000000000000C0000B80C0000B90000000C0B00000010000000000000000C0000770D0000B6000000130B00000000000000010000000C00006A000000850100003D0A00000001000000010000000C0000510100008D010000540A00000002000000010000000C00003502000095010000690A00000003000000010000000C0000160300009D0100007E0A00000004000000010000000C0000F5030000A3010000910A00000005000000010000000C0000D1040000A9010000A40A00000006000000010000000C0000AB050000AF010000B50A00000007000000010000000C000082060000B3010000C60A00000008000000010000000C000056070000B7010000D50A00000009000000010000000C000028080000BA010000E40A0000000A000000010000000C0000F8080000BD010000F10A0000000B000000010000000C0000C5090000BE010000FE0A0000000C000000010000000C00008F0A0000BF010000090B0000000D000000010000000C0000560B0000C0010000130B0000000E000000010000000C00001C0C0000BF0100001D0B0000000F000000010000000C0000DE0C0000BE010000250B00000010000000010000000C00009E0D0000BC0100002D0B00000000000000020000000C00008800000076020000540A00000001000000020000000C00006F010000800200006B0A00000002000000020000000C00005402000089020000800A00000003000000020000000C00003603000092020000950A00000004000000020000000C00001504000099020000A90A00000005000000020000000C0000F2040000A0020000BB0A00000006000000020000000C0000CC050000A7020000CD0A00000007000000020000000C0000A4060000AC020000DD0A00000008000000020000000C000079070000B1020000ED0A00000009000000020000000C00004B080000B5020000FC0A0000000A000000020000000C00001B090000B9020000090B0000000B000000020000000C0000E8090000BC020000160B0000000C000000020000000C0000B30A0000BE020000210B0000000D000000020000000C00007B0B0000BF0200002C0B0000000E000000020000000C0000410C0000C0020000350B0000000F000000020000000C0000040D0000C00200003E0B00000010000000020000000C0000C40D0000BF020000450B00000000000000030000000C0000A5000000640300006A0A00000001000000030000000C00008D0100006F030000810A00000002000000030000000C0000720200007A030000970A00000003000000030000000C00005403000083030000AC0A00000004000000030000000C0000340400008C030000BF0A00000005000000030000000C00001205000094030000D20A00000006000000030000000C0000EC0500009B030000E40A00000007000000030000000C0000C5060000A2030000F50A00000008000000030000000C00009A070000A8030000040B00000009000000030000000C00006D080000AD030000130B0000000A000000030000000C00003E090000B2030000210B0000000B000000030000000C00000B0A0000B60300002D0B0000000C000000030000000C0000D70A0000B9030000390B0000000D000000030000000C00009F0B0000BC030000440B0000000E000000030000000C0000660C0000BD0300004D0B0000000F000000030000000C0000290D0000BE030000560B00000010000000030000000C0000EA0D0000BF0300005E0B00000000000000040000000C0000C200000050040000800A00000001000000040000000C0000AA0100005C040000970A00000002000000040000000C00009002000067040000AD0A00000003000000040000000C00007303000071040000C20A00000004000000040000000C0000530400007B040000D60A00000005000000040000000C00003105000085040000E90A00000006000000040000000C00000C0600008D040000FB0A00000007000000040000000C0000E5060000950400000B0B00000008000000040000000C0000BB0700009C0400001B0B00000009000000040000000C00008F080000A20400002A0B0000000A000000040000000C000060090000A8040000380B0000000B000000040000000C00002E0A0000AD040000450B0000000C000000040000000C0000FA0A0000B1040000500B0000000D000000040000000C0000C30B0000B50400005B0B0000000E000000040000000C00008A0C0000B7040000650B0000000F000000040000000C00004E0D0000BA0400006E0B00000010000000040000000C00000F0E0000BB040000750B00000000000000050000000C0000DE00000037050000960A00000001000000050000000C0000C701000045050000AD0A00000002000000050000000C0000AD02000051050000C30A00000003000000050000000C0000910300005D050000D80A00000004000000050000000C00007204000068050000EC0A00000005000000050000000C00005005000072050000FF0A00000006000000050000000C00002C0600007B050000110B00000007000000050000000C00000507000084050000220B00000008000000050000000C0000DC0700008C050000320B00000009000000050000000C0000B008000094050000410B0000000A000000050000000C0000810900009B0500004E0B0000000B000000050000000C0000500A0000A10500005B0B0000000C000000050000000C00001C0B0000A6050000670B0000000D000000050000000C0000E60B0000AB050000720B0000000E000000050000000C0000AD0C0000AE0500007C0B0000000F000000050000000C0000720D0000B2050000850B00000010000000050000000C0000340E0000B40500008D0B00000000000000060000000C0000FA0000001C060000AB0A00000001000000060000000C0000E30100002A060000C20A00000002000000060000000C0000CA02000038060000D80A00000003000000060000000C0000AE03000045060000ED0A00000004000000060000000C00009004000051060000010B00000005000000060000000C00006E0500005C060000140B00000006000000060000000C00004B06000067060000260B00000007000000060000000C00002407000070060000380B00000008000000060000000C0000FC0700007A060000480B00000009000000060000000C0000D008000082060000570B0000000A000000060000000C0000A20900008A060000650B0000000B000000060000000C0000720A000091060000720B0000000C000000060000000C00003E0B0000980600007E0B0000000D000000060000000C0000090C00009D060000890B0000000E000000060000000C0000D00C0000A2060000930B0000000F000000060000000C0000950D0000A60600009C0B00000010000000060000000C0000580E0000AA060000A40B00000000000000070000000C000015010000FE060000BF0A00000001000000070000000C0000FF0100000D070000D70A00000002000000070000000C0000E60200001B070000ED0A00000003000000070000000C0000CB03000029070000020B00000004000000070000000C0000AD04000036070000160B00000005000000070000000C00008C050000430700002A0B00000006000000070000000C0000690600004E0700003C0B00000007000000070000000C000043070000590700004D0B00000008000000070000000C00001B080000640700005D0B00000009000000070000000C0000F00800006D0700006C0B0000000A000000070000000C0000C3090000760700007B0B0000000B000000070000000C0000930A00007E070000880B0000000C000000070000000C0000600B000086070000940B0000000D000000070000000C00002B0C00008D0700009F0B0000000E000000070000000C0000F30C000093070000A90B0000000F000000070000000C0000B80D000098070000B20B00000010000000070000000C00007C0E00009D070000BA0B00000000000000080000000C000030010000DC070000D40A00000001000000080000000C00001A020000EC070000EB0A00000002000000080000000C000002030000FC070000010B00000003000000080000000C0000E70300000B080000170B00000004000000080000000C0000C9040000190800002B0B00000005000000080000000C0000A9050000260800003E0B00000006000000080000000C00008706000033080000510B00000007000000080000000C0000620700003F080000620B00000008000000080000000C00003A0800004B080000720B00000009000000080000000C00000F09000055080000820B0000000A000000080000000C0000E20900005F080000900B0000000B000000080000000C0000B30A0000680800009D0B0000000C000000080000000C0000810B000071080000AA0B0000000D000000080000000C00004C0C000079080000B50B0000000E000000080000000C0000150D000080080000BF0B0000000F000000080000000C0000DB0D000086080000C80B00000010000000080000000C00009F0E00008C080000D10B00000000000000090000000C00004A010000B7080000E70A00000001000000090000000C000035020000C8080000FF0A00000002000000090000000C00001D030000D9080000150B00000003000000090000000C000003040000E90800002B0B00000004000000090000000C0000E6040000F80800003F0B00000005000000090000000C0000C605000007090000530B00000006000000090000000C0000A406000015090000650B00000007000000090000000C00007F07000022090000770B00000008000000090000000C0000580800002E090000870B00000009000000090000000C00002E0900003A090000970B0000000A000000090000000C0000020A000045090000A50B0000000B000000090000000C0000D30A00004F090000B20B0000000C000000090000000C0000A10B000059090000BF0B0000000D000000090000000C00006D0C000062090000CA0B0000000E000000090000000C0000360D00006A090000D50B0000000F000000090000000C0000FD0D000072090000DE0B00000010000000090000000C0000C10E000078090000E60B000000000000000A0000000C0000630100008F090000FB0A000000010000000A0000000C00004F020000A1090000120B000000020000000A0000000C000038030000B3090000290B000000030000000A0000000C00001E040000C40900003F0B000000040000000A0000000C000001050000D4090000530B000000050000000A0000000C0000E2050000E4090000670B000000060000000A0000000C0000C1060000F3090000790B000000070000000A0000000C00009C070000010A00008B0B000000080000000A0000000C0000760800000F0A00009C0B000000090000000A0000000C00004C0900001B0A0000AB0B0000000A0000000A0000000C0000200A0000270A0000BA0B0000000B0000000A0000000C0000F20A0000330A0000C70B0000000C0000000A0000000C0000C10B00003E0A0000D40B0000000D0000000A0000000C00008D0C0000480A0000DF0B0000000E0000000A0000000C0000570D0000510A0000EA0B0000000F0000000A0000000C00001E0E0000590A0000F30B000000100000000A0000000C0000E30E0000610A0000FC0B000000000000000B0000000C00007C010000630A00000E0B000000010000000B0000000C000068020000770A0000250B000000020000000B0000000C000052030000890A00003C0B000000030000000B0000000C0000380400009C0A0000520B000000040000000B0000000C00001C050000AD0A0000670B000000050000000B0000000C0000FE050000BE0A00007A0B000000060000000B0000000C0000DD060000CE0A00008D0B000000070000000B0000000C0000B9070000DD0A00009F0B000000080000000B0000000C000093080000EC0A0000AF0B000000090000000B0000000C00006A090000FA0A0000BF0B0000000A0000000B0000000C00003F0A0000070B0000CE0B0000000B0000000B0000000C0000110B0000130B0000DB0B0000000C0000000B0000000C0000E00B00001F0B0000E80B0000000D0000000B0000000C0000AD0C00002A0B0000F40B0000000E0000000B0000000C0000770D0000340B0000FE0B0000000F0000000B0000000C00003F0E00003E0B0000080C000000100000000B0000000C0000040F0000470B0000100C000000000000000C0000000C000095010000340B0000200B000000010000000C0000000C000081020000490B0000380B000000020000000C0000000C00006B0300005D0B00004F0B000000030000000C0000000C000052040000700B0000650B000000040000000C0000000C000037050000830B00007A0B000000050000000C0000000C000019060000940B00008E0B000000060000000C0000000C0000F8060000A60B0000A00B000000070000000C0000000C0000D5070000B60B0000B20B000000080000000C0000000C0000AF080000C60B0000C30B000000090000000C0000000C000087090000D50B0000D30B0000000A0000000C0000000C00005C0A0000E30B0000E20B0000000B0000000C0000000C00002F0B0000F00B0000EF0B0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B0000000D0000000C0000000C0000CC0C0000090C0000080C0000000E0000000C0000000C0000970D0000150C0000130C0000000F0000000C0000000C00005F0E0000200C00001C0C000000100000000C0000000C0000250F00002A0C0000250C000000000000000D0000000C0000AD010000020C0000320B000000010000000D0000000C00009A020000180C00004A0B000000020000000D0000000C0000840300002D0C0000610B000000030000000D0000000C00006C040000410C0000770B000000040000000D0000000C000051050000550C00008C0B000000050000000D0000000C000033060000680C0000A00B000000060000000D0000000C0000130700007A0C0000B30B000000070000000D0000000C0000F10700008C0C0000C50B000000080000000D0000000C0000CB0800009C0C0000D60B000000090000000D0000000C0000A4090000AC0C0000E60B0000000A0000000D0000000C0000790A0000BC0C0000F50B0000000B0000000D0000000C00004C0B0000CA0C0000030C0000000C0000000D0000000C00001D0C0000D80C0000100C0000000D0000000D0000000C0000EB0C0000E50C00001B0C0000000E0000000D0000000C0000B60D0000F20C0000260C0000000F0000000D0000000C00007F0E0000FE0C0000300C000000100000000D0000000C0000450F0000090D0000390C000000000000000E0000000C0000C4010000CD0C0000440B000000010000000E0000000C0000B1020000E40C00005C0B000000020000000E0000000C00009C030000FA0C0000730B000000030000000E0000000C000084040000100D0000890B000000040000000E0000000C00006A050000240D00009E0B000000050000000E0000000C00004D060000380D0000B30B000000060000000E0000000C00002E0700004B0D0000C60B000000070000000E0000000C00000C0800005E0D0000D80B000000080000000E0000000C0000E7080000700D0000E90B000000090000000E0000000C0000C0090000810D0000F90B0000000A0000000E0000000C0000960A0000910D0000080C0000000B0000000E0000000C0000690B0000A10D0000160C0000000C0000000E0000000C00003B0C0000B00D0000230C0000000D0000000E0000000C0000090D0000BE0D00002F0C0000000E0000000E0000000C0000D50D0000CC0D00003A0C0000000F0000000E0000000C00009E0E0000D90D0000440C000000100000000E0000000C0000650F0000E50D00004D0C000000000000000F0000000C0000DB010000950D0000550B000000010000000F0000000C0000C9020000AD0D00006D0B000000020000000F0000000C0000B4030000C40D0000850B000000030000000F0000000C00009D040000DA0D00009B0B000000040000000F0000000C000083050000F00D0000B00B000000050000000F0000000C000066060000050E0000C40B000000060000000F0000000C000048070000190E0000D80B000000070000000F0000000C0000260800002D0E0000EA0B000000080000000F0000000C000002090000400E0000FB0B000000090000000F0000000C0000DB090000520E00000B0C0000000A0000000F0000000C0000B20A0000640E00001A0C0000000B0000000F0000000C0000860B0000750E0000280C0000000C0000000F0000000C0000580C0000850E0000360C0000000D0000000F0000000C0000260D0000940E0000420C0000000E0000000F0000000C0000F30D0000A30E00004D0C0000000F0000000F0000000C0000BD0E0000B10E0000570C000000100000000F0000000C0000840F0000BE0E0000600C00000000000000100000000C0000F1010000590E0000660B00000001000000100000000C0000DF020000720E00007E0B00000002000000100000000C0000CB0300008B0E0000960B00000003000000100000000C0000B4040000A20E0000AC0B00000004000000100000000C00009B050000B90E0000C20B00000005000000100000000C00007F060000CF0E0000D60B00000006000000100000000C000061070000E40E0000E90B00000007000000100000000C000040080000F90E0000FB0B00000008000000100000000C00001C0900000D0F00000D0C00000009000000100000000C0000F6090000200F00001D0C0000000A000000100000000C0000CD0A0000330F00002C0C0000000B000000100000000C0000A20B0000450F00003B0C0000000C000000100000000C0000740C0000560F0000480C0000000D000000100000000C0000430D0000660F0000540C0000000E000000100000000C0000100E0000760F00005F0C0000000F000000100000000C0000DB0E0000850F0000690C00000010000000100000000C0000A20F0000940F0000730C00000000000000000000000D00004E00000097000000E20A00000001000000000000000D0000350100009F000000F90A00000002000000000000000D00001A020000A6000000100B00000003000000000000000D0000FC020000AC000000250B00000004000000000000000D0000DC030000B20000003A0B00000005000000000000000D0000B9040000B70000004D0B00000006000000000000000D000093050000BB000000600B00000007000000000000000D00006B060000BE000000710B00000008000000000000000D000040070000C1000000820B00000009000000000000000D000013080000C3000000910B0000000A000000000000000D0000E3080000C4000000A00B0000000B000000000000000D0000B1090000C5000000AD0B0000000C000000000000000D00007C0A0000C5000000B90B0000000D000000000000000D0000440B0000C4000000C50B0000000E000000000000000D00000A0C0000C2000000CF0B0000000F000000000000000D0000CD0C0000C0000000D80B00000010000000000000000D00008E0D0000BD000000E10B00000000000000010000000D00006C0000008D010000FB0A00000001000000010000000D00005401000096010000120B00000002000000010000000D00003A0200009E010000290B00000003000000010000000D00001C030000A50100003E0B00000004000000010000000D0000FC030000AC010000530B00000005000000010000000D0000DA040000B2010000670B00000006000000010000000D0000B5050000B7010000790B00000007000000010000000D00008D060000BC0100008B0B00000008000000010000000D000063070000C00100009B0B00000009000000010000000D000036080000C3010000AB0B0000000A000000010000000D000007090000C5010000BA0B0000000B000000010000000D0000D5090000C7010000C70B0000000C000000010000000D0000A10A0000C8010000D40B0000000D000000010000000D00006A0B0000C8010000DF0B0000000E000000010000000D0000300C0000C8010000EA0B0000000F000000010000000D0000F40C0000C7010000F30B00000010000000010000000D0000B50D0000C5010000FC0B00000000000000020000000D00008A00000080020000130B00000001000000020000000D0000730100008A0200002B0B00000002000000020000000D00005902000093020000410B00000003000000020000000D00003C0300009B020000570B00000004000000020000000D00001D040000A30200006C0B00000005000000020000000D0000FB040000AA020000800B00000006000000020000000D0000D6050000B0020000920B00000007000000020000000D0000AF060000B6020000A40B00000008000000020000000D000085070000BB020000B50B00000009000000020000000D000059080000BF020000C50B0000000A000000020000000D00002A090000C3020000D30B0000000B000000020000000D0000F9090000C5020000E10B0000000C000000020000000D0000C50A0000C8020000EE0B0000000D000000020000000D00008E0B0000C9020000F90B0000000E000000020000000D0000550C0000CA020000040C0000000F000000020000000D00001A0D0000CA0200000D0C00000010000000020000000D0000DB0D0000C9020000160C00000000000000030000000D0000A80000006F0300002B0B00000001000000030000000D0000910100007A030000430B00000002000000030000000D00007702000085030000590B00000003000000030000000D00005B0300008E0300006F0B00000004000000030000000D00003C04000097030000840B00000005000000030000000D00001B0500009F030000980B00000006000000030000000D0000F7050000A6030000AB0B00000007000000030000000D0000D0060000AD030000BD0B00000008000000030000000D0000A7070000B3030000CE0B00000009000000030000000D00007B080000B8030000DE0B0000000A000000030000000D00004D090000BD030000EC0B0000000B000000030000000D00001C0A0000C1030000FA0B0000000C000000030000000D0000E90A0000C4030000070C0000000D000000030000000D0000B30B0000C7030000130C0000000E000000030000000D00007A0C0000C80300001E0C0000000F000000030000000D00003F0D0000C9030000270C00000010000000030000000D0000010E0000CA030000300C00000000000000040000000D0000C50000005C040000420B00000001000000040000000D0000AE010000680400005A0B00000002000000040000000D00009502000073040000710B00000003000000040000000D0000790300007E040000870B00000004000000040000000D00005B040000880400009C0B00000005000000040000000D00003A05000091040000B00B00000006000000040000000D00001706000099040000C30B00000007000000040000000D0000F1060000A1040000D50B00000008000000040000000D0000C8070000A8040000E60B00000009000000040000000D00009D080000AF040000F60B0000000A000000040000000D00006F090000B4040000050C0000000B000000040000000D00003F0A0000B9040000130C0000000C000000040000000D00000C0B0000BD040000200C0000000D000000040000000D0000D70B0000C10400002C0C0000000E000000040000000D00009E0C0000C4040000370C0000000F000000040000000D0000640D0000C6040000410C00000010000000040000000D0000270E0000C70400004A0C00000000000000050000000D0000E100000045050000590B00000001000000050000000D0000CB01000052050000710B00000002000000050000000D0000B30200005E050000880B00000003000000050000000D0000970300006A0500009F0B00000004000000050000000D00007A04000075050000B40B00000005000000050000000D0000590500007F050000C80B00000006000000050000000D00003606000089050000DB0B00000007000000050000000D00001107000092050000ED0B00000008000000050000000D0000E90700009A050000FE0B00000009000000050000000D0000BE080000A10500000F0C0000000A000000050000000D000091090000A80500001E0C0000000B000000050000000D0000610A0000AE0500002C0C0000000C000000050000000D00002F0B0000B4050000390C0000000D000000050000000D0000FA0B0000B8050000450C0000000E000000050000000D0000C20C0000BC050000500C0000000F000000050000000D0000880D0000BF0500005A0C00000010000000050000000D00004B0E0000C2050000630C00000000000000060000000D0000FD0000002B0600006F0B00000001000000060000000D0000E701000039060000880B00000002000000060000000D0000CF020000460600009F0B00000003000000060000000D0000B503000053060000B60B00000004000000060000000D0000980400005F060000CB0B00000005000000060000000D0000780500006B060000DF0B00000006000000060000000D00005506000075060000F20B00000007000000060000000D0000300700007F060000050C00000008000000060000000D00000908000088060000160C00000009000000060000000D0000DF08000091060000260C0000000A000000060000000D0000B209000099060000360C0000000B000000060000000D0000830A0000A0060000440C0000000C000000060000000D0000510B0000A6060000510C0000000D000000060000000D00001C0C0000AC0600005D0C0000000E000000060000000D0000E50C0000B1060000680C0000000F000000060000000D0000AC0D0000B5060000730C00000010000000060000000D0000700E0000B90600007C0C00000000000000070000000D0000180100000D070000860B00000001000000070000000D0000030200001C0700009E0B00000002000000070000000D0000EC0200002B070000B60B00000003000000070000000D0000D203000039070000CC0B00000004000000070000000D0000B504000046070000E20B00000005000000070000000D00009605000053070000F60B00000006000000070000000D0000740600005E070000090C00000007000000070000000D00004F070000690700001C0C00000008000000070000000D000028080000740700002D0C00000009000000070000000D0000FF0800007D0700003E0C0000000A000000070000000D0000D3090000860700004D0C0000000B000000070000000D0000A40A00008F0700005C0C0000000C000000070000000D0000720B000096070000690C0000000D000000070000000D00003E0C00009D070000750C0000000E000000070000000D0000080D0000A3070000810C0000000F000000070000000D0000CF0D0000A80700008B0C00000010000000070000000D0000930E0000AD070000940C00000000000000080000000D000033010000ED0700009B0B00000001000000080000000D00001E020000FD070000B40B00000002000000080000000D0000070300000D080000CC0B00000003000000080000000D0000EE0300001C080000E20B00000004000000080000000D0000D20400002A080000F80B00000005000000080000000D0000B3050000370800000C0C00000006000000080000000D00009206000044080000200C00000007000000080000000D00006E07000050080000330C00000008000000080000000D0000470800005C080000440C00000009000000080000000D00001E09000067080000550C0000000A000000080000000D0000F209000071080000640C0000000B000000080000000D0000C40A00007A080000730C0000000C000000080000000D0000930B000082080000800C0000000D000000080000000D0000600C00008A0800008D0C0000000E000000080000000D00002A0D000092080000980C0000000F000000080000000D0000F20D000098080000A30C00000010000000080000000D0000B60E00009E080000AC0C00000000000000090000000D00004D010000C9080000B10B00000001000000090000000D000039020000DA080000C90B00000002000000090000000D000023030000EB080000E10B00000003000000090000000D00000A040000FB080000F80B00000004000000090000000D0000EE0400000A0900000E0C00000005000000090000000D0000D005000019090000220C00000006000000090000000D0000AF06000027090000360C00000007000000090000000D00008B07000034090000490C00000008000000090000000D000066080000410900005B0C00000009000000090000000D00003D0900004C0900006B0C0000000A000000090000000D0000120A0000580900007B0C0000000B000000090000000D0000E40A0000620900008A0C0000000C000000090000000D0000B40B00006C090000970C0000000D000000090000000D0000810C000075090000A40C0000000E000000090000000D00004C0D00007D090000B00C0000000F000000090000000D0000140E000085090000BA0C00000010000000090000000D0000D90E00008B090000C40C000000000000000A0000000D000067010000A2090000C50B000000010000000A0000000D000053020000B4090000DE0B000000020000000A0000000D00003D030000C6090000F60B000000030000000A0000000D000025040000D70900000D0C000000040000000A0000000D00000A050000E8090000230C000000050000000A0000000D0000EC050000F7090000380C000000060000000A0000000D0000CC060000060A00004C0C000000070000000A0000000D0000A9070000150A00005F0C000000080000000A0000000D000083080000220A0000710C000000090000000A0000000D00005B0900002F0A0000810C0000000A0000000A0000000D0000310A00003B0A0000910C0000000B0000000A0000000D0000040B0000470A0000A00C0000000C0000000A0000000D0000D40B0000520A0000AE0C0000000D0000000A0000000D0000A10C00005C0A0000BB0C0000000E0000000A0000000D00006D0D0000650A0000C60C0000000F0000000A0000000D0000350E00006E0A0000D10C000000100000000A0000000D0000FB0E0000760A0000DB0C000000000000000B0000000D000080010000770A0000DA0B000000010000000B0000000D00006D0200008B0A0000F30B000000020000000B0000000D0000570300009E0A00000B0C000000030000000B0000000D00003F040000B00A0000220C000000040000000B0000000D000025050000C20A0000380C000000050000000B0000000D000008060000D20A00004D0C000000060000000B0000000D0000E8060000E30A0000610C000000070000000B0000000D0000C5070000F20A0000740C000000080000000B0000000D0000A1080000010B0000860C000000090000000B0000000D0000790900000F0B0000970C0000000A0000000B0000000D00004F0A00001C0B0000A70C0000000B0000000B0000000D0000220B0000290B0000B60C0000000C0000000B0000000D0000F30B0000340B0000C40C0000000D0000000B0000000D0000C10C0000400B0000D10C0000000E0000000B0000000D00008D0D00004A0B0000DD0C0000000F0000000B0000000D0000560E0000540B0000E80C000000100000000B0000000D00001C0F00005D0B0000F20C000000000000000C0000000D0000980100004A0B0000EE0B000000010000000C0000000D0000860200005E0B0000070C000000020000000C0000000D000071030000720B00001F0C000000030000000C0000000D000059040000860B0000370C000000040000000C0000000D00003F050000980B00004D0C000000050000000C0000000D000023060000AA0B0000620C000000060000000C0000000D000003070000BC0B0000760C000000070000000C0000000D0000E2070000CC0B0000890C000000080000000C0000000D0000BD080000DC0B00009B0C000000090000000C0000000D000096090000EB0B0000AC0C0000000A0000000C0000000D00006D0A0000F90B0000BD0C0000000B0000000C0000000D0000410B0000070C0000CC0C0000000C0000000C0000000D0000120C0000140C0000DA0C0000000D0000000C0000000D0000E10C0000200C0000E70C0000000E0000000C0000000D0000AD0D00002C0C0000F30C0000000F0000000C0000000D0000760E0000370C0000FE0C000000100000000C0000000D00003D0F0000410C0000080D000000000000000D0000000D0000B0010000190C0000020C000000010000000D0000000D00009E0200002F0C00001B0C000000020000000D0000000D00008A030000440C0000330C000000030000000D0000000D000073040000580C00004B0C000000040000000D0000000D0000590500006C0C0000610C000000050000000D0000000D00003D0600007F0C0000760C000000060000000D0000000D00001E070000910C00008A0C000000070000000D0000000D0000FD070000A30C00009E0C000000080000000D0000000D0000D9080000B40C0000B00C000000090000000D0000000D0000B3090000C40C0000C10C0000000A0000000D0000000D00008A0A0000D30C0000D20C0000000B0000000D0000000D00005E0B0000E20C0000E10C0000000C0000000D0000000D0000300C0000F00C0000EF0C0000000D0000000D0000000D0000FF0C0000FF0C0000FF0C0000000E0000000D0000000D0000CC0D00000A0D0000080D0000000F0000000D0000000D0000960E0000160D0000140D000000100000000D0000000D00005E0F0000210D00001E0D000000000000000E0000000D0000C7010000E50C0000150C000000010000000E0000000D0000B6020000FC0C00002E0C000000020000000E0000000D0000A2030000120D0000470C000000030000000E0000000D00008C040000280D00005E0C000000040000000E0000000D0000730500003C0D0000750C000000050000000E0000000D000057060000500D00008A0C000000060000000E0000000D000039070000640D00009F0C000000070000000E0000000D000018080000770D0000B20C000000080000000E0000000D0000F5080000880D0000C40C000000090000000E0000000D0000CF0900009A0D0000D60C0000000A0000000E0000000D0000A60A0000AA0D0000E60C0000000B0000000E0000000D00007B0B0000BA0D0000F60C0000000C0000000E0000000D00004E0C0000C90D0000040D0000000D0000000E0000000D00001E0D0000D80D0000110D0000000E0000000E0000000D0000EB0D0000E50D00001E0D0000000F0000000E0000000D0000B50E0000F30D0000290D000000100000000E0000000D00007D0F0000FF0D0000330D000000000000000F0000000D0000DE010000AE0D0000280C000000010000000F0000000D0000CD020000C60D0000410C000000020000000F0000000D0000BA030000DD0D00005A0C000000030000000F0000000D0000A4040000F40D0000710C000000040000000F0000000D00008C0500000A0E0000880C000000050000000F0000000D0000710600001F0E00009E0C000000060000000F0000000D000053070000330E0000B20C000000070000000F0000000D000033080000470E0000C60C000000080000000F0000000D0000100900005A0E0000D80C000000090000000F0000000D0000EA0900006C0E0000EA0C0000000A0000000F0000000D0000C30A00007E0E0000FA0C0000000B0000000F0000000D0000980B00008F0E00000A0D0000000C0000000F0000000D00006B0C00009F0E0000180D0000000D0000000F0000000D00003B0D0000AF0E0000260D0000000E0000000F0000000D0000090E0000BE0E0000320D0000000F0000000F0000000D0000D40E0000CC0E00003E0D000000100000000F0000000D00009D0F0000D90E0000480D00000000000000100000000D0000F4010000730E00003A0C00000001000000100000000D0000E40200008C0E0000540C00000002000000100000000D0000D1030000A50E00006C0C00000003000000100000000D0000BC040000BC0E0000840C00000004000000100000000D0000A4050000D30E00009B0C00000005000000100000000D000089060000EA0E0000B10C00000006000000100000000D00006C070000FF0E0000C50C00000007000000100000000D00004D080000140F0000D90C00000008000000100000000D00002A090000280F0000EC0C00000009000000100000000D0000050A00003C0F0000FD0C0000000A000000100000000D0000DE0A00004E0F00000E0D0000000B000000100000000D0000B40B0000600F00001E0D0000000C000000100000000D0000870C0000720F00002C0D0000000D000000100000000D0000580D0000820F00003A0D0000000E000000100000000D0000270E0000920F0000470D0000000F000000100000000D0000F20E0000A20F0000520D00000010000000100000000D0000BB0F0000B00F00005D0D00000000000000000000000E0000500000009E000000990B00000001000000000000000E000038010000A6000000B20B00000002000000000000000E00001E020000AD000000C90B00000003000000000000000E000002030000B3000000E00B00000004000000000000000E0000E3030000B8000000F50B00000005000000000000000E0000C1040000BD0000000A0C00000006000000000000000E00009D050000C10000001E0C00000007000000000000000E000076060000C5000000300C00000008000000000000000E00004C070000C7000000420C00000009000000000000000E000020080000C9000000520C0000000A000000000000000E0000F2080000CB000000620C0000000B000000000000000E0000C1090000CB000000700C0000000C000000000000000E00008D0A0000CB0000007E0C0000000D000000000000000E0000570B0000CA0000008A0C0000000E000000000000000E00001E0C0000C9000000960C0000000F000000000000000E0000E20C0000C7000000A00C00000010000000000000000E0000A40D0000C4000000A90C00000000000000010000000E00006E00000095010000B30B00000001000000010000000E0000580100009E010000CC0B00000002000000010000000E00003E020000A6010000E40B00000003000000010000000E000022030000AD010000FB0B00000004000000010000000E000003040000B4010000100C00000005000000010000000E0000E2040000BA010000250C00000006000000010000000E0000BF050000BF010000390C00000007000000010000000E000098060000C40100004B0C00000008000000010000000E00006F070000C70100005D0C00000009000000010000000E000044080000CA0100006E0C0000000A000000010000000E000016090000CD0100007D0C0000000B000000010000000E0000E5090000CE0100008C0C0000000C000000010000000E0000B20A0000CF0100009A0C0000000D000000010000000E00007C0B0000D0010000A60C0000000E000000010000000E0000440C0000CF010000B20C0000000F000000010000000E0000090D0000CE010000BD0C00000010000000010000000E0000CB0D0000CC010000C60C00000000000000020000000E00008C00000089020000CD0B00000001000000020000000E00007601000093020000E60B00000002000000020000000E00005D0200009C020000FE0B00000003000000020000000E000042030000A4020000150C00000004000000020000000E000024040000AC0200002B0C00000005000000020000000E000003050000B3020000400C00000006000000020000000E0000E0050000B9020000530C00000007000000020000000E0000BA060000BF020000660C00000008000000020000000E000092070000C4020000780C00000009000000020000000E000067080000C8020000890C0000000A000000020000000E000039090000CC020000990C0000000B000000020000000E0000090A0000CE020000A80C0000000C000000020000000E0000D60A0000D1020000B50C0000000D000000020000000E0000A10B0000D2020000C20C0000000E000000020000000E0000690C0000D3020000CE0C0000000F000000020000000E00002F0D0000D3020000D90C00000010000000020000000E0000F20D0000D2020000E20C00000000000000030000000E0000AA0000007A030000E60B00000001000000030000000E00009401000085030000FF0B00000002000000030000000E00007C0200008F030000170C00000003000000030000000E000061030000980300002F0C00000004000000030000000E000043040000A1030000450C00000005000000030000000E000023050000A90300005A0C00000006000000030000000E000001060000B10300006E0C00000007000000030000000E0000DB060000B7030000810C00000008000000030000000E0000B3070000BD030000930C00000009000000030000000E000089080000C3030000A40C0000000A000000030000000E00005C090000C7030000B40C0000000B000000030000000E00002C0A0000CB030000C30C0000000C000000030000000E0000FA0A0000CE030000D10C0000000D000000030000000E0000C60B0000D1030000DE0C0000000E000000030000000E00008E0C0000D3030000E90C0000000F000000030000000E0000540D0000D4030000F40C00000010000000030000000E0000180E0000D4030000FE0C00000000000000040000000E0000C700000067040000FF0B00000001000000040000000E0000B201000073040000180C00000002000000040000000E00009A0200007E040000310C00000003000000040000000E00007F03000089040000480C00000004000000040000000E000062040000930400005E0C00000005000000040000000E0000430500009C040000730C00000006000000040000000E000021060000A5040000880C00000007000000040000000E0000FC060000AD0400009B0C00000008000000040000000E0000D5070000B4040000AD0C00000009000000040000000E0000AB080000BA040000BE0C0000000A000000040000000E00007E090000C0040000CE0C0000000B000000040000000E00004F0A0000C5040000DD0C0000000C000000040000000E00001E0B0000C9040000EB0C0000000D000000040000000E0000E90B0000CD040000F90C0000000E000000040000000E0000B30C0000CF040000050D0000000F000000040000000E0000790D0000D2040000100D00000010000000040000000E00003D0E0000D30400001A0D00000000000000050000000E0000E300000051050000180C00000001000000050000000E0000CF0100005E050000310C00000002000000050000000E0000B70200006B050000490C00000003000000050000000E00009D03000077050000610C00000004000000050000000E00008104000082050000770C00000005000000050000000E0000620500008C0500008D0C00000006000000050000000E00004006000096050000A10C00000007000000050000000E00001C0700009E050000B40C00000008000000050000000E0000F5070000A7050000C70C00000009000000050000000E0000CC080000AE050000D80C0000000A000000050000000E0000A0090000B5050000E80C0000000B000000050000000E0000720A0000BB050000F80C0000000C000000050000000E0000400B0000C0050000060D0000000D000000050000000E00000D0C0000C5050000130D0000000E000000050000000E0000D60C0000C90500001F0D0000000F000000050000000E00009E0D0000CC0500002B0D00000010000000050000000E0000620E0000CF050000350D00000000000000060000000E0000FF00000038060000300C00000001000000060000000E0000EB01000046060000490C00000002000000060000000E0000D402000054060000620C00000003000000060000000E0000BB03000061060000790C00000004000000060000000E00009F0400006D060000900C00000005000000060000000E00008005000078060000A50C00000006000000060000000E00005F06000083060000BA0C00000007000000060000000E00003C0700008D060000CD0C00000008000000060000000E00001508000096060000E00C00000009000000060000000E0000ED0800009F060000F10C0000000A000000060000000E0000C1090000A7060000020D0000000B000000060000000E0000930A0000AE060000110D0000000C000000060000000E0000630B0000B5060000200D0000000D000000060000000E00002F0C0000BA0600002D0D0000000E000000060000000E0000FA0C0000BF0600003A0D0000000F000000060000000E0000C10D0000C4060000450D00000010000000060000000E0000870E0000C70600004F0D00000000000000070000000E00001A0100001C070000470C00000001000000070000000E0000070200002B070000610C00000002000000070000000E0000F10200003A0700007A0C00000003000000070000000E0000D803000048070000910C00000004000000070000000E0000BC04000055070000A80C00000005000000070000000E00009E05000062070000BE0C00000006000000070000000E00007E0600006D070000D30C00000007000000070000000E00005B07000079070000E60C00000008000000070000000E00003508000083070000F90C00000009000000070000000E00000D0900008D0700000A0D0000000A000000070000000E0000E2090000960700001B0D0000000B000000070000000E0000B40A00009E0700002B0D0000000C000000070000000E0000840B0000A5070000390D0000000D000000070000000E0000520C0000AC070000470D0000000E000000070000000E00001C0D0000B3070000530D0000000F000000070000000E0000E50D0000B80700005F0D00000010000000070000000E0000AA0E0000BD0700006A0D00000000000000080000000E000035010000FD0700005F0C00000001000000080000000E0000220200000D080000780C00000002000000080000000E00000C0300001D080000910C00000003000000080000000E0000F40300002C080000A90C00000004000000080000000E0000D90400003A080000C00C00000005000000080000000E0000BC05000048080000D60C00000006000000080000000E00009C06000055080000EB0C00000007000000080000000E00007907000061080000FF0C00000008000000080000000E0000540800006C080000110D00000009000000080000000E00002C09000077080000230D0000000A000000080000000E0000020A000081080000340D0000000B000000080000000E0000D50A00008B080000440D0000000C000000080000000E0000A50B000093080000520D0000000D000000080000000E0000730C00009B080000600D0000000E000000080000000E00003F0D0000A20800006D0D0000000F000000080000000E0000070E0000A9080000790D00000010000000080000000E0000CE0E0000AF080000830D00000000000000090000000E00004F010000DA080000750C00000001000000090000000E00003D020000EB0800008F0C00000002000000090000000E000028030000FC080000A80C00000003000000090000000E0000100400000C090000C00C00000004000000090000000E0000F60400001C090000D70C00000005000000090000000E0000D90500002A090000ED0C00000006000000090000000E0000B906000038090000020D00000007000000090000000E00009707000046090000160D00000008000000090000000E00007208000052090000290D00000009000000090000000E00004B0900005E0900003B0D0000000A000000090000000E0000210A0000690900004C0D0000000B000000090000000E0000F50A0000740900005C0D0000000C000000090000000E0000C60B00007E0900006B0D0000000D000000090000000E0000940C000087090000790D0000000E000000090000000E0000600D00008F090000860D0000000F000000090000000E00002A0E000097090000920D00000010000000090000000E0000F00E00009E0900009D0D000000000000000A0000000E000069010000B40900008C0C000000010000000A0000000E000057020000C7090000A60C000000020000000A0000000E000042030000D8090000BF0C000000030000000A0000000E00002B040000EA090000D70C000000040000000A0000000E000011050000FA090000EE0C000000050000000A0000000E0000F50500000A0A0000050D000000060000000A0000000E0000D6060000190A00001A0D000000070000000A0000000E0000B4070000280A00002E0D000000080000000A0000000E000090080000350A0000410D000000090000000A0000000E00006A090000420A0000530D0000000A0000000A0000000E0000400A00004F0A0000640D0000000B0000000A0000000E0000140B00005A0A0000740D0000000C0000000A0000000E0000E60B0000650A0000830D0000000D0000000A0000000E0000B50C00006F0A0000920D0000000E0000000A0000000E0000810D0000790A00009F0D0000000F0000000A0000000E00004B0E0000810A0000AB0D000000100000000A0000000E0000120F0000890A0000B60D000000000000000B0000000E0000820100008B0A0000A20C000000010000000B0000000E0000710200009E0A0000BC0C000000020000000B0000000E00005C030000B10A0000D50C000000030000000B0000000E000046040000C40A0000EE0C000000040000000B0000000E00002C050000D50A0000050D000000050000000B0000000E000011060000E60A00001B0D000000060000000B0000000E0000F2060000F70A0000310D000000070000000B0000000E0000D1070000060B0000450D000000080000000B0000000E0000AE080000150B0000580D000000090000000B0000000E000087090000230B00006B0D0000000A0000000B0000000E00005F0A0000300B00007C0D0000000B0000000B0000000E0000330B00003D0B00008C0D0000000C0000000B0000000E0000050C0000490B00009B0D0000000D0000000B0000000E0000D50C0000540B0000AA0D0000000E0000000B0000000E0000A20D00005F0B0000B70D0000000F0000000B0000000E00006C0E0000690B0000C30D000000100000000B0000000E0000340F0000720B0000CE0D000000000000000C0000000E00009B0100005E0B0000B70C000000010000000C0000000E00008A020000730B0000D20C000000020000000C0000000E000076030000870B0000EB0C000000030000000C0000000E0000600400009B0B0000040D000000040000000C0000000E000047050000AD0B00001B0D000000050000000C0000000E00002C060000BF0B0000320D000000060000000C0000000E00000E070000D10B0000470D000000070000000C0000000E0000ED070000E10B00005C0D000000080000000C0000000E0000CA080000F10B00006F0D000000090000000C0000000E0000A5090000010C0000820D0000000A0000000C0000000E00007C0A00000F0C0000930D0000000B0000000C0000000E0000520B00001D0C0000A30D0000000C0000000C0000000E0000240C00002A0C0000B30D0000000D0000000C0000000E0000F40C0000360C0000C10D0000000E0000000C0000000E0000C20D0000420C0000CF0D0000000F0000000C0000000E00008D0E00004D0C0000DB0D000000100000000C0000000E0000550F0000570C0000E60D000000000000000D0000000E0000B30100002F0C0000CC0C000000010000000D0000000E0000A2020000450C0000E70C000000020000000D0000000E00008F0300005A0C0000010D000000030000000D0000000E0000790400006E0C0000190D000000040000000D0000000E000061050000820C0000310D000000050000000D0000000E000046060000950C0000480D000000060000000D0000000E000029070000A80C00005D0D000000070000000D0000000E000009080000BA0C0000720D000000080000000D0000000E0000E7080000CB0C0000860D000000090000000D0000000E0000C1090000DB0C0000980D0000000A0000000D0000000E00009A0A0000EA0C0000AA0D0000000B0000000D0000000E0000700B0000F90C0000BA0D0000000C0000000D0000000E0000430C0000070D0000CA0D0000000D0000000D0000000E0000130D0000150D0000D80D0000000E0000000D0000000E0000E10D0000220D0000E60D0000000F0000000D0000000E0000AD0E00002E0D0000F20D000000100000000D0000000E0000750F0000390D0000FE0D000000000000000E0000000E0000CA010000FC0C0000E10C000000010000000E0000000E0000BA020000130D0000FC0C000000020000000E0000000E0000A7030000290D0000160D000000030000000E0000000E0000920400003F0D00002F0D000000040000000E0000000E00007B050000540D0000460D000000050000000E0000000E000060060000680D00005D0D000000060000000E0000000E0000440700007C0D0000730D000000070000000E0000000E0000240800008E0D0000880D000000080000000E0000000E000002090000A00D00009C0D000000090000000E0000000E0000DE090000B20D0000AE0D0000000A0000000E0000000E0000B60A0000C30D0000C00D0000000B0000000E0000000E00008D0B0000D30D0000D10D0000000C0000000E0000000E0000600C0000E20D0000E00D0000000D0000000E0000000E0000320D0000F00D0000EF0D0000000E0000000E0000000E0000FF0D0000FF0D0000FF0D0000000F0000000E0000000E0000CC0E00000B0E00000A0E000000100000000E0000000E0000950F0000180E0000150E000000000000000F0000000E0000E1010000C60D0000F50C000000010000000F0000000E0000D1020000DE0D0000100D000000020000000F0000000E0000BF030000F50D00002A0D000000030000000F0000000E0000AB0400000C0E0000430D000000040000000F0000000E000094050000220E00005B0D000000050000000F0000000E00007A060000370E0000720D000000060000000F0000000E00005E0700004C0E0000880D000000070000000F0000000E00003F080000600E00009D0D000000080000000F0000000E00001D090000730E0000B10D000000090000000F0000000E0000F9090000860E0000C40D0000000A0000000F0000000E0000D30A0000980E0000D60D0000000B0000000F0000000E0000A90B0000A90E0000E70D0000000C0000000F0000000E00007E0C0000B90E0000F70D0000000D0000000F0000000E00004F0D0000C90E0000060E0000000E0000000F0000000E00001E0E0000D80E0000130E0000000F0000000F0000000E0000EB0E0000E60E0000200E000000100000000F0000000E0000B50F0000F30E00002C0E00000000000000100000000E0000F70100008D0E0000090D00000001000000100000000E0000E8020000A60E0000240D00000002000000100000000E0000D7030000BE0E00003E0D00000003000000100000000E0000C3040000D60E0000580D00000004000000100000000E0000AC050000ED0E0000700D00000005000000100000000E000093060000040F0000870D00000006000000100000000E000077070000190F00009D0D00000007000000100000000E0000590800002E0F0000B20D00000008000000100000000E000038090000430F0000C60D00000009000000100000000E0000140A0000560F0000D90D0000000A000000100000000E0000EE0A0000690F0000EB0D0000000B000000100000000E0000C60B00007B0F0000FC0D0000000C000000100000000E00009A0C00008D0F00000C0E0000000D000000100000000E00006C0D00009E0F00001B0E0000000E000000100000000E00003C0E0000AE0F0000290E0000000F000000100000000E0000090F0000BD0F0000360E00000010000000100000000E0000D40F0000CC0F0000420E00000000000000000000000F000051000000A40000004C0C00000001000000000000000F00003B010000AC000000650C00000002000000000000000F000022020000B30000007E0C00000003000000000000000F000007030000B9000000960C00000004000000000000000F0000E9030000BE000000AD0C00000005000000000000000F0000C9040000C3000000C20C00000006000000000000000F0000A6050000C7000000D70C00000007000000000000000F000080060000CB000000EA0C00000008000000000000000F000058070000CD000000FD0C00000009000000000000000F00002D080000CF0000000F0D0000000A000000000000000F000000090000D00000001F0D0000000B000000000000000F0000D0090000D10000002F0D0000000C000000000000000F00009D0A0000D10000003D0D0000000D000000000000000F0000680B0000D00000004B0D0000000E000000000000000F0000310C0000CE000000580D0000000F000000000000000F0000F60C0000CC000000630D00000010000000000000000F0000BA0D0000C90000006E0D00000000000000010000000F0000700000009C010000670C00000001000000010000000F00005A010000A5010000810C00000002000000010000000F000042020000AD0100009A0C00000003000000010000000F000027030000B4010000B20C00000004000000010000000F00000A040000BB010000C90C00000005000000010000000F0000EA040000C1010000DF0C00000006000000010000000F0000C8050000C6010000F40C00000007000000010000000F0000A2060000CB010000070D00000008000000010000000F00007B070000CE0100001A0D00000009000000010000000F000051080000D10100002C0D0000000A000000010000000F000024090000D40100003D0D0000000B000000010000000F0000F4090000D50100004D0D0000000C000000010000000F0000C30A0000D60100005B0D0000000D000000010000000F00008E0B0000D7010000690D0000000E000000010000000F0000570C0000D6010000760D0000000F000000010000000F00001D0D0000D5010000810D00000010000000010000000F0000E10D0000D30100008C0D00000000000000020000000F00008E00000091020000830C00000001000000020000000F0000790100009B0200009D0C00000002000000020000000F000061020000A4020000B60C00000003000000020000000F000047030000AD020000CE0C00000004000000020000000F00002A040000B4020000E50C00000005000000020000000F00000B050000BB020000FB0C00000006000000020000000F0000E9050000C2020000100D00000007000000020000000F0000C4060000C7020000240D00000008000000020000000F00009D070000CC020000370D00000009000000020000000F000074080000D0020000490D0000000A000000020000000F000047090000D40200005A0D0000000B000000020000000F0000190A0000D70200006A0D0000000C000000020000000F0000E70A0000D9020000790D0000000D000000020000000F0000B30B0000DA020000870D0000000E000000020000000F00007D0C0000DB020000930D0000000F000000020000000F0000430D0000DB0200009F0D00000010000000020000000F0000080E0000DA020000AA0D00000000000000030000000F0000AB000000830300009D0C00000001000000030000000F0000970100008E030000B80C00000002000000030000000F00008002000098030000D10C00000003000000030000000F000066030000A2030000E90C00000004000000030000000F00004A040000AB030000000D00000005000000030000000F00002B050000B3030000170D00000006000000030000000F00000A060000BA0300002C0D00000007000000030000000F0000E6060000C1030000400D00000008000000030000000F0000BF070000C7030000530D00000009000000030000000F000096080000CC030000650D0000000A000000030000000F00006A090000D1030000760D0000000B000000030000000F00003C0A0000D5030000860D0000000C000000030000000F00000B0B0000D8030000960D0000000D000000030000000F0000D80B0000DA030000A40D0000000E000000030000000F0000A20C0000DC030000B10D0000000F000000030000000F0000690D0000DD030000BD0D00000010000000030000000F00002E0E0000DE030000C80D00000000000000040000000F0000C800000072040000B80C00000001000000040000000F0000B40100007E040000D20C00000002000000040000000F00009E02000089040000EC0C00000003000000040000000F00008503000094040000040D00000004000000040000000F0000690400009E0400001B0D00000005000000040000000F00004B050000A7040000320D00000006000000040000000F00002A060000AF040000470D00000007000000040000000F000006070000B70400005C0D00000008000000040000000F0000E0070000BE0400006F0D00000009000000040000000F0000B8080000C5040000810D0000000A000000040000000F00008D090000CB040000930D0000000B000000040000000F00005F0A0000CF040000A30D0000000C000000040000000F00002F0B0000D4040000B20D0000000D000000040000000F0000FC0B0000D7040000C00D0000000E000000040000000F0000C60C0000DA040000CE0D0000000F000000040000000F00008E0D0000DC040000DA0D00000010000000040000000F0000530E0000DE040000E50D00000000000000050000000F0000E50000005D050000D20C00000001000000050000000F0000D10100006A050000EC0C00000002000000050000000F0000BB02000077050000060D00000003000000050000000F0000A3030000820500001F0D00000004000000050000000F0000880400008E050000360D00000005000000050000000F00006A050000980500004D0D00000006000000050000000F00004A060000A1050000620D00000007000000050000000F000027070000AA050000770D00000008000000050000000F000001080000B30500008A0D00000009000000050000000F0000D9080000BA0500009D0D0000000A000000050000000F0000AE090000C1050000AE0D0000000B000000050000000F0000810A0000C7050000BF0D0000000C000000050000000F0000510B0000CC050000CE0D0000000D000000050000000F00001F0C0000D1050000DD0D0000000E000000050000000F0000EA0C0000D5050000EA0D0000000F000000050000000F0000B30D0000D8050000F70D00000010000000050000000F0000780E0000DB050000020E00000000000000060000000F00000101000045060000EB0C00000001000000060000000F0000EE01000053060000060D00000002000000060000000F0000D802000061060000200D00000003000000060000000F0000C00300006E060000390D00000004000000060000000F0000A60400007A060000500D00000005000000060000000F00008905000086060000670D00000006000000060000000F000069060000900600007D0D00000007000000060000000F0000460700009A060000920D00000008000000060000000F000021080000A4060000A50D00000009000000060000000F0000FA080000AC060000B80D0000000A000000060000000F0000D0090000B4060000CA0D0000000B000000060000000F0000A30A0000BB060000DA0D0000000C000000060000000F0000740B0000C2060000EA0D0000000D000000060000000F0000420C0000C8060000F90D0000000E000000060000000F00000E0D0000CD060000060E0000000F000000060000000F0000D70D0000D1060000130E00000010000000060000000F00009D0E0000D50600001E0E00000000000000070000000F00001C0100002A070000050D00000001000000070000000F00000A020000390700001F0D00000002000000070000000F0000F502000048070000390D00000003000000070000000F0000DD03000056070000520D00000004000000070000000F0000C3040000630700006A0D00000005000000070000000F0000A705000070070000810D00000006000000070000000F0000870600007C070000970D00000007000000070000000F00006507000087070000AC0D00000008000000070000000F00004108000091070000C00D00000009000000070000000F00001A0900009B070000D30D0000000A000000070000000F0000F0090000A4070000E50D0000000B000000070000000F0000C40A0000AD070000F50D0000000C000000070000000F0000960B0000B4070000050E0000000D000000070000000F0000640C0000BB070000140E0000000E000000070000000F0000300D0000C1070000220E0000000F000000070000000F0000FA0D0000C70700002F0E00000010000000070000000F0000C10E0000CC0700003A0E00000000000000080000000F0000370100000C0800001D0D00000001000000080000000F0000250200001C080000380D00000002000000080000000F0000110300002C080000530D00000003000000080000000F0000FA0300003B0800006C0D00000004000000080000000F0000E00400004A080000840D00000005000000080000000F0000C4050000570800009B0D00000006000000080000000F0000A506000064080000B10D00000007000000080000000F00008407000070080000C60D00000008000000080000000F0000600800007C080000DA0D00000009000000080000000F00003A09000087080000ED0D0000000A000000080000000F0000110A000091080000FF0D0000000B000000080000000F0000E50A00009A080000100E0000000C000000080000000F0000B70B0000A3080000200E0000000D000000080000000F0000860C0000AB0800002F0E0000000E000000080000000F0000530D0000B30800003D0E0000000F000000080000000F00001D0E0000B90800004A0E00000010000000080000000F0000E40E0000BF080000560E00000000000000090000000F000051010000EA080000360D00000001000000090000000F000040020000FC080000510D00000002000000090000000F00002C0300000D0900006B0D00000003000000090000000F0000160400001D090000840D00000004000000090000000F0000FD0400002C0900009D0D00000005000000090000000F0000E10500003B090000B40D00000006000000090000000F0000C306000049090000CA0D00000007000000090000000F0000A207000057090000E00D00000008000000090000000F00007F08000063090000F40D00000009000000090000000F0000590900006F090000070E0000000A000000090000000F0000300A00007B090000190E0000000B000000090000000F0000050B0000850900002A0E0000000C000000090000000F0000D70B00008F0900003B0E0000000D000000090000000F0000A70C0000980900004A0E0000000E000000090000000F0000740D0000A1090000580E0000000F000000090000000F00003F0E0000A8090000650E00000010000000090000000F0000070F0000AF090000710E000000000000000A0000000F00006B010000C50900004D0D000000010000000A0000000F00005A020000D8090000690D000000020000000A0000000F000047030000EA090000830D000000030000000A0000000F000031040000FB0900009D0D000000040000000A0000000F0000180500000C0A0000B50D000000050000000A0000000F0000FD0500001C0A0000CD0D000000060000000A0000000F0000E00600002B0A0000E30D000000070000000A0000000F0000BF0700003A0A0000F90D000000080000000A0000000F00009D080000470A00000D0E000000090000000A0000000F000077090000550A0000200E0000000A0000000A0000000F00004F0A0000610A0000330E0000000B0000000A0000000F0000250B00006D0A0000440E0000000C0000000A0000000F0000F80B0000780A0000550E0000000D0000000A0000000F0000C80C0000820A0000640E0000000E0000000A0000000F0000960D00008B0A0000720E0000000F0000000A0000000F0000610E0000940A0000800E000000100000000A0000000F0000290F00009C0A00008C0E000000000000000B0000000F0000840100009D0A0000650D000000010000000B0000000F000074020000B10A0000810D000000020000000B0000000F000061030000C40A00009B0D000000030000000B0000000F00004C040000D70A0000B50D000000040000000B0000000F000034050000E90A0000CE0D000000050000000B0000000F000019060000FA0A0000E50D000000060000000B0000000F0000FC0600000A0B0000FC0D000000070000000B0000000F0000DC070000190B0000110E000000080000000B0000000F0000BA080000280B0000260E000000090000000B0000000F000095090000370B00003A0E0000000A0000000B0000000F00006E0A0000440B00004C0E0000000B0000000B0000000F0000440B0000510B00005E0E0000000C0000000B0000000F0000170C00005D0B00006E0E0000000D0000000B0000000F0000E80C0000680B00007E0E0000000E0000000B0000000F0000B60D0000730B00008C0E0000000F0000000B0000000F0000820E00007D0B00009A0E000000100000000B0000000F00004B0F0000860B0000A60E000000000000000C0000000F00009D010000720B00007C0D000000010000000C0000000F00008D020000870B0000980D000000020000000C0000000F00007B0300009B0B0000B30D000000030000000C0000000F000066040000AF0B0000CC0D000000040000000C0000000F00004E050000C20B0000E50D000000050000000C0000000F000034060000D40B0000FD0D000000060000000C0000000F000018070000E50B0000140E000000070000000C0000000F0000F9070000F60B00002A0E000000080000000C0000000F0000D7080000060C00003E0E000000090000000C0000000F0000B3090000150C0000520E0000000A0000000C0000000F00008C0A0000240C0000650E0000000B0000000C0000000F0000620B0000320C0000770E0000000C0000000C0000000F0000360C00003F0C0000870E0000000D0000000C0000000F0000080D00004C0C0000970E0000000E0000000C0000000F0000D60D0000570C0000A60E0000000F0000000C0000000F0000A30E0000620C0000B30E000000100000000C0000000F00006C0F00006D0C0000C00E000000000000000D0000000F0000B5010000440C0000930D000000010000000D0000000F0000A50200005A0C0000AF0D000000020000000D0000000F0000940300006F0C0000CA0D000000030000000D0000000F00007F040000840C0000E40D000000040000000D0000000F000069050000980C0000FD0D000000050000000D0000000F00004F060000AB0C0000150E000000060000000D0000000F000033070000BE0C00002C0E000000070000000D0000000F000014080000CF0C0000420E000000080000000D0000000F0000F3080000E00C0000560E000000090000000D0000000F0000CF090000F10C00006A0E0000000A0000000D0000000F0000A90A0000010D00007D0E0000000B0000000D0000000F0000800B0000100D00008F0E0000000C0000000D0000000F0000550C00001E0D0000A00E0000000D0000000D0000000F0000260D00002C0D0000B00E0000000E0000000D0000000F0000F60D0000380D0000BF0E0000000F0000000D0000000F0000C30E0000450D0000CD0E000000100000000D0000000F00008D0F0000500D0000DA0E000000000000000E0000000F0000CC010000120D0000A90D000000010000000E0000000F0000BD020000290D0000C50D000000020000000E0000000F0000AC030000400D0000E00D000000030000000E0000000F000098040000550D0000FA0D000000040000000E0000000F0000820500006B0D0000140E000000050000000E0000000F0000690600007F0D00002C0E000000060000000E0000000F00004E070000930D0000430E000000070000000E0000000F000030080000A50D0000590E000000080000000E0000000F00000F090000B80D00006E0E000000090000000E0000000F0000EC090000C90D0000820E0000000A0000000E0000000F0000C60A0000DA0D0000950E0000000B0000000E0000000F00009D0B0000EA0D0000A70E0000000C0000000E0000000F0000720C0000FA0D0000B90E0000000D0000000E0000000F0000450D0000080E0000C90E0000000E0000000E0000000F0000150E0000160E0000D80E0000000F0000000E0000000F0000E20E0000240E0000E60E000000100000000E0000000F0000AD0F0000300E0000F30E000000000000000F0000000F0000E3010000DD0D0000BF0D000000010000000F0000000F0000D5020000F50D0000DB0D000000020000000F0000000F0000C40300000D0E0000F60D000000030000000F0000000F0000B1040000240E0000110E000000040000000F0000000F00009B0500003A0E00002A0E000000050000000F0000000F000083060000500E0000420E000000060000000F0000000F000068070000640E00005A0E000000070000000F0000000F00004A080000780E0000700E000000080000000F0000000F00002A0900008C0E0000850E000000090000000F0000000F0000070A00009E0E00009A0E0000000A0000000F0000000F0000E20A0000B00E0000AD0E0000000B0000000F0000000F0000BA0B0000C20E0000BF0E0000000C0000000F0000000F0000900C0000D20E0000D00E0000000D0000000F0000000F0000630D0000E20E0000E10E0000000E0000000F0000000F0000330E0000F10E0000F00E0000000F0000000F0000000F0000FF0E0000FF0E0000FF0E000000100000000F0000000F0000CC0F00000D0F00000B0F00000000000000100000000F0000F9010000A50E0000D40D00000001000000100000000F0000EC020000BE0E0000F00D00000002000000100000000F0000DC030000D70E00000C0E00000003000000100000000F0000C9040000EF0E0000270E00000004000000100000000F0000B4050000060F0000400E00000005000000100000000F00009C0600001D0F0000590E00000006000000100000000F000081070000330F0000700E00000007000000100000000F000064080000480F0000870E00000008000000100000000F0000450900005C0F00009C0E00000009000000100000000F0000230A0000700F0000B10E0000000A000000100000000F0000FE0A0000830F0000C40E0000000B000000100000000F0000D60B0000960F0000D70E0000000C000000100000000F0000AD0C0000A70F0000E80E0000000D000000100000000F0000800D0000B80F0000F80E0000000E000000100000000F0000510E0000C80F0000080F0000000F000000100000000F00001F0F0000D80F0000160F00000010000000100000000F0000EB0F0000E70F0000240F000000000000000000000010000052000000A9000000FA0C00000001000000000000001000003D010000B1000000150D000000020000000000000010000025020000B80000002E0D00000003000000000000001000000B030000BE000000470D0000000400000000000000100000EF030000C30000005F0D0000000500000000000000100000D0040000C8000000760D0000000600000000000000100000AE050000CC0000008C0D00000007000000000000001000008A060000D0000000A00D000000080000000000000010000063070000D2000000B40D000000090000000000000010000039080000D4000000C70D0000000A000000000000001000000D090000D5000000D80D0000000B00000000000000100000DF090000D6000000E90D0000000C00000000000000100000AD0A0000D6000000F90D0000000D000000000000001000007A0B0000D5000000070E0000000E00000000000000100000430C0000D3000000150E0000000F000000000000001000000A0D0000D1000000220E0000001000000000000000100000CF0D0000CE0000002D0E000000000000000100000010000070000000A3010000170D00000001000000010000001000005C010000AB010000320D000000020000000100000010000045020000B30100004C0D00000003000000010000001000002C030000BB010000650D000000040000000100000010000010040000C10100007D0D0000000500000001000000100000F1040000C7010000940D0000000600000001000000100000D0050000CC010000AA0D0000000700000001000000100000AC060000D1010000BF0D000000080000000100000010000086070000D5010000D30D00000009000000010000001000005D080000D8010000E60D0000000A0000000100000010000031090000DA010000F80D0000000B00000001000000100000030A0000DC010000080E0000000C00000001000000100000D30A0000DD010000180E0000000D000000010000001000009F0B0000DD010000270E0000000E00000001000000100000690C0000DC010000350E0000000F00000001000000100000310D0000DB010000420E0000001000000001000000100000F60D0000D90100004E0E00000000000000020000001000008F00000099020000340D00000001000000020000001000007B010000A30200004F0D000000020000000200000010000064020000AC020000690D00000003000000020000001000004C030000B4020000820D000000040000000200000010000030040000BC0200009B0D000000050000000200000010000012050000C3020000B20D0000000600000002000000100000F1050000C9020000C80D0000000700000002000000100000CE060000CF020000DD0D0000000800000002000000100000A8070000D4020000F10D000000090000000200000010000080080000D8020000040E0000000A0000000200000010000055090000DB020000160E0000000B00000002000000100000270A0000DE020000270E0000000C00000002000000100000F70A0000E0020000370E0000000D00000002000000100000C50B0000E2020000460E0000000E000000020000001000008F0C0000E2020000540E0000000F00000002000000100000570D0000E2020000620E00000010000000020000001000001D0E0000E10200006E0E0000000000000003000000100000AC0000008C030000500D000000010000000300000010000099010000970300006C0D000000020000000300000010000083020000A1030000860D00000003000000030000001000006B030000AB0300009F0D000000040000000300000010000050040000B3030000B80D000000050000000300000010000032050000BC030000CF0D000000060000000300000010000012060000C3030000E50D0000000700000003000000100000EF060000CA030000FB0D0000000800000003000000100000CA070000D00300000F0E0000000900000003000000100000A2080000D5030000220E0000000A0000000300000010000078090000DA030000350E0000000B000000030000001000004B0A0000DD030000460E0000000C000000030000001000001B0B0000E1030000560E0000000D00000003000000100000E90B0000E3030000650E0000000E00000003000000100000B40C0000E5030000740E0000000F000000030000001000007D0D0000E6030000810E0000001000000003000000100000430E0000E60300008D0E0000000000000004000000100000C90000007C0400006C0D0000000100000004000000100000B701000088040000880D0000000200000004000000100000A102000093040000A20D0000000300000004000000100000890300009E040000BC0D00000004000000040000001000006F040000A8040000D40D000000050000000400000010000052050000B1040000EC0D000000060000000400000010000033060000B9040000020E000000070000000400000010000010070000C1040000180E0000000800000004000000100000EC070000C80400002C0E0000000900000004000000100000C4080000CF040000400E0000000A000000040000001000009A090000D5040000520E0000000B000000040000001000006E0A0000DA040000640E0000000C000000040000001000003F0B0000DE040000740E0000000D000000040000001000000D0C0000E1040000840E0000000E00000004000000100000D90C0000E4040000920E0000000F00000004000000100000A20D0000E7040000A00E0000001000000004000000100000690E0000E8040000AC0E0000000000000005000000100000E600000068050000880D0000000100000005000000100000D401000075050000A30D0000000200000005000000100000BF02000082050000BE0D0000000300000005000000100000A80300008E050000D80D00000004000000050000001000008E04000099050000F10D000000050000000500000010000071050000A3050000080E000000060000000500000010000052060000AD0500001F0E000000070000000500000010000031070000B6050000350E00000008000000050000001000000C080000BE0500004A0E0000000900000005000000100000E6080000C50500005D0E0000000A00000005000000100000BC090000CC050000700E0000000B00000005000000100000900A0000D2050000820E0000000C00000005000000100000620B0000D8050000920E0000000D00000005000000100000310C0000DD050000A20E0000000E00000005000000100000FD0C0000E1050000B10E0000000F00000005000000100000C70D0000E4050000BE0E00000010000000050000001000008E0E0000E6050000CB0E00000000000000060000001000000201000051060000A30D0000000100000006000000100000F001000060060000BF0D0000000200000006000000100000DC0200006D060000DA0D0000000300000006000000100000C50300007A060000F40D0000000400000006000000100000AC040000860600000C0E00000005000000060000001000009005000092060000240E0000000600000006000000100000710600009D0600003B0E000000070000000600000010000050070000A7060000510E00000008000000060000001000002D080000B0060000660E000000090000000600000010000007090000B90600007A0E0000000A00000006000000100000DE090000C10600008D0E0000000B00000006000000100000B20A0000C80600009F0E0000000C00000006000000100000840B0000CF060000B00E0000000D00000006000000100000540C0000D4060000C00E0000000E00000006000000100000210D0000DA060000CE0E0000000F00000006000000100000EB0D0000DE060000DC0E0000001000000006000000100000B30E0000E2060000E90E00000000000000070000001000001D01000037070000BD0D00000001000000070000001000000C02000047070000D90D0000000200000007000000100000F802000056070000F50D0000000300000007000000100000E2030000640700000F0E0000000400000007000000100000C904000071070000280E0000000500000007000000100000AE0500007E070000400E00000006000000070000001000009006000089070000570E000000070000000700000010000070070000950700006D0E00000008000000070000001000004D0800009F070000820E000000090000000700000010000027090000A9070000960E0000000A00000007000000100000FF090000B2070000AA0E0000000B00000007000000100000D40A0000BA070000BC0E0000000C00000007000000100000A60B0000C2070000CD0E0000000D00000007000000100000760C0000C9070000DD0E0000000E00000007000000100000440D0000CF070000EC0E0000000F000000070000001000000E0E0000D5070000FA0E0000001000000007000000100000D70E0000DA070000070F0000000000000008000000100000380100001A080000D70D0000000100000008000000100000280200002B080000F40D0000000200000008000000100000140300003B0800000F0E0000000300000008000000100000FF0300004A0800002A0E0000000400000008000000100000E604000058080000430E0000000500000008000000100000CC050000660800005B0E0000000600000008000000100000AE06000073080000730E00000007000000080000001000008E0700007F080000890E00000008000000080000001000006C0800008B0800009E0E00000009000000080000001000004709000096080000B20E0000000A000000080000001000001F0A0000A0080000C60E0000000B00000008000000100000F40A0000AA080000D80E0000000C00000008000000100000C80B0000B2080000E90E0000000D00000008000000100000980C0000BB080000FA0E0000000E00000008000000100000660D0000C2080000090F0000000F00000008000000100000310E0000C9080000170F0000001000000008000000100000FA0E0000CF080000240F000000000000000900000010000052010000FA080000F10D0000000100000009000000100000420200000C0900000E0E0000000200000009000000100000300300001D090000290E00000003000000090000001000001B0400002D090000440E0000000400000009000000100000030500003C0900005E0E0000000500000009000000100000E90500004B090000760E0000000600000009000000100000CC060000590900008E0E0000000700000009000000100000AC07000067090000A40E00000008000000090000001000008A08000074090000BA0E00000009000000090000001000006609000080090000CE0E0000000A000000090000001000003E0A00008B090000E20E0000000B00000009000000100000150B000096090000F40E0000000C00000009000000100000E80B0000A0090000050F0000000D00000009000000100000B90C0000A9090000160F0000000E00000009000000100000880D0000B1090000250F0000000F00000009000000100000540E0000B9090000340F00000010000000090000001000001D0F0000C0090000410F000000000000000A0000001000006C010000D60900000B0E000000010000000A0000001000005D020000E9090000270E000000020000000A0000001000004B030000FB090000430E000000030000000A000000100000360400000D0A00005E0E000000040000000A0000001000001F0500001D0A0000780E000000050000000A000000100000050600002D0A0000900E000000060000000A000000100000E90600003D0A0000A80E000000070000000A000000100000CA0700004B0A0000BF0E000000080000000A000000100000A8080000590A0000D50E000000090000000A00000010000084090000660A0000E90E0000000A0000000A0000001000005E0A0000730A0000FD0E0000000B0000000A000000100000340B00007E0A0000100F0000000C0000000A000000100000090C0000890A0000210F0000000D0000000A000000100000DA0C0000940A0000320F0000000E0000000A000000100000A90D00009D0A0000410F0000000F0000000A000000100000760E0000A60A0000500F000000100000000A000000100000400F0000AF0A00005E0F000000000000000B00000010000085010000AF0A0000240E000000010000000B00000010000076020000C30A0000410E000000020000000B00000010000065030000D70A00005D0E000000030000000B00000010000051040000E90A0000780E000000040000000B0000001000003A050000FB0A0000910E000000050000000B000000100000210600000C0B0000AA0E000000060000000B000000100000050700001C0B0000C20E000000070000000B000000100000E70700002C0B0000D90E000000080000000B000000100000C60800003B0B0000EF0E000000090000000B000000100000A2090000490B0000040F0000000A0000000B0000001000007C0A0000570B0000180F0000000B0000000B000000100000540B0000640B00002B0F0000000C0000000B000000100000280C0000700B00003D0F0000000D0000000B000000100000FA0C00007C0B00004D0F0000000E0000000B000000100000CA0D0000860B00005D0F0000000F0000000B000000100000970E0000900B00006C0F000000100000000B000000100000610F00009A0B00007A0F000000000000000C0000001000009E010000850B00003C0E000000010000000C000000100000900200009A0B0000590E000000020000000C0000001000007F030000AF0B0000760E000000030000000C0000001000006B040000C20B0000910E000000040000000C00000010000055050000D50B0000AB0E000000050000000C0000001000003C060000E80B0000C40E000000060000000C00000010000021070000F90B0000DC0E000000070000000C000000100000030800000A0C0000F30E000000080000000C000000100000E30800001A0C0000090F000000090000000C000000100000C0090000290C00001E0F0000000A0000000C0000001000009A0A0000380C0000320F0000000B0000000C000000100000720B0000460C0000450F0000000C0000000C000000100000470C0000530C0000570F0000000D0000000C0000001000001A0D0000600C0000690F0000000E0000000C000000100000EA0D00006C0C0000790F0000000F0000000C000000100000B80E0000770C0000880F000000100000000C000000100000830F0000820C0000960F000000000000000D000000100000B6010000580C0000540E000000010000000D000000100000A80200006E0C0000720E000000020000000D00000010000098030000840C00008E0E000000030000000D00000010000085040000980C0000A90E000000040000000D0000001000006F050000AC0C0000C40E000000050000000D00000010000057060000C00C0000DD0E000000060000000D0000001000003C070000D30C0000F50E000000070000000D0000001000001F080000E40C00000D0F000000080000000D000000100000FF080000F60C0000230F000000090000000D000000100000DD090000060D0000380F0000000A0000000D000000100000B80A0000160D00004C0F0000000B0000000D000000100000900B0000250D0000600F0000000C0000000D000000100000660C0000340D0000720F0000000D0000000D000000100000390D0000410D0000830F0000000E0000000D0000001000000A0E00004E0D0000930F0000000F0000000D000000100000D80E00005B0D0000A30F000000100000000D000000100000A30F0000660D0000B10F000000000000000E000000100000CD010000270D00006C0E000000010000000E000000100000C00200003F0D00008A0E000000020000000E000000100000B0030000550D0000A60E000000030000000E0000001000009E0400006B0D0000C20E000000040000000E00000010000089050000800D0000DC0E000000050000000E00000010000071060000950D0000F60E000000060000000E00000010000057070000A90D00000E0F000000070000000E0000001000003A080000BC0D0000260F000000080000000E0000001000001B090000CE0D00003C0F000000090000000E000000100000F9090000E00D0000520F0000000A0000000E000000100000D50A0000F10D0000660F0000000B0000000E000000100000AE0B0000010E00007A0F0000000C0000000E000000100000840C0000110E00008C0F0000000D0000000E000000100000580D00001F0E00009D0F0000000E0000000E000000100000290E00002E0E0000AE0F0000000F0000000E000000100000F70E00003B0E0000BD0F000000100000000E000000100000C30F0000480E0000CC0F000000000000000F000000100000E4010000F40D0000830E000000010000000F000000100000D80200000C0E0000A10E000000020000000F000000100000C8030000240E0000BE0E000000030000000F000000100000B70400003B0E0000DA0E000000040000000F000000100000A2050000510E0000F40E000000050000000F0000001000008B060000670E00000E0F000000060000000F000000100000710700007C0E0000270F000000070000000F00000010000055080000900E00003E0F000000080000000F00000010000036090000A30E0000550F000000090000000F000000100000150A0000B60E00006B0F0000000A0000000F000000100000F10A0000C80E00007F0F0000000B0000000F000000100000CA0B0000DA0E0000930F0000000C0000000F000000100000A10C0000EA0E0000A60F0000000D0000000F000000100000760D0000FA0E0000B70F0000000E0000000F000000100000470E00000A0F0000C80F0000000F0000000F000000100000170F0000180F0000D80F000000100000000F000000100000E30F0000260F0000E60F0000000000000010000000100000FB010000BD0E00009A0E0000000100000010000000100000EF020000D60E0000B80E0000000200000010000000100000E0030000EF0E0000D50E0000000300000010000000100000CF040000070F0000F10E0000000400000010000000100000BB0500001F0F00000C0F0000000500000010000000100000A4060000350F0000260F00000006000000100000001000008B0700004C0F00003F0F00000007000000100000001000006F080000610F0000570F000000080000001000000010000051090000750F00006E0F0000000900000010000000100000300A0000890F0000830F0000000A000000100000001000000D0B00009D0F0000980F0000000B00000010000000100000E70B0000AF0F0000AC0F0000000C00000010000000100000BE0C0000C10F0000BF0F0000000D00000010000000100000930D0000D20F0000D10F0000000E00000010000000100000650E0000E20F0000E20F0000000F00000010000000100000350F0000F20F0000F10F0000001000000010000000100000FF0F0000FF0F0000FF0F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D0000000000000000000000000000000000000000000000000000000004000000000000000000004A03000017000000180000000008000000000000000000006C0600002800000027000000000C00000000000000000000650900002E00000026000000001000000000000000000000350C0000280000001400000000000000000400000000000072000000830300000B000000000400000004000000000000C5030000AF03000029000000000800000004000000000000EF060000CE03000036000000000C00000004000000000000F0090000E303000033000000001000000004000000000000C70C0000EC03000020000000000000000008000000000000DD000000D80600001600000000040000000800000000000038040000120700003200000000080000000800000000000069070000410700003D000000000C00000008000000000000720A00006507000039000000001000000008000000000000510D00007D0700002400000000000000000C0000000000003F010000FA0900001B00000000040000000C000000000000A1040000430A00003500000000080000000C000000000000DA070000800A00003E000000000C0000000C000000000000EA0A0000B30A00003800000000100000000C000000000000D10D0000DA0A00002200000000000000001000000000000098010000E70C000018000000000400000010000000000000020500003F0D000031000000000800000010000000000000430800008C0D000039000000000C000000100000000000005A0B0000CD0D000031000000001000000010000000000000490E0000030E0000190000000000000000000000000400002200000039000000A60300000004000000000000000400008203000054000000D7030000000800000000000000040000B906000065000000F7030000000C00000000000000040000C60900006A00000007040000001000000000000000040000AA0C0000630000000704000000000000000400000004000097000000D4030000D00300000004000000040000000400000004000000040000000400000008000000040000000400003D0700001F04000020040000000C00000004000000040000520A000034040000300400000010000000040000000400003E0D00003D0400002F040000000000000008000000040000020100003B070000F3030000000400000008000000040000720400007607000023040000000800000008000000040000B9070000A607000042040000000C00000008000000040000D60A0000CA07000051040000001000000008000000040000CA0D0000E30700005004000000000000000C000000040000650100006F0A00000F04000000040000000C000000040000DD040000B90A00003F04000000080000000C0000000400002B080000F90A00005E040000000C0000000C000000040000500B00002D0B00006C04000000100000000C0000000400004C0E0000560B00006B040000000000000010000000040000BF0100006F0D0000250400000004000000100000000400003F050000C90D00005404000000080000001000000004000095080000180E000072040000000C00000010000000040000C20B00005C0E000081040000001000000010000000040000C60E0000950E00007F0400000000000000000000000800003C0000006A0000000A070000000400000000000000080000B0030000850000004C070000000800000000000000080000FB060000950000007E070000000C000000000000000800001D0A00009A000000A0070000001000000000000000080000150D000093000000B1070000000000000004000000080000B1000000180400004C0700000004000000040000000800002E040000430400008F0700000008000000040000000800008107000063040000C2070000000C00000004000000080000AB0A000078040000E4070000001000000004000000080000AC0D000082040000F60700000000000000080000000800001E0100009107000087070000000400000008000000080000A3040000CD070000CB070000000800000008000000080000000800000008000000080000000C00000008000000080000300B00002408000022080000001000000008000000080000390E00003E0800003508000000000000000C00000008000082010000D70A0000BC07000000040000000C0000000800000F050000240B00000008000000080000000C00000008000072080000650B000034080000000C0000000C000000080000AC0B00009B0B00005808000000100000000C000000080000BD0E0000C60B00006C080000000000000010000000080000DD010000EA0D0000EA07000000040000001000000008000072050000470E00002F080000000800000010000000080000DD080000990E000064080000000C00000010000000080000200C0000DF0E000088080000001000000010000000080000390F00001A0F00009D0800000000000000000000000C00004B00000090000000260A00000004000000000000000C0000D4030000AA0000007A0A00000008000000000000000C000034070000BA000000BD0A0000000C000000000000000C00006A0A0000BE000000F00A00000010000000000000000C0000770D0000B6000000130B00000000000000040000000C0000C200000050040000800A00000004000000040000000C0000530400007B040000D60A00000008000000040000000C0000BB0700009C0400001B0B0000000C000000040000000C0000FA0A0000B1040000500B00000010000000040000000C00000F0E0000BB040000750B00000000000000080000000C000030010000DC070000D40A00000004000000080000000C0000C9040000190800002B0B00000008000000080000000C00003A0800004B080000720B0000000C000000080000000C0000810B000071080000AA0B00000010000000080000000C00009F0E00008C080000D10B000000000000000C0000000C000095010000340B0000200B000000040000000C0000000C000037050000830B00007A0B000000080000000C0000000C0000AF080000C60B0000C30B0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B000000100000000C0000000C0000250F00002A0C0000250C00000000000000100000000C0000F1010000590E0000660B00000004000000100000000C00009B050000B90E0000C20B00000008000000100000000C00001C0900000D0F00000D0C0000000C000000100000000C0000740C0000560F0000480C00000010000000100000000C0000A20F0000940F0000730C000000000000000000000010000052000000A9000000FA0C0000000400000000000000100000EF030000C30000005F0D000000080000000000000010000063070000D2000000B40D0000000C00000000000000100000AD0A0000D6000000F90D0000001000000000000000100000CF0D0000CE0000002D0E0000000000000004000000100000C90000007C0400006C0D00000004000000040000001000006F040000A8040000D40D0000000800000004000000100000EC070000C80400002C0E0000000C000000040000001000003F0B0000DE040000740E0000001000000004000000100000690E0000E8040000AC0E0000000000000008000000100000380100001A080000D70D0000000400000008000000100000E604000058080000430E00000008000000080000001000006C0800008B0800009E0E0000000C00000008000000100000C80B0000B2080000E90E0000001000000008000000100000FA0E0000CF080000240F000000000000000C0000001000009E010000850B00003C0E000000040000000C00000010000055050000D50B0000AB0E000000080000000C000000100000E30800001A0C0000090F0000000C0000000C000000100000470C0000530C0000570F000000100000000C000000100000830F0000820C0000960F0000000000000010000000100000FB010000BD0E00009A0E0000000400000010000000100000BB0500001F0F00000C0F000000080000001000000010000051090000750F00006E0F0000000C00000010000000100000BE0C0000C10F0000BF0F0000001000000010000000100000FF0F0000FF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000400000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000002F0000003F0000004B00000055000000600000006900000071000000770000007E00000084000000890000008F000000940000009A0000009E000000A2000000A7000000AB000000AF000000B3000000B7000000BC000000BF000000C1000000C5000000C8000000CA000000CE000000D1000000D3000000D7000000DA000000DD000000E0000000E3000000E7000000E9000000EB000000EE000000F2000000F4000000F7000000F9000000FC000000FF000000010100000301000006010000080100000A0100000C0100000F010000110100001301000017010000180100001C0100001E01000020010000210100002401000026010000280100002A0100002D0100002F01000031010000330100003601000037010000390100003C0100003D0100003F01000040010000430100004501000047010000490100004A0100004C0100004D0100005001000051010000530100005401000057010000590100005B0100005C0100005E0100005F01000062010000630100006501000067010000690100006A0100006C0100006E0100006F0100007001000072010000740100007501000076010000790100007A0100007C0100007D0100007F010000820100008301000084010000850100008501000087010000890100008B0100008C0100008E01000090010000920100009301000094010000960100009701000098010000990100009B0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A7010000A8010000A9010000AB010000AC010000AE010000AF010000B0010000B1010000B3010000B4010000B6010000B7010000B8010000BA010000BB010000BC010000BD010000BE010000BF010000C1010000C2010000C3010000C5010000C6010000C8010000C9010000CA010000CB010000CC010000CD010000D0010000D2010000D2010000D4010000D5010000D6010000D7010000D9010000DA010000DB010000DC010000DD010000DE010000E0010000E1010000E1010000E2010000E4010000E5010000E6010000E7010000E9010000E9010000EA010000EC010000ED010000EE010000F0010000F1010000F1010000F3010000F4010000F4010000F5010000F6010000F6010000F9010000F9010000FA010000FC010000FD010000FE010000FF0100000002000001020000020200000302000004020000050200000602000008020000080200000A0200000B0200000C0200000D0200000D0200000E0200000F0200001002000011020000120200001302000014020000160200001602000017020000190200001A0200001B0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002502000026020000260200002702000028020000290200002A0200002B0200002C0200002C0200002D0200002E0200002F0200003002000032020000320200003302000034020000340200003502000037020000370200003802000039020000390200003B0200003C0200003D0200003E0200004002000041020000410200004302000044020000440200004502000045020000470200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F0200004F020000500200005102000052020000530200005402000055020000550200005602000057020000590200005A0200005A0200005B0200005C0200005D0200005E0200005F0200006002000061020000610200006202000064020000640200006502000066020000670200006802000069020000690200006B0200006B0200006C0200006D0200006D0200006E0200006F02000070020000710200007202000073020000740200007502000075020000760200007702000077020000790200007A0200007A0200007B0200007B0200007C0200007D0200007E0200007F0200008002000080020000810200008302000083020000840200008502000085020000850200008702000088020000890200008A0200008B0200008D0200008D0200008F02000090020000900200009102000091020000920200009302000094020000950200009502000096020000960200009702000098020000990200009A0200009A0200009B0200009C0200009D0200009E0200009E0200009F020000A0020000A1020000A1020000A3020000A4020000A4020000A4020000A5020000A6020000A7020000A8020000A8020000A9020000A9020000AA020000AB020000AB020000AC020000AC020000AE020000AF020000B0020000B0020000B1020000B2020000B2020000B2020000B3020000B4020000B4020000B5020000B6020000B6020000B7020000B7020000B9020000BA020000BB020000BC020000BC020000BD020000BD020000BE020000BE020000BF020000C0020000C1020000C1020000C2020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C7020000C8020000C8020000C9020000CA020000CB020000CB020000CC020000CD020000CD020000CE020000CE020000CF020000D0020000D1020000D2020000D2020000D2020000D3020000D4020000D5020000D5020000D7020000D7020000D8020000D8020000D9020000DA020000DB020000DB020000DB020000DD020000DD020000DD020000DF020000DF020000E0020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E4020000E5020000E7020000E7020000E7020000E9020000E9020000EA020000EA020000EB020000EC020000EC020000ED020000ED020000EE020000EE020000EF020000EF020000F0020000F0020000F1020000F1020000F2020000F2020000F3020000F5020000F5020000F7020000F7020000F8020000F8020000F9020000F9020000FA020000FA020000FB020000FC020000FC020000FE020000FE020000FF020000FF020000FF0200000003000000030000010300000103000002030000030300000503000005030000060300000703000008030000080300000803000009030000090300000A0300000A0300000C0300000D0300000D0300000D0300000E0300000F03000010030000100300001003000011030000130300001303000014030000140300001503000015030000160300001703000017030000170300001803000018030000190300001A0300001B0300001B0300001C0300001C0300001C0300001D0300001D0300001E0300001E0300001F030000200300002003000021030000220300002203000023030000240300002503000025030000260300002603000026030000270300002703000028030000290300002A0300002A0300002B0300002B0300002C0300002C0300002C0300002D0300002D0300002E0300002F0300002F0300003103000031030000320300003203000033030000330300003403000034030000350300003503000036030000360300003603000037030000370300003803000039030000390300003A0300003A0300003C0300003D0300003D0300003D0300003D0300003F0300003F0300003F030000400300004203000042030000420300004303000044030000440300004403000045030000450300004603000046030000460300004703000049030000490300004A0300004A0300004B0300004C0300004C0300004C0300004D0300004E0300004E0300004F0300004F0300004F030000500300005203000053030000530300005403000054030000540300005503000055030000570300005703000058030000580300005903000059030000590300005A0300005A0300005B0300005C0300005C0300005D0300005D0300005E0300005E0300005F0300005F0300005F030000600300006203000062030000630300006303000063030000630300006403000064030000650300006603000066030000660300006703000068030000680300006803000069030000690300006A0300006B0300006C0300006C0300006D0300006D0300006D0300006E0300006E0300007003000070030000700300007103000071030000720300007203000072030000740300007403000074030000750300007503000077030000770300007703000077030000780300007803000078030000790300007A0300007A0300007A0300007B0300007B0300007B0300007C0300007C0300007E0300007E0300007F0300007F0300007F0300007F03000080030000800300008103000081030000820300008203000082030000830300008303000084030000840300008503000085030000850300008603000086030000870300008803000088030000890300008A0300008A0300008B0300008B0300008B0300008B0300008C0300008C0300008D0300008D0300008F0300008F030000900300009003000090030000910300009103000091030000920300009203000094030000940300009403000095030000950300009703000097030000980300009803000098030000990300009903000099030000990300009A0300009A0300009B0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AD030000AE030000AE030000AE030000B0030000B0030000B0030000B1030000B1030000B2030000B2030000B2030000B2030000B3030000B3030000B4030000B5030000B5030000B5030000B6030000B6030000B7030000B8030000B8030000B8030000B9030000B9030000BB030000BB030000BB030000BC030000BC030000BD030000BD030000BD030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C3030000C4030000C4030000C5030000C5030000C6030000C6030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CB030000CB030000CC030000CC030000CC030000CD030000CE030000CE030000CF030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D2030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D8030000D8030000D9030000D9030000D9030000D9030000D9030000DA030000DA030000DB030000DC030000DC030000DC030000DD030000DE030000DE030000DE030000DF030000DF030000E0030000E0030000E1030000E1030000E1030000E2030000E2030000E3030000E3030000E3030000E4030000E4030000E4030000E5030000E5030000E6030000E6030000E6030000E7030000E7030000E7030000E8030000E8030000E9030000E9030000E9030000EB030000EB030000EC030000EC030000EC030000ED030000ED030000EE030000EF030000EF030000EF030000F0030000F0030000F1030000F1030000F1030000F2030000F2030000F3030000F3030000F3030000F4030000F4030000F4030000F4030000F5030000F5030000F5030000F6030000F7030000F7030000F7030000FA030000FA030000FC030000FC030000FD030000FF030000FF030000000000002E0000003E0000004B000000550000005D000000650000006D000000730000007A00000080000000850000008B00000090000000960000009A0000009E000000A3000000A7000000AB000000AF000000B3000000B7000000BB000000BD000000C1000000C4000000C6000000CA000000CD000000CF000000D4000000D7000000DA000000DD000000E0000000E3000000E5000000E7000000EB000000EE000000F0000000F3000000F5000000F8000000FB000000FD000000FF000000020100000401000006010000080100000B0100000D0100000F010000110100001201000016010000180100001A0100001B0100001E01000020010000220100002401000027010000290100002B0100002D0100002F0100003001000032010000350100003601000038010000390100003C0100003E0100004001000042010000430100004501000046010000490100004A0100004C0100004D0100005101000052010000540100005501000058010000590100005B0100005C0100005F010000600100006201000063010000650100006701000068010000690100006B0100006D0100006E0100006F01000071010000730100007501000076010000780100007A0100007B0100007C0100007D0100007D0100007F01000081010000830100008401000086010000880100008A0100008B0100008C0100008E0100008F010000900100009101000093010000950100009601000098010000990100009A0100009C0100009D0100009F010000A0010000A1010000A3010000A4010000A6010000A7010000A8010000A9010000AB010000AC010000AE010000AF010000B0010000B2010000B3010000B4010000B5010000B6010000B7010000B9010000BA010000BB010000BD010000BE010000C0010000C1010000C2010000C3010000C4010000C5010000C7010000C8010000C8010000CA010000CB010000CC010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D6010000D7010000D7010000D8010000DA010000DB010000DD010000DE010000DF010000DF010000E0010000E1010000E3010000E5010000E6010000E7010000E7010000E8010000E9010000E9010000EB010000ED010000ED010000EF010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FD010000FD010000FF01000000020000010200000202000002020000030200000402000005020000060200000702000008020000090200000B0200000B0200000C0200000E0200000F020000100200001002000011020000120200001302000014020000150200001602000017020000180200001A0200001B0200001B0200001C0200001D0200001E0200001F020000200200002102000021020000220200002302000024020000250200002702000027020000290200002A0200002A0200002B0200002C0200002D0200002E0200002F0200002F020000300200003102000032020000340200003502000036020000360200003802000039020000390200003A0200003A0200003C0200003C0200003D0200003E0200003F02000040020000410200004202000043020000440200004402000045020000460200004702000048020000490200004A0200004A0200004B0200004C0200004D0200004E0200004E0200004F020000510200005202000052020000530200005402000056020000560200005702000059020000590200005A0200005B0200005C0200005D0200005E0200005E0200006002000060020000610200006202000062020000630200006402000065020000660200006702000068020000690200006A0200006A0200006B0200006C0200006C0200006D0200006E0200006E0200006F0200006F020000710200007202000073020000740200007502000075020000760200007702000077020000780200007902000079020000790200007A0200007A0200007C0200007D0200007E0200007F0200007F02000080020000810200008102000082020000820200008302000084020000850200008602000086020000870200008702000088020000890200008A0200008B0200008B0200008C0200008E0200008F020000900200009002000091020000920200009302000093020000950200009602000096020000960200009702000098020000990200009A0200009A0200009B0200009B0200009D0200009E0200009E0200009F0200009F020000A0020000A1020000A2020000A2020000A3020000A4020000A4020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000AA020000AA020000AB020000AC020000AD020000AE020000AE020000AF020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B4020000B5020000B5020000B6020000B7020000B7020000B8020000B9020000BA020000BA020000BB020000BC020000BD020000BD020000BE020000BF020000BF020000C0020000C0020000C1020000C2020000C3020000C4020000C4020000C4020000C5020000C6020000C7020000C7020000C8020000C8020000C9020000CA020000CB020000CC020000CD020000CD020000CD020000CF020000CF020000CF020000D1020000D1020000D2020000D2020000D3020000D3020000D5020000D6020000D6020000D7020000D7020000D8020000D9020000D9020000D9020000DB020000DB020000DC020000DC020000DD020000DE020000DE020000DF020000DF020000E0020000E0020000E1020000E1020000E2020000E2020000E3020000E3020000E5020000E5020000E6020000E7020000E7020000E8020000E8020000E9020000E9020000EA020000EA020000EC020000EC020000ED020000EE020000EE020000EF020000EF020000F0020000F0020000F0020000F1020000F1020000F3020000F3020000F5020000F6020000F7020000F7020000F8020000F9020000FA020000FA020000FA020000FB020000FB020000FC020000FC020000FD020000FE020000FE020000FE020000FF0200000103000002030000020300000203000003030000040300000403000006030000060300000703000007030000080300000903000009030000090300000A0300000A0300000B0300000C0300000D0300000D0300000E0300000E0300000E0300000F0300000F03000010030000100300001103000012030000120300001303000014030000140300001503000016030000170300001703000018030000180300001803000019030000190300001A0300001B0300001C0300001C0300001D0300001D0300001E0300001E0300001E0300001F0300001F0300002003000021030000220300002303000023030000240300002403000025030000250300002603000026030000270300002703000028030000280300002803000029030000290300002A0300002B0300002B0300002C0300002C0300002D0300002E0300002E0300002E0300002E0300002F0300002F0300002F0300003003000031030000310300003103000032030000330300003303000033030000340300003403000036030000360300003603000037030000380300003803000039030000390300003A0300003B0300003B0300003B0300003C0300003E0300003E0300003F0300003F0300003F030000400300004103000042030000420300004303000043030000430300004403000044030000450300004503000046030000460300004703000047030000470300004803000048030000490300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004E0300004F030000500300005003000051030000510300005103000051030000520300005203000054030000550300005503000055030000560300005703000057030000570300005803000058030000590300005A0300005B0300005B0300005C0300005C0300005C0300005D0300005D0300005F0300005F0300005F0300006003000060030000620300006203000062030000630300006303000063030000640300006403000065030000650300006503000065030000660300006603000066030000670300006903000069030000690300006B0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006E0300006E0300006F0300006F0300007003000070030000710300007103000071030000720300007303000074030000740300007503000075030000750300007603000076030000770300007803000078030000790300007A0300007A0300007B0300007B0300007B0300007B0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F0300007F03000080030000800300008003000081030000810300008203000082030000820300008303000083030000840300008403000085030000850300008503000086030000860300008603000086030000870300008703000088030000890300008A0300008A0300008B0300008B0300008C0300008C0300008D0300008D0300008D0300008E0300008E0300008F0300008F03000090030000900300009203000092030000930300009303000094030000950300009503000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009A0300009B0300009B0300009B0300009D0300009D0300009D0300009E0300009E0300009F0300009F0300009F0300009F030000A0030000A0030000A2030000A3030000A3030000A3030000A4030000A4030000A5030000A6030000A6030000A6030000A7030000A7030000A8030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AA030000AA030000AB030000AB030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B8030000B8030000B9030000B9030000B9030000BA030000BB030000BB030000BC030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000BF030000C0030000C0030000C1030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C5030000C5030000C5030000C5030000C5030000C6030000C6030000C7030000C8030000C8030000C8030000C9030000CA030000CA030000CA030000CB030000CB030000CC030000CC030000CD030000CD030000CD030000CE030000CE030000CF030000CF030000CF030000D0030000D0030000D0030000D1030000D1030000D2030000D2030000D2030000D3030000D3030000D3030000D4030000D4030000D5030000D5030000D5030000D6030000D7030000D7030000D7030000D7030000D9030000D9030000DA030000DB030000DB030000DB030000DC030000DC030000DD030000DD030000DD030000DE030000DE030000DF030000DF030000DF030000E0030000E0030000E0030000E0030000E1030000E1030000E1030000E2030000E3030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E7030000E7030000000000002B0000003B00000047000000510000005C00000061000000680000006E000000750000007B00000080000000850000008A0000008F00000092000000960000009A0000009E000000A1000000A5000000A8000000AB000000B0000000B3000000B5000000B8000000BB000000C0000000C3000000C5000000C9000000CB000000CE000000D1000000D4000000D7000000D9000000DB000000DE000000E1000000E3000000E6000000E8000000EB000000EE000000F0000000F2000000F5000000F7000000F9000000FB000000FD000000FF00000001010000040100000501000008010000090100000C0100000D01000010010000110100001301000015010000180100001A0100001C0100001E0100002001000021010000230100002501000027010000290100002A0100002C0100002E0100003001000033010000340100003601000037010000390100003A0100003C0100003D0100003F0100004001000043010000440100004601000047010000480100004A0100004C0100004D0100004F0100005001000052010000550100005601000057010000590100005A0100005B0100005C0100005E0100006001000062010000630100006501000067010000680100006A0100006B0100006B0100006C0100006D0100006F0100007001000072010000730100007501000077010000780100007A0100007B0100007C0100007D0100007F01000080010000810100008301000084010000850100008601000087010000890100008A0100008B0100008D0100008E0100008F01000091010000920100009301000095010000960100009701000098010000990100009B0100009C0100009D0100009E0100009F010000A1010000A2010000A3010000A4010000A5010000A6010000A9010000AA010000AB010000AC010000AD010000AE010000B0010000B1010000B1010000B3010000B4010000B5010000B7010000B8010000B9010000BA010000BB010000BB010000BC010000BE010000C0010000C0010000C1010000C3010000C4010000C5010000C6010000C7010000C7010000C9010000CA010000CB010000CD010000CE010000CF010000CF010000D0010000D2010000D2010000D3010000D5010000D5010000D7010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E1010000E2010000E4010000E4010000E6010000E7010000E8010000E9010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F2010000F2010000F2010000F4010000F4010000F5010000F5010000F6010000F8010000F9010000FA010000FB010000FC010000FD010000FD010000FF010000000200000002000000020000010200000202000003020000040200000502000005020000060200000702000008020000090200000A0200000A0200000C0200000D0200000D0200000E0200000F02000010020000110200001202000012020000130200001402000015020000170200001702000018020000190200001A0200001B0200001C0200001D0200001D0200001F0200001F02000020020000210200002202000023020000240200002502000026020000270200002702000028020000290200002A0200002B0200002C0200002D0200002D0200002E0200002F02000030020000310200003102000032020000330200003402000034020000350200003602000038020000390200003A0200003B0200003B0200003C0200003D0200003E0200003F02000040020000400200004202000042020000430200004402000044020000450200004502000046020000470200004802000048020000490200004A0200004A0200004B0200004C0200004C0200004E0200004F0200004F0200005002000051020000520200005302000054020000550200005602000056020000570200005802000058020000590200005A0200005B0200005B0200005D0200005D0200005E0200005E0200005F0200006002000060020000610200006202000063020000650200006602000067020000670200006802000069020000690200006A0200006A0200006A0200006B0200006C0200006D0200006D0200006D0200006F020000700200007102000071020000720200007302000074020000740200007502000076020000760200007702000078020000790200007A0200007B0200007C0200007C0200007C0200007E0200007F0200007F020000800200008002000080020000810200008202000082020000840200008502000085020000850200008602000087020000870200008802000089020000890200008B0200008B0200008C0200008D0200008E0200008F0200008F0200009002000090020000920200009202000093020000950200009602000096020000970200009702000098020000980200009902000099020000990200009A0200009B0200009C0200009C0200009D0200009E0200009F0200009F020000A0020000A1020000A1020000A2020000A2020000A2020000A3020000A4020000A5020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AA020000AB020000AC020000AC020000AD020000AD020000AD020000AE020000AF020000AF020000B1020000B1020000B2020000B2020000B3020000B3020000B4020000B5020000B5020000B6020000B6020000B7020000B8020000B8020000B8020000BA020000BA020000BB020000BC020000BD020000BE020000BE020000BF020000BF020000C0020000C0020000C1020000C1020000C2020000C2020000C3020000C3020000C4020000C4020000C4020000C5020000C5020000C6020000C6020000C8020000C8020000C9020000C9020000CB020000CB020000CC020000CC020000CC020000CD020000CD020000CE020000CF020000CF020000D0020000D1020000D2020000D2020000D3020000D4020000D5020000D5020000D5020000D6020000D7020000D7020000D7020000D9020000D9020000DA020000DA020000DB020000DC020000DC020000DC020000DD020000DE020000DF020000DF020000DF020000DF020000E0020000E0020000E2020000E2020000E3020000E3020000E4020000E5020000E5020000E5020000E6020000E6020000E7020000E7020000E8020000E8020000E9020000E9020000E9020000EA020000EA020000EB020000EB020000EC020000ED020000ED020000EE020000EF020000EF020000F0020000F1020000F1020000F1020000F3020000F3020000F3020000F4020000F4020000F5020000F6020000F7020000F8020000F9020000F9020000FA020000FA020000FA020000FB020000FB020000FC020000FD020000FE020000FF020000FF020000000300000003000001030000010300000303000003030000040300000403000005030000050300000503000006030000070300000703000009030000090300000A0300000A0300000B0300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000F0300000F0300000F030000110300001103000012030000120300001203000012030000140300001403000014030000150300001503000015030000170300001703000018030000190300001A0300001A0300001B0300001C0300001C0300001C0300001C0300001C0300001D0300001D0300001E0300001E0300002003000020030000200300002103000021030000220300002203000023030000230300002403000024030000240300002503000025030000260300002703000028030000280300002803000029030000290300002A0300002A0300002A0300002B0300002C0300002C0300002D0300002D0300002D0300002E0300002E0300002F03000030030000310300003103000031030000320300003203000032030000320300003303000033030000340300003403000035030000350300003603000036030000360300003703000038030000390300003A0300003A0300003B0300003B0300003C0300003C0300003C0300003E0300003E0300003E0300003F0300003F0300004103000041030000410300004103000043030000430300004303000043030000440300004403000044030000450300004503000045030000460300004603000047030000470300004803000049030000490300004A0300004A0300004B0300004C0300004C0300004D0300004D0300004D0300004E0300004F0300004F0300004F030000500300005003000050030000510300005103000052030000530300005303000054030000550300005603000056030000570300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005B0300005C0300005C0300005C0300005D0300005D0300005E03000060030000600300006103000061030000620300006203000063030000630300006303000064030000640300006403000064030000650300006503000066030000660300006703000067030000680300006803000069030000690300006A0300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006F0300006F0300006F0300006F030000700300007103000071030000720300007203000073030000730300007403000074030000750300007503000075030000750300007503000076030000760300007603000078030000780300007803000079030000790300007A0300007A0300007A0300007A0300007B0300007B0300007C0300007D0300007D0300007D0300007E0300007E0300007F03000080030000800300008003000081030000810300008203000082030000820300008303000083030000840300008403000084030000840300008403000085030000850300008703000087030000870300008803000089030000890300008A0300008A0300008B0300008B0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F0300009003000090030000910300009103000093030000930300009303000093030000940300009403000094030000950300009603000096030000970300009703000097030000980300009803000099030000990300009A0300009A0300009B0300009C0300009C0300009D0300009D0300009D0300009E0300009E030000A0030000A0030000A1030000A1030000A2030000A3030000A3030000A3030000A3030000A4030000A4030000A5030000A6030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AB030000AC030000AC030000AE030000AE030000AE030000AF030000AF030000AF030000B0030000B0030000B1030000B1030000B1030000B3030000B3030000B3030000B4030000B4030000B4030000B4030000B4030000B5030000B6030000B6030000B6030000B6030000B7030000B7030000B8030000B9030000B9030000B9030000BA030000BA030000BB030000BB030000BB030000BC030000BC030000BD030000BD030000BD030000BE030000BE030000BE030000BE030000BF030000BF030000BF030000C0030000C1030000C1030000C1030000C1030000C1030000C2030000C2030000C2030000C3030000C3030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="false" DataSize="88">0000000005000000050000000500000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="80">00000000680000001A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ </Mode>
+ <Mode ModeID="3" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="sRGB" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="srgb" PictureQuality="standard" IsMerge="1">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000B00000000A000000060000000002000000000000000000006101000018000000110000000003000000000000000000000F020000260000001C000000000400000000000000000000BC020000340000002600000000050000000000000000000068030000410000002F000000000600000000000000000000110400004D00000038000000000700000000000000000000B904000059000000400000000008000000000000000000005F050000650000004800000000090000000000000000000004060000700000004F000000000A00000000000000000000A70600007B00000055000000000B0000000000000000000048070000860000005A000000000C00000000000000000000E8070000900000005F000000000D00000000000000000000850800009A00000063000000000E0000000000000000000022090000A300000067000000000F00000000000000000000BC090000AC0000006A000000001000000000000000000000550A0000B40000006C00000000000000000100000000000042000000DE00000012000000000100000001000000000000F4000000ED0000001E000000000200000001000000000000A5010000FC00000029000000000300000001000000000000530200000A0100003400000000040000000100000000000001030000180100003E000000000500000001000000000000AC0300002601000047000000000600000001000000000000560400003301000050000000000700000001000000000000FE0400004001000058000000000800000001000000000000A40500004C0100005F000000000900000001000000000000490600005801000065000000000A00000001000000000000EB060000630100006B000000000B000000010000000000008D0700006E01000071000000000C000000010000000000002C0800007901000076000000000D00000001000000000000CA080000830100007A000000000E00000001000000000000670900008D0100007D000000000F00000001000000000000010A000096010000800000000010000000010000000000009A0A00009F0100008200000000000000000200000000000086000000BD0100002A00000000010000000200000000000038010000CD01000036000000000200000002000000000000E8010000DC0100004100000000030000000200000000000097020000EB0100004B00000000040000000200000000000044030000FA01000055000000000500000002000000000000F0030000080200005E00000000060000000200000000000099040000160200006700000000070000000200000000000042050000230200006F000000000800000002000000000000E805000030020000760000000009000000020000000000008D0600003D0200007C000000000A00000002000000000000300700004902000082000000000B00000002000000000000D10700005402000087000000000C00000002000000000000710800005F0200008C000000000D000000020000000000000F0900006A02000090000000000E00000002000000000000AB0900007502000093000000000F00000002000000000000460A00007F02000096000000001000000002000000000000DF0A00008802000098000000000000000003000000000000C90000009A020000420000000001000000030000000000007B010000AB0200004E0000000002000000030000000000002C020000BB02000059000000000300000003000000000000DB020000CA0200006300000000040000000300000000000088030000D90200006C00000000050000000300000000000033040000E802000075000000000600000003000000000000DD040000F60200007E0000000007000000030000000000008505000004030000850000000008000000030000000000002C060000120300008C000000000900000003000000000000D00600001F03000093000000000A00000003000000000000740700002B03000098000000000B0000000300000000000015080000380300009E000000000C00000003000000000000B508000043030000A2000000000D00000003000000000000530900004F030000A6000000000E00000003000000000000EF0900005A030000A9000000000F000000030000000000008A0A000064030000AB000000001000000003000000000000230B00006E030000AD0000000000000000040000000000000C010000750300005A000000000100000004000000000000BE01000086030000650000000002000000040000000000006F02000096030000700000000003000000040000000000001D030000A70300007A000000000400000004000000000000CB030000B60300008300000000050000000400000000000076040000C50300008C00000000060000000400000000000020050000D403000094000000000700000004000000000000C8050000E30300009C0000000008000000040000000000006F060000F1030000A300000000090000000400000000000014070000FE030000A9000000000A00000004000000000000B70700000C040000AF000000000B000000040000000000005808000018040000B4000000000C00000004000000000000F808000025040000B8000000000D000000040000000000009609000031040000BC000000000E00000004000000000000330A00003C040000BF000000000F00000004000000000000CE0A000047040000C1000000001000000004000000000000670B000052040000C30000000000000000050000000000004E0100004D04000071000000000100000005000000000000000200005E0400007C000000000200000005000000000000B102000070040000870000000003000000050000000000006003000080040000910000000004000000050000000000000D040000900400009A000000000500000005000000000000B9040000A0040000A300000000060000000500000000000063050000B0040000AB0000000007000000050000000000000B060000BF040000B2000000000800000005000000000000B2060000CD040000B900000000090000000500000000000057070000DB040000BF000000000A00000005000000000000FA070000E9040000C5000000000B000000050000000000009B080000F7040000C9000000000C000000050000000000003B09000003050000CE000000000D00000005000000000000DA09000010050000D1000000000E00000005000000000000760A00001C050000D4000000000F00000005000000000000110B000028050000D6000000001000000005000000000000AA0B000033050000D8000000000000000006000000000000900100002205000088000000000100000006000000000000420200003405000093000000000200000006000000000000F3020000460500009E000000000300000006000000000000A203000057050000A70000000004000000060000000000005004000068050000B1000000000500000006000000000000FB04000079050000B9000000000600000006000000000000A505000089050000C10000000007000000060000000000004E06000098050000C8000000000800000006000000000000F4060000A7050000CF00000000090000000600000000000099070000B6050000D5000000000A000000060000000000003D080000C4050000DA000000000B00000006000000000000DE080000D2050000DF000000000C000000060000000000007E090000E0050000E3000000000D000000060000000000001C0A0000ED050000E6000000000E00000006000000000000B90A0000F9050000E9000000000F00000006000000000000540B000006060000EB000000001000000006000000000000ED0B000011060000ED000000000000000007000000000000D1010000F50500009F0000000001000000070000000000008402000008060000AA000000000200000007000000000000350300001A060000B4000000000300000007000000000000E40300002C060000BE000000000400000007000000000000910400003D060000C70000000005000000070000000000003D0500004E060000CF000000000600000007000000000000E70500005F060000D7000000000700000007000000000000900600006F060000DE000000000800000007000000000000360700007F060000E5000000000900000007000000000000DB0700008E060000EB000000000A000000070000000000007F0800009D060000F0000000000B0000000700000000000020090000AB060000F4000000000C00000007000000000000C0090000B9060000F8000000000D000000070000000000005F0A0000C7060000FB000000000E00000007000000000000FB0A0000D4060000FE000000000F00000007000000000000960B0000E106000000010000001000000007000000000000300C0000ED0600000101000000000000000800000000000013020000C6060000B6000000000100000008000000000000C5020000D9060000C000000000020000000800000000000076030000EC060000CB00000000030000000800000000000025040000FE060000D4000000000400000008000000000000D304000010070000DD0000000005000000080000000000007F05000022070000E50000000006000000080000000000002906000033070000ED000000000700000008000000000000D106000043070000F40000000008000000080000000000007807000054070000FA0000000009000000080000000000001D0800006307000000010000000A00000008000000000000C10800007307000005010000000B00000008000000000000620900008207000009010000000C00000008000000000000020A0000910700000D010000000D00000008000000000000A10A00009F07000010010000000E000000080000000000003E0B0000AD07000013010000000F00000008000000000000D90B0000BA07000015010000001000000008000000000000720C0000C7070000160100000000000000090000000000005302000093070000CC00000000010000000900000000000006030000A7070000D7000000000200000009000000000000B7030000BB070000E100000000030000000900000000000066040000CE070000EA00000000040000000900000000000014050000E0070000F3000000000500000009000000000000C0050000F2070000FB0000000006000000090000000000006A0600000408000003010000000700000009000000000000120700001508000009010000000800000009000000000000B907000026080000100100000009000000090000000000005F0800003608000015010000000A0000000900000000000002090000460800001A010000000B00000009000000000000A4090000560800001E010000000C00000009000000000000440A00006508000022010000000D00000009000000000000E20A00007408000025010000000E000000090000000000007F0B00008208000027010000000F000000090000000000001A0C00009008000029010000001000000009000000000000B40C00009E0800002A01000000000000000A000000000000940200005F080000E200000000010000000A0000000000004603000073080000ED00000000020000000A000000000000F703000087080000F700000000030000000A000000000000A70400009B0800000001000000040000000A00000000000054050000AE0800000901000000050000000A00000000000000060000C00800001101000000060000000A000000000000AB060000D30800001801000000070000000A00000000000053070000E40800001F01000000080000000A000000000000FA070000F60800002501000000090000000A0000000000009F080000070900002A010000000A0000000A00000000000043090000170900002F010000000B0000000A000000000000E50900002709000033010000000C0000000A000000000000850A00003709000036010000000D0000000A000000000000240B00004709000039010000000E0000000A000000000000C10B0000550900003B010000000F0000000A0000000000005C0C0000640900003D01000000100000000A000000000000F50C0000720900003E01000000000000000B000000000000D402000027090000F800000000010000000B000000000000860300003C0900000301000000020000000B00000000000037040000510900000C01000000030000000B000000000000E7040000650900001501000000040000000B00000000000095050000790900001E01000000050000000B000000000000410600008C0900002601000000060000000B000000000000EB0600009F0900002D01000000070000000B00000000000094070000B10900003401000000080000000B0000000000003B080000C30900003A01000000090000000B000000000000E0080000D50900003F010000000A0000000B00000000000084090000E609000043010000000B0000000B000000000000260A0000F609000047010000000C0000000B000000000000C60A0000070A00004B010000000D0000000B000000000000650B0000170A00004D010000000E0000000B000000000000010C0000260A00004F010000000F0000000B0000000000009D0C0000350A00005101000000100000000B000000000000360D0000440A00005201000000000000000C00000000000013030000EE0900000E01000000010000000C000000000000C6030000030A00001801000000020000000C00000000000077040000180A00002201000000030000000C000000000000270500002D0A00002B01000000040000000C000000000000D4050000410A00003301000000050000000C00000000000081060000550A00003B01000000060000000C0000000000002B070000680A00004201000000070000000C000000000000D40700007B0A00004801000000080000000C0000000000007B0800008E0A00004E01000000090000000C00000000000020090000A00A000053010000000A0000000C000000000000C4090000B20A000058010000000B0000000C000000000000660A0000C30A00005C010000000C0000000C000000000000060B0000D40A00005F010000000D0000000C000000000000A50B0000E40A000061010000000E0000000C000000000000420C0000F40A000063010000000F0000000C000000000000DD0C0000040B00006501000000100000000C000000000000770D0000130B00006501000000000000000D00000000000052030000B10A00002301000000010000000D00000000000005040000C70A00002E01000000020000000D000000000000B6040000DD0A00003701000000030000000D00000000000066050000F20A00004001000000040000000D00000000000014060000070B00004801000000050000000D000000000000C00600001B0B00005001000000060000000D0000000000006B0700002F0B00005701000000070000000D00000000000013080000430B00005D01000000080000000D000000000000BB080000560B00006301000000090000000D00000000000060090000690B000068010000000A0000000D000000000000040A00007B0B00006C010000000B0000000D000000000000A60A00008D0B000070010000000C0000000D000000000000460B00009E0B000073010000000D0000000D000000000000E50B0000AF0B000075010000000E0000000D000000000000820C0000C00B000077010000000F0000000D0000000000001D0D0000D00B00007801000000100000000D000000000000B70D0000E00B00007901000000000000000E00000000000091030000720B00003901000000010000000E00000000000044040000890B00004301000000020000000E000000000000F50400009F0B00004C01000000030000000E000000000000A5050000B50B00005501000000040000000E00000000000053060000CA0B00005D01000000050000000E000000000000FF060000DF0B00006401000000060000000E000000000000AA070000F40B00006B01000000070000000E00000000000053080000080C00007101000000080000000E000000000000FA0800001B0C00007701000000090000000E0000000000009F0900002F0C00007C010000000A0000000E000000000000430A0000420C000080010000000B0000000E000000000000E50A0000540C000083010000000C0000000E000000000000860B0000660C000086010000000D0000000E000000000000250C0000780C000089010000000E0000000E000000000000C20C0000890C00008A010000000F0000000E0000000000005D0D0000990C00008B01000000100000000E000000000000F70D0000AA0C00008C01000000000000000F000000000000CF030000310C00004E01000000010000000F00000000000082040000480C00005801000000020000000F000000000000340500005F0C00006101000000030000000F000000000000E4050000750C00006A01000000040000000F000000000000920600008B0C00007101000000050000000F0000000000003E070000A10C00007901000000060000000F000000000000E8070000B60C00007F01000000070000000F00000000000091080000CA0C00008501000000080000000F00000000000039090000DF0C00008B01000000090000000F000000000000DE090000F20C00008F010000000A0000000F000000000000820A0000060D000094010000000B0000000F000000000000240B0000190D000097010000000C0000000F000000000000C50B00002B0D00009A010000000D0000000F000000000000640C00003D0D00009C010000000E0000000F000000000000010D00004F0D00009D010000000F0000000F0000000000009D0D0000600D00009E01000000100000000F000000000000360E0000710D00009E0100000000000000100000000000000D040000ED0C000063010000000100000010000000000000C1040000050D00006C010000000200000010000000000000720500001C0D00007601000000030000001000000000000022060000330D00007E010000000400000010000000000000D0060000490D0000860100000005000000100000000000007C0700005F0D00008D01000000060000001000000000000027080000750D000093010000000700000010000000000000D00800008A0D000099010000000800000010000000000000770900009F0D00009F0100000009000000100000000000001D0A0000B30D0000A3010000000A00000010000000000000C10A0000C70D0000A7010000000B00000010000000000000630B0000DB0D0000AA010000000C00000010000000000000040C0000EE0D0000AD010000000D00000010000000000000A30C0000010E0000AF010000000E00000010000000000000400D0000130E0000B0010000000F00000010000000000000DC0D0000250E0000B1010000001000000010000000000000760E0000360E0000B1010000000000000000000000010000070000000A000000D6000000000100000000000000010000BA00000019000000E30000000002000000000000000100006B01000027000000EF0000000003000000000000000100001B02000035000000FB000000000400000000000000010000C90200004300000005010000000500000000000000010000750300005000000010010000000600000000000000010000200400005C00000019010000000700000000000000010000C9040000680000002201000000080000000000000001000070050000740000002A010000000900000000000000010000150600007F00000032010000000A00000000000000010000B90600008A00000039010000000B000000000000000100005B070000950000003F010000000C00000000000000010000FC0700009F00000045010000000D000000000000000100009B080000A80000004A010000000E0000000000000001000038090000B20000004E010000000F00000000000000010000D3090000BB000000520100000010000000000000000100006D0A0000C3000000550100000000000000010000000100004B000000EE000000F0000000000100000001000000010000000100000001000000010000000200000001000000010000B00100000C010000080100000003000000010000000100005F0200001A010000140100000004000000010000000100000D030000280100001E010000000500000001000000010000BA03000036010000280100000006000000010000000100006404000043010000320100000007000000010000000100000D050000500100003B010000000800000001000000010000B50500005C010000430100000009000000010000000100005A060000680100004A010000000A00000001000000010000FE0600007301000051010000000B00000001000000010000A00700007E01000057010000000C0000000100000001000041080000890100005D010000000D00000001000000010000E00800009301000062010000000E000000010000000100007D0900009D01000066010000000F00000001000000010000180A0000A601000069010000001000000001000000010000B20A0000AF0100006C0100000000000000020000000100008F000000CE0100000901000000010000000200000001000042010000DE01000016010000000200000002000000010000F4010000ED01000021010000000300000002000000010000A3020000FC0100002D010000000400000002000000010000510300000B02000037010000000500000002000000010000FE0300001902000041010000000600000002000000010000A9040000270200004A010000000700000002000000010000520500003402000053010000000800000002000000010000F9050000410200005B0100000009000000020000000100009F0600004E02000062010000000A00000002000000010000430700005A02000069010000000B00000002000000010000E5070000650200006F010000000C00000002000000010000850800007002000074010000000D00000002000000010000240900007B02000079010000000E00000002000000010000C2090000860200007D010000000F000000020000000100005D0A00009002000081010000001000000002000000010000F70A00009902000084010000000000000003000000010000D3000000AC0200002201000000010000000300000001000086010000BD0200002E01000000020000000300000001000037020000CD0200003A010000000300000003000000010000E7020000DC0200004501000000040000000300000001000095030000EB0200005001000000050000000300000001000042040000FA02000059010000000600000003000000010000EC040000080300006301000000070000000300000001000095050000160300006B0100000008000000030000000100003D0600002403000073010000000900000003000000010000E3060000310300007A010000000A00000003000000010000870700003D03000081010000000B00000003000000010000290800004A03000087010000000C00000003000000010000CA080000550300008C010000000D00000003000000010000690900006103000091010000000E00000003000000010000060A00006C03000095010000000F00000003000000010000A20A000076030000980100000010000000030000000100003C0B0000800300009B01000000000000000400000001000015010000880300003B010000000100000004000000010000C901000099030000470100000002000000040000000100007A020000A9030000530100000003000000040000000100002A030000B90300005E010000000400000004000000010000D8030000C90300006801000000050000000400000001000085040000D90300007201000000060000000400000001000030050000E70300007B010000000700000004000000010000D9050000F60300008301000000080000000400000001000080060000040400008B010000000900000004000000010000260700001204000092010000000A00000004000000010000CA0700001F04000098010000000B000000040000000100006D0800002C0400009E010000000C000000040000000100000E09000038040000A3010000000D00000004000000010000AD09000044040000A8010000000E000000040000000100004A0A00004F040000AC010000000F00000004000000010000E60A00005B040000AF010000001000000004000000010000800B000065040000B20100000000000000050000000100005801000061040000530100000001000000050000000100000B0200007204000060010000000200000005000000010000BD020000830400006B0100000003000000050000000100006D03000094040000760100000004000000050000000100001B040000A504000080010000000500000005000000010000C8040000B40400008A01000000060000000500000001000073050000C4040000920100000007000000050000000100001C060000D30400009B010000000800000005000000010000C4060000E2040000A201000000090000000500000001000069070000F0040000A9010000000A000000050000000100000E080000FE040000B0010000000B00000005000000010000B00800000B050000B5010000000C000000050000000100005109000018050000BA010000000D00000005000000010000F009000024050000BF010000000E000000050000000100008E0A000030050000C3010000000F00000005000000010000290B00003C050000C6010000001000000005000000010000C30B000047050000C80100000000000000060000000100009A010000370500006C0100000001000000060000000100004E0200004905000078010000000200000006000000010000FF0200005B05000083010000000300000006000000010000AF0300006C0500008E0100000004000000060000000100005E0400007D050000980100000005000000060000000100000A0500008E050000A1010000000600000006000000010000B50500009E050000AA0100000007000000060000000100005F060000AD050000B201000000080000000600000001000006070000BD050000BA010000000900000006000000010000AC070000CB050000C1010000000A0000000600000001000050080000DA050000C7010000000B00000006000000010000F3080000E8050000CC010000000C0000000600000001000094090000F5050000D1010000000D00000006000000010000330A000002060000D6010000000E00000006000000010000D10A00000F060000D9010000000F000000060000000100006D0B00001B060000DC010000001000000006000000010000070C000027060000DE010000000000000007000000010000DC0100000B060000840100000001000000070000000100008F0200001E0600009001000000020000000700000001000041030000300600009B010000000300000007000000010000F103000042060000A6010000000400000007000000010000A004000053060000AF0100000005000000070000000100004C05000064060000B9010000000600000007000000010000F805000075060000C1010000000700000007000000010000A106000085060000C90100000008000000070000000100004907000095060000D1010000000900000007000000010000EF070000A4060000D8010000000A0000000700000001000093080000B3060000DE010000000B0000000700000001000036090000C2060000E3010000000C00000007000000010000D7090000D0060000E8010000000D00000007000000010000760A0000DE060000EC010000000E00000007000000010000140B0000EB060000F0010000000F00000007000000010000AF0B0000F8060000F20100000010000000070000000100004A0C000004070000F50100000000000000080000000100001D020000DC0600009C010000000100000008000000010000D1020000F0060000A70100000002000000080000000100008303000003070000B30100000003000000080000000100003304000015070000BD010000000400000008000000010000E104000027070000C70100000005000000080000000100008E05000039070000D0010000000600000008000000010000390600004A070000D9010000000700000008000000010000E30600005B070000E00100000008000000080000000100008B0700006B070000E8010000000900000008000000010000310800007B070000EE010000000A00000008000000010000D50800008A070000F4010000000B00000008000000010000780900009A070000FA010000000C00000008000000010000190A0000A8070000FE010000000D00000008000000010000B80A0000B707000002020000000E00000008000000010000560B0000C407000006020000000F00000008000000010000F20B0000D2070000080200000010000000080000000100008C0C0000DF0700000B0200000000000000090000000100005E020000AB070000B301000000010000000900000001000012030000BF070000BF010000000200000009000000010000C4030000D3070000CA01000000030000000900000001000074040000E6070000D401000000040000000900000001000023050000F8070000DE010000000500000009000000010000D00500000A080000E70100000006000000090000000100007B0600001C080000F0010000000700000009000000010000240700002E080000F7010000000800000009000000010000CC0700003E080000FE010000000900000009000000010000720800004F08000005020000000A00000009000000010000170900005F0800000B020000000B00000009000000010000BA0900006F08000010020000000C000000090000000100005B0A00007E08000014020000000D00000009000000010000FA0A00008D08000018020000000E00000009000000010000980B00009B0800001C020000000F00000009000000010000340C0000A90800001E020000001000000009000000010000CE0C0000B70800002002000000000000000A0000000100009F02000078080000CB01000000010000000A000000010000530300008C080000D601000000020000000A00000001000005040000A0080000E101000000030000000A000000010000B5040000B4080000EB01000000040000000A00000001000063050000C7080000F501000000050000000A00000001000010060000DA080000FE01000000060000000A000000010000BC060000EC0800000602000000070000000A00000001000065070000FE0800000E02000000080000000A0000000100000D0800000F0900001502000000090000000A000000010000B3080000200900001B020000000A0000000A000000010000580900003109000021020000000B0000000A000000010000FB0900004109000026020000000C0000000A0000000100009C0A0000510900002A020000000D0000000A0000000100003C0B0000610900002E020000000E0000000A000000010000D90B00007009000031020000000F0000000A000000010000760C00007E0900003402000000100000000A000000010000100D00008C0900003602000000000000000B000000010000DF02000041090000E201000000010000000B0000000100009303000056090000ED01000000020000000B000000010000450400006B090000F801000000030000000B000000010000F50400007F0900000202000000040000000B000000010000A4050000930900000C02000000050000000B00000001000051060000A60900001502000000060000000B000000010000FC060000B90900001D02000000070000000B000000010000A6070000CC0900002402000000080000000B0000000100004E080000DE0900002B02000000090000000B000000010000F4080000EF09000031020000000A0000000B00000001000099090000010A000037020000000B0000000B0000000100003C0A0000110A00003C020000000C0000000B000000010000DD0A0000220A000040020000000D0000000B0000000100007D0B0000320A000044020000000E0000000B0000000100001B0C0000410A000047020000000F0000000B000000010000B70C0000500A00004902000000100000000B000000010000510D00005F0A00004B02000000000000000C0000000100001F030000080A0000F901000000010000000C000000010000D30300001E0A00000402000000020000000C00000001000085040000330A00000F02000000030000000C00000001000035050000480A00001902000000040000000C000000010000E40500005C0A00002202000000050000000C00000001000091060000700A00002B02000000060000000C0000000100003D070000840A00003302000000070000000C000000010000E6070000970A00003A02000000080000000C0000000100008E080000A90A00004102000000090000000C00000001000035090000BC0A000047020000000A0000000C000000010000D9090000CD0A00004D020000000B0000000C0000000100007C0A0000DF0A000052020000000C0000000C0000000100001E0B0000F00A000056020000000D0000000C000000010000BD0B0000000B000059020000000E0000000C0000000100005B0C0000110B00005C020000000F0000000C000000010000F80C0000200B00005E02000000100000000C000000010000920D0000300B00006002000000000000000D0000000100005E030000CD0A00001002000000010000000D00000001000012040000E30A00001B02000000020000000D000000010000C4040000F90A00002602000000030000000D000000010000750500000E0B00002F02000000040000000D00000001000024060000230B00003902000000050000000D000000010000D1060000380B00004102000000060000000D0000000100007C0700004C0B00004902000000070000000D000000010000260800005F0B00005002000000080000000D000000010000CE080000730B00005702000000090000000D00000001000075090000850B00005D020000000A0000000D0000000100001A0A0000980B000062020000000B0000000D000000010000BD0A0000AA0B000067020000000C0000000D0000000100005E0B0000BB0B00006B020000000D0000000D000000010000FE0B0000CC0B00006E020000000E0000000D0000000100009C0C0000DD0B000071020000000F0000000D000000010000380D0000ED0B00007302000000100000000D000000010000D30D0000FD0B00007502000000000000000E0000000100009D0300008F0B00002602000000010000000E00000001000051040000A60B00003102000000020000000E00000001000003050000BC0B00003C02000000030000000E000000010000B4050000D20B00004602000000040000000E00000001000063060000E80B00004F02000000050000000E00000001000010070000FD0B00005702000000060000000E000000010000BC070000110C00005F02000000070000000E00000001000066080000250C00006602000000080000000E0000000100000E090000390C00006C02000000090000000E000000010000B40900004D0C000072020000000A0000000E000000010000590A0000600C000078020000000B0000000E000000010000FC0A0000720C00007C020000000C0000000E0000000100009E0B0000840C000080020000000D0000000E0000000100003E0C0000960C000083020000000E0000000E000000010000DC0C0000A70C000086020000000F0000000E000000010000780D0000B80C00008802000000100000000E000000010000130E0000C90C00008902000000000000000F000000010000DC0300004F0C00003D02000000010000000F00000001000090040000660C00004802000000020000000F000000010000420500007D0C00005202000000030000000F000000010000F3050000930C00005C02000000040000000F000000010000A2060000A90C00006402000000050000000F0000000100004F070000BF0C00006D02000000060000000F000000010000FB070000D40C00007402000000070000000F000000010000A5080000E90C00007B02000000080000000F0000000100004D090000FD0C00008202000000090000000F000000010000F4090000110D000088020000000A0000000F000000010000990A0000250D00008D020000000B0000000F0000000100003C0B0000380D000091020000000C0000000F000000010000DD0B00004B0D000095020000000D0000000F0000000100007D0C00005D0D000098020000000E0000000F0000000100001B0D00006F0D00009B020000000F0000000F000000010000B80D0000800D00009C02000000100000000F000000010000530E0000910D00009E0200000000000000100000000100001A0400000C0D000053020000000100000010000000010000CE040000230D00005E020000000200000010000000010000810500003B0D00006802000000030000001000000001000031060000520D000071020000000400000010000000010000E0060000690D00007A0200000005000000100000000100008E0700007F0D00008202000000060000001000000001000039080000950D00008A020000000700000010000000010000E3080000AA0D0000910200000008000000100000000100008C090000BF0D000097020000000900000010000000010000320A0000D40D00009D020000000A00000010000000010000D70A0000E80D0000A2020000000B000000100000000100007B0B0000FB0D0000A6020000000C000000100000000100001C0C00000F0E0000AA020000000D00000010000000010000BC0C0000210E0000AD020000000E000000100000000100005B0D0000340E0000AF020000000F00000010000000010000F70D0000460E0000B1020000001000000010000000010000920E0000580E0000B20200000000000000000000000200001000000019000000AF010000000100000000000000020000C400000027000000BC0100000002000000000000000200007601000036000000C90100000003000000000000000200002602000043000000D6010000000400000000000000020000D502000051000000E1010000000500000000000000020000820300005E000000EC0100000006000000000000000200002E0400006A000000F6010000000700000000000000020000D80400007700000000020000000800000000000000020000800500008200000009020000000900000000000000020000260600008E00000012020000000A00000000000000020000CB0600009900000019020000000B000000000000000200006E070000A300000020020000000C0000000000000002000010080000AD00000027020000000D00000000000000020000AF080000B70000002D020000000E000000000000000200004D090000C000000032020000000F00000000000000020000EA090000C900000036020000001000000000000000020000840A0000D10000003A02000000000000000100000002000054000000FD000000CA010000000100000001000000020000080100000C010000D7010000000200000001000000020000BA0100001B010000E40100000003000000010000000200006B02000029010000F00100000004000000010000000200001A03000037010000FB010000000500000001000000020000C703000045010000060200000006000000010000000200007304000052010000100200000007000000010000000200001D0500005F0100001A020000000800000001000000020000C50500006B010000230200000009000000010000000200006B060000770100002B020000000A00000001000000020000100700008301000033020000000B00000001000000020000B30700008E0100003A020000000C00000001000000020000550800009801000040020000000D00000001000000020000F5080000A301000046020000000E0000000100000002000093090000AC0100004B020000000F000000010000000200002F0A0000B60100004F020000001000000001000000020000CA0A0000BF0100005302000000000000000200000002000098000000DE010000E40100000001000000020000000200004C010000EE010000F1010000000200000002000000020000000200000002000000020000000300000002000000020000AF0200000D0200000A0200000004000000020000000200005E0300001B020000150200000005000000020000000200000B0400002902000020020000000600000002000000020000B7040000370200002A02000000070000000200000002000061050000450200003402000000080000000200000002000009060000510200003D020000000900000002000000020000B00600005E02000045020000000A00000002000000020000550700006A0200004C020000000B00000002000000020000F80700007602000053020000000C000000020000000200009A0800008102000059020000000D000000020000000200003A0900008C0200005F020000000E00000002000000020000D80900009602000064020000000F00000002000000020000740A0000A0020000680200000010000000020000000200000F0B0000AA0200006C020000000000000003000000020000DC000000BE020000FE01000000010000000300000002000090010000CE0200000C02000000020000000300000002000042020000DE02000018020000000300000003000000020000F3020000EE02000024020000000400000003000000020000A2030000FD0200002F0200000005000000030000000200004F0400000C0300003A020000000600000003000000020000FB0400001A03000044020000000700000003000000020000A5050000280300004D0200000008000000030000000200004E0600003503000056020000000900000003000000020000F4060000420300005E020000000A00000003000000020000990700004F03000065020000000B000000030000000200003D0800005B0300006C020000000C00000003000000020000DE0800006703000072020000000D000000030000000200007E0900007203000078020000000E000000030000000200001D0A00007D0300007D020000000F00000003000000020000B90A00008803000081020000001000000003000000020000540B000092030000840200000000000000040000000200001F0100009A03000018020000000100000004000000020000D3010000AB0300002502000000020000000400000002000086020000BC0300003202000000030000000400000002000036030000CC0300003E020000000400000004000000020000E6030000DC0300004902000000050000000400000002000093040000EB030000530200000006000000040000000200003F050000FA0300005D020000000700000004000000020000E9050000080400006702000000080000000400000002000091060000160400006F020000000900000004000000020000380700002404000077020000000A00000004000000020000DD070000310400007E020000000B00000004000000020000810800003E04000085020000000C00000004000000020000220900004B0400008B020000000D00000004000000020000C20900005704000090020000000E00000004000000020000610A00006204000095020000000F00000004000000020000FD0A00006D04000099020000001000000004000000020000980B0000780400009D02000000000000000500000002000062010000740400003202000000010000000500000002000016020000860400003F020000000200000005000000020000C8020000970400004B02000000030000000500000002000079030000A80400005702000000040000000500000002000029040000B804000062020000000500000005000000020000D6040000C80400006D02000000060000000500000002000082050000D7040000760200000007000000050000000200002C060000E604000080020000000800000005000000020000D5060000F5040000880200000009000000050000000200007C0700000305000090020000000A00000005000000020000210800001105000097020000000B00000005000000020000C40800001F0500009E020000000C00000005000000020000660900002C050000A4020000000D00000005000000020000060A000038050000A9020000000E00000005000000020000A50A000044050000AD020000000F00000005000000020000410B000050050000B1020000001000000005000000020000DC0B00005B050000B5020000000000000006000000020000A40100004B0500004C020000000100000006000000020000580200005E050000590200000002000000060000000200000B0300006F05000065020000000300000006000000020000BC03000081050000700200000004000000060000000200006B040000920500007B02000000050000000600000002000019050000A205000086020000000600000006000000020000C5050000B20500008F0200000007000000060000000200006F060000C20500009802000000080000000600000002000018070000D1050000A1020000000900000006000000020000BF070000E0050000A8020000000A0000000600000002000064080000EE050000B0020000000B0000000600000002000007090000FC050000B6020000000C00000006000000020000A90900000A060000BC020000000D000000060000000200004A0A000017060000C1020000000E00000006000000020000E80A000024060000C5020000000F00000006000000020000850B000030060000C9020000001000000006000000020000200C00003C060000CD020000000000000007000000020000E601000020060000650200000001000000070000000200009A02000033060000720200000002000000070000000200004D030000450600007E020000000300000007000000020000FE0300005706000089020000000400000007000000020000AE04000069060000940200000005000000070000000200005B0500007A0600009F020000000600000007000000020000070600008B060000A8020000000700000007000000020000B20600009B060000B10200000008000000070000000200005A070000AB060000B902000000090000000700000002000001080000BA060000C1020000000A00000007000000020000A7080000C9060000C8020000000B000000070000000200004A090000D8060000CE020000000C00000007000000020000EC090000E6060000D4020000000D000000070000000200008C0A0000F4060000D9020000000E000000070000000200002B0B000001070000DD020000000F00000007000000020000C80B00000E070000E1020000001000000007000000020000630C00001A070000E402000000000000000800000002000028020000F30600007E020000000100000008000000020000DC020000060700008B0200000002000000080000000200008F0300001907000097020000000300000008000000020000400400002C070000A2020000000400000008000000020000EF0400003E070000AD0200000005000000080000000200009D0500004F070000B70200000006000000080000000200004906000061070000C1020000000700000008000000020000F406000071070000C90200000008000000080000000200009D07000082070000D20200000009000000080000000200004408000092070000D9020000000A00000008000000020000E9080000A1070000E0020000000B000000080000000200008D090000B1070000E6020000000C000000080000000200002F0A0000BF070000EC020000000D00000008000000020000CF0A0000CE070000F1020000000E000000080000000200006E0B0000DC070000F5020000000F000000080000000200000B0C0000E9070000F9020000001000000008000000020000A60C0000F6070000FC02000000000000000900000002000069020000C2070000970200000001000000090000000200001D030000D6070000A4020000000200000009000000020000D0030000EA070000B002000000030000000900000002000081040000FD070000BB0200000004000000090000000200003105000010080000C6020000000500000009000000020000DF05000022080000CF0200000006000000090000000200008B06000034080000D90200000007000000090000000200003607000045080000E2020000000800000009000000020000DE07000056080000EA0200000009000000090000000200008508000067080000F1020000000A000000090000000200002B09000077080000F8020000000B00000009000000020000CF09000087080000FE020000000C00000009000000020000710A00009608000003030000000D00000009000000020000110B0000A508000008030000000E00000009000000020000B00B0000B40800000C030000000F000000090000000200004D0C0000C208000010030000001000000009000000020000E80C0000CF0800001303000000000000000A000000020000AA02000090080000B002000000010000000A0000000200005E030000A4080000BC02000000020000000A00000002000011040000B8080000C802000000030000000A000000020000C2040000CC080000D302000000040000000A00000002000072050000DF080000DE02000000050000000A00000002000020060000F2080000E802000000060000000A000000020000CC06000005090000F102000000070000000A0000000200007707000017090000F902000000080000000A00000002000020080000280900000103000000090000000A000000020000C70800003909000009030000000A0000000A0000000200006C0900004A0900000F030000000B0000000A000000020000100A00005B09000015030000000C0000000A000000020000B30A00006A0900001B030000000D0000000A000000020000530B00007A0900001F030000000E0000000A000000020000F20B00008909000024030000000F0000000A0000000200008F0C0000980900002703000000100000000A0000000200002A0D0000A60900002A03000000000000000B000000020000EA0200005A090000C802000000010000000B0000000200009F03000070090000D502000000020000000B0000000200005204000084090000E002000000030000000B0000000200000305000099090000EB02000000040000000B000000020000B3050000AC090000F602000000050000000B00000002000061060000C00900000003000000060000000B0000000200000D070000D30900000903000000070000000B000000020000B8070000E50900001103000000080000000B00000002000061080000F80900001903000000090000000B00000002000008090000090A000020030000000A0000000B000000020000AE0900001B0A000027030000000B0000000B000000020000520A00002C0A00002D030000000C0000000B000000020000F40A00003C0A000032030000000D0000000B000000020000940B00004C0A000037030000000E0000000B000000020000330C00005C0A00003A030000000F0000000B000000020000D00C00006B0A00003E03000000100000000B0000000200006C0D00007A0A00004003000000000000000C0000000200002A030000230A0000E102000000010000000C000000020000DF030000380A0000ED02000000020000000C000000020000920400004E0A0000F802000000030000000C00000002000043050000620A00000303000000040000000C000000020000F3050000770A00000E03000000050000000C000000020000A10600008B0A00001703000000060000000C0000000200004E0700009E0A00002003000000070000000C000000020000F8070000B20A00002903000000080000000C000000020000A1080000C40A00003003000000090000000C00000002000049090000D70A000037030000000A0000000C000000020000EE090000E90A00003E030000000B0000000C000000020000920A0000FA0A000044030000000C0000000C000000020000350B00000B0B000049030000000D0000000C000000020000D50B00001C0B00004D030000000E0000000C000000020000740C00002C0B000051030000000F0000000C000000020000120D00003C0B00005403000000100000000C000000020000AD0D00004B0B00005703000000000000000D0000000200006A030000E80A0000F902000000010000000D0000000200001E040000FE0A00000503000000020000000D000000020000D2040000140B00001003000000030000000D000000020000830500002A0B00001B03000000040000000D000000020000330600003F0B00002503000000050000000D000000020000E1060000530B00002F03000000060000000D0000000200008E070000680B00003803000000070000000D000000020000380800007B0B00004003000000080000000D000000020000E20800008F0B00004803000000090000000D00000002000089090000A20B00004F030000000A0000000D0000000200002F0A0000B40B000055030000000B0000000D000000020000D30A0000C60B00005B030000000C0000000D000000020000750B0000D80B000060030000000D0000000D000000020000160C0000E90B000064030000000E0000000D000000020000B50C0000FA0B000068030000000F0000000D000000020000520D00000A0C00006B03000000100000000D000000020000EE0D00001A0C00006D03000000000000000E000000020000A9030000AB0B00001003000000010000000E0000000200005E040000C20B00001C03000000020000000E00000002000011050000D90B00002803000000030000000E000000020000C3050000EF0B00003303000000040000000E00000002000073060000040C00003D03000000050000000E00000002000021070000190C00004603000000060000000E000000020000CD0700002E0C00004F03000000070000000E00000002000078080000430C00005703000000080000000E00000002000021090000560C00005F03000000090000000E000000020000C90900006A0C000065030000000A0000000E0000000200006F0A00007D0C00006C030000000B0000000E000000020000130B0000900C000071030000000C0000000E000000020000B50B0000A20C000076030000000D0000000E000000020000560C0000B40C00007A030000000E0000000E000000020000F50C0000C50C00007E030000000F0000000E000000020000930D0000D60C00008103000000100000000E0000000200002E0E0000E70C00008303000000000000000F000000020000E80300006C0C00002803000000010000000F0000000200009D040000830C00003403000000020000000F000000020000500500009A0C00003F03000000030000000F00000002000002060000B10C00004A03000000040000000F000000020000B2060000C70C00005403000000050000000F00000002000060070000DD0C00005D03000000060000000F0000000200000D080000F20C00006603000000070000000F000000020000B8080000070D00006E03000000080000000F000000020000610900001C0D00007503000000090000000F000000020000080A0000300D00007C030000000A0000000F000000020000AE0A0000430D000082030000000B0000000F000000020000530B0000570D000088030000000C0000000F000000020000F50B00006A0D00008C030000000D0000000F000000020000960C00007C0D000091030000000E0000000F000000020000350D00008E0D000094030000000F0000000F000000020000D30D0000A00D00009703000000100000000F0000000200006E0E0000B10D000099030000000000000010000000020000260400002A0D00003F030000000100000010000000020000DB040000420D00004B0300000002000000100000000200008F050000590D00005603000000030000001000000002000040060000710D000061030000000400000010000000020000F0060000870D00006B0300000005000000100000000200009F0700009E0D0000740300000006000000100000000200004B080000B40D00007D030000000700000010000000020000F6080000C90D000084030000000800000010000000020000A0090000DE0D00008C030000000900000010000000020000470A0000F30D000092030000000A00000010000000020000ED0A0000070E000098030000000B00000010000000020000920B00001B0E00009E030000000C00000010000000020000340C00002F0E0000A2030000000D00000010000000020000D50C0000420E0000A7030000000E00000010000000020000750D0000540E0000AA030000000F00000010000000020000120E0000660E0000AD030000001000000010000000020000AE0E0000780E0000AF030000000000000000000000030000180000002600000084020000000100000000000000030000CC00000035000000920200000002000000000000000300008001000043000000A00200000003000000000000000300003102000051000000AD020000000400000000000000030000E10200005F000000B90200000005000000000000000300008F0300006C000000C50200000006000000000000000300003B04000078000000D0020000000700000000000000030000E604000084000000DA0200000008000000000000000300008F05000090000000E4020000000900000000000000030000370600009B000000ED020000000A00000000000000030000DC060000A6000000F6020000000B0000000000000003000080070000B1000000FE020000000C0000000000000003000023080000BB00000005030000000D00000000000000030000C4080000C40000000C030000000E0000000000000003000063090000CE00000012030000000F00000000000000030000000A0000D6000000170300000010000000000000000300009C0A0000DF0000001C0300000000000000010000000300005C0000000C010000A0020000000100000001000000030000110100001B010000AE020000000200000001000000030000C40100002A010000BB0200000003000000010000000300007602000038010000C80200000004000000010000000300002603000046010000D5020000000500000001000000030000D403000054010000E00200000006000000010000000300008104000061010000EB0200000007000000010000000300002B0500006E010000F6020000000800000001000000030000D50500007A010000FF0200000009000000010000000300007C0600008601000009030000000A00000001000000030000220700009101000011030000000B00000001000000030000C60700009C01000019030000000C0000000100000003000068080000A701000020030000000D0000000100000003000009090000B101000026030000000E00000001000000030000A8090000BB0100002C030000000F00000001000000030000460A0000C501000032030000001000000001000000030000E10A0000CD01000036030000000000000002000000030000A0000000EE010000BB02000000010000000200000003000055010000FE010000C9020000000200000002000000030000090200000D020000D7020000000300000002000000030000BA0200001C020000E40200000004000000020000000300006A0300002B020000F00200000005000000020000000300001904000039020000FC020000000600000002000000030000C5040000470200000703000000070000000200000003000070050000540200001103000000080000000200000003000019060000610200001A030000000900000002000000030000C10600006E02000023030000000A00000002000000030000670700007A0200002C030000000B000000020000000300000B0800008602000033030000000C00000002000000030000AE080000910200003B030000000D000000020000000300004E0900009C02000041030000000E00000002000000030000EE090000A602000047030000000F000000020000000300008B0A0000B00200004C030000001000000002000000030000270B0000BA02000050030000000000000003000000030000E4000000CE020000D702000000010000000300000003000099010000DF020000E50200000002000000030000000300004D020000EF020000F2020000000300000003000000030000000300000003000000030000000400000003000000030000AE0300000E0300000B0300000005000000030000000300005D0400001C030000170300000006000000030000000300000A0500002B03000021030000000700000003000000030000B5050000390300002C0300000008000000030000000300005E060000460300003503000000090000000300000003000005070000530300003E030000000A00000003000000030000AB0700006003000046030000000B00000003000000030000500800006C0300004E030000000C00000003000000030000F20800007803000055030000000D0000000300000003000093090000830300005B030000000E00000003000000030000320A00008E03000061030000000F00000003000000030000D00A000099030000660300000010000000030000000300006C0B0000A30300006A03000000000000000400000003000028010000AC030000F2020000000100000004000000030000DD010000BD0300000003000000020000000400000003000090020000CD0300000D03000000030000000400000003000042030000DE0300001A030000000400000004000000030000F2030000ED03000026030000000500000004000000030000A1040000FD030000310300000006000000040000000300004D0500000C0400003C030000000700000004000000030000F80500001A04000046030000000800000004000000030000A206000028040000500300000009000000040000000300004A0700003604000059030000000A00000004000000030000F00700004304000061030000000B00000004000000030000940800005004000068030000000C00000004000000030000370900005D0400006F030000000D00000004000000030000D80900006904000075030000000E00000004000000030000770A0000740400007B030000000F00000004000000030000150B00007F04000080030000001000000004000000030000B10B00008A040000840300000000000000050000000300006B010000870400000D03000000010000000500000003000020020000980400001B030000000200000005000000030000D3020000AA0400002803000000030000000500000003000085030000BA0400003503000000040000000500000003000036040000CB04000041030000000500000005000000030000E4040000DB0400004C03000000060000000500000003000091050000EA040000570300000007000000050000000300003C060000F904000061030000000800000005000000030000E6060000080500006A0300000009000000050000000300008D0700001605000073030000000A0000000500000003000033080000240500007B030000000B00000005000000030000D80800003205000082030000000C000000050000000300007B0900003F05000089030000000D000000050000000300001C0A00004B0500008F030000000E00000005000000030000BB0A00005805000095030000000F00000005000000030000590B00006305000099030000001000000005000000030000F50B00006F0500009E030000000000000006000000030000AD0100005F05000028030000000100000006000000030000630200007105000036030000000200000006000000030000160300008305000043030000000300000006000000030000C8030000950500004F03000000040000000600000003000078040000A60500005B03000000050000000600000003000027050000B605000066030000000600000006000000030000D4050000C6050000710300000007000000060000000300007F060000D60500007B03000000080000000600000003000029070000E505000084030000000900000006000000030000D1070000F40500008D030000000A00000006000000030000770800000306000095030000000B000000060000000300001B090000110600009C030000000C00000006000000030000BE0900001E060000A3030000000D000000060000000300005F0A00002C060000A9030000000E00000006000000030000FF0A000038060000AE030000000F000000060000000300009D0B000045060000B3030000001000000006000000030000390C000051060000B7030000000000000007000000030000EF0100003506000043030000000100000007000000030000A50200004806000050030000000200000007000000030000590300005A0600005D0300000003000000070000000300000B0400006C0600006A030000000400000007000000030000BB0400007E060000750300000005000000070000000300006A0500008F0600008103000000060000000700000003000017060000A00600008B030000000700000007000000030000C2060000B0060000950300000008000000070000000300006C070000C00600009E03000000090000000700000003000014080000CF060000A6030000000A00000007000000030000BA080000DF060000AE030000000B000000070000000300005E090000ED060000B6030000000C00000007000000030000010A0000FB060000BC030000000D00000007000000030000A30A000009070000C2030000000E00000007000000030000420B000017070000C7030000000F00000007000000030000E00B000024070000CC0300000010000000070000000300007C0C000030070000D003000000000000000800000003000031020000080700005D030000000100000008000000030000E70200001C0700006B0300000002000000080000000300009B0300002F070000780300000003000000080000000300004D0400004107000084030000000400000008000000030000FD040000540700008F030000000500000008000000030000AC050000650700009A0300000006000000080000000300005906000077070000A50300000007000000080000000300000407000088070000AF030000000800000008000000030000AE07000098070000B803000000090000000800000003000056080000A8070000C0030000000A00000008000000030000FC080000B8070000C8030000000B00000008000000030000A1090000C7070000CF030000000C00000008000000030000440A0000D6070000D5030000000D00000008000000030000E50A0000E4070000DB030000000E00000008000000030000850B0000F2070000E1030000000F00000008000000030000230C000000080000E5030000001000000008000000030000BF0C00000D080000E903000000000000000900000003000073020000D90700007703000000010000000900000003000028030000ED07000085030000000200000009000000030000DC03000001080000910300000003000000090000000300008E040000140800009E0300000004000000090000000300003F05000027080000A9030000000500000009000000030000EE05000039080000B40300000006000000090000000300009B0600004B080000BE030000000700000009000000030000460700005C080000C8030000000800000009000000030000F00700006E080000D1030000000900000009000000030000980800007E080000D9030000000A000000090000000300003F0900008F080000E1030000000B00000009000000030000E30900009E080000E8030000000C00000009000000030000860A0000AE080000EF030000000D00000009000000030000280B0000BD080000F4030000000E00000009000000030000C80B0000CB080000F9030000000F00000009000000030000660C0000D9080000FE030000001000000009000000030000020D0000E70800000204000000000000000A000000030000B4020000A70800009103000000010000000A00000003000069030000BC0800009F03000000020000000A0000000300001D040000D0080000AB03000000030000000A000000030000D0040000E4080000B703000000040000000A00000003000080050000F7080000C303000000050000000A0000000300002F0600000A090000CE03000000060000000A000000030000DC0600001D090000D803000000070000000A000000030000880700002F090000E103000000080000000A0000000300003208000041090000EA03000000090000000A000000030000DA08000052090000F2030000000A0000000A0000000300008009000063090000FA030000000B0000000A000000030000250A00007309000001040000000C0000000A000000030000C80A00008309000007040000000D0000000A0000000300006A0B0000930900000D040000000E0000000A0000000300000A0C0000A209000012040000000F0000000A000000030000A80C0000B10900001604000000100000000A000000030000440D0000BF0900001A04000000000000000B000000030000F402000073090000AB03000000010000000B000000030000AA03000088090000B803000000020000000B0000000300005E0400009D090000C503000000030000000B00000003000010050000B1090000D103000000040000000B000000030000C1050000C5090000DC03000000050000000B00000003000070060000D9090000E703000000060000000B0000000300001D070000EC090000F103000000070000000B000000030000C9070000FF090000FA03000000080000000B00000003000073080000110A00000304000000090000000B0000000300001B090000230A00000B040000000A0000000B000000030000C2090000340A000013040000000B0000000B000000030000670A0000450A00001A040000000C0000000B0000000300000A0B0000560A000020040000000D0000000B000000030000AC0B0000660A000025040000000E0000000B0000000300004B0C0000760A00002A040000000F0000000B000000030000EA0C0000850A00002F04000000100000000B000000030000860D0000940A00003204000000000000000C000000030000350300003C0A0000C403000000010000000C000000030000EA030000520A0000D203000000020000000C0000000300009F040000670A0000DE03000000030000000C000000030000510500007C0A0000EA03000000040000000C00000003000002060000910A0000F503000000050000000C000000030000B1060000A50A00000004000000060000000C0000000300005E070000B90A00000A04000000070000000C0000000300000A080000CC0A00001304000000080000000C000000030000B4080000DF0A00001C04000000090000000C0000000300005C090000F10A000024040000000A0000000C000000030000030A0000030B00002B040000000B0000000C000000030000A80A0000150B000032040000000C0000000C0000000300004B0B0000260B000038040000000D0000000C000000030000ED0B0000370B00003E040000000E0000000C0000000300008D0C0000470B000043040000000F0000000C0000000300002B0D0000570B00004704000000100000000C000000030000C80D0000670B00004A04000000000000000D00000003000074030000030B0000DE03000000010000000D0000000300002A040000190B0000EB03000000020000000D000000030000DF0400002F0B0000F703000000030000000D00000003000091050000450B00000304000000040000000D000000030000420600005A0B00000E04000000050000000D000000030000F10600006F0B00001904000000060000000D0000000300009E070000830B00002304000000070000000D0000000300004A080000970B00002C04000000080000000D000000030000F4080000AA0B00003404000000090000000D0000000300009D090000BD0B00003C040000000A0000000D000000030000440A0000D00B000044040000000B0000000D000000030000E90A0000E20B00004A040000000C0000000D0000000300008C0B0000F40B000050040000000D0000000D0000000300002E0C0000050C000056040000000E0000000D000000030000CE0C0000160C00005B040000000F0000000D0000000300006C0D0000270C00005F04000000100000000D000000030000090E0000370C00006204000000000000000E000000030000B4030000C70B0000F703000000010000000E0000000300006A040000DE0B00000404000000020000000E0000000300001E050000F40B00001004000000030000000E000000030000D10500000A0C00001C04000000040000000E00000003000082060000200C00002704000000050000000E00000003000031070000360C00003104000000060000000E000000030000DE0700004A0C00003B04000000070000000E0000000300008A0800005F0C00004404000000080000000E00000003000034090000730C00004D04000000090000000E000000030000DD090000870C000055040000000A0000000E000000030000840A00009A0C00005C040000000B0000000E000000030000290B0000AD0C000062040000000C0000000E000000030000CC0B0000BF0C000068040000000D0000000E0000000300006E0C0000D10C00006E040000000E0000000E0000000300000E0D0000E30C000072040000000F0000000E000000030000AD0D0000F40C00007604000000100000000E000000030000490E0000050D00007A04000000000000000F000000030000F3030000880C00001004000000010000000F000000030000A9040000A00C00001C04000000020000000F0000000300005D050000B70C00002904000000030000000F00000003000010060000CE0C00003404000000040000000F000000030000C1060000E40C00003F04000000050000000F00000003000070070000FA0C00004A04000000060000000F0000000300001E080000100D00005304000000070000000F000000030000CA080000250D00005C04000000080000000F00000003000074090000390D00006504000000090000000F0000000300001D0A00004E0D00006D040000000A0000000F000000030000C40A0000610D000074040000000B0000000F000000030000690B0000750D00007A040000000C0000000F0000000300000C0C0000880D000080040000000D0000000F000000030000AE0C00009A0D000085040000000E0000000F0000000300004E0D0000AC0D00008A040000000F0000000F000000030000ED0D0000BE0D00008E04000000100000000F0000000300008A0E0000D00D00009104000000000000001000000003000032040000470D000028040000000100000010000000030000E80400005F0D0000350400000002000000100000000300009C050000770D0000410400000003000000100000000300004F0600008E0D00004D04000000040000001000000003000000070000A50D000058040000000500000010000000030000AF070000BC0D0000620400000006000000100000000300005D080000D20D00006B04000000070000001000000003000009090000E80D000074040000000800000010000000030000B3090000FD0D00007D0400000009000000100000000300005C0A0000120E000084040000000A00000010000000030000030B0000260E00008B040000000B00000010000000030000A80B00003A0E000092040000000C000000100000000300004C0C00004E0E000098040000000D00000010000000030000EE0C0000610E00009D040000000E000000100000000300008E0D0000740E0000A1040000000F000000100000000300002D0E0000860E0000A5040000001000000010000000030000CA0E0000980E0000A80400000000000000000000000400001F0000003400000055030000000100000000000000040000D500000042000000640300000002000000000000000400008901000050000000720300000003000000000000000400003B0200005E00000080030000000400000000000000040000EC0200006C0000008D0300000005000000000000000400009B030000790000009A0300000006000000000000000400004904000085000000A6030000000700000000000000040000F404000091000000B10300000008000000000000000400009E0500009D000000BC03000000090000000000000004000047060000A8000000C6030000000A00000000000000040000ED060000B3000000CF030000000B0000000000000004000092070000BE000000D8030000000C0000000000000004000036080000C8000000E0030000000D00000000000000040000D7080000D1000000E7030000000E0000000000000004000077090000DB000000EE030000000F00000000000000040000150A0000E3000000F4030000001000000000000000040000B20A0000EC000000F9030000000000000001000000040000640000001A010000720300000001000000010000000400001A0100002901000081030000000200000001000000040000CE010000380100008F03000000030000000100000004000080020000460100009D0300000004000000010000000400003103000054010000AA030000000500000001000000040000E003000062010000B70300000006000000010000000400008E0400006F010000C30300000007000000010000000400003A0500007C010000CE030000000800000001000000040000E405000088010000D80300000009000000010000000400008C06000094010000E2030000000A0000000100000004000033070000A0010000EB030000000B00000001000000040000D8070000AB010000F4030000000C000000010000000400007B080000B5010000FC030000000D000000010000000400001D090000BF01000003040000000E00000001000000040000BD090000C90100000A040000000F000000010000000400005C0A0000D301000010040000001000000001000000040000F80A0000DC01000015040000000000000002000000040000A8000000FD0100008F0300000001000000020000000400005E0100000D0200009E030000000200000002000000040000120200001D020000AC030000000300000002000000040000C50200002C020000BA030000000400000002000000040000760300003A020000C70300000005000000020000000400002504000048020000D3030000000600000002000000040000D304000056020000DF0300000007000000020000000400007F05000064020000EA0300000008000000020000000400002906000071020000F5030000000900000002000000040000D10600007D020000FE030000000A00000002000000040000780700008902000008040000000B000000020000000400001D0800009502000010040000000C00000002000000040000C1080000A002000018040000000D0000000200000004000063090000AB0200001F040000000E00000002000000040000030A0000B502000026040000000F00000002000000040000A10A0000BF0200002C0400000010000000020000000400003E0B0000C902000031040000000000000003000000040000EC000000DE020000AC030000000100000003000000040000A2010000EF020000BB03000000020000000300000004000057020000FF020000C9030000000300000003000000040000090300000F030000D6030000000400000003000000040000BA0300001E030000E30300000005000000030000000400006A0400002D030000F0030000000600000003000000040000170500003B030000FB030000000700000003000000040000C305000049030000060400000008000000030000000400006E060000560300001104000000090000000300000004000016070000640300001A040000000A00000003000000040000BD0700007003000024040000000B00000003000000040000620800007D0300002C040000000C00000003000000040000060900008803000034040000000D00000003000000040000A8090000940300003B040000000E00000003000000040000480A00009F03000041040000000F00000003000000040000E60A0000A903000047040000001000000003000000040000830B0000B40300004D04000000000000000400000004000030010000BD030000C8030000000100000004000000040000E6010000CE030000D70300000002000000040000000400009A020000DF030000E50300000003000000040000000400004D030000EF030000F3030000000400000004000000040000000400000004000000040000000500000004000000040000AE0400000E0400000C0400000006000000040000000400005B0500001D04000017040000000700000004000000040000070600002C04000022040000000800000004000000040000B20600003A0400002D0400000009000000040000000400005B0700004704000036040000000A0000000400000004000002080000550400003F040000000B00000004000000040000A70800006204000048040000000C000000040000000400004A0900006E0400004F040000000D00000004000000040000EC0900007A04000056040000000E000000040000000400008D0A0000860400005D040000000F000000040000000400002B0B00009104000063040000001000000004000000040000C80B00009C040000680400000000000000050000000400007301000099040000E403000000010000000500000004000029020000AA040000F3030000000200000005000000040000DE020000BC0400000104000000030000000500000004000091030000CD0400000F04000000040000000500000004000042040000DD0400001C040000000500000005000000040000F1040000ED040000280400000006000000050000000400009F050000FD040000330400000007000000050000000400004B0600000C0500003E040000000800000005000000040000F60600001B050000480400000009000000050000000400009F0700002905000052040000000A0000000500000004000046080000370500005B040000000B00000005000000040000EB0800004405000063040000000C000000050000000400008F090000510500006B040000000D00000005000000040000310A00005E05000072040000000E00000005000000040000D10A00006A05000078040000000F00000005000000040000700B0000760500007E0400000010000000050000000400000D0C00008205000083040000000000000006000000040000B601000072050000010400000001000000060000000400006C020000840500000F04000000020000000600000004000021030000960500001D040000000300000006000000040000D4030000A80500002B04000000040000000600000004000085040000B90500003704000000050000000600000004000035050000C905000043040000000600000006000000040000E3050000DA0500004F0400000007000000060000000400008F060000E90500005A04000000080000000600000004000039070000F905000064040000000900000006000000040000E2070000080600006D040000000A00000006000000040000890800001606000076040000000B000000060000000400002F090000240600007E040000000C00000006000000040000D30900003206000086040000000D00000006000000040000750A00003F0600008D040000000E00000006000000040000150B00004C06000093040000000F00000006000000040000B40B00005906000099040000001000000006000000040000510C0000650600009E040000000000000007000000040000F8010000490600001C040000000100000007000000040000AF0200005C0600002B040000000200000007000000040000640300006E06000039040000000300000007000000040000170400008006000046040000000400000007000000040000C8040000920600005304000000050000000700000004000077050000A30600005F04000000060000000700000004000025060000B40600006A040000000700000007000000040000D2060000C5060000750400000008000000070000000400007C070000D40600007F04000000090000000700000004000025080000E406000088040000000A00000007000000040000CD080000F306000091040000000B00000007000000040000720900000207000099040000000C00000007000000040000160A000010070000A1040000000D00000007000000040000B80A00001E070000A8040000000E00000007000000040000590B00002B070000AE040000000F00000007000000040000F80B000039070000B3040000001000000007000000040000950C000045070000B80400000000000000080000000400003B0200001D07000038040000000100000008000000040000F10200003107000047040000000200000008000000040000A603000044070000540400000003000000080000000400005904000057070000620400000004000000080000000400000A050000690700006E040000000500000008000000040000BA0500007B0700007A040000000600000008000000040000680600008C07000085040000000700000008000000040000140700009D07000090040000000800000008000000040000BF070000AE0700009A04000000090000000800000004000068080000BE070000A3040000000A000000080000000400000F090000CE070000AC040000000B00000008000000040000B5090000DD070000B4040000000C00000008000000040000590A0000EC070000BB040000000D00000008000000040000FB0A0000FA070000C2040000000E000000080000000400009C0B000008080000C8040000000F000000080000000400003B0C000016080000CE040000001000000008000000040000D80C000023080000D30400000000000000090000000400007C020000EF07000053040000000100000009000000040000330300000308000062040000000200000009000000040000E803000017080000700400000003000000090000000400009B0400002A0800007D0400000004000000090000000400004C0500003D08000089040000000500000009000000040000FC0500004F08000095040000000600000009000000040000AA06000061080000A00400000007000000090000000400005707000073080000AB0400000008000000090000000400000108000084080000B5040000000900000009000000040000AA08000095080000BE040000000A0000000900000004000052090000A5080000C7040000000B00000009000000040000F8090000B5080000CF040000000C000000090000000400009C0A0000C5080000D6040000000D000000090000000400003E0B0000D4080000DD040000000E00000009000000040000DF0B0000E3080000E3040000000F000000090000000400007E0C0000F1080000E80400000010000000090000000400001B0D0000FF080000ED04000000000000000A000000040000BD020000BE0800006F04000000010000000A00000004000074030000D30800007D04000000020000000A00000004000029040000E70800008B04000000030000000A000000040000DC040000FB0800009804000000040000000A0000000400008E0500000F090000A404000000050000000A0000000400003E06000022090000B004000000060000000A000000040000EC06000034090000BB04000000070000000A0000000400009807000047090000C604000000080000000A0000000400004308000058090000CF04000000090000000A000000040000EC0800006A090000D9040000000A0000000A000000040000940900007B090000E1040000000B0000000A0000000400003A0A00008B090000E9040000000C0000000A000000040000DE0A00009B090000F0040000000D0000000A000000040000800B0000AB090000F7040000000E0000000A000000040000210C0000BA090000FD040000000F0000000A000000040000C00C0000C90900000205000000100000000A0000000400005E0D0000D70900000705000000000000000B000000040000FE0200008B0900008A04000000010000000B000000040000B5030000A00900009804000000020000000B0000000400006A040000B5090000A604000000030000000B0000000400001D050000CA090000B204000000040000000B000000040000CF050000DE090000BF04000000050000000B0000000400007F060000F1090000CB04000000060000000B0000000400002D070000050A0000D604000000070000000B000000040000DA070000170A0000E004000000080000000B000000040000850800002A0A0000EA04000000090000000B0000000400002E0900003C0A0000F3040000000A0000000B000000040000D60900004D0A0000FB040000000B0000000B0000000400007C0A00005E0A000003050000000C0000000B000000040000200B00006F0A00000A050000000D0000000B000000040000C20B00007F0A000011050000000E0000000B000000040000630C00008F0A000017050000000F0000000B000000040000020D00009F0A00001C05000000100000000B000000040000A00D0000AE0A00002105000000000000000C0000000400003F030000550A0000A404000000010000000C000000040000F60300006B0A0000B304000000020000000C000000040000AB040000810A0000C004000000030000000C0000000400005E050000960A0000CD04000000040000000C00000004000010060000AA0A0000D904000000050000000C000000040000C0060000BF0A0000E504000000060000000C0000000400006E070000D20A0000F004000000070000000C0000000400001B080000E60A0000FA04000000080000000C000000040000C6080000F90A00000405000000090000000C0000000400006F0900000B0B00000D050000000A0000000C000000040000170A00001D0B000015050000000B0000000C000000040000BD0A00002F0B00001D050000000C0000000C000000040000610B0000410B000024050000000D0000000C000000040000040C0000510B00002B050000000E0000000C000000040000A50C0000620B000030050000000F0000000C000000040000440D0000720B00003505000000100000000C000000040000E20D0000820B00003A05000000000000000D0000000400007F0300001D0B0000BF04000000010000000D00000004000036040000330B0000CD04000000020000000D000000040000EB040000490B0000DA04000000030000000D0000000400009E0500005F0B0000E704000000040000000D00000004000050060000740B0000F304000000050000000D00000004000000070000890B0000FF04000000060000000D000000040000AF0700009E0B00000A05000000070000000D0000000400005C080000B20B00001405000000080000000D00000004000007090000C50B00001E05000000090000000D000000040000B0090000D80B000027050000000A0000000D000000040000580A0000EB0B00002F050000000B0000000D000000040000FE0A0000FD0B000037050000000C0000000D000000040000A20B00000F0C00003E050000000D0000000D000000040000450C0000210C000044050000000E0000000D000000040000E60C0000320C00004A050000000F0000000D000000040000850D0000430C00004F05000000100000000D000000040000230E0000530C00005305000000000000000E000000040000BE030000E20B0000D904000000010000000E00000004000075040000F90B0000E704000000020000000E0000000400002B050000100C0000F504000000030000000E000000040000DE050000260C00000105000000040000000E000000040000900600003C0C00000D05000000050000000E00000004000040070000510C00001905000000060000000E000000040000EF070000660C00002405000000070000000E0000000400009C0800007B0C00002E05000000080000000E000000040000470900008F0C00003705000000090000000E000000040000F0090000A30C000040050000000A0000000E000000040000980A0000B60C000048050000000B0000000E0000000400003E0B0000C90C000050050000000C0000000E000000040000E30B0000DC0C000057050000000D0000000E000000040000860C0000EE0C00005D050000000E0000000E000000040000270D0000FF0C000063050000000F0000000E000000040000C60D0000110D00006805000000100000000E000000040000640E0000220D00006C05000000000000000F000000040000FE030000A40C0000F304000000010000000F000000040000B5040000BC0C00000105000000020000000F0000000400006A050000D30C00000F05000000030000000F0000000400001E060000EA0C00001B05000000040000000F000000040000D0060000010D00002705000000050000000F00000004000080070000170D00003305000000060000000F0000000400002F0800002C0D00003D05000000070000000F000000040000DC080000420D00004705000000080000000F00000004000087090000560D00005105000000090000000F000000040000300A00006B0D00005A050000000A0000000F000000040000D80A00007F0D000062050000000B0000000F0000000400007F0B0000920D000069050000000C0000000F000000040000230C0000A50D000070050000000D0000000F000000040000C60C0000B80D000076050000000E0000000F000000040000670D0000CA0D00007C050000000F0000000F000000040000070E0000DC0D00008105000000100000000F000000040000A40E0000EE0D0000850500000000000000100000000400003D040000640D00000D050000000100000010000000040000F40400007C0D00001B050000000200000010000000040000A9050000940D0000280500000003000000100000000400005D060000AC0D0000350500000004000000100000000400000F070000C30D000041050000000500000010000000040000BF070000DA0D00004C0500000006000000100000000400006E080000F00D0000570500000007000000100000000400001B090000060E000061050000000800000010000000040000C60900001B0E00006A050000000900000010000000040000700A0000300E000073050000000A00000010000000040000180B0000450E00007B050000000B00000010000000040000BE0B0000590E000082050000000C00000010000000040000630C00006D0E000089050000000D00000010000000040000060D0000800E00008F050000000E00000010000000040000A70D0000930E000095050000000F00000010000000040000470E0000A50E00009A050000001000000010000000040000E50E0000B70E00009E050000000000000000000000050000260000004000000022040000000100000000000000050000DD0000004F00000032040000000200000000000000050000920100005D00000041040000000300000000000000050000450200006B00000050040000000400000000000000050000F7020000780000005E040000000500000000000000050000A7030000850000006B040000000600000000000000050000550400009200000078040000000700000000000000050000020500009E00000084040000000800000000000000050000AD050000AA0000008F04000000090000000000000005000056060000B50000009A040000000A00000000000000050000FE060000C0000000A4040000000B00000000000000050000A4070000CA000000AE040000000C0000000000000005000048080000D4000000B7040000000D00000000000000050000EA080000DE000000BF040000000E000000000000000500008B090000E7000000C6040000000F000000000000000500002B0A0000F0000000CD040000001000000000000000050000C80A0000F8000000D30400000000000000010000000500006B0000002701000041040000000100000001000000050000220100003601000050040000000200000001000000050000D701000045010000600400000003000000010000000500008A020000540100006E0400000004000000010000000500003C030000620100007C040000000500000001000000050000EC0300006F010000890400000006000000010000000500009B0400007D010000960400000007000000010000000500004705000089010000A2040000000800000001000000050000F205000096010000AD0400000009000000010000000500009C060000A2010000B8040000000A0000000100000005000044070000AD010000C2040000000B00000001000000050000EA070000B8010000CC040000000C000000010000000500008E080000C3010000D4040000000D0000000100000005000031090000CD010000DC040000000E00000001000000050000D2090000D7010000E4040000000F00000001000000050000710A0000E0010000EB0400000010000000010000000500000E0B0000E9010000F1040000000000000002000000050000B00000000C0200005F040000000100000002000000050000670100001C0200006F0400000002000000020000000500001C0200002B0200007E040000000300000002000000050000CF0200003A0200008C04000000040000000200000005000081030000490200009A0400000005000000020000000500003104000057020000A7040000000600000002000000050000E004000065020000B40400000007000000020000000500008D05000072020000C0040000000800000002000000050000380600007F020000CB040000000900000002000000050000E10600008C020000D6040000000A000000020000000500008907000098020000E0040000000B000000020000000500002F080000A3020000E9040000000C00000002000000050000D4080000AF020000F2040000000D0000000200000005000076090000BA020000FA040000000E00000002000000050000170A0000C402000001050000000F00000002000000050000B70A0000CE02000008050000001000000002000000050000550B0000D80200000E050000000000000003000000050000F4000000EE0200007D040000000100000003000000050000AB010000FE0200008C040000000200000003000000050000600200000E0300009C040000000300000003000000050000140300001E030000AA040000000400000003000000050000C60300002D030000B8040000000500000003000000050000760400003C030000C5040000000600000003000000050000250500004B030000D1040000000700000003000000050000D205000059030000DD0400000008000000030000000500007D06000066030000E90400000009000000030000000500002607000073030000F3040000000A00000003000000050000CE07000080030000FD040000000B00000003000000050000740800008C03000006050000000C0000000300000005000019090000980300000F050000000D00000003000000050000BC090000A403000017050000000E000000030000000500005D0A0000AF0300001E050000000F00000003000000050000FC0A0000B9030000250500000010000000030000000500009A0B0000C40300002B05000000000000000400000005000038010000CD0300009B040000000100000004000000050000EF010000DE030000AA040000000200000004000000050000A4020000EF030000B904000000030000000400000005000058030000FF030000C80400000004000000040000000500000A0400000F040000D5040000000500000004000000050000BA0400001F040000E2040000000600000004000000050000690500002E040000EF040000000700000004000000050000160600003C040000FB040000000800000004000000050000C10600004B040000060500000009000000040000000500006B0700005804000010050000000A0000000400000005000013080000660400001A050000000B00000004000000050000B90800007304000023050000000C000000040000000500005E0900007F0400002C050000000D00000004000000050000010A00008B04000034050000000E00000004000000050000A20A0000970400003B050000000F00000004000000050000420B0000A204000042050000001000000004000000050000DF0B0000AD040000480500000000000000050000000500007B010000AA040000B804000000010000000500000005000032020000BC040000C8040000000200000005000000050000E8020000CD040000D70400000003000000050000000500009C030000DE040000E50400000004000000050000000500004E040000EF040000F3040000000500000005000000050000000500000005000000050000000600000005000000050000AD0500000E0500000C0500000007000000050000000500005A0600001E05000018050000000800000005000000050000050700002C05000023050000000900000005000000050000AF0700003B0500002D050000000A00000005000000050000570800004905000037050000000B00000005000000050000FE0800005605000040050000000C00000005000000050000A20900006305000049050000000D00000005000000050000450A00007005000051050000000E00000005000000050000E70A00007C05000058050000000F00000005000000050000860B0000880500005E050000001000000005000000050000240C00009405000064050000000000000006000000050000BE01000085050000D50400000001000000060000000500007602000097050000E50400000002000000060000000500002B030000A9050000F4040000000300000006000000050000DF030000BA0500000205000000040000000600000005000091040000CC0500001005000000050000000600000005000042050000DC0500001D050000000600000006000000050000F1050000EC050000290500000007000000060000000500009E060000FC05000035050000000800000006000000050000490700000C06000040050000000900000006000000050000F30700001B0600004A050000000A000000060000000500009B0800002906000054050000000B0000000600000005000042090000370600005D050000000C00000006000000050000E60900004506000065050000000D00000006000000050000890A0000520600006D050000000E000000060000000500002B0B00005F06000074050000000F00000006000000050000CB0B00006C0600007B050000001000000006000000050000690C00007806000081050000000000000007000000050000010200005C060000F3040000000100000007000000050000B80200006F060000020500000002000000070000000500006E030000820600001105000000030000000700000005000022040000940600001F050000000400000007000000050000D4040000A60600002D05000000050000000700000005000085050000B70600003905000000060000000700000005000034060000C806000046050000000700000007000000050000E1060000D8060000510500000008000000070000000500008D070000E80600005C05000000090000000700000005000036080000F806000067050000000A00000007000000050000DF0800000707000070050000000B00000007000000050000850900001607000079050000000C000000070000000500002A0A00002407000082050000000D00000007000000050000CD0A00003207000089050000000E000000070000000500006F0B00004007000091050000000F000000070000000500000F0C00004D07000097050000001000000007000000050000AD0C00005A0700009D05000000000000000800000005000043020000320700000F050000000100000008000000050000FB020000450700001F050000000200000008000000050000B0030000580700002E050000000300000008000000050000640400006B0700003C050000000400000008000000050000170500007E07000049050000000500000008000000050000C80500008F0700005605000000060000000800000005000077060000A10700006205000000070000000800000005000024070000B20700006E050000000800000008000000050000D0070000C3070000790500000009000000080000000500007A080000D307000083050000000A0000000800000005000022090000E30700008D050000000B00000008000000050000C8090000F207000095050000000C000000080000000500006D0A0000010800009E050000000D00000008000000050000110B000010080000A5050000000E00000008000000050000B20B00001E080000AD050000000F00000008000000050000520C00002B080000B3050000001000000008000000050000F00C000039080000B905000000000000000900000005000085020000040800002C0500000001000000090000000500003D030000190800003B050000000200000009000000050000F20300002C0800004A050000000300000009000000050000A704000040080000580500000004000000090000000500005905000053080000660500000005000000090000000500000A0600006508000072050000000600000009000000050000B9060000770800007E05000000070000000900000005000066070000890800008A050000000800000009000000050000120800009A08000095050000000900000009000000050000BC080000AB0800009F050000000A0000000900000005000065090000BC080000A9050000000B000000090000000500000B0A0000CC080000B1050000000C00000009000000050000B00A0000DB080000BA050000000D00000009000000050000540B0000EA080000C1050000000E00000009000000050000F50B0000F9080000C8050000000F00000009000000050000950C000007090000CF050000001000000009000000050000340D000015090000D405000000000000000A000000050000C7020000D50800004905000000010000000A0000000500007E030000E90800005805000000020000000A00000005000034040000FE0800006605000000030000000A000000050000E8040000120900007405000000040000000A0000000500009B050000250900008205000000050000000A0000000500004C060000390900008E05000000060000000A000000050000FB0600004B0900009B05000000070000000A000000050000A80700005E090000A605000000080000000A000000050000540800006F090000B105000000090000000A000000050000FE08000081090000BB050000000A0000000A000000050000A709000092090000C4050000000B0000000A0000000500004E0A0000A3090000CD050000000C0000000A000000050000F30A0000B3090000D5050000000D0000000A000000050000960B0000C3090000DD050000000E0000000A000000050000380C0000D2090000E4050000000F0000000A000000050000D80C0000E1090000EA05000000100000000A000000050000760D0000EF090000F005000000000000000B00000005000008030000A20900006505000000010000000B000000050000BF030000B80900007405000000020000000B00000005000075040000CD0900008305000000030000000B0000000500002A050000E10900009005000000040000000B000000050000DC050000F60900009E05000000050000000B0000000500008D060000090A0000AA05000000060000000B0000000500003D0700001D0A0000B605000000070000000B000000050000EA070000300A0000C205000000080000000B00000005000096080000420A0000CC05000000090000000B00000005000040090000540A0000D7050000000A0000000B000000050000E9090000660A0000E0050000000B0000000B000000050000900A0000770A0000E9050000000C0000000B000000050000350B0000880A0000F1050000000D0000000B000000050000D80B0000980A0000F8050000000E0000000B0000000500007A0C0000A80A0000FF050000000F0000000B0000000500001A0D0000B80A00000506000000100000000B000000050000B90D0000C70A00000B06000000000000000C000000050000480300006D0A00008105000000010000000C00000005000000040000830A00009005000000020000000C000000050000B6040000990A00009E05000000030000000C0000000500006B050000AE0A0000AC05000000040000000C0000000500001D060000C30A0000BA05000000050000000C000000050000CE060000D70A0000C605000000060000000C0000000500007E070000EB0A0000D205000000070000000C0000000500002B080000FF0A0000DD05000000080000000C000000050000D7080000120B0000E805000000090000000C00000005000082090000250B0000F2050000000A0000000C0000000500002A0A0000370B0000FB050000000B0000000C000000050000D10A0000490B000004060000000C0000000C000000050000770B00005A0B00000C060000000D0000000C0000000500001A0C00006B0B000014060000000E0000000C000000050000BC0C00007C0B00001A060000000F0000000C0000000500005C0D00008C0B00002006000000100000000C000000050000FB0D00009C0B00002606000000000000000D00000005000089030000360B00009D05000000010000000D000000050000410400004D0B0000AC05000000020000000D000000050000F7040000630B0000BA05000000030000000D000000050000AB050000790B0000C805000000040000000D0000000500005E0600008E0B0000D505000000050000000D0000000500000F070000A30B0000E205000000060000000D000000050000BF070000B80B0000ED05000000070000000D0000000500006C080000CC0B0000F905000000080000000D00000005000018090000DF0B00000306000000090000000D000000050000C3090000F30B00000D060000000A0000000D0000000500006C0A0000060C000016060000000B0000000D000000050000130B0000180C00001F060000000C0000000D000000050000B80B00002A0C000027060000000D0000000D0000000500005C0C00003C0C00002E060000000E0000000D000000050000FE0C00004D0C000035060000000F0000000D0000000500009E0D00005E0C00003B06000000100000000D0000000500003D0E00006E0C00004106000000000000000E000000050000C9030000FC0B0000B805000000010000000E00000005000081040000130C0000C705000000020000000E000000050000370500002A0C0000D605000000030000000E000000050000EB050000410C0000E305000000040000000E0000000500009E060000570C0000F005000000050000000E0000000500004F0700006C0C0000FD05000000060000000E000000050000FF070000810C00000906000000070000000E000000050000AD080000960C00001406000000080000000E00000005000059090000AA0C00001E06000000090000000E000000050000030A0000BE0C000028060000000A0000000E000000050000AC0A0000D20C000031060000000B0000000E000000050000530B0000E50C00003A060000000C0000000E000000050000F90B0000F80C000042060000000D0000000E0000000500009D0C00000A0D000049060000000E0000000E0000000500003F0D00001C0D000050060000000F0000000E000000050000DF0D00002D0D00005606000000100000000E0000000500007E0E00003E0D00005B06000000000000000F00000005000008040000BF0C0000D305000000010000000F000000050000C0040000D70C0000E205000000020000000F00000005000076050000EF0C0000F105000000030000000F0000000500002B060000060D0000FE05000000040000000F000000050000DE0600001C0D00000B06000000050000000F0000000500008F070000330D00001806000000060000000F0000000500003F080000480D00002406000000070000000F000000050000ED0800005E0D00002F06000000080000000F00000005000099090000730D00003906000000090000000F000000050000440A0000870D000043060000000A0000000F000000050000ED0A00009B0D00004C060000000B0000000F000000050000940B0000AF0D000055060000000C0000000F000000050000390C0000C20D00005C060000000D0000000F000000050000DD0C0000D50D000064060000000E0000000F0000000500007F0D0000E80D00006A060000000F0000000F000000050000200E0000FA0D00007006000000100000000F000000050000BF0E00000B0E00007606000000000000001000000005000047040000800D0000EF050000000100000010000000050000FF040000990D0000FD050000000200000010000000050000B6050000B10D00000C0600000003000000100000000500006A060000C90D0000190600000004000000100000000500001D070000E00D000026060000000500000010000000050000CF070000F70D0000330600000006000000100000000500007F0800000D0E00003E0600000007000000100000000500002D090000230E000049060000000800000010000000050000D9090000390E000054060000000900000010000000050000840A00004E0E00005D060000000A000000100000000500002D0B0000620E000067060000000B00000010000000050000D40B0000770E00006F060000000C000000100000000500007A0C00008B0E000077060000000D000000100000000500001D0D00009E0E00007E060000000E00000010000000050000C00D0000B10E000085060000000F00000010000000050000600E0000C40E00008A060000001000000010000000050000FF0E0000D60E0000900600000000000000000000000600002C0000004C000000EC040000000100000000000000060000E40000005B000000FC0400000002000000000000000600009A010000690000000D0500000003000000000000000600004E020000770000001C05000000040000000000000006000001030000840000002B050000000500000000000000060000B20300009100000039050000000600000000000000060000610400009E000000460500000007000000000000000600000F050000AA00000053050000000800000000000000060000BB050000B50000005F05000000090000000000000006000065060000C10000006B050000000A000000000000000600000E070000CC00000076050000000B00000000000000060000B4070000D600000080050000000C000000000000000600005A080000E00000008A050000000D00000000000000060000FD080000EA00000093050000000E000000000000000600009F090000F30000009B050000000F000000000000000600003F0A0000FC000000A3050000001000000000000000060000DE0A000004010000AA05000000000000000100000006000072000000340100000B05000000010000000100000006000029010000430100001C050000000200000001000000060000DF010000520100002C05000000030000000100000006000094020000610100003B050000000400000001000000060000470300006F0100004A050000000500000001000000060000F80300007C01000058050000000600000001000000060000A70400008A0100006605000000070000000100000006000055050000960100007305000000080000000100000006000001060000A30100007F050000000900000001000000060000AB060000AF0100008A050000000A0000000100000006000054070000BA01000095050000000B00000001000000060000FB070000C50100009F050000000C00000001000000060000A0080000D0010000A9050000000D0000000100000006000044090000DA010000B2050000000E00000001000000060000E5090000E4010000BA050000000F00000001000000060000860A0000ED010000C2050000001000000001000000060000240B0000F6010000C9050000000000000002000000060000B60000001A0200002B0500000001000000020000000600006E0100002A0200003C05000000020000000200000006000025020000390200004B050000000300000002000000060000D9020000480200005B0500000004000000020000000600008C03000057020000690500000005000000020000000600003D0400006502000078050000000600000002000000060000EC04000073020000850500000007000000020000000600009A0500008002000092050000000800000002000000060000460600008D0200009E050000000900000002000000060000F10600009A020000A9050000000A0000000200000006000099070000A6020000B4050000000B0000000200000006000041080000B2020000BE050000000C00000002000000060000E6080000BD020000C8050000000D000000020000000600008A090000C8020000D1050000000E000000020000000600002C0A0000D2020000D9050000000F00000002000000060000CC0A0000DC020000E00500000010000000020000000600006B0B0000E6020000E7050000000000000003000000060000FB000000FD0200004A050000000100000003000000060000B30100000D0300005B050000000200000003000000060000690200001D0300006B0500000003000000030000000600001E0300002D0300007A050000000400000003000000060000D10300003C03000089050000000500000003000000060000820400004B03000097050000000600000003000000060000310500005A030000A4050000000700000003000000060000DF05000068030000B10500000008000000030000000600008C06000075030000BD0500000009000000030000000600003607000082030000C8050000000A00000003000000060000DF0700008F030000D3050000000B00000003000000060000860800009B030000DD050000000C000000030000000600002B090000A7030000E6050000000D00000003000000060000CF090000B3030000EF050000000E00000003000000060000710A0000BE030000F7050000000F00000003000000060000120B0000C9030000FF050000001000000003000000060000B10B0000D3030000060600000000000000040000000600003F010000DD03000069050000000100000004000000060000F7010000EE0300007A050000000200000004000000060000AD020000FF0300008A050000000300000004000000060000620300000F04000099050000000400000004000000060000150400001F040000A7050000000500000004000000060000C60400002F040000B5050000000600000004000000060000760500003E040000C3050000000700000004000000060000240600004C040000CF050000000800000004000000060000D00600005B040000DB0500000009000000040000000600007B07000068040000E7050000000A000000040000000600002408000076040000F1050000000B00000004000000060000CB08000083040000FB050000000C00000004000000060000710900008F04000005060000000D00000004000000060000140A00009B0400000E060000000E00000004000000060000B70A0000A704000016060000000F00000004000000060000570B0000B20400001D060000001000000004000000060000F60B0000BD0400002406000000000000000500000006000083010000BB040000880500000001000000050000000600003B020000CD04000098050000000200000005000000060000F1020000DE040000A8050000000300000005000000060000A6030000EF040000B70500000004000000050000000600005904000000050000C60500000005000000050000000600000B05000010050000D4050000000600000005000000060000BA0500001F050000E1050000000700000005000000060000680600002F050000EE050000000800000005000000060000150700003E050000FA050000000900000005000000060000BF0700004C05000005060000000A00000005000000060000680800005A05000010060000000B0000000500000006000010090000680500001A060000000C00000005000000060000B50900007505000023060000000D00000005000000060000590A0000820500002C060000000E00000005000000060000FC0A00008E05000034060000000F000000050000000600009C0B00009A0500003B0600000010000000050000000600003B0C0000A505000042060000000000000006000000060000C601000096050000A70500000001000000060000000600007E020000A9050000B705000000020000000600000006000035030000BB050000C7050000000300000006000000060000EA030000CC050000D60500000004000000060000000600009D040000DE050000E40500000005000000060000000600004E050000EE050000F2050000000600000006000000060000000600000006000000060000000700000006000000060000AC0600000E0600000C060000000800000006000000060000590700001E06000018060000000900000006000000060000040800002D06000023060000000A00000006000000060000AD0800003C0600002E060000000B00000006000000060000540900004A06000038060000000C00000006000000060000FA0900005806000041060000000D000000060000000600009E0A0000650600004A060000000E00000006000000060000400B00007206000052060000000F00000006000000060000E10B00007E06000059060000001000000006000000060000800C00008B06000060060000000000000007000000060000090200006F060000C5050000000100000007000000060000C102000082060000D50500000002000000070000000600007803000095060000E50500000003000000070000000600002D040000A7060000F4050000000400000007000000060000E0040000B90600000306000000050000000700000006000092050000CA0600001006000000060000000700000006000042060000DB0600001D060000000700000007000000060000F0060000EC0600002A0600000008000000070000000600009C070000FC06000036060000000900000007000000060000470800000B07000041060000000A00000007000000060000F00800001B0700004C060000000B00000007000000060000980900002A07000056060000000C000000070000000600003E0A0000380700005F060000000D00000007000000060000E20A00004607000068060000000E00000007000000060000840B00005407000070060000000F00000007000000060000250C00006107000077060000001000000007000000060000C40C00006D0700007E0600000000000000080000000600004B02000046070000E30500000001000000080000000600000403000059070000F3050000000200000008000000060000BB0300006C07000003060000000300000008000000060000700400007F07000012060000000400000008000000060000230500009207000020060000000500000008000000060000D5050000A40700002E06000000060000000800000006000085060000B50700003B06000000070000000800000006000033070000C607000048060000000800000008000000060000E0070000D7070000540600000009000000080000000600008B080000E70700005F060000000A0000000800000006000034090000F707000069060000000B00000008000000060000DB0900000708000073060000000C00000008000000060000810A0000160800007C060000000D00000008000000060000260B00002408000085060000000E00000008000000060000C80B0000330800008D060000000F00000008000000060000690C00004008000094060000001000000008000000060000080D00004E0800009B0600000000000000090000000600008E0200001908000001060000000100000009000000060000460300002E08000011060000000200000009000000060000FD0300004108000021060000000300000009000000060000B2040000550800003006000000040000000900000006000065050000680800003E060000000500000009000000060000170600007A0800004C060000000600000009000000060000C70600008D08000059060000000700000009000000060000760700009E0800006506000000080000000900000006000022080000B008000071060000000900000009000000060000CD080000C10800007C060000000A0000000900000006000077090000D108000087060000000B000000090000000600001E0A0000E108000091060000000C00000009000000060000C40A0000F10800009A060000000D00000009000000060000690B000000090000A2060000000E000000090000000600000B0C00000F090000AA060000000F00000009000000060000AC0C00001D090000B10600000010000000090000000600004C0D00002B090000B806000000000000000A000000060000CF020000EA0800001F06000000010000000A00000006000088030000FF0800002F06000000020000000A0000000600003F040000140900003E06000000030000000A000000060000F4040000280900004D06000000040000000A000000060000A70500003C0900005C06000000050000000A000000060000590600004F0900006906000000060000000A0000000600000A070000620900007606000000070000000A000000060000B8070000740900008306000000080000000A00000006000065080000860900008E06000000090000000A00000006000010090000980900009A060000000A0000000A000000060000B9090000A9090000A4060000000B0000000A000000060000610A0000B9090000AE060000000C0000000A000000060000070B0000CA090000B7060000000D0000000A000000060000AC0B0000DA090000BF060000000E0000000A0000000600004E0C0000E9090000C7060000000F0000000A000000060000EF0C0000F8090000CE06000000100000000A0000000600008F0D0000070A0000D506000000000000000B00000006000011030000B90900003C06000000010000000B000000060000C9030000CF0900004C06000000020000000B00000006000080040000E40900005C06000000030000000B00000006000036050000F80900006B06000000040000000B000000060000E90500000D0A00007906000000050000000B0000000600009B060000210A00008706000000060000000B0000000600004B070000340A00009406000000070000000B000000060000FA070000470A0000A006000000080000000B000000060000A70800005A0A0000AC06000000090000000B000000060000520900006C0A0000B7060000000A0000000B000000060000FC0900007E0A0000C1060000000B0000000B000000060000A30A00008F0A0000CB060000000C0000000B0000000600004A0B0000A00A0000D4060000000D0000000B000000060000EE0B0000B00A0000DC060000000E0000000B000000060000910C0000C00A0000E4060000000F0000000B000000060000320D0000D00A0000EB06000000100000000B000000060000D20D0000DF0A0000F206000000000000000C00000006000052030000850A00005906000000010000000C0000000600000A0400009B0A00006A06000000020000000C000000060000C1040000B10A00007906000000030000000C00000006000077050000C60A00008806000000040000000C0000000600002A060000DB0A00009606000000050000000C000000060000DC060000F00A0000A406000000060000000C0000000600008D070000040B0000B106000000070000000C0000000600003B080000170B0000BD06000000080000000C000000060000E80800002B0B0000C806000000090000000C000000060000940900003D0B0000D3060000000A0000000C0000000600003D0A0000500B0000DE060000000B0000000C000000060000E50A0000620B0000E7060000000C0000000C0000000600008C0B0000730B0000F0060000000D0000000C000000060000300C0000840B0000F9060000000E0000000C000000060000D30C0000950B000001070000000F0000000C000000060000740D0000A50B00000807000000100000000C000000060000140E0000B50B00000E07000000000000000D000000060000920300004F0B00007606000000010000000D0000000600004B040000660B00008706000000020000000D000000060000020500007C0B00009606000000030000000D000000060000B8050000920B0000A506000000040000000D0000000600006B060000A70B0000B306000000050000000D0000000600001D070000BC0B0000C006000000060000000D000000060000CE070000D10B0000CD06000000070000000D0000000600007D080000E50B0000D906000000080000000D0000000600002A090000F90B0000E506000000090000000D000000060000D50900000D0C0000F0060000000A0000000D0000000600007F0A0000200C0000FA060000000B0000000D000000060000270B0000320C000004070000000C0000000D000000060000CD0B0000440C00000D070000000D0000000D000000060000720C0000560C000015070000000E0000000D000000060000150D0000670C00001D070000000F0000000D000000060000B60D0000780C00002407000000100000000D000000060000560E0000890C00002A07000000000000000E000000060000D2030000160C00009306000000010000000E0000000600008B0400002D0C0000A306000000020000000E00000006000042050000440C0000B306000000030000000E000000060000F80500005B0C0000C106000000040000000E000000060000AC060000710C0000CF06000000050000000E0000000600005E070000870C0000DD06000000060000000E0000000600000F0800009C0C0000EA06000000070000000E000000060000BD080000B10C0000F606000000080000000E0000000600006B090000C50C00000107000000090000000E000000060000160A0000D90C00000C070000000A0000000E000000060000C00A0000ED0C000017070000000B0000000E000000060000680B0000000D000020070000000C0000000E0000000600000E0C0000130D000029070000000D0000000E000000060000B30C0000250D000031070000000E0000000E000000060000560D0000370D000039070000000F0000000E000000060000F80D0000490D00004007000000100000000E000000060000970E00005A0D00004607000000000000000F00000006000012040000DA0C0000B006000000010000000F000000060000CB040000F20C0000C006000000020000000F000000060000820500000A0D0000CF06000000030000000F00000006000038060000210D0000DE06000000040000000F000000060000EC060000380D0000EC06000000050000000F0000000600009E0700004E0D0000F906000000060000000F0000000600004F080000640D00000607000000070000000F000000060000FE0800007A0D00001207000000080000000F000000060000AB0900008F0D00001E07000000090000000F000000060000570A0000A30D000028070000000A0000000F000000060000000B0000B80D000033070000000B0000000F000000060000A90B0000CB0D00003C070000000C0000000F0000000600004F0C0000DF0D000045070000000D0000000F000000060000F40C0000F20D00004D070000000E0000000F000000060000970D0000040E000055070000000F0000000F000000060000390E0000170E00005C07000000100000000F000000060000D80E0000280E000062070000000000000010000000060000510400009C0D0000CC0600000001000000100000000600000A050000B50D0000DC060000000200000010000000060000C2050000CD0D0000EB06000000030000001000000006000077060000E50D0000FA0600000004000000100000000600002C070000FC0D000008070000000500000010000000060000DE070000130E0000150700000006000000100000000600008F0800002A0E0000220700000007000000100000000600003E090000400E00002E070000000800000010000000060000EB090000560E00003A070000000900000010000000060000970A00006B0E000044070000000A00000010000000060000410B0000800E00004F070000000B00000010000000060000E90B0000940E000058070000000C00000010000000060000900C0000A80E000061070000000D00000010000000060000340D0000BC0E000069070000000E00000010000000060000D80D0000CF0E000071070000000F00000010000000060000790E0000E20E000078070000001000000010000000060000190F0000F40E00007E0700000000000000000000000700003200000057000000B2050000000100000000000000070000EB00000066000000C3050000000200000000000000070000A201000074000000D40500000003000000000000000700005702000082000000E40500000004000000000000000700000B0300008F000000F4050000000500000000000000070000BD0300009C000000030600000006000000000000000700006D040000A9000000110600000007000000000000000700001B050000B50000001F060000000800000000000000070000C8050000C10000002C06000000090000000000000007000073060000CC00000038060000000A000000000000000700001D070000D700000044060000000B00000000000000070000C5070000E10000004F060000000C000000000000000700006B080000EB00000059060000000D000000000000000700000F090000F500000063060000000E00000000000000070000B2090000FE0000006C060000000F00000000000000070000530A00000701000075060000001000000000000000070000F30A00000F0100007C0600000000000000010000000700007800000040010000D30500000001000000010000000700003001000050010000E4050000000200000001000000070000E70100005F010000F50500000003000000010000000700009D0200006D01000005060000000400000001000000070000510300007B01000015060000000500000001000000070000030400008901000024060000000600000001000000070000B3040000960100003206000000070000000100000007000061050000A30100003F0600000008000000010000000700000E060000AF0100004C060000000900000001000000070000BA060000BB01000059060000000A0000000100000007000063070000C601000064060000000B000000010000000700000B080000D10100006F060000000C00000001000000070000B1080000DC0100007A060000000D0000000100000007000056090000E601000084060000000E00000001000000070000F9090000F00100008D060000000F000000010000000700009A0A0000FA010000950600000010000000010000000700003A0B0000030200009D060000000000000002000000070000BD00000027020000F30500000001000000020000000700007601000037020000050600000002000000020000000700002D0200004602000016060000000300000002000000070000E20200005502000026060000000400000002000000070000960300006402000035060000000500000002000000070000480400007202000044060000000600000002000000070000F90400008002000052060000000700000002000000070000A70500008E02000060060000000800000002000000070000540600009B0200006D06000000090000000200000007000000070000A702000079060000000A00000002000000070000A9070000B302000085060000000B0000000200000007000051080000BF02000090060000000C00000002000000070000F8080000CA0200009A060000000D000000020000000700009C090000D5020000A4060000000E000000020000000700003F0A0000E0020000AD060000000F00000002000000070000E10A0000EA020000B5060000001000000002000000070000800B0000F3020000BD060000000000000003000000070000020100000B03000014060000000100000003000000070000BA0100001C03000025060000000200000003000000070000720200002C03000036060000000300000003000000070000270300003B03000046060000000400000003000000070000DB0300004B030000560600000005000000030000000700008D0400005A030000640600000006000000030000000700003E0500006803000073060000000700000003000000070000ED05000076030000800600000008000000030000000700009A060000840300008D060000000900000003000000070000450700009103000099060000000A00000003000000070000EF0700009E030000A5060000000B0000000300000007000097080000AA030000B0060000000C000000030000000700003E090000B6030000BA060000000D00000003000000070000E2090000C1030000C4060000000E00000003000000070000850A0000CD030000CD060000000F00000003000000070000270B0000D7030000D5060000001000000003000000070000C60B0000E2030000DD06000000000000000400000007000046010000EC03000034060000000100000004000000070000FF010000FE03000045060000000200000004000000070000B60200000E040000560600000003000000040000000700006C0300001F04000066060000000400000004000000070000200400002F04000076060000000500000004000000070000D20400003E04000085060000000600000004000000070000830500004D04000093060000000700000004000000070000320600005C040000A0060000000800000004000000070000DF0600006A040000AD0600000009000000040000000700008A07000078040000B9060000000A000000040000000700003408000085040000C5060000000B00000004000000070000DC08000092040000D0060000000C00000004000000070000830900009F040000DA060000000D00000004000000070000280A0000AB040000E4060000000E00000004000000070000CB0A0000B7040000ED060000000F000000040000000700006C0B0000C2040000F50600000010000000040000000700000C0C0000CD040000FD0600000000000000050000000700008A010000CB0400005406000000010000000500000007000043020000DD04000066060000000200000005000000070000FA020000EF04000076060000000300000005000000070000B003000000050000860600000004000000050000000700006404000010050000960600000005000000050000000700001605000020050000A4060000000600000005000000070000C705000030050000B3060000000700000005000000070000760600003F050000C0060000000800000005000000070000230700004E050000CD060000000900000005000000070000CF0700005D050000D9060000000A00000005000000070000790800006B050000E5060000000B000000050000000700002109000078050000EF060000000C00000005000000070000C809000086050000FA060000000D000000050000000700006D0A00009205000003070000000E00000005000000070000100B00009F0500000C070000000F00000005000000070000B20B0000AB05000015070000001000000005000000070000520C0000B60500001C070000000000000006000000070000CD010000A80500007406000000010000000600000007000087020000BA050000850600000002000000060000000700003E030000CC05000096060000000300000006000000070000F4030000DE050000A6060000000400000006000000070000A8040000EF050000B50600000005000000060000000700005A05000000060000C40600000006000000060000000700000B06000010060000D2060000000700000006000000070000BA06000020060000E00600000008000000060000000700006807000030060000EC060000000900000006000000070000130800003F060000F9060000000A00000006000000070000BE0800004D06000004070000000B00000006000000070000660900005C0600000F070000000C000000060000000700000D0A00006A06000019070000000D00000006000000070000B20A00007706000023070000000E00000006000000070000550B0000840600002C070000000F00000006000000070000F70B00009106000034070000001000000006000000070000970C00009D0600003C070000000000000007000000070000100200008206000094060000000100000007000000070000CA02000095060000A506000000020000000700000007000081030000A7060000B606000000030000000700000007000037040000BA060000C5060000000400000007000000070000EB040000CB060000D50600000005000000070000000700009E050000DD060000E40600000006000000070000000700004F060000EE060000F2060000000700000007000000070000000700000007000000070000000800000007000000070000AC0700000F0700000C070000000900000007000000070000570800001E07000018070000000A00000007000000070000020900002E07000023070000000B00000007000000070000AA0900003C0700002E070000000C00000007000000070000510A00004B07000038070000000D00000007000000070000F60A00005907000042070000000E00000007000000070000990B0000670700004B070000000F000000070000000700003B0C00007407000053070000001000000007000000070000DB0C0000810700005B0700000000000000080000000700005302000059070000B30600000001000000080000000700000D0300006D070000C4060000000200000008000000070000C403000080070000D50600000003000000080000000700007A04000093070000E50600000004000000080000000700002F050000A5070000F4060000000500000008000000070000E1050000B70700000307000000060000000800000007000092060000C90700001107000000070000000800000007000041070000DA0700001E070000000800000008000000070000EF070000EB0700002B0700000009000000080000000700009B080000FB07000037070000000A00000008000000070000450900000B08000042070000000B00000008000000070000EE0900001B0800004D070000000C00000008000000070000950A00002A08000057070000000D000000080000000700003A0B00003908000061070000000E00000008000000070000DD0B0000470800006A070000000F000000080000000700007F0C000055080000720700000010000000080000000700001F0D00006208000079070000000000000009000000070000960200002E080000D20600000001000000090000000700004F03000042080000E30600000002000000090000000700000704000056080000F4060000000300000009000000070000BD0400006908000004070000000400000009000000070000710500007C08000013070000000500000009000000070000240600008F08000022070000000600000009000000070000D5060000A10800003007000000070000000900000007000084070000B30800003D07000000080000000900000007000032080000C50800004A070000000900000009000000070000DE080000D608000056070000000A0000000900000007000088090000E608000061070000000B00000009000000070000310A0000F60800006C070000000C00000009000000070000D80A00000609000076070000000D000000090000000700007D0B00001609000080070000000E00000009000000070000210C00002409000088070000000F00000009000000070000C30C00003309000091070000001000000009000000070000630D0000410900009807000000000000000A000000070000D702000000090000F106000000010000000A00000007000091030000150900000207000000020000000A00000007000049040000290900001307000000030000000A000000070000FF0400003D0900002307000000040000000A000000070000B4050000510900003207000000050000000A00000007000066060000640900004107000000060000000A00000007000018070000770900004E07000000070000000A000000070000C70700008A0900005C07000000080000000A000000070000750800009C0900006807000000090000000A00000007000021090000AE09000074070000000A0000000A000000070000CB090000BF09000080070000000B0000000A000000070000740A0000D00900008B070000000C0000000A0000000700001B0B0000E009000095070000000D0000000A000000070000C10B0000F00900009E070000000E0000000A000000070000640C0000FF090000A7070000000F0000000A000000070000060D00000F0A0000AF07000000100000000A000000070000A70D00001D0A0000B707000000000000000B00000007000019030000CF0900001007000000010000000B000000070000D3030000E50900002107000000020000000B0000000700008B040000FA0900003107000000030000000B000000070000410500000F0A00004107000000040000000B000000070000F6050000230A00005107000000050000000B000000070000A8060000370A00005F07000000060000000B0000000700005A0700004B0A00006D07000000070000000B000000070000090800005E0A00007A07000000080000000B000000070000B7080000710A00008707000000090000000B00000007000063090000830A000093070000000A0000000B0000000700000E0A0000950A00009E070000000B0000000B000000070000B70A0000A60A0000A9070000000C0000000B0000000700005E0B0000B70A0000B3070000000D0000000B000000070000030C0000C80A0000BC070000000E0000000B000000070000A70C0000D80A0000C5070000000F0000000B000000070000490D0000E80A0000CD07000000100000000B000000070000EA0D0000F70A0000D507000000000000000C0000000700005A0300009C0A00002E07000000010000000C00000007000014040000B30A00003F07000000020000000C000000070000CC040000C80A00005007000000030000000C00000007000082050000DE0A00006007000000040000000C00000007000037060000F30A00006F07000000050000000C000000070000EA060000070B00007D07000000060000000C0000000700009B0700001C0B00008B07000000070000000C0000000700004B0800002F0B00009907000000080000000C000000070000F9080000430B0000A507000000090000000C000000070000A5090000560B0000B1070000000A0000000C000000070000500A0000680B0000BC070000000B0000000C000000070000F90A00007A0B0000C7070000000C0000000C000000070000A00B00008C0B0000D1070000000D0000000C000000070000460C00009D0B0000DA070000000E0000000C000000070000EA0C0000AE0B0000E3070000000F0000000C0000000700008C0D0000BE0B0000EB07000000100000000C0000000700002C0E0000CE0B0000F307000000000000000D0000000700009B030000670B00004D07000000010000000D000000070000550400007E0B00005E07000000020000000D0000000700000D050000940B00006E07000000030000000D000000070000C3050000AA0B00007E07000000040000000D00000007000078060000C00B00008D07000000050000000D0000000700002B070000D50B00009C07000000060000000D000000070000DD070000EA0B0000A907000000070000000D0000000700008C080000FE0B0000B707000000080000000D0000000700003A090000120C0000C307000000090000000D000000070000E7090000260C0000CF070000000A0000000D000000070000920A0000390C0000DA070000000B0000000D0000000700003B0B00004C0C0000E5070000000C0000000D000000070000E20B00005E0C0000EF070000000D0000000D000000070000880C0000700C0000F8070000000E0000000D0000000700002C0D0000810C000001080000000F0000000D000000070000CE0D0000920C00000908000000100000000D0000000700006E0E0000A30C00001008000000000000000E000000070000DB0300002F0C00006B07000000010000000E00000007000095040000460C00007C07000000020000000E0000000700004D0500005E0C00008C07000000030000000E00000007000004060000740C00009C07000000040000000E000000070000B90600008A0C0000AB07000000050000000E0000000700006C070000A00C0000B907000000060000000E0000000700001E080000B60C0000C707000000070000000E000000070000CD080000CB0C0000D407000000080000000E0000000700007C090000DF0C0000E107000000090000000E000000070000280A0000F40C0000ED070000000A0000000E000000070000D30A0000070D0000F8070000000B0000000E0000000700007C0B00001B0D000003080000000C0000000E000000070000230C00002E0D00000D080000000D0000000E000000070000C90C0000400D000016080000000E0000000E0000000700006D0D0000520D00001F080000000F0000000E000000070000100E0000640D00002708000000100000000E000000070000B00E0000750D00002E08000000000000000F0000000700001B040000F40C00008907000000010000000F000000070000D50400000C0D00009A07000000020000000F0000000700008E050000240D0000AA07000000030000000F000000070000440600003C0D0000BA07000000040000000F000000070000F9060000520D0000C907000000050000000F000000070000AC070000690D0000D707000000060000000F0000000700005E0800007F0D0000E507000000070000000F0000000700000E090000950D0000F207000000080000000F000000070000BC090000AA0D0000FE07000000090000000F000000070000690A0000BF0D00000A080000000A0000000F000000070000140B0000D30D000016080000000B0000000F000000070000BD0B0000E70D000020080000000C0000000F000000070000640C0000FB0D00002A080000000D0000000F0000000700000A0D00000E0E000033080000000E0000000F000000070000AE0D0000210E00003C080000000F0000000F000000070000510E0000330E00004408000000100000000F000000070000F20E0000450E00004B0800000000000000100000000700005B040000B70D0000A607000000010000001000000007000015050000D00D0000B7070000000200000010000000070000CD050000E80D0000C707000000030000001000000007000084060000000E0000D707000000040000001000000007000039070000180E0000E6070000000500000010000000070000EC0700002F0E0000F50700000006000000100000000700009E080000460E0000020800000007000000100000000700004E0900005C0E00000F080000000800000010000000070000FD090000720E00001C080000000900000010000000070000A90A0000870E000028080000000A00000010000000070000540B00009C0E000033080000000B00000010000000070000FD0B0000B10E00003D080000000C00000010000000070000A50C0000C50E000047080000000D000000100000000700004B0D0000D90E000050080000000E00000010000000070000EF0D0000EC0E000059080000000F00000010000000070000920E0000FF0E000061080000001000000010000000070000330F0000120F000068080000000000000000000000080000380000006200000074060000000100000000000000080000F10000007100000086060000000200000000000000080000A90100007F000000980600000003000000000000000800005F0200008D000000A9060000000400000000000000080000140300009A000000B9060000000500000000000000080000C7030000A7000000C906000000060000000000000008000078040000B4000000D806000000070000000000000008000027050000C0000000E6060000000800000000000000080000D5050000CB000000F406000000090000000000000008000081060000D700000001070000000A000000000000000800002C070000E20000000E070000000B00000000000000080000D5070000EC0000001A070000000C000000000000000800007C080000F600000025070000000D00000000000000080000210900000001000030070000000E00000000000000080000C5090000090100003A070000000F00000000000000080000670A00001201000043070000001000000000000000080000070B00001A0100004B0700000000000000010000000800007D0000004C01000096060000000100000001000000080000370100005B010000A8060000000200000001000000080000EF0100006A010000BA060000000300000001000000080000A502000079010000CB0600000004000000010000000800005A03000087010000DB0600000005000000010000000800000D04000094010000EB060000000600000001000000080000BE040000A2010000FA0600000007000000010000000800006E050000AE010000090700000008000000010000000800001C060000BB01000016070000000900000001000000080000C8060000C701000023070000000A0000000100000008000072070000D201000030070000000B000000010000000800001B080000DD0100003C070000000C00000001000000080000C2080000E801000047070000000D0000000100000008000068090000F201000052070000000E000000010000000800000C0A0000FC0100005B070000000F00000001000000080000AE0A000005020000650700000010000000010000000800004E0B00000E0200006D070000000000000002000000080000C300000034020000B80600000001000000020000000800007C01000044020000CA0600000002000000020000000800003502000053020000DC060000000300000002000000080000EB02000062020000ED060000000400000002000000080000A003000071020000FD060000000500000002000000080000530400007F0200000D070000000600000002000000080000040500008D0200001C070000000700000002000000080000B40500009A0200002A07000000080000000200000008000062060000A7020000380700000009000000020000000800000E070000B402000045070000000A00000002000000080000B9070000C002000052070000000B0000000200000008000062080000CC0200005E070000000C0000000200000008000009090000D702000069070000000D00000002000000080000AF090000E202000073070000000E00000002000000080000520A0000ED0200007D070000000F00000002000000080000F50A0000F702000086070000001000000002000000080000950B0000000300008F0700000000000000030000000800000801000019030000DA060000000100000003000000080000C201000029030000EC0600000002000000030000000800007A02000039030000FE06000000030000000300000008000030030000490300000F070000000400000003000000080000E5030000580300001F07000000050000000300000008000098040000670300002F0700000006000000030000000800004A050000760300003E070000000700000003000000080000F9050000840300004C070000000800000003000000080000A7060000920300005A070000000900000003000000080000540700009F03000067070000000A00000003000000080000FF070000AC03000073070000000B00000003000000080000A8080000B80300007F070000000C000000030000000800004F090000C40300008A070000000D00000003000000080000F5090000CF03000095070000000E00000003000000080000990A0000DB0300009F070000000F000000030000000800003B0B0000E5030000A8070000001000000003000000080000DC0B0000F0030000B00700000000000000040000000800004C010000FB030000FB060000000100000004000000080000060200000C0400000E070000000200000004000000080000BE0200001D0400001F070000000300000004000000080000750300002E040000300700000004000000040000000800002A0400003E04000040070000000500000004000000080000DD0400004D040000500700000006000000040000000800008F0500005C0400005F0700000007000000040000000800003F0600006B0400006D070000000800000004000000080000ED060000790400007B070000000900000004000000080000990700008704000088070000000A00000004000000080000440800009404000095070000000B00000004000000080000ED080000A2040000A0070000000C0000000400000008000095090000AE040000AC070000000D000000040000000800003B0A0000BA040000B6070000000E00000004000000080000DF0A0000C6040000C0070000000F00000004000000080000810B0000D1040000C9070000001000000004000000080000220C0000DC040000D207000000000000000500000008000090010000DB0400001D0700000001000000050000000800004A020000ED0400002F07000000020000000500000008000003030000FE04000040070000000300000005000000080000B90300000F050000510700000004000000050000000800006E0400002005000062070000000500000005000000080000220500003005000071070000000600000005000000080000D30500004005000080070000000700000005000000080000830600004F0500008F070000000800000005000000080000320700005E0500009C070000000900000005000000080000DE0700006D050000A9070000000A00000005000000080000890800007B050000B6070000000B000000050000000800003209000088050000C1070000000C00000005000000080000DA09000096050000CD070000000D00000005000000080000800A0000A3050000D7070000000E00000005000000080000240B0000AF050000E1070000000F00000005000000080000C70B0000BB050000EA070000001000000005000000080000680C0000C7050000F3070000000000000006000000080000D4010000B80500003E0700000001000000060000000800008E020000CB0500005007000000020000000600000008000047030000DD05000061070000000300000006000000080000FE030000EF05000072070000000400000006000000080000B304000000060000830700000005000000060000000800006605000011060000920700000006000000060000000800001806000021060000A1070000000700000006000000080000C806000031060000B00700000008000000060000000800007607000041060000BD0700000009000000060000000800002308000050060000CA070000000A00000006000000080000CE0800005F060000D7070000000B00000006000000080000770900006D060000E2070000000C000000060000000800001F0A00007B060000ED070000000D00000006000000080000C50A000088060000F8070000000E00000006000000080000690B00009506000002080000000F000000060000000800000C0C0000A20600000B080000001000000006000000080000AD0C0000AE0600001308000000000000000700000008000017020000930600005F070000000100000007000000080000D2020000A6060000710700000002000000070000000800008A030000B90600008207000000030000000700000008000041040000CB06000093070000000400000007000000080000F6040000DD060000A3070000000500000007000000080000AA050000EF060000B30700000006000000070000000800005C06000000070000C20700000007000000070000000800000C07000010070000D0070000000800000007000000080000BA07000021070000DE0700000009000000070000000800006708000030070000EB070000000A000000070000000800001209000040070000F7070000000B00000007000000080000BC0900004F07000003080000000C00000007000000080000630A00005D0700000E080000000D000000070000000800000A0B00006B07000019080000000E00000007000000080000AE0B00007907000022080000000F00000007000000080000510C0000860700002B080000001000000007000000080000F20C000093070000340800000000000000080000000800005A0200006B0700007F070000000100000008000000080000150300007F07000091070000000200000008000000080000CD03000093070000A307000000030000000800000008000084040000A6070000B40700000004000000080000000800003A050000B8070000C4070000000500000008000000080000ED050000CA070000D40700000006000000080000000800009F060000DC070000E207000000070000000800000008000050070000ED070000F1070000000800000008000000080000000800000008000000080000000900000008000000080000AB0800000F0800000B080000000A00000008000000080000560900001F08000018080000000B00000008000000080000000A00002E08000023080000000C00000008000000080000A80A00003D0800002F080000000D000000080000000800004E0B00004C08000039080000000E00000008000000080000F20B00005A08000043080000000F00000008000000080000950C0000680800004C080000001000000008000000080000360D000076080000540800000000000000090000000800009D02000041080000A00700000001000000090000000800005703000056080000B2070000000200000009000000080000100400006A080000C3070000000300000009000000080000C70400007D080000D40700000004000000090000000800007D05000090080000E407000000050000000900000008000030060000A3080000F4070000000600000009000000080000E2060000B50800000308000000070000000900000008000093070000C70800001108000000080000000900000008000041080000D90800001F080000000900000009000000080000EE080000EA0800002C080000000A000000090000000800009A090000FB08000038080000000B00000009000000080000430A00000B09000044080000000C00000009000000080000EB0A00001B0900004F080000000D00000009000000080000920B00002A09000059080000000E00000009000000080000360C00003909000063080000000F00000009000000080000D90C0000480900006C0800000010000000090000000800007A0D0000560900007408000000000000000A000000080000DF02000014090000C007000000010000000A0000000800009A03000029090000D207000000020000000A000000080000530400003E090000E307000000030000000A0000000800000A05000052090000F407000000040000000A000000080000BF050000660900000408000000050000000A000000080000730600007A0900001408000000060000000A000000080000250700008D0900002308000000070000000A000000080000D60700009F0900003108000000080000000A00000008000084080000B10900003F08000000090000000A00000008000031090000C30900004C080000000A0000000A000000080000DD090000D409000058080000000B0000000A000000080000870A0000E509000064080000000C0000000A0000000800002F0B0000F60900006F080000000D0000000A000000080000D50B0000060A000079080000000E0000000A0000000800007A0C0000150A000083080000000F0000000A0000000800001D0D0000250A00008C08000000100000000A000000080000BE0D0000330A00009408000000000000000B00000008000021030000E5090000E007000000010000000B000000080000DC030000FB090000F207000000020000000B00000008000094040000100A00000308000000030000000B0000000800004C050000250A00001408000000040000000B00000008000001060000390A00002408000000050000000B000000080000B50600004D0A00003408000000060000000B00000008000067070000610A00004308000000070000000B00000008000018080000740A00005108000000080000000B000000080000C7080000870A00005F08000000090000000B00000008000074090000990A00006B080000000A0000000B000000080000200A0000AB0A000078080000000B0000000B000000080000C90A0000BD0A000083080000000C0000000B000000080000720B0000CE0A00008E080000000D0000000B000000080000180C0000DF0A000099080000000E0000000B000000080000BD0C0000EF0A0000A2080000000F0000000B000000080000600D0000FF0A0000AC08000000100000000B000000080000010E00000E0B0000B408000000000000000C00000008000062030000B30A00000008000000010000000C0000000800001D040000C90A00001208000000020000000C000000080000D6040000DF0A00002308000000030000000C0000000800008D050000F50A00003408000000040000000C000000080000430600000A0B00004408000000050000000C000000080000F70600001F0B00005308000000060000000C000000080000A9070000330B00006208000000070000000C0000000800005A080000470B00007108000000080000000C000000080000090900005A0B00007E08000000090000000C000000080000B60900006D0B00008B080000000A0000000C000000080000620A0000800B000097080000000B0000000C0000000800000C0B0000920B0000A3080000000C0000000C000000080000B40B0000A40B0000AE080000000D0000000C0000000800005B0C0000B50B0000B8080000000E0000000C000000080000FF0C0000C60B0000C2080000000F0000000C000000080000A30D0000D70B0000CB08000000100000000C000000080000440E0000E70B0000D308000000000000000D000000080000A30300007E0B00001F08000000010000000D0000000800005E040000950B00003108000000020000000D00000008000017050000AC0B00004308000000030000000D000000080000CF050000C20B00005308000000040000000D00000008000084060000D80B00006308000000050000000D00000008000039070000ED0B00007308000000060000000D000000080000EB070000020C00008208000000070000000D0000000800009C080000170C00009008000000080000000D0000000800004B0900002B0C00009D08000000090000000D000000080000F80900003F0C0000AA080000000A0000000D000000080000A40A0000520C0000B7080000000B0000000D0000000800004E0B0000650C0000C2080000000C0000000D000000080000F60B0000770C0000CD080000000D0000000D0000000800009D0C0000890C0000D8080000000E0000000D000000080000420D00009B0C0000E1080000000F0000000D000000080000E50D0000AC0C0000EA08000000100000000D000000080000870E0000BD0C0000F308000000000000000E000000080000E4030000470C00003E08000000010000000E0000000800009F0400005F0C00005008000000020000000E00000008000058050000760C00006208000000030000000E000000080000100600008D0C00007308000000040000000E000000080000C5060000A40C00008308000000050000000E0000000800007A070000BA0C00009208000000060000000E0000000800002C080000CF0C0000A108000000070000000E000000080000DD080000E40C0000AF08000000080000000E0000000800008C090000F90C0000BD08000000090000000E0000000800003A0A00000D0D0000CA080000000A0000000E000000080000E50A0000210D0000D6080000000B0000000E0000000800008F0B0000350D0000E1080000000C0000000E000000080000380C0000480D0000EC080000000D0000000E000000080000DF0C00005A0D0000F7080000000E0000000E000000080000840D00006D0D000000090000000F0000000E000000080000270E00007E0D00000909000000100000000E000000080000C90E0000900D00001209000000000000000F000000080000240400000E0D00005D08000000010000000F000000080000DF040000260D00007008000000020000000F000000080000980500003E0D00008108000000030000000F00000008000050060000550D00009208000000040000000F000000080000060700006D0D0000A208000000050000000F000000080000BA070000830D0000B108000000060000000F0000000800006D080000990D0000C008000000070000000F0000000800001E090000AF0D0000CE08000000080000000F000000080000CD090000C50D0000DC08000000090000000F0000000800007B0A0000DA0D0000E8080000000A0000000F000000080000260B0000EE0D0000F5080000000B0000000F000000080000D10B0000020E000000090000000C0000000F000000080000790C0000160E00000B090000000D0000000F000000080000200D0000290E000015090000000E0000000F000000080000C50D00003C0E00001F090000000F0000000F000000080000690E00004E0E00002809000000100000000F0000000800000A0F0000610E00003009000000000000001000000008000064040000D20D00007C0800000001000000100000000800001F050000EB0D00008E080000000200000010000000080000D8050000030E0000A0080000000300000010000000080000900600001B0E0000B008000000040000001000000008000046070000330E0000C0080000000500000010000000080000FB0700004A0E0000D0080000000600000010000000080000AD080000610E0000DF0800000007000000100000000800005E090000780E0000ED0800000008000000100000000800000E0A00008E0E0000FA080000000900000010000000080000BB0A0000A30E000007090000000A00000010000000080000670B0000B80E000013090000000B00000010000000080000120C0000CD0E00001F090000000C00000010000000080000BA0C0000E10E00002A090000000D00000010000000080000610D0000F50E000034090000000E00000010000000080000060E0000090F00003E090000000F00000010000000080000AA0E00001C0F0000470900000010000000100000000800004C0F00002F0F00004F0900000000000000000000000900003D0000006C00000032070000000100000000000000090000F70000007B00000046070000000200000000000000090000B0010000890000005807000000030000000000000009000067020000970000006A0700000004000000000000000900001D030000A40000007B070000000500000000000000090000D0030000B10000008B07000000060000000000000009000082040000BE0000009B07000000070000000000000009000033050000CA000000AB070000000800000000000000090000E2050000D6000000B90700000009000000000000000900008F060000E1000000C7070000000A000000000000000900003A070000EC000000D4070000000B00000000000000090000E4070000F6000000E1070000000C000000000000000900008C08000000010000ED070000000D00000000000000090000320900000A010000F8070000000E00000000000000090000D70900001301000003080000000F000000000000000900007A0A00001C0100000D0800000010000000000000000900001B0B000024010000170800000000000000010000000900008300000057010000560700000001000000010000000900003D0100006701000069070000000200000001000000090000F6010000750100007B070000000300000001000000090000AD020000840100008D07000000040000000100000009000063030000920100009E07000000050000000100000009000017040000A0010000AF070000000600000001000000090000C9040000AD010000BF0700000007000000010000000900007A050000BA010000CE07000000080000000100000009000028060000C6010000DD070000000900000001000000090000D6060000D2010000EA070000000A0000000100000009000081070000DD010000F8070000000B000000010000000900002B080000E801000004080000000C00000001000000090000D3080000F301000010080000000D0000000100000009000079090000FD0100001C080000000E000000010000000900001E0A00000702000027080000000F00000001000000090000C10A00001102000031080000001000000001000000090000630B00001A0200003A080000000000000002000000090000C8000000400200007907000000010000000200000009000083010000500200008C0700000002000000020000000900003C0200005F0200009F070000000300000002000000090000F30200006E020000B0070000000400000002000000090000A90300007D020000C20700000005000000020000000900005D0400008B020000D20700000006000000020000000900000F05000099020000E2070000000700000002000000090000C0050000A7020000F10700000008000000020000000900006F060000B4020000000800000009000000020000000900001C070000C00200000E080000000A00000002000000090000C8070000CC0200001B080000000B0000000200000009000072080000D802000028080000000C000000020000000900001A090000E402000034080000000D00000002000000090000C0090000EE0200003F080000000E00000002000000090000650A0000F90200004A080000000F00000002000000090000080B00000303000054080000001000000002000000090000AA0B00000D0300005D0800000000000000030000000900000D010000260300009C070000000100000003000000090000C801000036030000AF0700000002000000030000000900008102000047030000C20700000003000000030000000900003903000056030000D3070000000400000003000000090000EE03000066030000E5070000000500000003000000090000A304000075030000F5070000000600000003000000090000550500008303000005080000000700000003000000090000060600009103000014080000000800000003000000090000B50600009F0300002308000000090000000300000009000062070000AC03000031080000000A000000030000000900000E080000B90300003E080000000B00000003000000090000B8080000C50300004B080000000C0000000300000009000060090000D103000057080000000D00000003000000090000070A0000DD03000062080000000E00000003000000090000AC0A0000E80300006D080000000F000000030000000900004F0B0000F303000077080000001000000003000000090000F10B0000FD030000800800000000000000040000000900005201000009040000BF0700000001000000040000000900000D0200001A040000D2070000000200000004000000090000C60200002B040000E40700000003000000040000000900007E0300003C040000F6070000000400000004000000090000340400004C04000007080000000500000004000000090000E80400005B040000180800000006000000040000000900009A0500006A040000280800000007000000040000000900004B0600007904000037080000000800000004000000090000FA0600008804000045080000000900000004000000090000A80700009504000053080000000A0000000400000009000054080000A304000061080000000B00000004000000090000FE080000B00400006D080000000C00000004000000090000A6090000BD04000079080000000D000000040000000900004D0A0000C904000085080000000E00000004000000090000F20A0000D50400008F080000000F00000004000000090000950B0000E004000099080000001000000004000000090000370C0000EB040000A308000000000000000500000009000096010000EA040000E107000000010000000500000009000051020000FC040000F40700000002000000050000000900000B0300000E05000007080000000300000005000000090000C20300001F05000019080000000400000005000000090000780400002F0500002A0800000005000000050000000900002D0500003F0500003A080000000600000005000000090000DF0500004F0500004A080000000700000005000000090000900600005F050000590800000008000000050000000900003F0700006E05000068080000000900000005000000090000ED0700007C05000076080000000A00000005000000090000990800008A05000083080000000B00000005000000090000430900009805000090080000000C00000005000000090000EC090000A50500009C080000000D00000005000000090000920A0000B2050000A7080000000E00000005000000090000380B0000BF050000B2080000000F00000005000000090000DB0B0000CB050000BC0800000010000000050000000900007D0C0000D6050000C5080000000000000006000000090000DA010000C80500000408000000010000000600000009000096020000DB050000170800000002000000060000000900004F030000ED0500002908000000030000000600000009000007040000FF0500003B080000000400000006000000090000BD040000100600004C08000000050000000600000009000071050000210600005D08000000060000000600000009000024060000320600006D080000000700000006000000090000D5060000420600007C08000000080000000600000009000084070000510600008A080000000900000006000000090000320800006006000098080000000A00000006000000090000DE0800006F060000A5080000000B00000006000000090000880900007E060000B2080000000C00000006000000090000310A00008C060000BE080000000D00000006000000090000D80A000099060000C9080000000E000000060000000900007D0B0000A6060000D4080000000F00000006000000090000210C0000B3060000DE080000001000000006000000090000C30C0000BF060000E80800000000000000070000000900001E020000A406000026080000000100000007000000090000D9020000B70600003908000000020000000700000009000093030000CA0600004B0800000003000000070000000900004B040000DD0600005D08000000040000000700000009000001050000EF0600006E080000000500000007000000090000B5050000000700007F08000000060000000700000009000068060000110700008F08000000070000000700000009000019070000220700009E080000000800000007000000090000C907000032070000AC0800000009000000070000000900007608000042070000BA080000000A000000070000000900002209000052070000C8080000000B00000007000000090000CD09000061070000D4080000000C00000007000000090000760A00006F070000E0080000000D000000070000000900001D0B00007D070000EB080000000E00000007000000090000C20B00008B070000F6080000000F00000007000000090000660C00009807000000090000001000000007000000090000080D0000A50700000A090000000000000008000000090000610200007D070000480800000001000000080000000900001C030000910700005B080000000200000008000000090000D6030000A50700006D0800000003000000080000000900008E040000B80700007F08000000040000000800000009000044050000CA07000090080000000500000008000000090000F9050000DD070000A1080000000600000008000000090000AC060000EE070000B00800000007000000080000000900005D07000000080000C00800000008000000080000000900000D08000011080000CE080000000900000008000000090000BA08000021080000DC080000000A000000080000000900006709000031080000E9080000000B00000008000000090000110A000041080000F6080000000C00000008000000090000BA0A00005008000002090000000D00000008000000090000610B00005F0800000D090000000E00000008000000090000070C00006E08000018090000000F00000008000000090000AA0C00007C080000220900000010000000080000000900004C0D0000890800002B090000000000000009000000090000A402000054080000690800000001000000090000000900005F030000690800007C080000000200000009000000090000190400007D0800008F080000000300000009000000090000D104000090080000A108000000040000000900000009000088050000A4080000B20800000005000000090000000900003C060000B7080000C2080000000600000009000000090000EF060000C9080000D2080000000700000009000000090000A1070000DB080000E108000000080000000900000009000050080000ED080000F0080000000900000009000000090000FF080000FF080000FF080000000A00000009000000090000AA0900000F0900000B090000000B00000009000000090000550A00001F09000018090000000C00000009000000090000FE0A00002F09000024090000000D00000009000000090000A50B00003E0900002F090000000E000000090000000900004B0C00004D0900003A090000000F00000009000000090000EF0C00005C09000044090000001000000009000000090000910D00006A0900004D09000000000000000A000000090000E6020000280900008B08000000010000000A000000090000A20300003D0900009E08000000020000000A0000000900005C04000052090000B008000000030000000A0000000900001405000067090000C208000000040000000A000000090000CA0500007A090000D308000000050000000A0000000900007F0600008E090000E408000000060000000A00000009000032070000A1090000F408000000070000000A000000090000E4070000B40900000309000000080000000A00000009000093080000C60900001109000000090000000A00000009000041090000D80900001F090000000A0000000A000000090000EE090000E90900002C090000000B0000000A000000090000980A0000FA09000039090000000C0000000A000000090000420B00000B0A000045090000000D0000000A000000090000E90B00001B0A000050090000000E0000000A0000000900008F0C00002B0A00005B090000000F0000000A000000090000330D00003A0A00006509000000100000000A000000090000D50D0000490A00006E09000000000000000B00000009000028030000FA090000AC08000000010000000B000000090000E4030000100A0000BF08000000020000000B0000000900009E040000250A0000D208000000030000000B000000090000560500003A0A0000E308000000040000000B0000000900000D0600004F0A0000F408000000050000000B000000090000C2060000630A00000509000000060000000B00000009000075070000770A00001509000000070000000B000000090000260800008A0A00002409000000080000000B000000090000D60800009D0A00003209000000090000000B00000009000084090000AF0A000040090000000A0000000B000000090000310A0000C10A00004E090000000B0000000B000000090000DC0A0000D30A00005A090000000C0000000B000000090000850B0000E40A000066090000000D0000000B0000000900002C0C0000F50A000072090000000E0000000B000000090000D20C0000050B00007C090000000F0000000B000000090000760D0000150B00008609000000100000000B000000090000180E0000250B00009009000000000000000C0000000900006A030000C90A0000CD08000000010000000C00000009000026040000DF0A0000E008000000020000000C000000090000E0040000F50A0000F308000000030000000C000000090000980500000B0B00000409000000040000000C0000000900004F060000200B00001509000000050000000C00000009000004070000350B00002609000000060000000C000000090000B70700004A0B00003609000000070000000C000000090000690800005E0B00004509000000080000000C00000009000019090000710B00005309000000090000000C000000090000C7090000840B000061090000000A0000000C000000090000730A0000970B00006F090000000B0000000C0000000900001E0B0000A90B00007B090000000C0000000C000000090000C70B0000BB0B000087090000000D0000000C0000000900006F0C0000CD0B000092090000000E0000000C000000090000150D0000DE0B00009D090000000F0000000C000000090000B90D0000EE0B0000A709000000100000000C0000000900005C0E0000FE0B0000B109000000000000000D000000090000AB030000950B0000EE08000000010000000D00000009000067040000AD0B00000109000000020000000D00000009000021050000C30B00001309000000030000000D000000090000DA050000DA0B00002509000000040000000D00000009000090060000EF0B00003609000000050000000D00000009000045070000050C00004709000000060000000D000000090000F90700001A0C00005609000000070000000D000000090000AA0800002F0C00006609000000080000000D0000000900005B090000430C00007409000000090000000D000000090000090A0000570C000082090000000A0000000D000000090000B60A00006A0C00008F090000000B0000000D000000090000610B00007D0C00009C090000000C0000000D0000000900000A0C00008F0C0000A8090000000D0000000D000000090000B20C0000A20C0000B3090000000E0000000D000000090000570D0000B30C0000BE090000000F0000000D000000090000FC0D0000C50C0000C809000000100000000D0000000900009E0E0000D50C0000D109000000000000000E000000090000EC0300005F0C00000E09000000010000000E000000090000A8040000770C00002109000000020000000E000000090000620500008F0C00003409000000030000000E0000000900001B060000A50C00004609000000040000000E000000090000D1060000BC0C00005709000000050000000E00000009000087070000D20C00006709000000060000000E0000000900003A080000E80C00007709000000070000000E000000090000EC080000FD0C00008609000000080000000E0000000900009C090000120D00009509000000090000000E0000000900004B0A0000260D0000A3090000000A0000000E000000090000F70A00003A0D0000B0090000000B0000000E000000090000A20B00004E0D0000BC090000000C0000000E0000000900004C0C0000610D0000C8090000000D0000000E000000090000F40C0000740D0000D4090000000E0000000E0000000900009A0D0000860D0000DE090000000F0000000E0000000900003E0E0000980D0000E809000000100000000E000000090000E10E0000AA0D0000F209000000000000000F0000000900002C040000270D00002F09000000010000000F000000090000E80400003F0D00004209000000020000000F000000090000A3050000570D00005409000000030000000F0000000900005B0600006F0D00006609000000040000000F00000009000012070000860D00007709000000050000000F000000090000C80700009D0D00008709000000060000000F0000000900007B080000B30D00009709000000070000000F0000000900002D090000C90D0000A609000000080000000F000000090000DD090000DF0D0000B509000000090000000F0000000900008C0A0000F40D0000C3090000000A0000000F000000090000390B0000080E0000D0090000000B0000000F000000090000E40B00001D0E0000DD090000000C0000000F0000000900008D0C0000310E0000E9090000000D0000000F000000090000350D0000440E0000F4090000000E0000000F000000090000DB0D0000570E0000FF090000000F0000000F000000090000800E00006A0E0000090A000000100000000F000000090000230F00007C0E0000120A00000000000000100000000900006C040000EC0D00004F09000000010000001000000009000028050000050E000062090000000200000010000000090000E30500001D0E0000740900000003000000100000000900009C060000360E000086090000000400000010000000090000530700004D0E00009709000000050000001000000009000008080000650E0000A8090000000600000010000000090000BC0800007C0E0000B70900000007000000100000000900006E090000930E0000C70900000008000000100000000900001E0A0000A90E0000D5090000000900000010000000090000CD0A0000BE0E0000E3090000000A000000100000000900007A0B0000D40E0000F0090000000B00000010000000090000250C0000E90E0000FD090000000C00000010000000090000CF0C0000FD0E0000090A0000000D00000010000000090000770D0000110F0000140A0000000E000000100000000900001D0E0000250F00001F0A0000000F00000010000000090000C10E0000380F0000290A0000001000000010000000090000640F00004B0F0000320A00000000000000000000000A00004100000076000000ED0700000001000000000000000A0000FC00000084000000010800000002000000000000000A0000B601000093000000140800000003000000000000000A00006E020000A0000000270800000004000000000000000A000025030000AE000000390800000005000000000000000A0000D9030000BB0000004A0800000006000000000000000A00008D040000C70000005B0800000007000000000000000A00003E050000D30000006B0800000008000000000000000A0000EE050000DF0000007A0800000009000000000000000A00009C060000EA00000089080000000A000000000000000A000048070000F500000097080000000B000000000000000A0000F307000000010000A5080000000C000000000000000A00009C0800000A010000B1080000000D000000000000000A00004309000013010000BE080000000E000000000000000A0000E80900001C010000C9080000000F000000000000000A00008C0A000025010000D40800000010000000000000000A00002F0B00002E010000DE0800000000000000010000000A00008700000062010000120800000001000000010000000A00004301000071010000260800000002000000010000000A0000FD01000080010000390800000003000000010000000A0000B50200008E0100004C0800000004000000010000000A00006B0300009D0100005E0800000005000000010000000A000020040000AA0100006F0800000006000000010000000A0000D3040000B7010000800800000007000000010000000A000085050000C4010000900800000008000000010000000A000035060000D00100009F0800000009000000010000000A0000E3060000DC010000AE080000000A000000010000000A00008F070000E8010000BC080000000B000000010000000A00003A080000F3010000C9080000000C000000010000000A0000E3080000FE010000D6080000000D000000010000000A00008A09000008020000E2080000000E000000010000000A0000300A000012020000EE080000000F000000010000000A0000D40A00001B020000F90800000010000000010000000A0000770B000024020000030900000000000000020000000A0000CD0000004B020000360800000001000000020000000A0000890100005B0200004A0800000002000000020000000A0000430200006B0200005E0800000003000000020000000A0000FB0200007A020000700800000004000000020000000A0000B203000089020000820800000005000000020000000A00006604000097020000940800000006000000020000000A00001A050000A5020000A40800000007000000020000000A0000CB050000B2020000B40800000008000000020000000A00007B060000BF020000C40800000009000000020000000A000029070000CC020000D2080000000A000000020000000A0000D6070000D8020000E1080000000B000000020000000A000081080000E4020000EE080000000C000000020000000A00002A090000EF020000FB080000000D000000020000000A0000D2090000FA02000007090000000E000000020000000A0000770A00000503000013090000000F000000020000000A00001B0B00000F0300001D0900000010000000020000000A0000BE0B000018030000280900000000000000030000000A000012010000320300005B0800000001000000030000000A0000CE010000430300006F0800000002000000030000000A00008802000053030000820800000003000000030000000A00004103000063030000940800000004000000030000000A0000F703000072030000A60800000005000000030000000A0000AC04000081030000B80800000006000000030000000A00006005000090030000C90800000007000000030000000A0000110600009E030000D90800000008000000030000000A0000C1060000AC030000E80800000009000000030000000A000070070000B9030000F7080000000A000000030000000A00001C080000C603000005090000000B000000030000000A0000C7080000D203000012090000000C000000030000000A000071090000DE0300001F090000000D000000030000000A0000180A0000EA0300002B090000000E000000030000000A0000BE0A0000F503000037090000000F000000030000000A0000620B000000040000420900000010000000030000000A0000050C00000A0400004C0900000000000000040000000A000057010000170400007F0800000001000000040000000A00001302000028040000930800000002000000040000000A0000CD02000039040000A60800000003000000040000000A00008603000049040000B90800000004000000040000000A00003D04000059040000CB0800000005000000040000000A0000F204000069040000DC0800000006000000040000000A0000A505000078040000ED0800000007000000040000000A00005706000087040000FD0800000008000000040000000A000007070000950400000C0900000009000000040000000A0000B6070000A30400001B090000000A000000040000000A000062080000B104000029090000000B000000040000000A00000E090000BE04000037090000000C000000040000000A0000B7090000CB04000043090000000D000000040000000A00005F0A0000D704000050090000000E000000040000000A0000050B0000E30400005B090000000F000000040000000A0000A90B0000EE040000660900000010000000040000000A00004C0C0000F9040000700900000000000000050000000A00009C010000F9040000A20800000001000000050000000A0000580200000B050000B60800000002000000050000000A0000120300001C050000CA0800000003000000050000000A0000CB0300002D050000DC0800000004000000050000000A0000820400003E050000EE0800000005000000050000000A0000370500004E050000000900000006000000050000000A0000EB0500005E050000100900000007000000050000000A00009C0600006D050000210900000008000000050000000A00004D0700007C050000300900000009000000050000000A0000FB0700008B0500003F090000000A000000050000000A0000A8080000990500004D090000000B000000050000000A000053090000A70500005A090000000C000000050000000A0000FD090000B405000067090000000D000000050000000A0000A50A0000C105000074090000000E000000050000000A00004B0B0000CE0500007F090000000F000000050000000A0000EF0B0000DA0500008A0900000010000000050000000A0000920C0000E6050000940900000000000000060000000A0000E0010000D8050000C60800000001000000060000000A00009C020000EB050000DA0800000002000000060000000A000057030000FD050000ED0800000003000000060000000A00000F0400000E060000000900000004000000060000000A0000C604000020060000120900000005000000060000000A00007C05000031060000230900000006000000060000000A00002F06000041060000340900000007000000060000000A0000E106000051060000440900000008000000060000000A00009207000061060000540900000009000000060000000A0000400800007006000062090000000A000000060000000A0000ED0800007F06000071090000000B000000060000000A0000990900008E0600007E090000000C000000060000000A0000420A00009C0600008B090000000D000000060000000A0000EA0A0000A906000097090000000E000000060000000A0000900B0000B6060000A3090000000F000000060000000A0000350C0000C3060000AE0900000010000000060000000A0000D80C0000CF060000B80900000000000000070000000A000024020000B5060000E90800000001000000070000000A0000E0020000C8060000FD0800000002000000070000000A00009B030000DB060000110900000003000000070000000A000053040000ED060000230900000004000000070000000A00000B050000FF060000350900000005000000070000000A0000C005000011070000470900000006000000070000000A00007406000022070000580900000007000000070000000A00002607000033070000680900000008000000070000000A0000D607000043070000770900000009000000070000000A0000850800005307000086090000000A000000070000000A0000320900006307000094090000000B000000070000000A0000DE09000072070000A2090000000C000000070000000A0000870A000080070000AE090000000D000000070000000A00002F0B00008F070000BB090000000E000000070000000A0000D60B00009C070000C6090000000F000000070000000A00007A0C0000AA070000D10900000010000000070000000A00001D0D0000B7070000DC0900000000000000080000000A0000670200008F0700000D0900000001000000080000000A000024030000A3070000210900000002000000080000000A0000DE030000B6070000340900000003000000080000000A000097040000C9070000470900000004000000080000000A00004E050000DC070000590900000005000000080000000A000004060000EE0700006A0900000006000000080000000A0000B8060000000800007B0900000007000000080000000A00006A070000120800008B0900000008000000080000000A00001B080000230800009A0900000009000000080000000A0000C908000033080000A9090000000A000000080000000A00007709000043080000B7090000000B000000080000000A0000220A000053080000C5090000000C000000080000000A0000CC0A000063080000D2090000000D000000080000000A0000740B000071080000DE090000000E000000080000000A00001A0C000080080000EA090000000F000000080000000A0000BF0C00008E080000F50900000010000000080000000A0000620D00009C080000FF0900000000000000090000000A0000AA020000670800002F0900000001000000090000000A0000670300007B080000430900000002000000090000000A0000210400008F080000570900000003000000090000000A0000DB040000A3080000690900000004000000090000000A000092050000B60800007C0900000005000000090000000A000048060000C90800008D0900000006000000090000000A0000FC060000DC0800009E0900000007000000090000000A0000AE070000EE080000AE0900000008000000090000000A00005E08000000090000BD0900000009000000090000000A00000D09000011090000CC090000000A000000090000000A0000BB09000022090000DA090000000B000000090000000A0000660A000032090000E8090000000C000000090000000A0000100B000042090000F5090000000D000000090000000A0000B80B000052090000010A0000000E000000090000000A00005F0C0000610900000D0A0000000F000000090000000A0000040D000070090000180A00000010000000090000000A0000A70D00007E090000220A000000000000000A0000000A0000ED0200003C0900005209000000010000000A0000000A0000AA030000510900006609000000020000000A0000000A000064040000660900007A09000000030000000A0000000A00001D0500007A0900008C09000000040000000A0000000A0000D50500008E0900009E09000000050000000A0000000A00008B060000A2090000B009000000060000000A0000000A00003F070000B5090000C009000000070000000A0000000A0000F1070000C8090000D109000000080000000A0000000A0000A2080000DA090000E009000000090000000A0000000A000051090000EC090000EF090000000A0000000A0000000A0000FF090000FF090000FF090000000B0000000A0000000A0000AA0A00000F0A00000B0A0000000C0000000A0000000A0000540B00001F0A0000180A0000000D0000000A0000000A0000FC0B0000300A0000240A0000000E0000000A0000000A0000A30C00003F0A0000300A0000000F0000000A0000000A0000480D00004F0A00003B0A000000100000000A0000000A0000EB0D00005E0A0000450A000000000000000B0000000A00002F0300000E0A00007509000000010000000B0000000A0000EC030000240A00008909000000020000000B0000000A0000A70400003A0A00009C09000000030000000B0000000A0000600500004F0A0000AF09000000040000000B0000000A000018060000630A0000C109000000050000000B0000000A0000CD060000780A0000D209000000060000000B0000000A0000820700008C0A0000E309000000070000000B0000000A0000340800009F0A0000F309000000080000000B0000000A0000E5080000B20A0000030A000000090000000B0000000A000094090000C50A0000120A0000000A0000000B0000000A0000420A0000D70A0000200A0000000B0000000B0000000A0000ED0A0000E90A00002D0A0000000C0000000B0000000A0000970B0000FA0A00003A0A0000000D0000000B0000000A0000400C00000B0B0000470A0000000E0000000B0000000A0000E70C00001B0B0000520A0000000F0000000B0000000A00008C0D00002B0B00005D0A000000100000000B0000000A00002F0E00003B0B0000680A000000000000000C0000000A000071030000DE0A00009709000000010000000C0000000A00002E040000F50A0000AB09000000020000000C0000000A0000E90400000B0B0000BE09000000030000000C0000000A0000A2050000210B0000D109000000040000000C0000000A00005A060000360B0000E309000000050000000C0000000A0000100700004B0B0000F509000000060000000C0000000A0000C4070000600B0000050A000000070000000C0000000A000077080000740B0000160A000000080000000C0000000A000028090000870B0000250A000000090000000C0000000A0000D70900009B0B0000340A0000000A0000000C0000000A0000840A0000AD0B0000420A0000000B0000000C0000000A0000300B0000C00B0000500A0000000C0000000C0000000A0000DA0B0000D20B00005D0A0000000D0000000C0000000A0000830C0000E30B0000690A0000000E0000000C0000000A00002A0D0000F50B0000750A0000000F0000000C0000000A0000CF0D0000050C0000800A000000100000000C0000000A0000720E0000160C00008A0A000000000000000D0000000A0000B3030000AC0B0000B909000000010000000D0000000A00006F040000C30B0000CD09000000020000000D0000000A00002A050000DA0B0000E009000000030000000D0000000A0000E4050000F00B0000F309000000040000000D0000000A00009C060000060C0000050A000000050000000D0000000A0000520700001C0C0000170A000000060000000D0000000A000006080000310C0000270A000000070000000D0000000A0000B9080000460C0000380A000000080000000D0000000A00006A0900005A0C0000470A000000090000000D0000000A0000190A00006E0C0000560A0000000A0000000D0000000A0000C70A0000820C0000640A0000000B0000000D0000000A0000730B0000950C0000720A0000000C0000000D0000000A00001D0C0000A70C00007F0A0000000D0000000D0000000A0000C60C0000BA0C00008B0A0000000E0000000D0000000A00006D0D0000CB0C0000970A0000000F0000000D0000000A0000120E0000DD0C0000A20A000000100000000D0000000A0000B60E0000EE0C0000AC0A000000000000000E0000000A0000F4030000770C0000DB09000000010000000E0000000A0000B00400008F0C0000EF09000000020000000E0000000A00006C050000A60C0000020A000000030000000E0000000A000025060000BD0C0000150A000000040000000E0000000A0000DD060000D40C0000270A000000050000000E0000000A000093070000EA0C0000380A000000060000000E0000000A000048080000000D0000490A000000070000000E0000000A0000FB080000150D0000590A000000080000000E0000000A0000AC0900002A0D0000690A000000090000000E0000000A00005B0A00003F0D0000780A0000000A0000000E0000000A0000090B0000530D0000860A0000000B0000000E0000000A0000B50B0000670D0000940A0000000C0000000E0000000A00005F0C00007A0D0000A10A0000000D0000000E0000000A0000080D00008D0D0000AD0A0000000E0000000E0000000A0000AF0D0000A00D0000B90A0000000F0000000E0000000A0000550E0000B20D0000C40A000000100000000E0000000A0000F80E0000C30D0000CE0A000000000000000F0000000A0000340400003F0D0000FC09000000010000000F0000000A0000F1040000580D0000100A000000020000000F0000000A0000AC050000700D0000240A000000030000000F0000000A000066060000880D0000370A000000040000000F0000000A00001E0700009F0D0000490A000000050000000F0000000A0000D4070000B60D00005A0A000000060000000F0000000A000089080000CC0D00006B0A000000070000000F0000000A00003C090000E20D00007B0A000000080000000F0000000A0000ED090000F80D00008B0A000000090000000F0000000A00009D0A00000D0E00009A0A0000000A0000000F0000000A00004B0B0000220E0000A80A0000000B0000000F0000000A0000F70B0000370E0000B50A0000000C0000000F0000000A0000A10C00004B0E0000C20A0000000D0000000F0000000A00004A0D00005E0E0000CF0A0000000E0000000F0000000A0000F10D0000710E0000DA0A0000000F0000000F0000000A0000970E0000840E0000E50A000000100000000F0000000A00003A0F0000960E0000F00A00000000000000100000000A000074040000050E00001E0A00000001000000100000000A0000320500001E0E0000320A00000002000000100000000A0000ED050000370E0000450A00000003000000100000000A0000A70600004F0E0000580A00000004000000100000000A00005F070000670E00006A0A00000005000000100000000A0000150800007F0E00007C0A00000006000000100000000A0000CA080000960E00008C0A00000007000000100000000A00007D090000AD0E00009D0A00000008000000100000000A00002E0A0000C30E0000AC0A00000009000000100000000A0000DE0A0000D90E0000BB0A0000000A000000100000000A00008C0B0000EF0E0000C90A0000000B000000100000000A0000380C0000040F0000D70A0000000C000000100000000A0000E30C0000180F0000E40A0000000D000000100000000A00008C0D00002D0F0000F00A0000000E000000100000000A0000330E0000400F0000FC0A0000000F000000100000000A0000D80E0000540F0000070B00000010000000100000000A00007C0F0000670F0000110B00000000000000000000000B0000450000007F000000A40800000001000000000000000B0000010100008D000000B90800000002000000000000000B0000BC0100009C000000CD0800000003000000000000000B000075020000A9000000E00800000004000000000000000B00002C030000B7000000F30800000005000000000000000B0000E2030000C4000000050900000006000000000000000B000096040000D0000000170900000007000000000000000B000048050000DC000000280900000008000000000000000B0000F9050000E8000000380900000009000000000000000B0000A8060000F300000047090000000A000000000000000B000055070000FE00000056090000000B000000000000000B0000010800000901000064090000000C000000000000000B0000AB0800001301000072090000000D000000000000000B0000530900001C0100007F090000000E000000000000000B0000FA090000250100008B090000000F000000000000000B00009F0A00002E010000970900000010000000000000000B0000420B000036010000A20900000000000000010000000B00008B0000006C010000CA0800000001000000010000000B0000480100007B010000DF0800000002000000010000000B0000030200008A010000F30800000003000000010000000B0000BC02000098010000060900000004000000010000000B000073030000A6010000190900000005000000010000000B000029040000B40100002B0900000006000000010000000B0000DD040000C10100003D0900000007000000010000000B000090050000CE0100004E0900000008000000010000000B000040060000DA0100005E0900000009000000010000000B0000EF060000E60100006D090000000A000000010000000B00009D070000F20100007C090000000B000000010000000B000048080000FD0100008B090000000C000000010000000B0000F30800000802000098090000000D000000010000000B00009B09000012020000A5090000000E000000010000000B0000420A00001C020000B2090000000F000000010000000B0000E70A000025020000BD0900000010000000010000000B00008A0B00002E020000C80900000000000000020000000B0000D100000056020000F00800000001000000020000000B00008E01000066020000050900000002000000020000000B00004902000076020000190900000003000000020000000B000002030000850200002C0900000004000000020000000B0000BA030000940200003F0900000005000000020000000B000070040000A2020000510900000006000000020000000B000024050000B0020000630900000007000000020000000B0000D6050000BD020000740900000008000000020000000B000087060000CA020000840900000009000000020000000B000036070000D702000093090000000A000000020000000B0000E4070000E3020000A2090000000B000000020000000B000090080000EF020000B1090000000C000000020000000B00003A090000FA020000BE090000000D000000020000000B0000E209000005030000CB090000000E000000020000000B0000890A000010030000D8090000000F000000020000000B00002E0B00001A030000E30900000010000000020000000B0000D20B000024030000EE0900000000000000030000000B0000170100003E030000150900000001000000030000000B0000D40100004F0300002A0900000002000000030000000B00008F0200005F0300003E0900000003000000030000000B0000480300006F030000520900000004000000030000000B0000000400007E030000650900000005000000030000000B0000B60400008D030000770900000006000000030000000B00006A0500009C030000880900000007000000030000000B00001D060000AA030000990900000008000000030000000B0000CE060000B8030000AA0900000009000000030000000B00007D070000C5030000B9090000000A000000030000000B00002B080000D2030000C8090000000B000000030000000B0000D6080000DE030000D6090000000C000000030000000B000081090000EA030000E4090000000D000000030000000B0000290A0000F6030000F1090000000E000000030000000B0000D00A000001040000FE090000000F000000030000000B0000750B00000C040000090A00000010000000030000000B0000190C000016040000140A00000000000000040000000B00005C010000240400003B0900000001000000040000000B00001902000035040000500900000002000000040000000B0000D402000046040000640900000003000000040000000B00008E03000056040000770900000004000000040000000B000045040000660400008A0900000005000000040000000B0000FC040000760400009C0900000006000000040000000B0000B005000085040000AE0900000007000000040000000B00006306000094040000BF0900000008000000040000000B000014070000A2040000CF0900000009000000040000000B0000C3070000B0040000DF090000000A000000040000000B000071080000BE040000EE090000000B000000040000000B00001D090000CB040000FC090000000C000000040000000B0000C7090000D80400000A0A0000000D000000040000000B0000700A0000E4040000170A0000000E000000040000000B0000170B0000F0040000230A0000000F000000040000000B0000BC0B0000FB0400002F0A00000010000000040000000B0000600C0000060500003A0A00000000000000050000000B0000A101000006050000600900000001000000050000000B00005E02000018050000750900000002000000050000000B0000190300002A050000890900000003000000050000000B0000D30300003B0500009C0900000004000000050000000B00008B0400004C050000AF0900000005000000050000000B0000410500005C050000C10900000006000000050000000B0000F50500006C050000D30900000007000000050000000B0000A80600007C050000E40900000008000000050000000B0000590700008B050000F40900000009000000050000000B00000908000099050000040A0000000A000000050000000B0000B7080000A8050000130A0000000B000000050000000B000063090000B5050000210A0000000C000000050000000B00000D0A0000C30500002F0A0000000D000000050000000B0000B60A0000D00500003C0A0000000E000000050000000B00005D0B0000DC050000490A0000000F000000050000000B0000030C0000E8050000540A00000010000000050000000B0000A60C0000F4050000600A00000000000000060000000B0000E5010000E7050000850900000001000000060000000B0000A2020000F9050000990900000002000000060000000B00005E0300000C060000AE0900000003000000060000000B0000180400001E060000C10900000004000000060000000B0000D00400002F060000D40900000005000000060000000B00008605000040060000E60900000006000000060000000B00003A06000050060000F80900000007000000060000000B0000ED06000061060000090A00000008000000060000000B00009F07000070060000190A00000009000000060000000B00004E08000080060000290A0000000A000000060000000B0000FC0800008F060000380A0000000B000000060000000B0000A80900009D060000460A0000000C000000060000000B0000530A0000AB060000540A0000000D000000060000000B0000FC0A0000B9060000610A0000000E000000060000000B0000A30B0000C60600006E0A0000000F000000060000000B0000490C0000D30600007A0A00000010000000060000000B0000EC0C0000DF060000850A00000000000000070000000B000029020000C5060000A90900000001000000070000000B0000E7020000D8060000BE0900000002000000070000000B0000A2030000EB060000D20900000003000000070000000B00005C040000FD060000E60900000004000000070000000B0000140500000F070000F90900000005000000070000000B0000CA050000210700000B0A00000006000000070000000B00007F060000320700001D0A00000007000000070000000B000032070000430700002E0A00000008000000070000000B0000E4070000540700003E0A00000009000000070000000B000093080000640700004E0A0000000A000000070000000B000041090000730700005D0A0000000B000000070000000B0000EE090000820700006B0A0000000C000000070000000B0000980A000091070000790A0000000D000000070000000B0000410B00009F070000860A0000000E000000070000000B0000E90B0000AD070000930A0000000F000000070000000B00008E0C0000BB0700009F0A00000010000000070000000B0000320D0000C8070000AA0A00000000000000080000000B00006D020000A0070000CE0900000001000000080000000B00002A030000B4070000E30900000002000000080000000B0000E6030000C7070000F70900000003000000080000000B0000A0040000DB0700000A0A00000004000000080000000B000058050000ED0700001D0A00000005000000080000000B00000F06000000080000300A00000006000000080000000B0000C306000012080000410A00000007000000080000000B00007707000023080000520A00000008000000080000000B00002808000034080000630A00000009000000080000000B0000D808000045080000720A0000000A000000080000000B00008609000055080000820A0000000B000000080000000B0000320A000065080000900A0000000C000000080000000B0000DD0A0000740800009E0A0000000D000000080000000B0000860B000083080000AB0A0000000E000000080000000B00002E0C000092080000B80A0000000F000000080000000B0000D30C0000A0080000C30A00000010000000080000000B0000780D0000AE080000CF0A00000000000000090000000B0000B002000078080000F20900000001000000090000000B00006E0300008D080000070A00000002000000090000000B000029040000A10800001B0A00000003000000090000000B0000E3040000B50800002F0A00000004000000090000000B00009C050000C9080000420A00000005000000090000000B000052060000DC080000540A00000006000000090000000B000007070000EE080000660A00000007000000090000000B0000BB07000000090000770A00000008000000090000000B00006C08000012090000870A00000009000000090000000B00001C09000024090000970A0000000A000000090000000B0000CA09000034090000A60A0000000B000000090000000B0000770A000045090000B40A0000000C000000090000000B0000220B000055090000C20A0000000D000000090000000B0000CB0B000065090000CF0A0000000E000000090000000B0000720C000074090000DC0A0000000F000000090000000B0000180D000083090000E80A00000010000000090000000B0000BC0D000091090000F30A000000000000000A0000000B0000F30200004E090000160A000000010000000A0000000B0000B1030000640900002B0A000000020000000A0000000B00006C040000790900003F0A000000030000000A0000000B0000270500008D090000530A000000040000000A0000000B0000DF050000A1090000660A000000050000000A0000000B000096060000B5090000780A000000060000000A0000000B00004B070000C80900008A0A000000070000000A0000000B0000FE070000DB0900009B0A000000080000000A0000000B0000B0080000EE090000AB0A000000090000000A0000000B000060090000000A0000BB0A0000000A0000000A0000000B00000E0A0000110A0000CA0A0000000B0000000A0000000B0000BB0A0000220A0000D90A0000000C0000000A0000000B0000660B0000330A0000E70A0000000D0000000A0000000B00000F0C0000440A0000F40A0000000E0000000A0000000B0000B70C0000530A0000000B0000000F0000000A0000000B00005D0D0000630A00000C0B000000100000000A0000000B0000010E0000720A0000180B000000000000000B0000000B000036030000220A0000390A000000010000000B0000000B0000F3030000380A00004E0A000000020000000B0000000B0000AF0400004E0A0000630A000000030000000B0000000B000069050000630A0000760A000000040000000B0000000B000022060000780A0000890A000000050000000B0000000B0000D90600008C0A00009C0A000000060000000B0000000B00008E070000A00A0000AE0A000000070000000B0000000B000041080000B40A0000BF0A000000080000000B0000000B0000F3080000C70A0000CF0A000000090000000B0000000B0000A3090000D90A0000DF0A0000000A0000000B0000000B0000520A0000EC0A0000EE0A0000000B0000000B0000000B0000FF0A0000FF0A0000FF0A0000000C0000000B0000000B0000AA0B00000F0B00000B0B0000000D0000000B0000000B0000530C0000200B0000180B0000000E0000000B0000000B0000FB0C0000300B0000240B0000000F0000000B0000000B0000A10D0000410B0000300B000000100000000B0000000B0000450E0000500B00003C0B000000000000000C0000000B000078030000F30A00005D0A000000010000000C0000000B0000350400000A0B0000720A000000020000000C0000000B0000F1040000200B0000860A000000030000000C0000000B0000AC050000360B00009A0A000000040000000C0000000B0000640600004B0B0000AD0A000000050000000C0000000B00001B070000600B0000C00A000000060000000C0000000B0000D1070000750B0000D10A000000070000000C0000000B000084080000890B0000E20A000000080000000C0000000B0000360900009D0B0000F30A000000090000000C0000000B0000E6090000B00B0000030B0000000A0000000C0000000B0000950A0000C30B0000120B0000000B0000000C0000000B0000420B0000D60B0000200B0000000C0000000C0000000B0000ED0B0000E80B00002E0B0000000D0000000C0000000B0000960C0000FA0B00003C0B0000000E0000000C0000000B00003E0D00000B0C0000480B0000000F0000000C0000000B0000E40D00001C0C0000540B000000100000000C0000000B0000890E00002C0C0000600B000000000000000D0000000B0000B9030000C10B0000800A000000010000000D0000000B000077040000D90B0000950A000000020000000D0000000B000033050000F00B0000AA0A000000030000000D0000000B0000EE050000060C0000BD0A000000040000000D0000000B0000A60600001D0C0000D00A000000050000000D0000000B00005D070000320C0000E30A000000060000000D0000000B000013080000480C0000F50A000000070000000D0000000B0000C70800005C0C0000060B000000080000000D0000000B000079090000710C0000160B000000090000000D0000000B0000290A0000850C0000260B0000000A0000000D0000000B0000D80A0000990C0000350B0000000B0000000D0000000B0000850B0000AC0C0000440B0000000C0000000D0000000B0000300C0000BF0C0000520B0000000D0000000D0000000B0000D90C0000D10C00005F0B0000000E0000000D0000000B0000810D0000E30C00006C0B0000000F0000000D0000000B0000280E0000F40C0000780B000000100000000D0000000B0000CC0E0000050D0000830B000000000000000E0000000B0000FB0300008D0C0000A30A000000010000000E0000000B0000B9040000A50C0000B80A000000020000000E0000000B000075050000BD0C0000CD0A000000030000000E0000000B00002F060000D40C0000E10A000000040000000E0000000B0000E8060000EB0C0000F40A000000050000000E0000000B00009F070000020D0000060B000000060000000E0000000B000055080000180D0000180B000000070000000E0000000B0000090900002D0D0000290B000000080000000E0000000B0000BB090000420D00003A0B000000090000000E0000000B00006B0A0000570D00004A0B0000000A0000000E0000000B00001A0B00006B0D0000590B0000000B0000000E0000000B0000C70B00007F0D0000670B0000000C0000000E0000000B0000720C0000930D0000750B0000000D0000000E0000000B00001C0D0000A60D0000830B0000000E0000000E0000000B0000C40D0000B80D00008F0B0000000F0000000E0000000B00006B0E0000CA0D00009B0B000000100000000E0000000B00000F0F0000DC0D0000A70B000000000000000F0000000B00003B040000570D0000C60A000000010000000F0000000B0000F9040000700D0000DB0A000000020000000F0000000B0000B6050000880D0000F00A000000030000000F0000000B000070060000A00D0000030B000000040000000F0000000B000029070000B70D0000170B000000050000000F0000000B0000E1070000CE0D0000290B000000060000000F0000000B000096080000E50D00003B0B000000070000000F0000000B00004A090000FB0D00004C0B000000080000000F0000000B0000FC090000110E00005D0B000000090000000F0000000B0000AD0A0000260E00006D0B0000000A0000000F0000000B00005C0B00003B0E00007C0B0000000B0000000F0000000B0000090C0000500E00008B0B0000000C0000000F0000000B0000B50C0000640E0000990B0000000D0000000F0000000B00005E0D0000780E0000A60B0000000E0000000F0000000B0000060E00008B0E0000B30B0000000F0000000F0000000B0000AD0E00009E0E0000BF0B000000100000000F0000000B0000520F0000B00E0000CA0B00000000000000100000000B00007C0400001E0E0000E90A00000001000000100000000B00003A050000370E0000FE0A00000002000000100000000B0000F6050000500E0000120B00000003000000100000000B0000B1060000690E0000260B00000004000000100000000B00006A070000810E0000390B00000005000000100000000B000022080000980E00004C0B00000006000000100000000B0000D7080000B00E00005E0B00000007000000100000000B00008B090000C70E00006F0B00000008000000100000000B00003E0A0000DD0E0000800B00000009000000100000000B0000EE0A0000F30E00008F0B0000000A000000100000000B00009D0B0000090F00009F0B0000000B000000100000000B00004B0C00001E0F0000AD0B0000000C000000100000000B0000F60C0000330F0000BB0B0000000D000000100000000B0000A00D0000470F0000C90B0000000E000000100000000B0000480E00005B0F0000D60B0000000F000000100000000B0000EF0E00006F0F0000E20B00000010000000100000000B0000940F0000820F0000ED0B00000000000000000000000C00004800000087000000580900000001000000000000000C000006010000960000006D0900000002000000000000000C0000C1010000A4000000820900000003000000000000000C00007B020000B2000000960900000004000000000000000C000034030000BF000000AA0900000005000000000000000C0000EA030000CC000000BD0900000006000000000000000C00009F040000D9000000CF0900000007000000000000000C000052050000E5000000E10900000008000000000000000C000004060000F0000000F20900000009000000000000000C0000B4060000FC000000020A0000000A000000000000000C00006207000006010000120A0000000B000000000000000C00000F08000011010000210A0000000C000000000000000C0000BA0800001B0100002F0A0000000D000000000000000C000063090000240100003D0A0000000E000000000000000C00000A0A00002E0100004A0A0000000F000000000000000C0000B00A000036010000560A00000010000000000000000C0000540B00003F010000620A00000000000000010000000C00008F000000750100007F0900000001000000010000000C00004C01000084010000940900000002000000010000000C00000802000093010000A90900000003000000010000000C0000C2020000A2010000BE0900000004000000010000000C00007B030000B0010000D10900000005000000010000000C000031040000BD010000E40900000006000000010000000C0000E6040000CB010000F60900000007000000010000000C00009A050000D7010000080A00000008000000010000000C00004C060000E4010000190A00000009000000010000000C0000FC060000F0010000290A0000000A000000010000000C0000AA070000FB010000390A0000000B000000010000000C00005708000006020000480A0000000C000000010000000C00000209000011020000570A0000000D000000010000000C0000AB0900001B020000640A0000000E000000010000000C0000520A000025020000720A0000000F000000010000000C0000F80A00002F0200007E0A00000010000000010000000C00009D0B0000380200008A0A00000000000000020000000C0000D500000061020000A60900000001000000020000000C00009301000071020000BB0900000002000000020000000C00004F02000080020000D00900000003000000020000000C0000090300008F020000E50900000004000000020000000C0000C10300009E020000F80900000005000000020000000C000078040000AC0200000B0A00000006000000020000000C00002D050000BA0200001E0A00000007000000020000000C0000E1050000C80200002F0A00000008000000020000000C000093060000D5020000400A00000009000000020000000C000043070000E1020000510A0000000A000000020000000C0000F1070000EE020000600A0000000B000000020000000C00009E080000F9020000700A0000000C000000020000000C000049090000050300007E0A0000000D000000020000000C0000F3090000100300008C0A0000000E000000020000000C00009A0A00001A030000990A0000000F000000020000000C0000400B000024030000A60A00000010000000020000000C0000E50B00002E030000B20A00000000000000030000000C00001B0100004A030000CD0900000001000000030000000C0000D90100005A030000E20900000002000000030000000C0000950200006A030000F70900000003000000030000000C00004F0300007A0300000C0A00000004000000030000000C0000080400008A0300001F0A00000005000000030000000C0000BF04000099030000320A00000006000000030000000C000074050000A7030000450A00000007000000030000000C000027060000B5030000560A00000008000000030000000C0000D9060000C3030000670A00000009000000030000000C00008A070000D0030000780A0000000A000000030000000C000038080000DD030000880A0000000B000000030000000C0000E5080000EA030000970A0000000C000000030000000C000090090000F6030000A50A0000000D000000030000000C00003A0A000002040000B30A0000000E000000030000000C0000E20A00000D040000C00A0000000F000000030000000C0000880B000018040000CD0A00000010000000030000000C00002C0C000022040000D90A00000000000000040000000C00006001000030040000F30900000001000000040000000C00001E02000041040000090A00000002000000040000000C0000DA020000520400001E0A00000003000000040000000C00009503000063040000320A00000004000000040000000C00004E04000073040000460A00000005000000040000000C00000505000082040000590A00000006000000040000000C0000BA050000920400006B0A00000007000000040000000C00006E060000A10400007D0A00000008000000040000000C000020070000AF0400008E0A00000009000000040000000C0000D0070000BD0400009F0A0000000A000000040000000C00007F080000CB040000AF0A0000000B000000040000000C00002C090000D8040000BE0A0000000C000000040000000C0000D7090000E5040000CC0A0000000D000000040000000C0000810A0000F1040000DA0A0000000E000000040000000C0000290B0000FD040000E80A0000000F000000040000000C0000CF0B000008050000F40A00000010000000040000000C0000730C000013050000000B00000000000000050000000C0000A601000014050000190A00000001000000050000000C000063020000260500002F0A00000002000000050000000C00002003000037050000440A00000003000000050000000C0000DA03000049050000590A00000004000000050000000C000093040000590500006C0A00000005000000050000000C00004A0500006A0500007F0A00000006000000050000000C0000000600007A050000920A00000007000000050000000C0000B406000089050000A40A00000008000000050000000C00006607000098050000B50A00000009000000050000000C000016080000A7050000C50A0000000A000000050000000C0000C5080000B5050000D50A0000000B000000050000000C000072090000C3050000E50A0000000C000000050000000C00001D0A0000D1050000F30A0000000D000000050000000C0000C70A0000DE050000010B0000000E000000050000000C00006F0B0000EA0500000E0B0000000F000000050000000C0000160C0000F60500001B0B00000010000000050000000C0000BA0C000002060000270B00000000000000060000000C0000EA010000F5050000400A00000001000000060000000C0000A802000008060000550A00000002000000060000000C0000650300001A0600006A0A00000003000000060000000C00001F0400002C0600007F0A00000004000000060000000C0000D80400003D060000930A00000005000000060000000C00008F0500004E060000A60A00000006000000060000000C0000450600005F060000B80A00000007000000060000000C0000F90600006F060000CA0A00000008000000060000000C0000AB0700007F060000DB0A00000009000000060000000C00005C0800008E060000EC0A0000000A000000060000000C00000B0900009D060000FC0A0000000B000000060000000C0000B8090000AC0600000B0B0000000C000000060000000C0000630A0000BA0600001A0B0000000D000000060000000C00000D0B0000C8060000280B0000000E000000060000000C0000B50B0000D5060000350B0000000F000000060000000C00005C0C0000E2060000420B00000010000000060000000C0000010D0000EE0600004E0B00000000000000070000000C00002E020000D4060000650A00000001000000070000000C0000ED020000E70600007B0A00000002000000070000000C0000A9030000FA060000900A00000003000000070000000C0000640400000D070000A50A00000004000000070000000C00001D0500001F070000B90A00000005000000070000000C0000D405000031070000CC0A00000006000000070000000C00008A06000042070000DE0A00000007000000070000000C00003E07000053070000F00A00000008000000070000000C0000F007000063070000010B00000009000000070000000C0000A108000073070000120B0000000A000000070000000C00005009000083070000220B0000000B000000070000000C0000FD09000092070000310B0000000C000000070000000C0000A90A0000A1070000400B0000000D000000070000000C0000530B0000AF0700004E0B0000000E000000070000000C0000FB0B0000BD0700005B0B0000000F000000070000000C0000A20C0000CB070000680B00000010000000070000000C0000470D0000D8070000740B00000000000000080000000C000072020000B00700008B0A00000001000000080000000C000031030000C4070000A10A00000002000000080000000C0000ED030000D8070000B60A00000003000000080000000C0000A8040000EB070000CB0A00000004000000080000000C000061050000FE070000DE0A00000005000000080000000C00001906000010080000F20A00000006000000080000000C0000CE06000022080000040B00000007000000080000000C00008307000034080000160B00000008000000080000000C00003508000045080000270B00000009000000080000000C0000E608000056080000380B0000000A000000080000000C00009509000066080000480B0000000B000000080000000C0000420A000076080000570B0000000C000000080000000C0000EE0A000085080000660B0000000D000000080000000C0000980B000094080000740B0000000E000000080000000C0000410C0000A3080000820B0000000F000000080000000C0000E70C0000B10800008E0B00000010000000080000000C00008C0D0000BF0800009B0B00000000000000090000000C0000B60200008A080000B00A00000001000000090000000C0000740300009E080000C60A00000002000000090000000C000031040000B3080000DC0A00000003000000090000000C0000EC040000C7080000F00A00000004000000090000000C0000A5050000DA080000040B00000005000000090000000C00005D060000ED080000170B00000006000000090000000C000013070000000900002A0B00000007000000090000000C0000C7070000120900003C0B00000008000000090000000C000079080000240900004D0B00000009000000090000000C00002A090000350900005E0B0000000A000000090000000C0000DA090000460900006E0B0000000B000000090000000C0000870A0000570900007D0B0000000C000000090000000C0000330B0000670900008C0B0000000D000000090000000C0000DD0B0000770900009A0B0000000E000000090000000C0000860C000086090000A80B0000000F000000090000000C00002C0D000095090000B50B00000010000000090000000C0000D20D0000A4090000C10B000000000000000A0000000C0000F902000061090000D60A000000010000000A0000000C0000B703000076090000EC0A000000020000000A0000000C0000740400008B090000010B000000030000000A0000000C00002F050000A0090000150B000000040000000A0000000C0000E9050000B4090000290B000000050000000A0000000C0000A0060000C80900003D0B000000060000000A0000000C000056070000DB0900004F0B000000070000000A0000000C00000B080000EE090000610B000000080000000A0000000C0000BD080000010A0000730B000000090000000A0000000C00006E090000130A0000830B0000000A0000000A0000000C00001E0A0000240A0000940B0000000B0000000A0000000C0000CB0A0000360A0000A30B0000000C0000000A0000000C0000770B0000470A0000B20B0000000D0000000A0000000C0000220C0000570A0000C00B0000000E0000000A0000000C0000CA0C0000670A0000CD0B0000000F0000000A0000000C0000710D0000770A0000DA0B000000100000000A0000000C0000160E0000860A0000E70B000000000000000B0000000C00003C030000350A0000FB0A000000010000000B0000000C0000FA0300004B0A0000110B000000020000000B0000000C0000B7040000610A0000260B000000030000000B0000000C000072050000760A00003A0B000000040000000B0000000C00002C0600008B0A00004E0B000000050000000B0000000C0000E4060000A00A0000620B000000060000000B0000000C00009A070000B40A0000750B000000070000000B0000000C00004E080000C70A0000870B000000080000000B0000000C000001090000DB0A0000980B000000090000000B0000000C0000B2090000ED0A0000A90B0000000A0000000B0000000C0000610A0000000B0000B90B0000000B0000000B0000000C00000F0B0000120B0000C80B0000000C0000000B0000000C0000BB0B0000230B0000D70B0000000D0000000B0000000C0000660C0000340B0000E50B0000000E0000000B0000000C00000E0D0000450B0000F30B0000000F0000000B0000000C0000B50D0000550B0000000C000000100000000B0000000C00005B0E0000650B00000C0C000000000000000C0000000C00007E030000070B00001F0B000000010000000C0000000C00003D0400001E0B0000350B000000020000000C0000000C0000F9040000340B00004B0B000000030000000C0000000C0000B50500004A0B00005F0B000000040000000C0000000C00006E060000600B0000730B000000050000000C0000000C000026070000750B0000870B000000060000000C0000000C0000DD0700008A0B00009A0B000000070000000C0000000C0000910800009E0B0000AC0B000000080000000C0000000C000044090000B20B0000BD0B000000090000000C0000000C0000F5090000C60B0000CE0B0000000A0000000C0000000C0000A50A0000D90B0000DE0B0000000B0000000C0000000C0000530B0000EB0B0000EE0B0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B0000000D0000000C0000000C0000A90C00000F0C00000B0C0000000E0000000C0000000C0000520D0000210C0000180C0000000F0000000C0000000C0000F90D0000320C0000250C000000100000000C0000000C00009F0E0000420C0000320C000000000000000D0000000C0000C0030000D70B0000440B000000010000000D0000000C00007F040000EE0B00005A0B000000020000000D0000000C00003C050000050C00006F0B000000030000000D0000000C0000F70500001C0C0000840B000000040000000D0000000C0000B1060000320C0000980B000000050000000D0000000C000069070000480C0000AB0B000000060000000D0000000C00001F0800005D0C0000BE0B000000070000000D0000000C0000D4080000720C0000D00B000000080000000D0000000C000087090000870C0000E20B000000090000000D0000000C0000380A00009B0C0000F30B0000000A0000000D0000000C0000E80A0000AF0C0000030C0000000B0000000D0000000C0000960B0000C20C0000130C0000000C0000000D0000000C0000420C0000D50C0000210C0000000D0000000D0000000C0000ED0C0000E80C0000300C0000000E0000000D0000000C0000960D0000FA0C00003D0C0000000F0000000D0000000C00003D0E00000B0D00004A0C000000100000000D0000000C0000E20E00001D0D0000570C000000000000000E0000000C000001040000A40C0000680B000000010000000E0000000C0000C0040000BC0C00007E0B000000020000000E0000000C00007D050000D40C0000940B000000030000000E0000000C000039060000EB0C0000A80B000000040000000E0000000C0000F3060000020D0000BD0B000000050000000E0000000C0000AB070000180D0000D00B000000060000000E0000000C0000610800002E0D0000E30B000000070000000E0000000C000016090000440D0000F50B000000080000000E0000000C0000C9090000590D0000070C000000090000000E0000000C00007B0A00006E0D0000170C0000000A0000000E0000000C00002A0B0000830D0000280C0000000B0000000E0000000C0000D80B0000970D0000370C0000000C0000000E0000000C0000850C0000AA0D0000460C0000000D0000000E0000000C0000300D0000BD0D0000550C0000000E0000000E0000000C0000D90D0000D00D0000620C0000000F0000000E0000000C0000800E0000E30D00006F0C000000100000000E0000000C0000260F0000F40D00007C0C000000000000000F0000000C0000420400006E0D00008C0B000000010000000F0000000C000001050000870D0000A20B000000020000000F0000000C0000BF0500009F0D0000B80B000000030000000F0000000C00007A060000B70D0000CD0B000000040000000F0000000C000034070000CF0D0000E10B000000050000000F0000000C0000EC070000E60D0000F40B000000060000000F0000000C0000A3080000FD0D0000070C000000070000000F0000000C000058090000130E0000190C000000080000000F0000000C00000B0A0000290E00002B0C000000090000000F0000000C0000BD0A00003F0E00003C0C0000000A0000000F0000000C00006D0B0000540E00004C0C0000000B0000000F0000000C00001B0C0000690E00005C0C0000000C0000000F0000000C0000C70C00007D0E00006B0C0000000D0000000F0000000C0000720D0000910E0000790C0000000E0000000F0000000C00001B0E0000A40E0000870C0000000F0000000F0000000C0000C30E0000B70E0000940C000000100000000F0000000C0000690F0000CA0E0000A00C00000000000000100000000C000083040000360E0000B00B00000001000000100000000C0000420500004F0E0000C60B00000002000000100000000C000000060000680E0000DC0B00000003000000100000000C0000BB060000810E0000F10B00000004000000100000000C000075070000990E0000050C00000005000000100000000C00002E080000B10E0000180C00000006000000100000000C0000E4080000C90E00002B0C00000007000000100000000C000099090000E00E00003E0C00000008000000100000000C00004D0A0000F70E00004F0C00000009000000100000000C0000FE0A00000D0F0000600C0000000A000000100000000C0000AE0B0000230F0000700C0000000B000000100000000C00005D0C0000380F0000800C0000000C000000100000000C0000090D00004D0F00008F0C0000000D000000100000000C0000B40D0000610F00009E0C0000000E000000100000000C00005D0E0000750F0000AB0C0000000F000000100000000C0000050F0000890F0000B80C00000010000000100000000C0000AB0F00009C0F0000C50C00000000000000000000000D00004B0000008F000000070A00000001000000000000000D0000090100009D0000001E0A00000002000000000000000D0000C6010000AC000000330A00000003000000000000000D000081020000B9000000480A00000004000000000000000D00003A030000C70000005D0A00000005000000000000000D0000F2030000D4000000700A00000006000000000000000D0000A8040000E0000000830A00000007000000000000000D00005C050000EC000000960A00000008000000000000000D00000E060000F8000000A80A00000009000000000000000D0000BF06000003010000B90A0000000A000000000000000D00006F0700000E010000C90A0000000B000000000000000D00001C08000019010000D90A0000000C000000000000000D0000C808000023010000E80A0000000D000000000000000D0000720900002C010000F70A0000000E000000000000000D00001A0A000035010000050B0000000F000000000000000D0000C10A00003E010000120B00000010000000000000000D0000660B0000460100001E0B00000000000000010000000D0000920000007E010000300A00000001000000010000000D0000500100008D010000460A00000002000000010000000D00000D0200009C0100005C0A00000003000000010000000D0000C8020000AB010000710A00000004000000010000000D000082030000B9010000850A00000005000000010000000D000039040000C6010000990A00000006000000010000000D0000EF040000D3010000AC0A00000007000000010000000D0000A4050000E0010000BF0A00000008000000010000000D000056060000ED010000D00A00000009000000010000000D000007070000F9010000E20A0000000A000000010000000D0000B707000004020000F20A0000000B000000010000000D0000640800000F020000020B0000000C000000010000000D0000100900001A020000110B0000000D000000010000000D0000BA09000024020000200B0000000E000000010000000D0000630A00002E0200002E0B0000000F000000010000000D00000A0B0000370200003B0B00000010000000010000000D0000AF0B000040020000480B00000000000000020000000D0000D90000006A020000580A00000001000000020000000D0000970100007A0200006E0A00000002000000020000000D0000540200008A020000840A00000003000000020000000D00000F03000099020000990A00000004000000020000000D0000C9030000A8020000AE0A00000005000000020000000D000080040000B6020000C20A00000006000000020000000D000036050000C4020000D50A00000007000000020000000D0000EB050000D2020000E70A00000008000000020000000D00009E060000DF020000F90A00000009000000020000000D00004F070000EB0200000A0B0000000A000000020000000D0000FE070000F70200001B0B0000000B000000020000000D0000AC080000030300002B0B0000000C000000020000000D0000580900000F0300003A0B0000000D000000020000000D0000020A00001A030000490B0000000E000000020000000D0000AB0A000024030000570B0000000F000000020000000D0000520B00002E030000640B00000010000000020000000D0000F70B000038030000710B00000000000000030000000D00001F01000054030000800A00000001000000030000000D0000DD01000065030000970A00000002000000030000000D00009A02000075030000AC0A00000003000000030000000D00005503000085030000C10A00000004000000030000000D00000F04000094030000D60A00000005000000030000000D0000C7040000A4030000EA0A00000006000000030000000D00007D050000B2030000FD0A00000007000000030000000D000032060000C0030000100B00000008000000030000000D0000E5060000CE030000220B00000009000000030000000D000096070000DB030000330B0000000A000000030000000D000045080000E8030000430B0000000B000000030000000D0000F3080000F5030000530B0000000C000000030000000D00009F09000001040000630B0000000D000000030000000D00004A0A00000D040000720B0000000E000000030000000D0000F30A000018040000800B0000000F000000030000000D00009A0B0000230400008D0B00000010000000030000000D00003F0C00002D0400009A0B00000000000000040000000D0000640100003C040000A80A00000001000000040000000D0000230200004D040000BE0A00000002000000040000000D0000E00200005E040000D40A00000003000000040000000D00009C0300006F040000E90A00000004000000040000000D0000550400007F040000FE0A00000005000000040000000D00000D0500008E040000120B00000006000000040000000D0000C40500009E040000250B00000007000000040000000D000078060000AD040000380B00000008000000040000000D00002B070000BB0400004A0B00000009000000040000000D0000DD070000C90400005B0B0000000A000000040000000D00008C080000D70400006C0B0000000B000000040000000D00003A090000E40400007C0B0000000C000000040000000D0000E6090000F10400008B0B0000000D000000040000000D0000910A0000FD0400009A0B0000000E000000040000000D00003A0B000009050000A80B0000000F000000040000000D0000E10B000014050000B60B00000010000000040000000D0000870C000020050000C20B00000000000000050000000D0000AA01000020050000CF0A00000001000000050000000D00006802000032050000E60A00000002000000050000000D00002603000044050000FC0A00000003000000050000000D0000E103000055050000110B00000004000000050000000D00009B04000066050000260B00000005000000050000000D000053050000770500003A0B00000006000000050000000D00000A060000870500004D0B00000007000000050000000D0000BE06000096050000600B00000008000000050000000D000071070000A5050000720B00000009000000050000000D000023080000B4050000830B0000000A000000050000000D0000D3080000C2050000940B0000000B000000050000000D000081090000D0050000A40B0000000C000000050000000D00002D0A0000DE050000B30B0000000D000000050000000D0000D80A0000EB050000C20B0000000E000000050000000D0000810B0000F7050000D00B0000000F000000050000000D0000280C000004060000DE0B00000010000000050000000D0000CE0C00000F060000EB0B00000000000000060000000D0000EE01000003060000F70A00000001000000060000000D0000AD020000150600000D0B00000002000000060000000D00006B03000028060000230B00000003000000060000000D0000260400003A060000390B00000004000000060000000D0000E00400004B0600004D0B00000005000000060000000D0000990500005C060000610B00000006000000060000000D00004F0600006D060000750B00000007000000060000000D0000040700007D060000870B00000008000000060000000D0000B70700008D0600009A0B00000009000000060000000D0000690800009D060000AB0B0000000A000000060000000D000019090000AC060000BC0B0000000B000000060000000D0000C7090000BA060000CC0B0000000C000000060000000D0000730A0000C8060000DB0B0000000D000000060000000D00001E0B0000D6060000EA0B0000000E000000060000000D0000C70B0000E3060000F90B0000000F000000060000000D00006F0C0000F0060000060C00000010000000060000000D0000140D0000FD060000130C00000000000000070000000D000033020000E20600001E0B00000001000000070000000D0000F2020000F6060000340B00000002000000070000000D0000AF030000090700004B0B00000003000000070000000D00006B0400001C070000600B00000004000000070000000D0000250500002E070000750B00000005000000070000000D0000DE05000040070000890B00000006000000070000000D000094060000510700009C0B00000007000000070000000D00004907000062070000AF0B00000008000000070000000D0000FD07000072070000C10B00000009000000070000000D0000AE08000083070000D30B0000000A000000070000000D00005E09000092070000E30B0000000B000000070000000D00000C0A0000A2070000F40B0000000C000000070000000D0000B90A0000B0070000030C0000000D000000070000000D0000640B0000BF070000120C0000000E000000070000000D00000D0C0000CD070000200C0000000F000000070000000D0000B50C0000DA0700002E0C00000010000000070000000D00005B0D0000E80700003B0C00000000000000080000000D000077020000C0070000450B00000001000000080000000D000036030000D40700005B0B00000002000000080000000D0000F4030000E7070000720B00000003000000080000000D0000B0040000FB070000870B00000004000000080000000D00006A0500000E0800009C0B00000005000000080000000D00002206000020080000B00B00000006000000080000000D0000D906000032080000C30B00000007000000080000000D00008E07000044080000D60B00000008000000080000000D00004208000055080000E80B00000009000000080000000D0000F308000066080000FA0B0000000A000000080000000D0000A3090000760800000B0C0000000B000000080000000D0000520A0000860800001B0C0000000C000000080000000D0000FF0A0000960800002B0C0000000D000000080000000D0000AA0B0000A50800003A0C0000000E000000080000000D0000530C0000B4080000480C0000000F000000080000000D0000FB0C0000C2080000560C00000010000000080000000D0000A10D0000D0080000630C00000000000000090000000D0000BB0200009A0800006B0B00000001000000090000000D00007A030000AF080000820B00000002000000090000000D000038040000C3080000980B00000003000000090000000D0000F4040000D8080000AE0B00000004000000090000000D0000AE050000EB080000C30B00000005000000090000000D000067060000FE080000D70B00000006000000090000000D00001D07000011090000EA0B00000007000000090000000D0000D307000023090000FD0B00000008000000090000000D00008608000035090000100C00000009000000090000000D00003809000047090000210C0000000A000000090000000D0000E809000058090000320C0000000B000000090000000D0000970A000069090000420C0000000C000000090000000D0000440B000079090000520C0000000D000000090000000D0000EF0B000089090000610C0000000E000000090000000D0000980C000098090000700C0000000F000000090000000D0000400D0000A70900007D0C00000010000000090000000D0000E60D0000B60900008A0C000000000000000A0000000D0000FE02000072090000920B000000010000000A0000000D0000BE03000088090000A90B000000020000000A0000000D00007B0400009D090000BF0B000000030000000A0000000D000037050000B2090000D40B000000040000000A0000000D0000F2050000C6090000E90B000000050000000A0000000D0000AA060000DA090000FE0B000000060000000A0000000D000061070000ED090000110C000000070000000A0000000D000017080000000A0000240C000000080000000A0000000D0000CA080000130A0000360C000000090000000A0000000D00007C090000250A0000480C0000000A0000000A0000000D00002D0A0000370A0000590C0000000B0000000A0000000D0000DB0A0000480A00006A0C0000000C0000000A0000000D0000880B0000590A0000790C0000000D0000000A0000000D0000330C00006A0A0000880C0000000E0000000A0000000D0000DD0C00007A0A0000970C0000000F0000000A0000000D0000850D00008A0A0000A50C000000100000000A0000000D00002B0E0000990A0000B20C000000000000000B0000000D000041030000480A0000B80B000000010000000B0000000D0000010400005E0A0000CF0B000000020000000B0000000D0000BE040000740A0000E50B000000030000000B0000000D00007B050000890A0000FB0B000000040000000B0000000D0000350600009E0A0000100C000000050000000B0000000D0000EE060000B30A0000240C000000060000000B0000000D0000A5070000C70A0000380C000000070000000B0000000D00005A080000DB0A00004B0C000000080000000B0000000D00000E090000EE0A00005D0C000000090000000B0000000D0000C0090000010B00006F0C0000000A0000000B0000000D0000710A0000130B0000800C0000000B0000000B0000000D00001F0B0000250B0000900C0000000C0000000B0000000D0000CC0B0000370B0000A00C0000000D0000000B0000000D0000780C0000480B0000AF0C0000000E0000000B0000000D0000220D0000590B0000BE0C0000000F0000000B0000000D0000CA0D00006A0B0000CC0C000000100000000B0000000D0000700E0000790B0000D90C000000000000000C0000000D0000830300001B0B0000DE0B000000010000000C0000000D000043040000320B0000F50B000000020000000C0000000D000001050000480B00000B0C000000030000000C0000000D0000BD0500005E0B0000210C000000040000000C0000000D000078060000740B0000360C000000050000000C0000000D000031070000890B00004A0C000000060000000C0000000D0000E80700009E0B00005E0C000000070000000C0000000D00009E080000B30B0000710C000000080000000C0000000D000052090000C70B0000840C000000090000000C0000000D0000040A0000DA0B0000950C0000000A0000000C0000000D0000B40A0000ED0B0000A60C0000000B0000000C0000000D0000630B0000000C0000B70C0000000C0000000C0000000D0000100C0000120C0000C70C0000000D0000000C0000000D0000BC0C0000240C0000D60C0000000E0000000C0000000D0000660D0000360C0000E50C0000000F0000000C0000000D00000E0E0000470C0000F30C000000100000000C0000000D0000B40E0000580C0000000D000000000000000D0000000D0000C6030000EB0B0000040C000000010000000D0000000D000085040000030C00001B0C000000020000000D0000000D0000430500001A0C0000310C000000030000000D0000000D000000060000310C0000470C000000040000000D0000000D0000BB060000470C00005C0C000000050000000D0000000D0000740700005D0C0000700C000000060000000D0000000D00002B080000730C0000840C000000070000000D0000000D0000E1080000880C0000970C000000080000000D0000000D0000950900009D0C0000AA0C000000090000000D0000000D0000470A0000B10C0000BC0C0000000A0000000D0000000D0000F80A0000C50C0000CD0C0000000B0000000D0000000D0000A70B0000D80C0000DD0C0000000C0000000D0000000D0000540C0000EB0C0000ED0C0000000D0000000D0000000D0000FF0C0000FF0C0000FF0C0000000E0000000D0000000D0000A90D0000100D00000B0D0000000F0000000D0000000D0000520E0000220D0000190D000000100000000D0000000D0000F80E0000330D0000260D000000000000000E0000000D000007040000B90C0000290C000000010000000E0000000D0000C7040000D10C0000400C000000020000000E0000000D000085050000E90C0000570C000000030000000E0000000D000042060000010D00006D0C000000040000000E0000000D0000FD060000180D0000820C000000050000000E0000000D0000B60700002F0D0000960C000000060000000E0000000D00006D080000450D0000AA0C000000070000000E0000000D0000230900005B0D0000BD0C000000080000000E0000000D0000D7090000700D0000D00C000000090000000E0000000D00008A0A0000850D0000E20C0000000A0000000E0000000D00003A0B00009A0D0000F30C0000000B0000000E0000000D0000E90B0000AE0D0000040D0000000C0000000E0000000D0000970C0000C10D0000140D0000000D0000000E0000000D0000430D0000D50D0000230D0000000E0000000E0000000D0000ED0D0000E80D0000320D0000000F0000000E0000000D0000950E0000FA0D0000400D000000100000000E0000000D00003C0F00000C0E00004D0D000000000000000F0000000D000049040000840D00004F0C000000010000000F0000000D0000090500009D0D0000660C000000020000000F0000000D0000C7050000B60D00007C0C000000030000000F0000000D000084060000CE0D0000920C000000040000000F0000000D00003E070000E60D0000A70C000000050000000F0000000D0000F8070000FD0D0000BC0C000000060000000F0000000D0000AF080000140E0000D00C000000070000000F0000000D0000650900002B0E0000E30C000000080000000F0000000D0000190A0000410E0000F60C000000090000000F0000000D0000CC0A0000570E0000080D0000000A0000000F0000000D00007D0B00006C0E0000190D0000000B0000000F0000000D00002C0C0000810E0000290D0000000C0000000F0000000D0000DA0C0000950E00003A0D0000000D0000000F0000000D0000850D0000A90E0000490D0000000E0000000F0000000D0000300E0000BD0E0000580D0000000F0000000F0000000D0000D80E0000D00E0000660D000000100000000F0000000D00007F0F0000E30E0000730D00000000000000100000000D00008A0400004D0E0000740C00000001000000100000000D00004A050000670E00008B0C00000002000000100000000D000008060000800E0000A20C00000003000000100000000D0000C5060000990E0000B70C00000004000000100000000D000080070000B20E0000CD0C00000005000000100000000D000039080000CA0E0000E10C00000006000000100000000D0000F1080000E10E0000F50C00000007000000100000000D0000A7090000F80E0000080D00000008000000100000000D00005B0A00000F0F00001B0D00000009000000100000000D00000E0B0000260F00002D0D0000000A000000100000000D0000BF0B00003C0F00003E0D0000000B000000100000000D00006E0C0000510F00004F0D0000000C000000100000000D00001C0D0000660F00005F0D0000000D000000100000000D0000C80D00007B0F00006F0D0000000E000000100000000D0000720E00008F0F00007E0D0000000F000000100000000D00001B0F0000A30F00008C0D00000010000000100000000D0000C10F0000B60F0000990D00000000000000000000000E00004E00000096000000B30A00000001000000000000000E00000D010000A5000000CA0A00000002000000000000000E0000CA010000B3000000E10A00000003000000000000000E000086020000C1000000F70A00000004000000000000000E000040030000CE0000000C0B00000005000000000000000E0000F9030000DB000000200B00000006000000000000000E0000B0040000E7000000340B00000007000000000000000E000065050000F3000000470B00000008000000000000000E000018060000FF0000005A0B00000009000000000000000E0000CA0600000A0100006C0B0000000A000000000000000E00007A070000150100007D0B0000000B000000000000000E000029080000200100008E0B0000000C000000000000000E0000D60800002A0100009E0B0000000D000000000000000E00008109000033010000AD0B0000000E000000000000000E00002A0A00003C010000BC0B0000000F000000000000000E0000D20A000045010000CA0B00000010000000000000000E0000780B00004D010000D70B00000000000000010000000E00009500000086010000DD0A00000001000000010000000E00005401000095010000F40A00000002000000010000000E000012020000A40100000B0B00000003000000010000000E0000CE020000B3010000210B00000004000000010000000E000088030000C1010000360B00000005000000010000000E000041040000CE0100004A0B00000006000000010000000E0000F8040000DC0100005E0B00000007000000010000000E0000AD050000E8010000720B00000008000000010000000E000060060000F5010000840B00000009000000010000000E00001207000001020000960B0000000A000000010000000E0000C30700000C020000A70B0000000B000000010000000E00007108000017020000B80B0000000C000000010000000E00001E09000022020000C80B0000000D000000010000000E0000C90900002C020000D80B0000000E000000010000000E0000730A000036020000E60B0000000F000000010000000E00001B0B000040020000F50B00000010000000010000000E0000C10B000049020000020C00000000000000020000000E0000DB00000073020000070B00000001000000020000000E00009B010000830200001E0B00000002000000020000000E00005902000093020000340B00000003000000020000000E000015030000A20200004A0B00000004000000020000000E0000CF030000B1020000600B00000005000000020000000E000088040000BF020000740B00000006000000020000000E00003F050000CD020000880B00000007000000020000000E0000F4050000DB0200009B0B00000008000000020000000E0000A8060000E8020000AE0B00000009000000020000000E00005A070000F4020000C00B0000000A000000020000000E00000B08000001030000D20B0000000B000000020000000E0000B90800000D030000E20B0000000C000000020000000E00006609000018030000F30B0000000D000000020000000E0000110A000023030000020C0000000E000000020000000E0000BB0A00002E030000110C0000000F000000020000000E0000630B0000380300001F0C00000010000000020000000E0000090C0000410300002D0C00000000000000030000000E0000220100005E030000300B00000001000000030000000E0000E10100006F030000470B00000002000000030000000E00009F0200007F0300005E0B00000003000000030000000E00005B0300008F030000740B00000004000000030000000E0000160400009F030000890B00000005000000030000000E0000CF040000AE0300009E0B00000006000000030000000E000086050000BC030000B20B00000007000000030000000E00003C060000CB030000C50B00000008000000030000000E0000EF060000D8030000D80B00000009000000030000000E0000A2070000E6030000EA0B0000000A000000030000000E000052080000F3030000FC0B0000000B000000030000000E000001090000FF0300000C0C0000000C000000030000000E0000AE0900000B0400001D0C0000000D000000030000000E0000590A0000170400002C0C0000000E000000030000000E0000030B0000220400003B0C0000000F000000030000000E0000AB0B00002D040000490C00000010000000030000000E0000510C000038040000570C00000000000000040000000E00006801000047040000590B00000001000000040000000E00002702000058040000700B00000002000000040000000E0000E502000069040000870B00000003000000040000000E0000A20300007A0400009D0B00000004000000040000000E00005C0400008A040000B20B00000005000000040000000E0000150500009A040000C70B00000006000000040000000E0000CD050000A9040000DB0B00000007000000040000000E000082060000B8040000EF0B00000008000000040000000E000036070000C6040000020C00000009000000040000000E0000E8070000D4040000140C0000000A000000040000000E000099080000E2040000250C0000000B000000040000000E000048090000EF040000360C0000000C000000040000000E0000F5090000FC040000460C0000000D000000040000000E0000A10A000008050000560C0000000E000000040000000E00004B0B000014050000650C0000000F000000040000000E0000F30B000020050000730C00000010000000040000000E0000990C00002B050000810C00000000000000050000000E0000AD0100002C050000820B00000001000000050000000E00006D0200003F050000990B00000002000000050000000E00002B03000050050000B00B00000003000000050000000E0000E803000062050000C60B00000004000000050000000E0000A204000072050000DB0B00000005000000050000000E00005B05000083050000F00B00000006000000050000000E00001306000093050000040C00000007000000050000000E0000C9060000A3050000180C00000008000000050000000E00007D070000B20500002B0C00000009000000050000000E00002F080000C10500003D0C0000000A000000050000000E0000E0080000CF0500004F0C0000000B000000050000000E00008F090000DD050000600C0000000C000000050000000E00003C0A0000EA050000700C0000000D000000050000000E0000E80A0000F7050000800C0000000E000000050000000E0000920B0000040600008F0C0000000F000000050000000E00003A0C0000100600009D0C00000010000000050000000E0000E10C00001C060000AB0C00000000000000060000000E0000F201000010060000AA0B00000001000000060000000E0000B202000023060000C20B00000002000000060000000E00007003000035060000D90B00000003000000060000000E00002D04000047060000EF0B00000004000000060000000E0000E804000059060000040C00000005000000060000000E0000A10500006A060000190C00000006000000060000000E0000590600007A0600002D0C00000007000000060000000E00000F0700008B060000410C00000008000000060000000E0000C30700009B060000540C00000009000000060000000E000075080000AA060000660C0000000A000000060000000E000026090000B9060000780C0000000B000000060000000E0000D5090000C8060000890C0000000C000000060000000E0000830A0000D60600009A0C0000000D000000060000000E00002E0B0000E4060000A90C0000000E000000060000000E0000D80B0000F1060000B80C0000000F000000060000000E0000810C0000FE060000C70C00000010000000060000000E0000280D00000B070000D50C00000000000000070000000E000037020000F0060000D30B00000001000000070000000E0000F702000004070000EA0B00000002000000070000000E0000B503000017070000010C00000003000000070000000E0000720400002A070000170C00000004000000070000000E00002D0500003C0700002D0C00000005000000070000000E0000E60500004E070000420C00000006000000070000000E00009E0600005F070000560C00000007000000070000000E000054070000700700006A0C00000008000000070000000E000008080000810700007D0C00000009000000070000000E0000BB080000910700008F0C0000000A000000070000000E00006C090000A1070000A10C0000000B000000070000000E00001B0A0000B0070000B20C0000000C000000070000000E0000C90A0000BF070000C30C0000000D000000070000000E0000750B0000CE070000D30C0000000E000000070000000E00001F0C0000DC070000E20C0000000F000000070000000E0000C70C0000E9070000F00C00000010000000070000000E00006E0D0000F7070000FE0C00000000000000080000000E00007B020000CF070000FB0B00000001000000080000000E00003B030000E3070000120C00000002000000080000000E0000FA030000F7070000290C00000003000000080000000E0000B70400000A080000400C00000004000000080000000E0000720500001D080000550C00000005000000080000000E00002B060000300800006A0C00000006000000080000000E0000E3060000420800007F0C00000007000000080000000E00009907000053080000930C00000008000000080000000E00004E08000065080000A60C00000009000000080000000E00000009000076080000B80C0000000A000000080000000E0000B109000086080000CA0C0000000B000000080000000E0000610A000096080000DB0C0000000C000000080000000E00000E0B0000A6080000EC0C0000000D000000080000000E0000BA0B0000B5080000FC0C0000000E000000080000000E0000650C0000C40800000B0D0000000F000000080000000E00000D0D0000D20800001A0D00000010000000080000000E0000B40D0000E0080000280D00000000000000090000000E0000BF020000AA080000230C00000001000000090000000E000080030000BF0800003A0C00000002000000090000000E00003E040000D4080000510C00000003000000090000000E0000FB040000E8080000680C00000004000000090000000E0000B6050000FB0800007E0C00000005000000090000000E0000700600000F090000930C00000006000000090000000E00002807000022090000A70C00000007000000090000000E0000DE07000034090000BB0C00000008000000090000000E00009208000046090000CE0C00000009000000090000000E00004509000058090000E10C0000000A000000090000000E0000F609000069090000F30C0000000B000000090000000E0000A60A00007A090000040D0000000C000000090000000E0000540B00008A090000150D0000000D000000090000000E0000000C00009A090000240D0000000E000000090000000E0000AA0C0000A9090000340D0000000F000000090000000E0000530D0000B8090000430D00000010000000090000000E0000FA0D0000C7090000510D000000000000000A0000000E000003030000830900004A0C000000010000000A0000000E0000C303000099090000620C000000020000000A0000000E000082040000AE090000790C000000030000000A0000000E00003F050000C3090000900C000000040000000A0000000E0000FA050000D7090000A60C000000050000000A0000000E0000B4060000EB090000BB0C000000060000000A0000000E00006C070000FF090000CF0C000000070000000A0000000E000022080000120A0000E30C000000080000000A0000000E0000D7080000250A0000F60C000000090000000A0000000E00008A090000370A0000090D0000000A0000000A0000000E00003B0A0000490A00001B0D0000000B0000000A0000000E0000EB0A00005A0A00002C0D0000000C0000000A0000000E0000990B00006B0A00003D0D0000000D0000000A0000000E0000450C00007C0A00004D0D0000000E0000000A0000000E0000EF0C00008C0A00005D0D0000000F0000000A0000000E0000980D00009C0A00006B0D000000100000000A0000000E0000400E0000AB0A0000790D000000000000000B0000000E0000460300005A0A0000720C000000010000000B0000000E000006040000700A00008A0C000000020000000B0000000E0000C5040000860A0000A10C000000030000000B0000000E0000820500009C0A0000B70C000000040000000B0000000E00003E060000B10A0000CD0C000000050000000B0000000E0000F8060000C50A0000E30C000000060000000B0000000E0000B0070000DA0A0000F70C000000070000000B0000000E000066080000ED0A00000B0D000000080000000B0000000E00001B090000010B00001E0D000000090000000B0000000E0000CE090000140B0000310D0000000A0000000B0000000E00007F0A0000260B0000430D0000000B0000000B0000000E00002F0B0000390B0000550D0000000C0000000B0000000E0000DD0B00004A0B0000650D0000000D0000000B0000000E00008A0C00005C0B0000750D0000000E0000000B0000000E0000340D00006D0B0000850D0000000F0000000B0000000E0000DD0D00007D0B0000940D000000100000000B0000000E0000850E00008D0B0000A20D000000000000000C0000000E0000890300002E0B0000990C000000010000000C0000000E000049040000450B0000B10C000000020000000C0000000E0000080500005B0B0000C80C000000030000000C0000000E0000C5050000720B0000DF0C000000040000000C0000000E000081060000870B0000F50C000000050000000C0000000E00003B0700009D0B00000A0D000000060000000C0000000E0000F3070000B20B00001F0D000000070000000C0000000E0000AA080000C60B0000330D000000080000000C0000000E00005F090000DA0B0000460D000000090000000C0000000E0000120A0000EE0B0000590D0000000A0000000C0000000E0000C30A0000010C00006B0D0000000B0000000C0000000E0000730B0000140C00007D0D0000000C0000000C0000000E0000210C0000270C00008D0D0000000D0000000C0000000E0000CE0C0000390C00009E0D0000000E0000000C0000000E0000790D00004A0C0000AD0D0000000F0000000C0000000E0000220E00005C0C0000BC0D000000100000000C0000000E0000C90E00006C0C0000CA0D000000000000000D0000000E0000CB030000FF0B0000C00C000000010000000D0000000E00008C040000170C0000D80C000000020000000D0000000E00004B0500002E0C0000EF0C000000030000000D0000000E000008060000450C0000060D000000040000000D0000000E0000C40600005C0C00001C0D000000050000000D0000000E00007E070000720C0000320D000000060000000D0000000E000036080000870C0000460D000000070000000D0000000E0000ED0800009D0C00005A0D000000080000000D0000000E0000A2090000B20C00006E0D000000090000000D0000000E0000550A0000C60C0000810D0000000A0000000D0000000E0000070B0000DA0C0000930D0000000B0000000D0000000E0000B70B0000ED0C0000A40D0000000C0000000D0000000E0000650C0000010D0000B50D0000000D0000000D0000000E0000120D0000130D0000C60D0000000E0000000D0000000E0000BD0D0000260D0000D50D0000000F0000000D0000000E0000660E0000380D0000E40D000000100000000D0000000E00000D0F0000490D0000F30D000000000000000E0000000E00000D040000CE0C0000E70C000000010000000E0000000E0000CE040000E70C0000FF0C000000020000000E0000000E00008D050000FF0C0000160D000000030000000E0000000E00004A060000160D00002D0D000000040000000E0000000E0000060700002D0D0000430D000000050000000E0000000E0000C0070000440D0000590D000000060000000E0000000E0000790800005B0D00006E0D000000070000000E0000000E000030090000700D0000820D000000080000000E0000000E0000E5090000860D0000950D000000090000000E0000000E0000980A00009B0D0000A80D0000000A0000000E0000000E00004A0B0000B00D0000BA0D0000000B0000000E0000000E0000FA0B0000C40D0000CC0D0000000C0000000E0000000E0000A80C0000D80D0000DD0D0000000D0000000E0000000E0000550D0000EB0D0000ED0D0000000E0000000E0000000E0000FF0D0000FF0D0000FF0D0000000F0000000E0000000E0000A90E0000110E00000C0E000000100000000E0000000E0000510F0000230E00001A0E000000000000000F0000000E00004E0400009A0D00000D0D000000010000000F0000000E00000F050000B40D0000260D000000020000000F0000000E0000CF050000CC0D00003D0D000000030000000F0000000E00008C060000E50D0000540D000000040000000F0000000E000048070000FD0D00006A0D000000050000000F0000000E000003080000140E0000800D000000060000000F0000000E0000BB0800002B0E0000950D000000070000000F0000000E000072090000420E0000A90D000000080000000F0000000E0000270A0000580E0000BC0D000000090000000F0000000E0000DB0A00006E0E0000CF0D0000000A0000000F0000000E00008D0B0000830E0000E20D0000000B0000000F0000000E00003D0C0000980E0000F30D0000000C0000000F0000000E0000EB0C0000AD0E0000040E0000000D0000000F0000000E0000980D0000C10E0000150E0000000E0000000F0000000E0000430E0000D50E0000250E0000000F0000000F0000000E0000ED0E0000E80E0000340E000000100000000F0000000E0000950F0000FB0E0000420E00000000000000100000000E000090040000640E0000340D00000001000000100000000E0000510500007E0E00004C0D00000002000000100000000E000010060000970E0000640D00000003000000100000000E0000CE060000B00E00007A0D00000004000000100000000E00008A070000C90E0000910D00000005000000100000000E000044080000E10E0000A60D00000006000000100000000E0000FD080000F90E0000BB0D00000007000000100000000E0000B4090000100F0000D00D00000008000000100000000E0000690A0000270F0000E30D00000009000000100000000E00001D0B00003E0F0000F60D0000000A000000100000000E0000CF0B0000540F0000090E0000000B000000100000000E00007F0C00006A0F00001B0E0000000C000000100000000E00002E0D00007F0F00002C0E0000000D000000100000000E0000DB0D0000940F00003C0E0000000E000000100000000E0000860E0000A80F00004C0E0000000F000000100000000E0000300F0000BC0F00005B0E00000010000000100000000E0000D80F0000D00F00006A0E00000000000000000000000F0000500000009D0000005C0B00000001000000000000000F000010010000AB000000740B00000002000000000000000F0000CE010000B90000008B0B00000003000000000000000F00008B020000C7000000A10B00000004000000000000000F000046030000D4000000B70B00000005000000000000000F000000040000E1000000CD0B00000006000000000000000F0000B7040000EE000000E10B00000007000000000000000F00006E050000FA000000F50B00000008000000000000000F00002206000006010000090C00000009000000000000000F0000D5060000110100001B0C0000000A000000000000000F0000860700001C0100002D0C0000000B000000000000000F000035080000260100003F0C0000000C000000000000000F0000E3080000300100004F0C0000000D000000000000000F00008F0900003A010000600C0000000E000000000000000F0000390A0000430100006F0C0000000F000000000000000F0000E20A00004C0100007E0C00000010000000000000000F0000890B0000540100008C0C00000000000000010000000F0000970000008E010000870B00000001000000010000000F0000570100009D0100009F0B00000002000000010000000F000016020000AC010000B60B00000003000000010000000F0000D3020000BA010000CD0B00000004000000010000000F00008E030000C8010000E30B00000005000000010000000F000048040000D6010000F80B00000006000000010000000F0000FF040000E30100000D0C00000007000000010000000F0000B6050000F0010000210C00000008000000010000000F00006A060000FC010000340C00000009000000010000000F00001D07000008020000470C0000000A000000010000000F0000CE07000014020000590C0000000B000000010000000F00007E0800001F0200006B0C0000000C000000010000000F00002C0900002A0200007B0C0000000D000000010000000F0000D8090000340200008C0C0000000E000000010000000F0000820A00003E0200009B0C0000000F000000010000000F00002B0B000047020000AA0C00000010000000010000000F0000D20B000050020000B80C00000000000000020000000F0000DE0000007C020000B10B00000001000000020000000F00009E0100008C020000C90B00000002000000020000000F00005D0200009C020000E10B00000003000000020000000F00001A030000AB020000F70B00000004000000020000000F0000D5030000BA0200000E0C00000005000000020000000F00008F040000C8020000230C00000006000000020000000F000047050000D6020000380C00000007000000020000000F0000FD050000E30200004C0C00000008000000020000000F0000B2060000F0020000600C00000009000000020000000F000065070000FD020000720C0000000A000000020000000F00001608000009030000850C0000000B000000020000000F0000C608000015030000960C0000000C000000020000000F00007409000021030000A70C0000000D000000020000000F0000200A00002C030000B70C0000000E000000020000000F0000CB0A000036030000C70C0000000F000000020000000F0000740B000040030000D60C00000010000000020000000F00001B0C00004A030000E50C00000000000000030000000F00002401000068030000DC0B00000001000000030000000F0000E501000079030000F40B00000002000000030000000F0000A4020000890300000B0C00000003000000030000000F00006103000099030000220C00000004000000030000000F00001C040000A8030000380C00000005000000030000000F0000D6040000B70300004E0C00000006000000030000000F00008E050000C6030000630C00000007000000030000000F000045060000D4030000770C00000008000000030000000F0000FA060000E20300008B0C00000009000000030000000F0000AD070000EF0300009E0C0000000A000000030000000F00005E080000FC030000B00C0000000B000000030000000F00000E09000009040000C20C0000000C000000030000000F0000BC09000015040000D30C0000000D000000030000000F0000680A000021040000E30C0000000E000000030000000F0000130B00002C040000F30C0000000F000000030000000F0000BC0B000037040000020D00000010000000030000000F0000630C000041040000100D00000000000000040000000F00006A01000051040000060C00000001000000040000000F00002B020000630400001E0C00000002000000040000000F0000EA02000074040000360C00000003000000040000000F0000A7030000840400004D0C00000004000000040000000F00006304000095040000630C00000005000000040000000F00001D050000A4040000790C00000006000000040000000F0000D5050000B40400008E0C00000007000000040000000F00008C060000C3040000A20C00000008000000040000000F000041070000D1040000B60C00000009000000040000000F0000F4070000DF040000C90C0000000A000000040000000F0000A5080000ED040000DB0C0000000B000000040000000F000055090000FA040000ED0C0000000C000000040000000F0000030A000007050000FE0C0000000D000000040000000F0000B00A0000130500000E0D0000000E000000040000000F00005B0B00001F0500001E0D0000000F000000040000000F0000040C00002B0500002D0D00000010000000040000000F0000AB0C0000360500003C0D00000000000000050000000F0000B001000038050000300C00000001000000050000000F0000710200004A050000480C00000002000000050000000F0000300300005C050000600C00000003000000050000000F0000EE0300006D050000770C00000004000000050000000F0000A90400007E0500008D0C00000005000000050000000F0000630500008F050000A30C00000006000000050000000F00001C0600009F050000B80C00000007000000050000000F0000D2060000AE050000CD0C00000008000000050000000F000087070000BE050000E00C00000009000000050000000F00003B080000CC050000F40C0000000A000000050000000F0000EC080000DB050000060D0000000B000000050000000F00009C090000E9050000180D0000000C000000050000000F00004B0A0000F6050000290D0000000D000000050000000F0000F70A0000040600003A0D0000000E000000050000000F0000A20B0000100600004A0D0000000F000000050000000F00004B0C00001D060000590D00000010000000050000000F0000F30C000028060000670D00000000000000060000000F0000F60100001C0600005A0C00000001000000060000000F0000B60200002F060000720C00000002000000060000000F000076030000420600008A0C00000003000000060000000F00003304000054060000A10C00000004000000060000000F0000EF04000065060000B80C00000005000000060000000F0000A905000076060000CD0C00000006000000060000000F00006206000087060000E30C00000007000000060000000F00001907000098060000F70C00000008000000060000000F0000CE070000A80600000B0D00000009000000060000000F000081080000B70600001E0D0000000A000000060000000F000033090000C6060000310D0000000B000000060000000F0000E3090000D5060000430D0000000C000000060000000F0000910A0000E3060000540D0000000D000000060000000F00003E0B0000F1060000650D0000000E000000060000000F0000E90B0000FE060000750D0000000F000000060000000F0000930C00000B070000840D00000010000000060000000F00003A0D000018070000930D00000000000000070000000F00003A020000FE060000840C00000001000000070000000F0000FC020000120700009C0C00000002000000070000000F0000BB03000025070000B40C00000003000000070000000F00007904000037070000CB0C00000004000000070000000F0000340500004A070000E20C00000005000000070000000F0000EF0500005C070000F70C00000006000000070000000F0000A70600006D0700000D0D00000007000000070000000F00005E0700007E070000210D00000008000000070000000F0000140800008F070000350D00000009000000070000000F0000C70800009F070000490D0000000A000000070000000F000079090000AF0700005B0D0000000B000000070000000F0000290A0000BE0700006D0D0000000C000000070000000F0000D80A0000CD0700007F0D0000000D000000070000000F0000850B0000DC0700008F0D0000000E000000070000000F0000300C0000EA0700009F0D0000000F000000070000000F0000D90C0000F8070000AF0D00000010000000070000000F0000810D000005080000BE0D00000000000000080000000F00007F020000DD070000AD0C00000001000000080000000F000040030000F1070000C60C00000002000000080000000F00000004000005080000DD0C00000003000000080000000F0000BD04000019080000F50C00000004000000080000000F00007A0500002C0800000B0D00000005000000080000000F0000340600003E080000210D00000006000000080000000F0000ED06000051080000370D00000007000000080000000F0000A4070000620800004B0D00000008000000080000000F000059080000740800005F0D00000009000000080000000F00000D09000085080000730D0000000A000000080000000F0000BF09000095080000850D0000000B000000080000000F00006F0A0000A5080000980D0000000C000000080000000F00001E0B0000B5080000A90D0000000D000000080000000F0000CB0B0000C4080000BA0D0000000E000000080000000F0000760C0000D3080000CA0D0000000F000000080000000F0000200D0000E2080000DA0D00000010000000080000000F0000C80D0000F0080000E80D00000000000000090000000F0000C3020000BA080000D60C00000001000000090000000F000084030000CF080000EF0C00000002000000090000000F000044040000E3080000070D00000003000000090000000F000002050000F70800001E0D00000004000000090000000F0000BE0500000B090000350D00000005000000090000000F0000790600001F0900004B0D00000006000000090000000F00003207000032090000600D00000007000000090000000F0000E907000044090000750D00000008000000090000000F00009E08000056090000890D00000009000000090000000F000052090000680900009D0D0000000A000000090000000F0000040A000079090000AF0D0000000B000000090000000F0000B50A00008A090000C20D0000000C000000090000000F0000630B00009A090000D30D0000000D000000090000000F0000100C0000AA090000E40D0000000E000000090000000F0000BC0C0000BA090000F40D0000000F000000090000000F0000660D0000C9090000040E00000010000000090000000F00000E0E0000D8090000130E000000000000000A0000000F00000703000094090000FF0C000000010000000A0000000F0000C8030000A9090000180D000000020000000A0000000F000088040000BF090000300D000000030000000A0000000F000046050000D4090000470D000000040000000A0000000F000002060000E80900005E0D000000050000000A0000000F0000BD060000FC090000740D000000060000000A0000000F000076070000100A00008A0D000000070000000A0000000F00002D080000230A00009F0D000000080000000A0000000F0000E3080000360A0000B30D000000090000000A0000000F000097090000480A0000C60D0000000A0000000A0000000F0000490A00005A0A0000D90D0000000B0000000A0000000F0000FA0A00006C0A0000EC0D0000000C0000000A0000000F0000A90B00007D0A0000FD0D0000000D0000000A0000000F0000560C00008E0A00000E0E0000000E0000000A0000000F0000010D00009E0A00001E0E0000000F0000000A0000000F0000AB0D0000AE0A00002E0E000000100000000A0000000F0000530E0000BD0A00003D0E000000000000000B0000000F00004A0300006B0A0000280D000000010000000B0000000F00000C040000820A0000410D000000020000000B0000000F0000CC040000980A0000590D000000030000000B0000000F00008A050000AD0A0000700D000000040000000B0000000F000046060000C20A0000870D000000050000000B0000000F000001070000D70A00009D0D000000060000000B0000000F0000BA070000EC0A0000B30D000000070000000B0000000F000072080000000B0000C80D000000080000000B0000000F000027090000130B0000DC0D000000090000000B0000000F0000DB090000260B0000F00D0000000A0000000B0000000F00008E0A0000390B0000030E0000000B0000000B0000000F00003E0B00004B0B0000150E0000000C0000000B0000000F0000ED0B00005D0B0000270E0000000D0000000B0000000F00009B0C00006E0B0000380E0000000E0000000B0000000F0000460D00007F0B0000480E0000000F0000000B0000000F0000F00D0000900B0000580E000000100000000B0000000F0000990E0000A00B0000670E000000000000000C0000000F00008D030000400B0000500D000000010000000C0000000F00004F040000570B0000690D000000020000000C0000000F00000F0500006E0B0000810D000000030000000C0000000F0000CD050000840B0000990D000000040000000C0000000F00008A0600009A0B0000B00D000000050000000C0000000F000045070000B00B0000C60D000000060000000C0000000F0000FE070000C50B0000DC0D000000070000000C0000000F0000B5080000DA0B0000F10D000000080000000C0000000F00006B090000EE0B0000050E000000090000000C0000000F00001F0A0000020C0000190E0000000A0000000C0000000F0000D20A0000150C00002C0E0000000B0000000C0000000F0000830B0000280C00003F0E0000000C0000000C0000000F0000320C00003A0C0000500E0000000D0000000C0000000F0000DF0C00004D0C0000620E0000000E0000000C0000000F00008B0D00005E0C0000720E0000000F0000000C0000000F0000350E0000700C0000820E000000100000000C0000000F0000DE0E0000810C0000910E000000000000000D0000000F0000D0030000130C0000790D000000010000000D0000000F0000920400002A0C0000920D000000020000000D0000000F000052050000420C0000AA0D000000030000000D0000000F000010060000590C0000C20D000000040000000D0000000F0000CD060000700C0000D90D000000050000000D0000000F000088070000860C0000EF0D000000060000000D0000000F0000410800009C0C0000050E000000070000000D0000000F0000F9080000B10C00001A0E000000080000000D0000000F0000AF090000C60C00002E0E000000090000000D0000000F0000630A0000DA0C0000420E0000000A0000000D0000000F0000160B0000EE0C0000550E0000000B0000000D0000000F0000C70B0000020D0000680E0000000C0000000D0000000F0000760C0000150D00007A0E0000000D0000000D0000000F0000230D0000280D00008B0E0000000E0000000D0000000F0000CF0D00003B0D00009C0E0000000F0000000D0000000F0000790E00004D0D0000AC0E000000100000000D0000000F0000220F00005E0D0000BB0E000000000000000E0000000F000012040000E20C0000A10D000000010000000E0000000F0000D4040000FB0C0000BA0D000000020000000E0000000F000094050000130D0000D20D000000030000000E0000000F0000530600002B0D0000EA0D000000040000000E0000000F00000F070000420D0000010E000000050000000E0000000F0000CA070000590D0000170E000000060000000E0000000F000084080000700D00002D0E000000070000000E0000000F00003C090000860D0000420E000000080000000E0000000F0000F20900009B0D0000570E000000090000000E0000000F0000A60A0000B10D00006B0E0000000A0000000E0000000F0000590B0000C50D00007E0E0000000B0000000E0000000F00000A0C0000DA0D0000910E0000000C0000000E0000000F0000B90C0000EE0D0000A30E0000000D0000000E0000000F0000670D0000010E0000B40E0000000E0000000E0000000F0000130E0000150E0000C50E0000000F0000000E0000000F0000BD0E0000270E0000D50E000000100000000E0000000F0000660F00003A0E0000E40E000000000000000F0000000F000054040000B00D0000C80D000000010000000F0000000F000016050000C90D0000E20D000000020000000F0000000F0000D6050000E20D0000FA0D000000030000000F0000000F000095060000FA0D0000120E000000040000000F0000000F000052070000120E0000290E000000050000000F0000000F00000D0800002A0E0000400E000000060000000F0000000F0000C6080000410E0000560E000000070000000F0000000F00007E090000580E00006B0E000000080000000F0000000F0000350A00006E0E0000800E000000090000000F0000000F0000E90A0000840E0000940E0000000A0000000F0000000F00009C0B00009A0E0000A70E0000000B0000000F0000000F00004D0C0000AF0E0000BA0E0000000C0000000F0000000F0000FD0C0000C40E0000CC0E0000000D0000000F0000000F0000AA0D0000D80E0000DD0E0000000E0000000F0000000F0000570E0000EC0E0000EE0E0000000F0000000F0000000F0000FF0E0000FF0E0000FF0E000000100000000F0000000F0000AA0F0000120F00000D0F00000000000000100000000F0000950400007A0E0000F00D00000001000000100000000F000057050000940E0000090E00000002000000100000000F000018060000AE0E0000220E00000003000000100000000F0000D6060000C70E00003A0E00000004000000100000000F000093070000E00E0000510E00000005000000100000000F00004F080000F80E0000680E00000006000000100000000F000009090000100F00007E0E00000007000000100000000F0000C1090000280F0000930E00000008000000100000000F0000770A00003F0F0000A80E00000009000000100000000F00002C0B0000560F0000BC0E0000000A000000100000000F0000DE0B00006C0F0000CF0E0000000B000000100000000F0000900C0000820F0000E20E0000000C000000100000000F00003F0D0000970F0000F40E0000000D000000100000000F0000ED0D0000AC0F0000060F0000000E000000100000000F00009A0E0000C10F0000170F0000000F000000100000000F0000440F0000D50F0000270F00000010000000100000000F0000ED0F0000E90F0000360F000000000000000000000010000051000000A3000000000C000000010000000000000010000012010000B1000000190C0000000200000000000000100000D2010000BF000000310C00000003000000000000001000008F020000CD000000480C00000004000000000000001000004B030000DA0000005F0C000000050000000000000010000006040000E7000000750C0000000600000000000000100000BE040000F40000008A0C000000070000000000000010000076050000000100009F0C00000008000000000000001000002B0600000C010000B30C0000000900000000000000100000DF06000017010000C70C0000000A000000000000001000009107000022010000DA0C0000000B00000000000000100000410800002C010000EC0C0000000C00000000000000100000F008000036010000FE0C0000000D000000000000001000009D090000400100000E0D0000000E00000000000000100000480A0000490100001F0D0000000F00000000000000100000F10A0000510100002E0D0000001000000000000000100000990B00005A0100003D0D000000000000000100000010000098000000940100002C0C00000001000000010000001000005A010000A4010000450C000000020000000100000010000019020000B30100005D0C0000000300000001000000100000D7020000C1010000750C000000040000000100000010000093030000CF0100008C0C00000005000000010000001000004E040000DD010000A20C000000060000000100000010000007050000EA010000B70C0000000700000001000000100000BE050000F7010000CC0C00000008000000010000001000007306000003020000E00C0000000900000001000000100000270700000F020000F40C0000000A00000001000000100000D90700001B020000070D0000000B000000010000001000008A08000026020000190D0000000C0000000100000010000039090000310200002B0D0000000D00000001000000100000E60900003B0200003C0D0000000E00000001000000100000910A0000450200004C0D0000000F000000010000001000003B0B00004E0200005C0D0000001000000001000000100000E30B0000570200006B0D0000000000000002000000100000E000000084020000580C0000000100000002000000100000A101000094020000710C000000020000000200000010000061020000A4020000890C00000003000000020000001000001F030000B3020000A10C0000000400000002000000100000DB030000C2020000B80C000000050000000200000010000096040000D0020000CE0C00000006000000020000001000004F050000DE020000E40C000000070000000200000010000006060000EB020000F90C0000000800000002000000100000BC060000F90200000D0D00000009000000020000001000007007000005030000210D0000000A000000020000001000002208000011030000340D0000000B00000002000000100000D20800001D030000460D0000000C000000020000001000008109000029030000580D0000000D000000020000001000002E0A000034030000690D0000000E00000002000000100000DA0A00003E0300007A0D0000000F00000002000000100000840B0000490300008A0D00000010000000020000001000002C0C000052030000990D00000000000000030000001000002601000071030000840C0000000100000003000000100000E8010000820300009D0C0000000200000003000000100000A802000092030000B50C000000030000000300000010000066030000A2030000CD0C000000040000000300000010000022040000B1030000E40C0000000500000003000000100000DD040000C0030000FA0C000000060000000300000010000096050000CF030000100D00000007000000030000001000004E060000DD030000250D000000080000000300000010000003070000EB0300003A0D0000000900000003000000100000B7070000F90300004E0D0000000A000000030000001000006A08000006040000610D0000000B000000030000001000001A09000012040000730D0000000C00000003000000100000C90900001E040000850D0000000D00000003000000100000770A00002A040000960D0000000E00000003000000100000220B000035040000A70D0000000F00000003000000100000CC0B000040040000B70D0000001000000003000000100000750C00004B040000C60D00000000000000040000001000006D0100005B040000B00C00000001000000040000001000002E0200006D040000C90C0000000200000004000000100000EE0200007E040000E10C0000000300000004000000100000AD0300008E040000F90C0000000400000004000000100000690400009F040000100D000000050000000400000010000024050000AE040000260D0000000600000004000000100000DD050000BE0400003C0D000000070000000400000010000095060000CD040000520D00000008000000040000001000004B070000DB040000660D0000000900000004000000100000FF070000E90400007A0D0000000A00000004000000100000B1080000F70400008D0D0000000B000000040000001000006209000004050000A00D0000000C00000004000000100000110A000011050000B20D0000000D00000004000000100000BF0A00001E050000C30D0000000E000000040000001000006B0B00002A050000D40D0000000F00000004000000100000150C000035050000E40D0000001000000004000000100000BD0C000041050000F30D0000000000000005000000100000B301000043050000DB0C00000001000000050000001000007402000055050000F40C000000020000000500000010000035030000670500000D0D0000000300000005000000100000F303000078050000240D0000000400000005000000100000B0040000890500003C0D00000005000000050000001000006B0500009A050000520D000000060000000500000010000024060000AA050000680D0000000700000005000000100000DC060000BA0500007E0D000000080000000500000010000092070000C9050000920D000000090000000500000010000046080000D8050000A60D0000000A00000005000000100000F9080000E6050000BA0D0000000B00000005000000100000A9090000F4050000CC0D0000000C00000005000000100000590A000002060000DE0D0000000D00000005000000100000060B00000F060000F00D0000000E00000005000000100000B20B00001C060000010E0000000F000000050000001000005C0C000028060000110E0000001000000005000000100000050D000034060000200E0000000000000006000000100000F801000028060000060D0000000100000006000000100000BA0200003B0600001F0D00000002000000060000001000007A0300004E060000380D00000003000000060000001000003904000060060000500D0000000400000006000000100000F604000071060000670D0000000500000006000000100000B1050000830600007E0D00000006000000060000001000006A06000093060000940D000000070000000600000010000022070000A4060000A90D0000000800000006000000100000D8070000B4060000BE0D00000009000000060000001000008D080000C3060000D20D0000000A000000060000001000003F090000D3060000E60D0000000B00000006000000100000F0090000E1060000F80D0000000C00000006000000100000A00A0000F00600000B0E0000000D000000060000001000004E0B0000FE0600001C0E0000000E00000006000000100000FA0B00000B0700002D0E0000000F00000006000000100000A40C0000180700003D0E00000010000000060000001000004D0D0000250700004D0E00000000000000070000001000003D0200000B070000310D0000000100000007000000100000FF0200001E0700004A0D0000000200000007000000100000C003000032070000630D00000003000000070000001000007E040000440700007B0D00000004000000070000001000003B05000057070000920D0000000500000007000000100000F705000069070000A90D0000000600000007000000100000B00600007A070000BF0D0000000700000007000000100000680700008C070000D50D00000008000000070000001000001E0800009C070000EA0D0000000900000007000000100000D3080000AD070000FE0D0000000A0000000700000010000086090000BD070000110E0000000B00000007000000100000370A0000CC070000240E0000000C00000007000000100000E60A0000DB070000370E0000000D00000007000000100000940B0000EA070000480E0000000E00000007000000100000400C0000F8070000590E0000000F00000007000000100000EB0C0000060800006A0E0000001000000007000000100000940D000013080000790E000000000000000800000010000082020000EB0700005C0D000000010000000800000010000044030000FF070000750D000000020000000800000010000005040000130800008E0D0000000300000008000000100000C404000027080000A60D0000000400000008000000100000810500003A080000BD0D00000005000000080000001000003C0600004D080000D40D0000000600000008000000100000F60600005F080000EB0D0000000700000008000000100000AE07000071080000000E00000008000000080000001000006408000082080000150E00000009000000080000001000001909000093080000290E0000000A00000008000000100000CC090000A40800003D0E0000000B000000080000001000007D0A0000B4080000500E0000000C000000080000001000002D0B0000C4080000630E0000000D00000008000000100000DB0B0000D3080000740E0000000E00000008000000100000870C0000E2080000850E0000000F00000008000000100000320D0000F1080000960E0000001000000008000000100000DA0D0000FF080000A60E0000000000000009000000100000C7020000C8080000860D000000010000000900000010000089030000DE0800009F0D000000020000000900000010000049040000F2080000B80D00000003000000090000001000000805000007090000D10D0000000400000009000000100000C60500001A090000E80D0000000500000009000000100000810600002E090000FF0D00000006000000090000001000003B07000041090000160E0000000700000009000000100000F3070000530900002B0E0000000800000009000000100000A908000066090000400E00000009000000090000001000005E09000077090000550E0000000A00000009000000100000110A000089090000690E0000000B00000009000000100000C30A00009A0900007C0E0000000C00000009000000100000730B0000AA0900008E0E0000000D00000009000000100000210C0000BA090000A00E0000000E00000009000000100000CD0C0000CA090000B10E0000000F00000009000000100000780D0000D9090000C20E0000001000000009000000100000210E0000E8090000D20E000000000000000A0000001000000B030000A3090000B00D000000010000000A000000100000CD030000B9090000CA0D000000020000000A0000001000008E040000CF090000E30D000000030000000A0000001000004D050000E4090000FB0D000000040000000A0000001000000A060000F8090000130E000000050000000A000000100000C60600000C0A00002A0E000000060000000A00000010000080070000200A0000400E000000070000000A00000010000038080000340A0000560E000000080000000A000000100000EE080000460A00006B0E000000090000000A000000100000A3090000590A0000800E0000000A0000000A000000100000570A00006B0A0000940E0000000B0000000A000000100000080B00007D0A0000A70E0000000C0000000A000000100000B80B00008E0A0000BA0E0000000D0000000A000000100000660C00009F0A0000CB0E0000000E0000000A000000100000130D0000AF0A0000DD0E0000000F0000000A000000100000BE0D0000BF0A0000ED0E000000100000000A000000100000670E0000CF0A0000FD0E000000000000000B0000001000004E0300007C0A0000DA0D000000010000000B00000010000011040000930A0000F40D000000020000000B000000100000D2040000A90A00000D0E000000030000000B00000010000091050000BE0A0000250E000000040000000B0000001000004E060000D40A00003D0E000000050000000B0000001000000A070000E90A0000540E000000060000000B000000100000C4070000FD0A00006B0E000000070000000B0000001000007C080000110B0000810E000000080000000B00000010000033090000250B0000960E000000090000000B000000100000E8090000380B0000AB0E0000000A0000000B0000001000009B0A00004B0B0000BF0E0000000B0000000B0000001000004D0B00005D0B0000D20E0000000C0000000B000000100000FD0B00006F0B0000E50E0000000D0000000B000000100000AB0C0000810B0000F70E0000000E0000000B000000100000580D0000920B0000080F0000000F0000000B000000100000030E0000A20B0000190F000000100000000B000000100000AC0E0000B30B0000290F000000000000000C00000010000091030000520B0000040E000000010000000C00000010000054040000690B00001E0E000000020000000C00000010000015050000800B0000370E000000030000000C000000100000D4050000970B00004F0E000000040000000C00000010000092060000AD0B0000670E000000050000000C0000001000004E070000C20B00007F0E000000060000000C00000010000008080000D70B0000950E000000070000000C000000100000C0080000EC0B0000AB0E000000080000000C00000010000077090000000C0000C10E000000090000000C0000001000002C0A0000140C0000D50E0000000A0000000C000000100000E00A0000280C0000E90E0000000B0000000C000000100000920B00003B0C0000FD0E0000000C0000000C000000100000420C00004E0C0000100F0000000D0000000C000000100000F00C0000600C0000220F0000000E0000000C0000001000009D0D0000720C0000330F0000000F0000000C000000100000480E0000830C0000440F000000100000000C000000100000F10E0000940C0000540F000000000000000D000000100000D4030000250C00002D0E000000010000000D000000100000970400003D0C0000470E000000020000000D00000010000058050000550C0000610E000000030000000D000000100000170600006C0C0000790E000000040000000D000000100000D5060000830C0000910E000000050000000D00000010000091070000990C0000A90E000000060000000D0000001000004B080000AF0C0000BF0E000000070000000D00000010000004090000C50C0000D60E000000080000000D000000100000BB090000DA0C0000EB0E000000090000000D000000100000700A0000EE0C0000000F0000000A0000000D000000100000240B0000020D0000140F0000000B0000000D000000100000D60B0000160D0000280F0000000C0000000D000000100000860C00002A0D00003A0F0000000D0000000D000000100000350D00003D0D00004D0F0000000E0000000D000000100000E10D00004F0D00005E0F0000000F0000000D0000001000008D0E0000610D00006F0F000000100000000D000000100000360F0000730D00007F0F000000000000000E00000010000017040000F60C0000570E000000010000000E000000100000D90400000F0D0000710E000000020000000E0000001000009B050000270D00008A0E000000030000000E0000001000005A0600003F0D0000A30E000000040000000E00000010000018070000570D0000BB0E000000050000000E000000100000D40700006E0D0000D30E000000060000000E0000001000008E080000840D0000E90E000000070000000E000000100000470900009A0D0000000F000000080000000E000000100000FE090000B00D0000150F000000090000000E000000100000B40A0000C60D00002A0F0000000A0000000E000000100000670B0000DB0D00003E0F0000000B0000000E0000001000001A0C0000EF0D0000520F0000000C0000000E000000100000CA0C0000030E0000650F0000000D0000000E000000100000790D0000170E0000770F0000000E0000000E000000100000260E00002A0E0000890F0000000F0000000E000000100000D10E00003D0E00009A0F000000100000000E0000001000007B0F00004F0E0000AA0F000000000000000F00000010000059040000C40D0000800E000000010000000F0000001000001C050000DE0D00009A0E000000020000000F000000100000DD050000F70D0000B30E000000030000000F0000001000009C060000100E0000CC0E000000040000000F0000001000005A070000280E0000E50E000000050000000F00000010000017080000400E0000FC0E000000060000000F000000100000D1080000570E0000130F000000070000000F0000001000008A0900006E0E0000290F000000080000000F000000100000410A0000840E00003F0F000000090000000F000000100000F70A00009A0E0000540F0000000A0000000F000000100000AB0B0000B00E0000680F0000000B0000000F0000001000005D0C0000C50E00007C0F0000000C0000000F0000001000000D0D0000DA0E00008F0F0000000D0000000F000000100000BC0D0000EF0E0000A20F0000000E0000000F000000100000690E0000030F0000B30F0000000F0000000F000000100000150F0000160F0000C50F000000100000000F000000100000BF0F0000290F0000D50F00000000000000100000001000009A040000900E0000A90E00000001000000100000001000005D050000AA0E0000C30E00000002000000100000001000001F060000C40E0000DC0E0000000300000010000000100000DE060000DD0E0000F50E00000004000000100000001000009C070000F60E00000E0F0000000500000010000000100000590800000F0F0000250F000000060000001000000010000014090000270F00003D0F0000000700000010000000100000CD0900003F0F0000530F0000000800000010000000100000840A0000560F0000690F00000009000000100000001000003A0B00006D0F00007E0F0000000A00000010000000100000EE0B0000830F0000920F0000000B00000010000000100000A00C0000990F0000A60F0000000C00000010000000100000500D0000AF0F0000B90F0000000D00000010000000100000FF0D0000C40F0000CC0F0000000E00000010000000100000AD0E0000D80F0000DE0F0000000F00000010000000100000580F0000ED0F0000EF0F0000001000000010000000100000FF0F0000FF0F0000FF0F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000BC02000034000000260000000008000000000000000000005F0500006500000048000000000C00000000000000000000E8070000900000005F000000001000000000000000000000550A0000B40000006C0000000000000000040000000000000C010000750300005A000000000400000004000000000000CB030000B6030000830000000008000000040000000000006F060000F1030000A3000000000C00000004000000000000F808000025040000B8000000001000000004000000000000670B000052040000C300000000000000000800000000000013020000C6060000B6000000000400000008000000000000D304000010070000DD0000000008000000080000000000007807000054070000FA000000000C00000008000000000000020A0000910700000D010000001000000008000000000000720C0000C70700001601000000000000000C00000000000013030000EE0900000E01000000040000000C000000000000D4050000410A00003301000000080000000C0000000000007B0800008E0A00004E010000000C0000000C000000000000060B0000D40A00005F01000000100000000C000000000000770D0000130B0000650100000000000000100000000000000D040000ED0C000063010000000400000010000000000000D0060000490D000086010000000800000010000000000000770900009F0D00009F010000000C00000010000000000000040C0000EE0D0000AD010000001000000010000000000000760E0000360E0000B10100000000000000000000000400001F0000003400000055030000000400000000000000040000EC0200006C0000008D0300000008000000000000000400009E0500009D000000BC030000000C0000000000000004000036080000C8000000E0030000001000000000000000040000B20A0000EC000000F903000000000000000400000004000030010000BD030000C8030000000400000004000000040000000400000004000000040000000800000004000000040000B20600003A0400002D040000000C000000040000000400004A0900006E0400004F040000001000000004000000040000C80B00009C040000680400000000000000080000000400003B0200001D070000380400000004000000080000000400000A050000690700006E040000000800000008000000040000BF070000AE0700009A040000000C00000008000000040000590A0000EC070000BB040000001000000008000000040000D80C000023080000D304000000000000000C0000000400003F030000550A0000A404000000040000000C00000004000010060000AA0A0000D904000000080000000C000000040000C6080000F90A000004050000000C0000000C000000040000610B0000410B00002405000000100000000C000000040000E20D0000820B00003A0500000000000000100000000400003D040000640D00000D0500000004000000100000000400000F070000C30D000041050000000800000010000000040000C60900001B0E00006A050000000C00000010000000040000630C00006D0E000089050000001000000010000000040000E50E0000B70E00009E050000000000000000000000080000380000006200000074060000000400000000000000080000140300009A000000B9060000000800000000000000080000D5050000CB000000F4060000000C000000000000000800007C080000F600000025070000001000000000000000080000070B00001A0100004B0700000000000000040000000800004C010000FB030000FB0600000004000000040000000800002A0400003E04000040070000000800000004000000080000ED060000790400007B070000000C0000000400000008000095090000AE040000AC070000001000000004000000080000220C0000DC040000D20700000000000000080000000800005A0200006B0700007F0700000004000000080000000800003A050000B8070000C4070000000800000008000000080000000800000008000000080000000C00000008000000080000A80A00003D0800002F080000001000000008000000080000360D0000760800005408000000000000000C00000008000062030000B30A00000008000000040000000C000000080000430600000A0B00004408000000080000000C000000080000090900005A0B00007E080000000C0000000C000000080000B40B0000A40B0000AE08000000100000000C000000080000440E0000E70B0000D308000000000000001000000008000064040000D20D00007C08000000040000001000000008000046070000330E0000C00800000008000000100000000800000E0A00008E0E0000FA080000000C00000010000000080000BA0C0000E10E00002A0900000010000000100000000800004C0F00002F0F00004F0900000000000000000000000C00004800000087000000580900000004000000000000000C000034030000BF000000AA0900000008000000000000000C000004060000F0000000F2090000000C000000000000000C0000BA0800001B0100002F0A00000010000000000000000C0000540B00003F010000620A00000000000000040000000C00006001000030040000F30900000004000000040000000C00004E04000073040000460A00000008000000040000000C000020070000AF0400008E0A0000000C000000040000000C0000D7090000E5040000CC0A00000010000000040000000C0000730C000013050000000B00000000000000080000000C000072020000B00700008B0A00000004000000080000000C000061050000FE070000DE0A00000008000000080000000C00003508000045080000270B0000000C000000080000000C0000EE0A000085080000660B00000010000000080000000C00008C0D0000BF0800009B0B000000000000000C0000000C00007E030000070B00001F0B000000040000000C0000000C00006E060000600B0000730B000000080000000C0000000C000044090000B20B0000BD0B0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B000000100000000C0000000C00009F0E0000420C0000320C00000000000000100000000C000083040000360E0000B00B00000004000000100000000C000075070000990E0000050C00000008000000100000000C00004D0A0000F70E00004F0C0000000C000000100000000C0000090D00004D0F00008F0C00000010000000100000000C0000AB0F00009C0F0000C50C000000000000000000000010000051000000A3000000000C00000004000000000000001000004B030000DA0000005F0C00000008000000000000001000002B0600000C010000B30C0000000C00000000000000100000F008000036010000FE0C0000001000000000000000100000990B00005A0100003D0D00000000000000040000001000006D0100005B040000B00C0000000400000004000000100000690400009F040000100D00000008000000040000001000004B070000DB040000660D0000000C00000004000000100000110A000011050000B20D0000001000000004000000100000BD0C000041050000F30D000000000000000800000010000082020000EB0700005C0D0000000400000008000000100000810500003A080000BD0D00000008000000080000001000006408000082080000150E0000000C000000080000001000002D0B0000C4080000630E0000001000000008000000100000DA0D0000FF080000A60E000000000000000C00000010000091030000520B0000040E000000040000000C00000010000092060000AD0B0000670E000000080000000C00000010000077090000000C0000C10E0000000C0000000C000000100000420C00004E0C0000100F000000100000000C000000100000F10E0000940C0000540F00000000000000100000001000009A040000900E0000A90E00000004000000100000001000009C070000F60E00000E0F0000000800000010000000100000840A0000560F0000690F0000000C00000010000000100000500D0000AF0F0000B90F0000001000000010000000100000FF0F0000FF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000400000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000002F0000003F0000004B00000055000000600000006900000071000000770000007E00000084000000890000008F000000940000009A0000009E000000A2000000A7000000AB000000AF000000B3000000B7000000BC000000BF000000C1000000C5000000C8000000CA000000CE000000D1000000D3000000D7000000DA000000DD000000E0000000E3000000E7000000E9000000EB000000EE000000F2000000F4000000F7000000F9000000FC000000FF000000010100000301000006010000080100000A0100000C0100000F010000110100001301000017010000180100001C0100001E01000020010000210100002401000026010000280100002A0100002D0100002F01000031010000330100003601000037010000390100003C0100003D0100003F01000040010000430100004501000047010000490100004A0100004C0100004D0100005001000051010000530100005401000057010000590100005B0100005C0100005E0100005F01000062010000630100006501000067010000690100006A0100006C0100006E0100006F0100007001000072010000740100007501000076010000790100007A0100007C0100007D0100007F010000820100008301000084010000850100008501000087010000890100008B0100008C0100008E01000090010000920100009301000094010000960100009701000098010000990100009B0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A7010000A8010000A9010000AB010000AC010000AE010000AF010000B0010000B1010000B3010000B4010000B6010000B7010000B8010000BA010000BB010000BC010000BD010000BE010000BF010000C1010000C2010000C3010000C5010000C6010000C8010000C9010000CA010000CB010000CC010000CD010000D0010000D2010000D2010000D4010000D5010000D6010000D7010000D9010000DA010000DB010000DC010000DD010000DE010000E0010000E1010000E1010000E2010000E4010000E5010000E6010000E7010000E9010000E9010000EA010000EC010000ED010000EE010000F0010000F1010000F1010000F3010000F4010000F4010000F5010000F6010000F6010000F9010000F9010000FA010000FC010000FD010000FE010000FF0100000002000001020000020200000302000004020000050200000602000008020000080200000A0200000B0200000C0200000D0200000D0200000E0200000F0200001002000011020000120200001302000014020000160200001602000017020000190200001A0200001B0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002502000026020000260200002702000028020000290200002A0200002B0200002C0200002C0200002D0200002E0200002F0200003002000032020000320200003302000034020000340200003502000037020000370200003802000039020000390200003B0200003C0200003D0200003E0200004002000041020000410200004302000044020000440200004502000045020000470200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F0200004F020000500200005102000052020000530200005402000055020000550200005602000057020000590200005A0200005A0200005B0200005C0200005D0200005E0200005F0200006002000061020000610200006202000064020000640200006502000066020000670200006802000069020000690200006B0200006B0200006C0200006D0200006D0200006E0200006F02000070020000710200007202000073020000740200007502000075020000760200007702000077020000790200007A0200007A0200007B0200007B0200007C0200007D0200007E0200007F0200008002000080020000810200008302000083020000840200008502000085020000850200008702000088020000890200008A0200008B0200008D0200008D0200008F02000090020000900200009102000091020000920200009302000094020000950200009502000096020000960200009702000098020000990200009A0200009A0200009B0200009C0200009D0200009E0200009E0200009F020000A0020000A1020000A1020000A3020000A4020000A4020000A4020000A5020000A6020000A7020000A8020000A8020000A9020000A9020000AA020000AB020000AB020000AC020000AC020000AE020000AF020000B0020000B0020000B1020000B2020000B2020000B2020000B3020000B4020000B4020000B5020000B6020000B6020000B7020000B7020000B9020000BA020000BB020000BC020000BC020000BD020000BD020000BE020000BE020000BF020000C0020000C1020000C1020000C2020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C7020000C8020000C8020000C9020000CA020000CB020000CB020000CC020000CD020000CD020000CE020000CE020000CF020000D0020000D1020000D2020000D2020000D2020000D3020000D4020000D5020000D5020000D7020000D7020000D8020000D8020000D9020000DA020000DB020000DB020000DB020000DD020000DD020000DD020000DF020000DF020000E0020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E4020000E5020000E7020000E7020000E7020000E9020000E9020000EA020000EA020000EB020000EC020000EC020000ED020000ED020000EE020000EE020000EF020000EF020000F0020000F0020000F1020000F1020000F2020000F2020000F3020000F5020000F5020000F7020000F7020000F8020000F8020000F9020000F9020000FA020000FA020000FB020000FC020000FC020000FE020000FE020000FF020000FF020000FF0200000003000000030000010300000103000002030000030300000503000005030000060300000703000008030000080300000803000009030000090300000A0300000A0300000C0300000D0300000D0300000D0300000E0300000F03000010030000100300001003000011030000130300001303000014030000140300001503000015030000160300001703000017030000170300001803000018030000190300001A0300001B0300001B0300001C0300001C0300001C0300001D0300001D0300001E0300001E0300001F030000200300002003000021030000220300002203000023030000240300002503000025030000260300002603000026030000270300002703000028030000290300002A0300002A0300002B0300002B0300002C0300002C0300002C0300002D0300002D0300002E0300002F0300002F0300003103000031030000320300003203000033030000330300003403000034030000350300003503000036030000360300003603000037030000370300003803000039030000390300003A0300003A0300003C0300003D0300003D0300003D0300003D0300003F0300003F0300003F030000400300004203000042030000420300004303000044030000440300004403000045030000450300004603000046030000460300004703000049030000490300004A0300004A0300004B0300004C0300004C0300004C0300004D0300004E0300004E0300004F0300004F0300004F030000500300005203000053030000530300005403000054030000540300005503000055030000570300005703000058030000580300005903000059030000590300005A0300005A0300005B0300005C0300005C0300005D0300005D0300005E0300005E0300005F0300005F0300005F030000600300006203000062030000630300006303000063030000630300006403000064030000650300006603000066030000660300006703000068030000680300006803000069030000690300006A0300006B0300006C0300006C0300006D0300006D0300006D0300006E0300006E0300007003000070030000700300007103000071030000720300007203000072030000740300007403000074030000750300007503000077030000770300007703000077030000780300007803000078030000790300007A0300007A0300007A0300007B0300007B0300007B0300007C0300007C0300007E0300007E0300007F0300007F0300007F0300007F03000080030000800300008103000081030000820300008203000082030000830300008303000084030000840300008503000085030000850300008603000086030000870300008803000088030000890300008A0300008A0300008B0300008B0300008B0300008B0300008C0300008C0300008D0300008D0300008F0300008F030000900300009003000090030000910300009103000091030000920300009203000094030000940300009403000095030000950300009703000097030000980300009803000098030000990300009903000099030000990300009A0300009A0300009B0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AD030000AE030000AE030000AE030000B0030000B0030000B0030000B1030000B1030000B2030000B2030000B2030000B2030000B3030000B3030000B4030000B5030000B5030000B5030000B6030000B6030000B7030000B8030000B8030000B8030000B9030000B9030000BB030000BB030000BB030000BC030000BC030000BD030000BD030000BD030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C3030000C4030000C4030000C5030000C5030000C6030000C6030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CB030000CB030000CC030000CC030000CC030000CD030000CE030000CE030000CF030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D2030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D8030000D8030000D9030000D9030000D9030000D9030000D9030000DA030000DA030000DB030000DC030000DC030000DC030000DD030000DE030000DE030000DE030000DF030000DF030000E0030000E0030000E1030000E1030000E1030000E2030000E2030000E3030000E3030000E3030000E4030000E4030000E4030000E5030000E5030000E6030000E6030000E6030000E7030000E7030000E7030000E8030000E8030000E9030000E9030000E9030000EB030000EB030000EC030000EC030000EC030000ED030000ED030000EE030000EF030000EF030000EF030000F0030000F0030000F1030000F1030000F1030000F2030000F2030000F3030000F3030000F3030000F4030000F4030000F4030000F4030000F5030000F5030000F5030000F6030000F7030000F7030000F7030000FA030000FA030000FC030000FC030000FD030000FF030000FF030000000000002E0000003E0000004B000000550000005D000000650000006D000000730000007A00000080000000850000008B00000090000000960000009A0000009E000000A3000000A7000000AB000000AF000000B3000000B7000000BB000000BD000000C1000000C4000000C6000000CA000000CD000000CF000000D4000000D7000000DA000000DD000000E0000000E3000000E5000000E7000000EB000000EE000000F0000000F3000000F5000000F8000000FB000000FD000000FF000000020100000401000006010000080100000B0100000D0100000F010000110100001201000016010000180100001A0100001B0100001E01000020010000220100002401000027010000290100002B0100002D0100002F0100003001000032010000350100003601000038010000390100003C0100003E0100004001000042010000430100004501000046010000490100004A0100004C0100004D0100005101000052010000540100005501000058010000590100005B0100005C0100005F010000600100006201000063010000650100006701000068010000690100006B0100006D0100006E0100006F01000071010000730100007501000076010000780100007A0100007B0100007C0100007D0100007D0100007F01000081010000830100008401000086010000880100008A0100008B0100008C0100008E0100008F010000900100009101000093010000950100009601000098010000990100009A0100009C0100009D0100009F010000A0010000A1010000A3010000A4010000A6010000A7010000A8010000A9010000AB010000AC010000AE010000AF010000B0010000B2010000B3010000B4010000B5010000B6010000B7010000B9010000BA010000BB010000BD010000BE010000C0010000C1010000C2010000C3010000C4010000C5010000C7010000C8010000C8010000CA010000CB010000CC010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D6010000D7010000D7010000D8010000DA010000DB010000DD010000DE010000DF010000DF010000E0010000E1010000E3010000E5010000E6010000E7010000E7010000E8010000E9010000E9010000EB010000ED010000ED010000EF010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FD010000FD010000FF01000000020000010200000202000002020000030200000402000005020000060200000702000008020000090200000B0200000B0200000C0200000E0200000F020000100200001002000011020000120200001302000014020000150200001602000017020000180200001A0200001B0200001B0200001C0200001D0200001E0200001F020000200200002102000021020000220200002302000024020000250200002702000027020000290200002A0200002A0200002B0200002C0200002D0200002E0200002F0200002F020000300200003102000032020000340200003502000036020000360200003802000039020000390200003A0200003A0200003C0200003C0200003D0200003E0200003F02000040020000410200004202000043020000440200004402000045020000460200004702000048020000490200004A0200004A0200004B0200004C0200004D0200004E0200004E0200004F020000510200005202000052020000530200005402000056020000560200005702000059020000590200005A0200005B0200005C0200005D0200005E0200005E0200006002000060020000610200006202000062020000630200006402000065020000660200006702000068020000690200006A0200006A0200006B0200006C0200006C0200006D0200006E0200006E0200006F0200006F020000710200007202000073020000740200007502000075020000760200007702000077020000780200007902000079020000790200007A0200007A0200007C0200007D0200007E0200007F0200007F02000080020000810200008102000082020000820200008302000084020000850200008602000086020000870200008702000088020000890200008A0200008B0200008B0200008C0200008E0200008F020000900200009002000091020000920200009302000093020000950200009602000096020000960200009702000098020000990200009A0200009A0200009B0200009B0200009D0200009E0200009E0200009F0200009F020000A0020000A1020000A2020000A2020000A3020000A4020000A4020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000AA020000AA020000AB020000AC020000AD020000AE020000AE020000AF020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B4020000B5020000B5020000B6020000B7020000B7020000B8020000B9020000BA020000BA020000BB020000BC020000BD020000BD020000BE020000BF020000BF020000C0020000C0020000C1020000C2020000C3020000C4020000C4020000C4020000C5020000C6020000C7020000C7020000C8020000C8020000C9020000CA020000CB020000CC020000CD020000CD020000CD020000CF020000CF020000CF020000D1020000D1020000D2020000D2020000D3020000D3020000D5020000D6020000D6020000D7020000D7020000D8020000D9020000D9020000D9020000DB020000DB020000DC020000DC020000DD020000DE020000DE020000DF020000DF020000E0020000E0020000E1020000E1020000E2020000E2020000E3020000E3020000E5020000E5020000E6020000E7020000E7020000E8020000E8020000E9020000E9020000EA020000EA020000EC020000EC020000ED020000EE020000EE020000EF020000EF020000F0020000F0020000F0020000F1020000F1020000F3020000F3020000F5020000F6020000F7020000F7020000F8020000F9020000FA020000FA020000FA020000FB020000FB020000FC020000FC020000FD020000FE020000FE020000FE020000FF0200000103000002030000020300000203000003030000040300000403000006030000060300000703000007030000080300000903000009030000090300000A0300000A0300000B0300000C0300000D0300000D0300000E0300000E0300000E0300000F0300000F03000010030000100300001103000012030000120300001303000014030000140300001503000016030000170300001703000018030000180300001803000019030000190300001A0300001B0300001C0300001C0300001D0300001D0300001E0300001E0300001E0300001F0300001F0300002003000021030000220300002303000023030000240300002403000025030000250300002603000026030000270300002703000028030000280300002803000029030000290300002A0300002B0300002B0300002C0300002C0300002D0300002E0300002E0300002E0300002E0300002F0300002F0300002F0300003003000031030000310300003103000032030000330300003303000033030000340300003403000036030000360300003603000037030000380300003803000039030000390300003A0300003B0300003B0300003B0300003C0300003E0300003E0300003F0300003F0300003F030000400300004103000042030000420300004303000043030000430300004403000044030000450300004503000046030000460300004703000047030000470300004803000048030000490300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004E0300004F030000500300005003000051030000510300005103000051030000520300005203000054030000550300005503000055030000560300005703000057030000570300005803000058030000590300005A0300005B0300005B0300005C0300005C0300005C0300005D0300005D0300005F0300005F0300005F0300006003000060030000620300006203000062030000630300006303000063030000640300006403000065030000650300006503000065030000660300006603000066030000670300006903000069030000690300006B0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006E0300006E0300006F0300006F0300007003000070030000710300007103000071030000720300007303000074030000740300007503000075030000750300007603000076030000770300007803000078030000790300007A0300007A0300007B0300007B0300007B0300007B0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F0300007F03000080030000800300008003000081030000810300008203000082030000820300008303000083030000840300008403000085030000850300008503000086030000860300008603000086030000870300008703000088030000890300008A0300008A0300008B0300008B0300008C0300008C0300008D0300008D0300008D0300008E0300008E0300008F0300008F03000090030000900300009203000092030000930300009303000094030000950300009503000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009A0300009B0300009B0300009B0300009D0300009D0300009D0300009E0300009E0300009F0300009F0300009F0300009F030000A0030000A0030000A2030000A3030000A3030000A3030000A4030000A4030000A5030000A6030000A6030000A6030000A7030000A7030000A8030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AA030000AA030000AB030000AB030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B8030000B8030000B9030000B9030000B9030000BA030000BB030000BB030000BC030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000BF030000C0030000C0030000C1030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C5030000C5030000C5030000C5030000C5030000C6030000C6030000C7030000C8030000C8030000C8030000C9030000CA030000CA030000CA030000CB030000CB030000CC030000CC030000CD030000CD030000CD030000CE030000CE030000CF030000CF030000CF030000D0030000D0030000D0030000D1030000D1030000D2030000D2030000D2030000D3030000D3030000D3030000D4030000D4030000D5030000D5030000D5030000D6030000D7030000D7030000D7030000D7030000D9030000D9030000DA030000DB030000DB030000DB030000DC030000DC030000DD030000DD030000DD030000DE030000DE030000DF030000DF030000DF030000E0030000E0030000E0030000E0030000E1030000E1030000E1030000E2030000E3030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E7030000E7030000000000002B0000003B00000047000000510000005C00000061000000680000006E000000750000007B00000080000000850000008A0000008F00000092000000960000009A0000009E000000A1000000A5000000A8000000AB000000B0000000B3000000B5000000B8000000BB000000C0000000C3000000C5000000C9000000CB000000CE000000D1000000D4000000D7000000D9000000DB000000DE000000E1000000E3000000E6000000E8000000EB000000EE000000F0000000F2000000F5000000F7000000F9000000FB000000FD000000FF00000001010000040100000501000008010000090100000C0100000D01000010010000110100001301000015010000180100001A0100001C0100001E0100002001000021010000230100002501000027010000290100002A0100002C0100002E0100003001000033010000340100003601000037010000390100003A0100003C0100003D0100003F0100004001000043010000440100004601000047010000480100004A0100004C0100004D0100004F0100005001000052010000550100005601000057010000590100005A0100005B0100005C0100005E0100006001000062010000630100006501000067010000680100006A0100006B0100006B0100006C0100006D0100006F0100007001000072010000730100007501000077010000780100007A0100007B0100007C0100007D0100007F01000080010000810100008301000084010000850100008601000087010000890100008A0100008B0100008D0100008E0100008F01000091010000920100009301000095010000960100009701000098010000990100009B0100009C0100009D0100009E0100009F010000A1010000A2010000A3010000A4010000A5010000A6010000A9010000AA010000AB010000AC010000AD010000AE010000B0010000B1010000B1010000B3010000B4010000B5010000B7010000B8010000B9010000BA010000BB010000BB010000BC010000BE010000C0010000C0010000C1010000C3010000C4010000C5010000C6010000C7010000C7010000C9010000CA010000CB010000CD010000CE010000CF010000CF010000D0010000D2010000D2010000D3010000D5010000D5010000D7010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E1010000E2010000E4010000E4010000E6010000E7010000E8010000E9010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F2010000F2010000F2010000F4010000F4010000F5010000F5010000F6010000F8010000F9010000FA010000FB010000FC010000FD010000FD010000FF010000000200000002000000020000010200000202000003020000040200000502000005020000060200000702000008020000090200000A0200000A0200000C0200000D0200000D0200000E0200000F02000010020000110200001202000012020000130200001402000015020000170200001702000018020000190200001A0200001B0200001C0200001D0200001D0200001F0200001F02000020020000210200002202000023020000240200002502000026020000270200002702000028020000290200002A0200002B0200002C0200002D0200002D0200002E0200002F02000030020000310200003102000032020000330200003402000034020000350200003602000038020000390200003A0200003B0200003B0200003C0200003D0200003E0200003F02000040020000400200004202000042020000430200004402000044020000450200004502000046020000470200004802000048020000490200004A0200004A0200004B0200004C0200004C0200004E0200004F0200004F0200005002000051020000520200005302000054020000550200005602000056020000570200005802000058020000590200005A0200005B0200005B0200005D0200005D0200005E0200005E0200005F0200006002000060020000610200006202000063020000650200006602000067020000670200006802000069020000690200006A0200006A0200006A0200006B0200006C0200006D0200006D0200006D0200006F020000700200007102000071020000720200007302000074020000740200007502000076020000760200007702000078020000790200007A0200007B0200007C0200007C0200007C0200007E0200007F0200007F020000800200008002000080020000810200008202000082020000840200008502000085020000850200008602000087020000870200008802000089020000890200008B0200008B0200008C0200008D0200008E0200008F0200008F0200009002000090020000920200009202000093020000950200009602000096020000970200009702000098020000980200009902000099020000990200009A0200009B0200009C0200009C0200009D0200009E0200009F0200009F020000A0020000A1020000A1020000A2020000A2020000A2020000A3020000A4020000A5020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AA020000AB020000AC020000AC020000AD020000AD020000AD020000AE020000AF020000AF020000B1020000B1020000B2020000B2020000B3020000B3020000B4020000B5020000B5020000B6020000B6020000B7020000B8020000B8020000B8020000BA020000BA020000BB020000BC020000BD020000BE020000BE020000BF020000BF020000C0020000C0020000C1020000C1020000C2020000C2020000C3020000C3020000C4020000C4020000C4020000C5020000C5020000C6020000C6020000C8020000C8020000C9020000C9020000CB020000CB020000CC020000CC020000CC020000CD020000CD020000CE020000CF020000CF020000D0020000D1020000D2020000D2020000D3020000D4020000D5020000D5020000D5020000D6020000D7020000D7020000D7020000D9020000D9020000DA020000DA020000DB020000DC020000DC020000DC020000DD020000DE020000DF020000DF020000DF020000DF020000E0020000E0020000E2020000E2020000E3020000E3020000E4020000E5020000E5020000E5020000E6020000E6020000E7020000E7020000E8020000E8020000E9020000E9020000E9020000EA020000EA020000EB020000EB020000EC020000ED020000ED020000EE020000EF020000EF020000F0020000F1020000F1020000F1020000F3020000F3020000F3020000F4020000F4020000F5020000F6020000F7020000F8020000F9020000F9020000FA020000FA020000FA020000FB020000FB020000FC020000FD020000FE020000FF020000FF020000000300000003000001030000010300000303000003030000040300000403000005030000050300000503000006030000070300000703000009030000090300000A0300000A0300000B0300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000F0300000F0300000F030000110300001103000012030000120300001203000012030000140300001403000014030000150300001503000015030000170300001703000018030000190300001A0300001A0300001B0300001C0300001C0300001C0300001C0300001C0300001D0300001D0300001E0300001E0300002003000020030000200300002103000021030000220300002203000023030000230300002403000024030000240300002503000025030000260300002703000028030000280300002803000029030000290300002A0300002A0300002A0300002B0300002C0300002C0300002D0300002D0300002D0300002E0300002E0300002F03000030030000310300003103000031030000320300003203000032030000320300003303000033030000340300003403000035030000350300003603000036030000360300003703000038030000390300003A0300003A0300003B0300003B0300003C0300003C0300003C0300003E0300003E0300003E0300003F0300003F0300004103000041030000410300004103000043030000430300004303000043030000440300004403000044030000450300004503000045030000460300004603000047030000470300004803000049030000490300004A0300004A0300004B0300004C0300004C0300004D0300004D0300004D0300004E0300004F0300004F0300004F030000500300005003000050030000510300005103000052030000530300005303000054030000550300005603000056030000570300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005B0300005C0300005C0300005C0300005D0300005D0300005E03000060030000600300006103000061030000620300006203000063030000630300006303000064030000640300006403000064030000650300006503000066030000660300006703000067030000680300006803000069030000690300006A0300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006F0300006F0300006F0300006F030000700300007103000071030000720300007203000073030000730300007403000074030000750300007503000075030000750300007503000076030000760300007603000078030000780300007803000079030000790300007A0300007A0300007A0300007A0300007B0300007B0300007C0300007D0300007D0300007D0300007E0300007E0300007F03000080030000800300008003000081030000810300008203000082030000820300008303000083030000840300008403000084030000840300008403000085030000850300008703000087030000870300008803000089030000890300008A0300008A0300008B0300008B0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F0300009003000090030000910300009103000093030000930300009303000093030000940300009403000094030000950300009603000096030000970300009703000097030000980300009803000099030000990300009A0300009A0300009B0300009C0300009C0300009D0300009D0300009D0300009E0300009E030000A0030000A0030000A1030000A1030000A2030000A3030000A3030000A3030000A3030000A4030000A4030000A5030000A6030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AB030000AC030000AC030000AE030000AE030000AE030000AF030000AF030000AF030000B0030000B0030000B1030000B1030000B1030000B3030000B3030000B3030000B4030000B4030000B4030000B4030000B4030000B5030000B6030000B6030000B6030000B6030000B7030000B7030000B8030000B9030000B9030000B9030000BA030000BA030000BB030000BB030000BB030000BC030000BC030000BD030000BD030000BD030000BE030000BE030000BE030000BE030000BF030000BF030000BF030000C0030000C1030000C1030000C1030000C1030000C1030000C2030000C2030000C2030000C3030000C3030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="false" DataSize="88">0000000005000000050000000500000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="80">00000000680000001A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ </Mode>
+ </Disp_Modes>
+ <Luts NumLuts="1">
+ <Lut Type="0" NumPackets="41">ECFFFFFF0000803F936F163FDA1AB13DEDFFFFFF0000803F87501D3FB9530A3EEEFFFFFF0000803FAAEE213FD1912C3EEFFFFFFF0000803F8CBC283F8C82603EF0FFFFFF0000803F473C2D3FD1E9813EF1FFFFFF0000803F5C02343FFE0E9D3EF2FFFFFF0000803F6E6E383FE04DAF3EF3FFFFFF0000803F31093F3F3C16CB3EF4FFFFFF0000803F3960433F73BDDD3EF5FFFFFF0000803F91D5493F6519FA3EF6FFFFFF0000803F840E4E3F957E063FF7FFFFFF0000803F1B62543FCEDF143FF8FFFFFF0000803F828C583F90871E3FF9FFFFFF0000803FF2B65E3F1A182D3FFAFFFFFF0000803FE7C4623FABCE363FFBFFFFFF0000803FD7BE683F8E5A453FFCFFFFFF0000803F41B66C3FD6194F3FFDFFFFFF0000803F1E8A723F8AAC5D3FFEFFFFFF0000803F516B763F6475673FFFFFFFFF0000803F8A227C3FB41E763F000000000000803F0000803F0000803F01000000836B723F6189773F0000803F02000000BF0C6A3F484E723F0000803F03000000CD945E3F191E6B3F0000803F04000000B988573FEFAB663F0000803F0500000084D44D3F5E81603F0000803F0600000045D9473FEBAA5C3F0000803F07000000CA883F3F2651573F0000803F080000005C593A3FADFB533F0000803F09000000802D333F05514F3F0000803F0A00000083C02E3FC3624C3F0000803F0B0000005986283FE04C483F0000803F0C0000008C9D243F18B3453F0000803F0D000000431C1F3F8909423F0000803F0E000000ABB21B3FE4C03F3F0000803F0F0000003DD4163FC07A3C3F0000803F1000000009C0133FE4683A3F0000803F110000008A740F3FF27B373F0000803F1200000039B80C3FCB9D353F0000803F130000005DDE083FBAF9323F0000803F140000009467063F3448313F0000803F</Lut>
+ </Luts>
+</Calib_Data>
diff --git a/config/qdcm_calib_data_sw43404_amoled_cmd_mode_dsi_boe_panel_with_DSC.xml b/config/qdcm_calib_data_sw43404_amoled_cmd_mode_dsi_boe_panel_with_DSC.xml
new file mode 100644
index 0000000..f1f6116
--- /dev/null
+++ b/config/qdcm_calib_data_sw43404_amoled_cmd_mode_dsi_boe_panel_with_DSC.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" ?>
+<!--
+Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+-->
+<Calib_Data>
+ <Disp_Modes NumModes="5" DefaultMode="0">
+ <Mode ModeID="0" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="native" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="native">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="1" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="HDR" NumOfFeatures="15" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="hdr" ColorGamut="dcip3" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000F80000000500000002000000000200000000000000000000ED0100000A00000004000000000300000000000000000000DF0200000E00000005000000000400000000000000000000CF0300001200000007000000000500000000000000000000BC0400001600000008000000000600000000000000000000A705000019000000090000000007000000000000000000008F0600001C0000000A000000000800000000000000000000750700001F0000000A00000000090000000000000000000058080000210000000B000000000A0000000000000000000038090000230000000B000000000B00000000000000000000160A0000240000000A000000000C00000000000000000000F10A0000250000000A000000000D00000000000000000000C90B00002600000009000000000E000000000000000000009F0C00002700000009000000000F00000000000000000000730D00002700000008000000001000000000000000000000440E0000260000000600000000000000000100000000000002000000E900000004000000000100000001000000000000FA000000EF00000006000000000200000001000000000000F0010000F400000008000000000300000001000000000000E2020000F900000009000000000400000001000000000000D3030000FE0000000B000000000500000001000000000000C0040000020100000C000000000600000001000000000000AC050000060100000D000000000700000001000000000000940600000A0100000E0000000008000000010000000000007A0700000D0100000E0000000009000000010000000000005D080000100100000E000000000A000000010000000000003E090000120100000E000000000B000000010000000000001C0A0000140100000E000000000C00000001000000000000F80A0000160100000E000000000D00000001000000000000D10B0000180100000D000000000E00000001000000000000A70C0000190100000C000000000F000000010000000000007B0D00001A0100000B0000000010000000010000000000004D0E00001A0100000A00000000000000000200000000000005000000D101000008000000000100000002000000000000FD000000D70100000A000000000200000002000000000000F3010000DD0100000C000000000300000002000000000000E6020000E30100000D000000000400000002000000000000D7030000E80100000F000000000500000002000000000000C5040000ED01000010000000000600000002000000000000B1050000F2010000110000000007000000020000000000009A060000F60100001100000000080000000200000000000080070000FA0100001200000000090000000200000000000064080000FD01000012000000000A00000002000000000000450900000102000012000000000B00000002000000000000240A00000302000012000000000C00000002000000000000000B00000602000012000000000D00000002000000000000D90B00000802000011000000000E00000002000000000000B00C00000A02000010000000000F00000002000000000000840D00000B0200000F000000001000000002000000000000560E00000C0200000E00000000000000000300000000000008000000B70200000C00000000010000000300000000000001010000BE0200000E000000000200000003000000000000F7010000C50200000F000000000300000003000000000000EB020000CB02000011000000000400000003000000000000DC030000D102000012000000000500000003000000000000CA040000D702000013000000000600000003000000000000B6050000DC02000014000000000700000003000000000000A0060000E10200001500000000080000000300000000000086070000E6020000160000000009000000030000000000006B080000EA02000016000000000A000000030000000000004C090000EE02000016000000000B000000030000000000002B0A0000F102000016000000000C00000003000000000000080B0000F402000015000000000D00000003000000000000E20B0000F702000015000000000E00000003000000000000B90C0000FA02000014000000000F000000030000000000008E0D0000FC02000013000000001000000003000000000000600E0000FD020000110000000000000000040000000000000B0000009D0300000F00000000010000000400000000000004010000A403000011000000000200000004000000000000FB010000AC03000013000000000300000004000000000000EF020000B303000015000000000400000004000000000000E1030000B903000016000000000500000004000000000000D0040000C003000017000000000600000004000000000000BC050000C603000018000000000700000004000000000000A6060000CB030000190000000008000000040000000000008D070000D00300001900000000090000000400000000000072080000D503000019000000000A0000000400000000000054090000DA03000019000000000B00000004000000000000330A0000DE03000019000000000C00000004000000000000100B0000E203000019000000000D00000004000000000000EB0B0000E503000018000000000E00000004000000000000C20C0000E803000017000000000F00000004000000000000970D0000EB030000160000000010000000040000000000006A0E0000ED030000150000000000000000050000000000000F0000008104000013000000000100000005000000000000090100008904000015000000000200000005000000000000000200009104000017000000000300000005000000000000F50200009904000018000000000400000005000000000000E7030000A00400001A000000000500000005000000000000D6040000A70400001B000000000600000005000000000000C3050000AE0400001C000000000700000005000000000000AD060000B40400001C00000000080000000500000000000095070000BA0400001D0000000009000000050000000000007A080000BF0400001D000000000A000000050000000000005C090000C40400001D000000000B000000050000000000003C0A0000C90400001D000000000C00000005000000000000190B0000CE0400001C000000000D00000005000000000000F40B0000D20400001C000000000E00000005000000000000CC0C0000D60400001B000000000F00000005000000000000A20D0000D90400001A000000001000000005000000000000750E0000DC040000180000000000000000060000000000001300000064050000170000000001000000060000000000000E0100006D0500001900000000020000000600000000000005020000760500001A000000000300000006000000000000FA0200007E0500001C000000000400000006000000000000ED030000860500001D000000000500000006000000000000DC0400008D0500001E000000000600000006000000000000CA050000950500001F000000000700000006000000000000B40600009B050000200000000008000000060000000000009C070000A20500002000000000090000000600000000000082080000A805000020000000000A0000000600000000000065090000AE05000020000000000B00000006000000000000450A0000B305000020000000000C00000006000000000000230B0000B905000020000000000D00000006000000000000FE0B0000BD0500001F000000000E00000006000000000000D70C0000C20500001E000000000F00000006000000000000AC0D0000C60500001D000000001000000006000000000000800E0000C90500001C00000000000000000700000000000018000000460600001A000000000100000007000000000000130100004F0600001C0000000002000000070000000000000B020000590600001E00000000030000000700000000000000030000620600001F000000000400000007000000000000F30300006A06000021000000000500000007000000000000E30400007206000022000000000600000007000000000000D10500007A06000022000000000700000007000000000000BC0600008206000023000000000800000007000000000000A507000089060000230000000009000000070000000000008B0800009006000024000000000A000000070000000000006E0900009606000024000000000B000000070000000000004F0A00009C06000023000000000C000000070000000000002D0B0000A206000023000000000D00000007000000000000080C0000A806000022000000000E00000007000000000000E10C0000AD06000021000000000F00000007000000000000B80D0000B1060000200000000010000000070000000000008B0E0000B60600001F0000000000000000080000000000001D000000260700001E00000000010000000800000000000019010000300700001F000000000200000008000000000000110200003A07000021000000000300000008000000000000070300004407000023000000000400000008000000000000FA0300004D07000024000000000500000008000000000000EB0400005607000025000000000600000008000000000000D90500005F07000026000000000700000008000000000000C40600006707000026000000000800000008000000000000AD0700006F07000027000000000900000008000000000000940800007607000027000000000A00000008000000000000770900007D07000027000000000B00000008000000000000590A00008407000027000000000C00000008000000000000370B00008A07000026000000000D00000008000000000000130C00009107000025000000000E00000008000000000000ED0C00009607000024000000000F00000008000000000000C30D00009C07000023000000001000000008000000000000980E0000A1070000220000000000000000090000000000002300000005080000210000000001000000090000000000001F0100001008000023000000000200000009000000000000180200001B080000240000000003000000090000000000000E0300002508000026000000000400000009000000000000020400002F08000027000000000500000009000000000000F30400003908000028000000000600000009000000000000E10500004208000029000000000700000009000000000000CD0600004B0800002A000000000800000009000000000000B6070000530800002A0000000009000000090000000000009D0800005B0800002A000000000A0000000900000000000081090000630800002A000000000B00000009000000000000630A00006B0800002A000000000C00000009000000000000420B00007208000029000000000D000000090000000000001E0C00007808000028000000000E00000009000000000000F80C00007F08000028000000000F00000009000000000000CF0D00008508000026000000001000000009000000000000A40E00008A0800002500000000000000000A00000000000029000000E40800002400000000010000000A00000000000025010000EF0800002600000000020000000A0000000000001F020000FA0800002800000000030000000A00000000000015030000050900002900000000040000000A00000000000009040000100900002A00000000050000000A000000000000FB0400001A0900002B00000000060000000A000000000000EA050000240900002C00000000070000000A000000000000D60600002D0900002D00000000080000000A000000000000C0070000370900002D00000000090000000A000000000000A70800003F0900002D000000000A0000000A0000000000008C090000480900002D000000000B0000000A0000000000006E0A0000500900002D000000000C0000000A0000000000004D0B0000580900002C000000000D0000000A0000000000002A0C00005F0900002C000000000E0000000A000000000000040D0000660900002B000000000F0000000A000000000000DC0D00006D0900002900000000100000000A000000000000B10E0000730900002800000000000000000B00000000000030000000C00900002700000000010000000B0000000000002C010000CD0900002900000000020000000B00000000000026020000D90900002B00000000030000000B0000000000001D030000E40900002C00000000040000000B00000000000012040000EF0900002D00000000050000000B00000000000004050000FA0900002E00000000060000000B000000000000F3050000050A00002F00000000070000000B000000000000E00600000F0A00003000000000080000000B000000000000CA070000190A00003000000000090000000B000000000000B2080000220A000030000000000A0000000B000000000000970900002B0A000030000000000B0000000B000000000000790A0000340A000030000000000C0000000B000000000000590B00003C0A00002F000000000D0000000B000000000000360C0000440A00002E000000000E0000000B000000000000110D00004C0A00002E000000000F0000000B000000000000E90D0000530A00002C00000000100000000B000000000000BF0E00005A0A00002B00000000000000000C000000000000370000009C0A00002A00000000010000000C00000000000034010000A90A00002C00000000020000000C0000000000002E020000B60A00002E00000000030000000C00000000000026030000C20A00002F00000000040000000C0000000000001B040000CE0A00003000000000050000000C0000000000000D050000D90A00003100000000060000000C000000000000FD050000E40A00003200000000070000000C000000000000EA060000EF0A00003300000000080000000C000000000000D5070000FA0A00003300000000090000000C000000000000BD080000040B000033000000000A0000000C000000000000A20900000D0B000033000000000B0000000C000000000000850A0000170B000033000000000C0000000C000000000000650B0000200B000032000000000D0000000C000000000000430C0000290B000031000000000E0000000C0000000000001E0D0000310B000030000000000F0000000C000000000000F70D0000390B00002F00000000100000000C000000000000CD0E0000400B00002E00000000000000000D0000000000003F000000760B00002D00000000010000000D0000000000003C010000840B00002F00000000020000000D00000000000036020000910B00003100000000030000000D0000000000002E0300009E0B00003200000000040000000D00000000000024040000AB0B00003300000000050000000D00000000000017050000B70B00003400000000060000000D00000000000007060000C30B00003500000000070000000D000000000000F5060000CE0B00003600000000080000000D000000000000E0070000D90B00003600000000090000000D000000000000C8080000E40B000036000000000A0000000D000000000000AE090000EE0B000036000000000B0000000D000000000000910A0000F80B000036000000000C0000000D000000000000720B0000020C000035000000000D0000000D000000000000500C00000C0C000034000000000E0000000D0000000000002C0D0000140C000033000000000F0000000D000000000000050E00001D0C00003200000000100000000D000000000000DB0E0000250C00003000000000000000000E00000000000047000000500C00003000000000010000000E000000000000440100005E0C00003200000000020000000E0000000000003F0200006C0C00003400000000030000000E00000000000038030000790C00003500000000040000000E0000000000002E040000870C00003600000000050000000E00000000000021050000930C00003700000000060000000E00000000000011060000A00C00003800000000070000000E00000000000000070000AC0C00003800000000080000000E000000000000EB070000B80C00003900000000090000000E000000000000D4080000C30C000039000000000A0000000E000000000000BA090000CE0C000039000000000B0000000E0000000000009E0A0000D90C000038000000000C0000000E0000000000007F0B0000E30C000038000000000D0000000E0000000000005E0C0000ED0C000037000000000E0000000E0000000000003A0D0000F70C000036000000000F0000000E000000000000130E0000000D00003500000000100000000E000000000000EA0E0000090D00003300000000000000000F0000000000004F000000280D00003300000000010000000F0000000000004D010000370D00003500000000020000000F00000000000049020000450D00003700000000030000000F00000000000041030000530D00003800000000040000000F00000000000038040000610D00003900000000050000000F0000000000002B0500006F0D00003A00000000060000000F0000000000001D0600007C0D00003B00000000070000000F0000000000000B070000890D00003B00000000080000000F000000000000F7070000950D00003B00000000090000000F000000000000E0080000A10D00003C000000000A0000000F000000000000C7090000AD0D00003B000000000B0000000F000000000000AB0A0000B80D00003B000000000C0000000F0000000000008D0B0000C30D00003A000000000D0000000F0000000000006C0C0000CE0D00003A000000000E0000000F000000000000480D0000D80D000038000000000F0000000F000000000000220E0000E20D00003700000000100000000F000000000000F90E0000EC0D00003600000000000000001000000000000058000000FE0D000036000000000100000010000000000000570100000E0E000038000000000200000010000000000000520200001D0E0000390000000003000000100000000000004C0300002C0E00003B000000000400000010000000000000420400003B0E00003C00000000050000001000000000000036050000490E00003D00000000060000001000000000000028060000560E00003D00000000070000001000000000000017070000640E00003E00000000080000001000000000000003080000710E00003E000000000900000010000000000000ED0800007E0E00003E000000000A00000010000000000000D40900008A0E00003E000000000B00000010000000000000B90A0000960E00003E000000000C000000100000000000009B0B0000A20E00003D000000000D000000100000000000007A0C0000AD0E00003C000000000E00000010000000000000570D0000B80E00003B000000000F00000010000000000000310E0000C30E00003A000000001000000010000000000000090F0000CD0E0000380000000000000000000000000100000A00000007000000F4000000000100000000000000010000020100000C000000F6000000000200000000000000010000F801000010000000F9000000000300000000000000010000EB02000015000000FB000000000400000000000000010000DB03000019000000FC000000000500000000000000010000C90400001C000000FE000000000600000000000000010000B405000020000000FF0000000007000000000000000100009D0600002200000000010000000800000000000000010000830700002500000001010000000900000000000000010000660800002700000002010000000A00000000000000010000470900002900000002010000000B00000000000000010000250A00002B00000002010000000C00000000000000010000010B00002C00000002010000000D00000000000000010000DA0B00002C00000002010000000E00000000000000010000B00C00002D00000002010000000F00000000000000010000840D00002D00000001010000001000000000000000010000550E00002D000000000100000000000000010000000100000C000000F1000000F900000000010000000100000001000005010000F6000000FB000000000200000001000000010000FB010000FC000000FD000000000300000001000000010000EE02000001010000FF000000000400000001000000010000DF0300000501000001010000000500000001000000010000CD0400000A01000002010000000600000001000000010000B90500000D01000003010000000700000001000000010000A206000011010000050100000008000000010000000100008807000014010000050100000009000000010000000100006C0800001701000006010000000A000000010000000100004D0900001A01000006010000000B000000010000000100002C0A00001C01000007010000000C00000001000000010000080B00001D01000007010000000D00000001000000010000E10B00001F01000006010000000E00000001000000010000B80C00002001000006010000000F000000010000000100008D0D000021010000050100000010000000010000000100005E0E000021010000040100000000000000020000000100000F000000D9010000FD00000000010000000200000001000008010000E0010000FF000000000200000002000000010000FE010000E601000001010000000300000002000000010000F2020000EB01000003010000000400000002000000010000E3030000F101000005010000000500000002000000010000D2040000F601000007010000000600000002000000010000BE050000FA01000008010000000700000002000000010000A7060000FE010000090100000008000000020000000100008E070000020200000A01000000090000000200000001000072080000060200000A010000000A0000000200000001000054090000090200000B010000000B00000002000000010000330A00000C0200000B010000000C00000002000000010000100B00000E0200000B010000000D00000002000000010000E90B0000100200000A010000000E00000002000000010000C10C0000120200000A010000000F00000002000000010000950D00001302000009010000001000000002000000010000680E0000140200000801000000000000000300000001000012000000C1020000010100000001000000030000000100000B010000C80200000401000000020000000300000001000002020000CF02000006010000000300000003000000010000F6020000D502000008010000000400000003000000010000E8030000DB02000009010000000500000003000000010000D7040000E00200000B010000000600000003000000010000C3050000E60200000C010000000700000003000000010000AD060000EA0200000D01000000080000000300000001000094070000EF0200000E01000000090000000300000001000079080000F30200000E010000000A000000030000000100005B090000F70200000F010000000B000000030000000100003B0A0000FA0200000F010000000C00000003000000010000180B0000FD0200000F010000000D00000003000000010000F20B0000000300000F010000000E00000003000000010000CA0C0000030300000E010000000F000000030000000100009F0D0000050300000D010000001000000003000000010000710E0000060300000C01000000000000000400000001000015000000A7030000060100000001000000040000000100000F010000AF0300000801000000020000000400000001000006020000B60300000A010000000300000004000000010000FB020000BD0300000C010000000400000004000000010000ED030000C40300000D010000000500000004000000010000DC040000CA0300000F010000000600000004000000010000C9050000D003000010010000000700000004000000010000B4060000D5030000110100000008000000040000000100009B070000DB0300001201000000090000000400000001000080080000DF03000012010000000A0000000400000001000063090000E403000013010000000B00000004000000010000430A0000E803000013010000000C00000004000000010000200B0000EC03000013010000000D00000004000000010000FB0B0000EF03000013010000000E00000004000000010000D30C0000F203000012010000000F00000004000000010000A90D0000F5030000110100000010000000040000000100007C0E0000F703000010010000000000000005000000010000190000008C0400000A01000000010000000500000001000013010000950400000C0100000002000000050000000100000B0200009D0400000E01000000030000000500000001000000030000A404000010010000000400000005000000010000F3030000AB04000012010000000500000005000000010000E3040000B204000013010000000600000005000000010000D0050000B904000014010000000700000005000000010000BA060000BF04000015010000000800000005000000010000A3070000C50400001601000000090000000500000001000088080000CA04000016010000000A000000050000000100006B090000CF04000017010000000B000000050000000100004B0A0000D404000017010000000C00000005000000010000290B0000D904000017010000000D00000005000000010000040C0000DD04000016010000000E00000005000000010000DD0C0000E004000016010000000F00000005000000010000B30D0000E404000015010000001000000005000000010000860E0000E7040000140100000000000000060000000100001E000000700500000E010000000100000006000000010000180100007905000010010000000200000006000000010000100200008205000012010000000300000006000000010000060300008A05000014010000000400000006000000010000F90300009205000016010000000500000006000000010000E90400009905000017010000000600000006000000010000D7050000A105000018010000000700000006000000010000C2060000A705000019010000000800000006000000010000AA070000AE0500001A01000000090000000600000001000090080000B40500001A010000000A0000000600000001000074090000BA0500001B010000000B00000006000000010000540A0000BF0500001B010000000C00000006000000010000330B0000C40500001B010000000D000000060000000100000E0C0000C90500001A010000000E00000006000000010000E70C0000CD0500001A010000000F00000006000000010000BE0D0000D105000019010000001000000006000000010000920E0000D5050000180100000000000000070000000100002200000053060000120100000001000000070000000100001E0100005C060000140100000002000000070000000100001602000066060000160100000003000000070000000100000C0300006F06000018010000000400000007000000010000FF030000770600001A010000000500000007000000010000F00400007F0600001B010000000600000007000000010000DE050000870600001C010000000700000007000000010000CA0600008F0600001D010000000800000007000000010000B3070000960600001E010000000900000007000000010000990800009D0600001E010000000A000000070000000100007D090000A30600001E010000000B000000070000000100005E0A0000A90600001F010000000C000000070000000100003D0B0000AF0600001E010000000D00000007000000010000190C0000B40600001E010000000E00000007000000010000F20C0000B90600001D010000000F00000007000000010000C90D0000BE0600001D0100000010000000070000000100009D0E0000C20600001C010000000000000008000000010000280000003407000016010000000100000008000000010000230100003E070000180100000002000000080000000100001C020000480700001A01000000030000000800000001000012030000520700001C010000000400000008000000010000060400005B0700001D010000000500000008000000010000F7040000640700001F010000000600000008000000010000E60500006D07000020010000000700000008000000010000D20600007507000021010000000800000008000000010000BB0700007D07000021010000000900000008000000010000A20800008407000022010000000A00000008000000010000860900008B07000022010000000B00000008000000010000680A00009207000022010000000C00000008000000010000470B00009807000022010000000D00000008000000010000230C00009E07000022010000000E00000008000000010000FD0C0000A407000021010000000F00000008000000010000D50D0000A907000020010000001000000008000000010000A90E0000AE0700001F0100000000000000090000000100002E000000140800001A010000000100000009000000010000290100001F0800001C010000000200000009000000010000230200002A0800001E0100000003000000090000000100001A03000034080000200100000004000000090000000100000E0400003E08000021010000000500000009000000010000FF0400004808000022010000000600000009000000010000EE0500005108000024010000000700000009000000010000DB0600005A08000024010000000800000009000000010000C40700006208000025010000000900000009000000010000AC0800006A08000026010000000A00000009000000010000900900007208000026010000000B00000009000000010000720A00007908000026010000000C00000009000000010000520B00008008000026010000000D000000090000000100002F0C00008708000025010000000E00000009000000010000090D00008D08000025010000000F00000009000000010000E10D00009308000024010000001000000009000000010000B60E0000990800002301000000000000000A00000001000034000000F30800001D01000000010000000A00000001000030010000FF0800002001000000020000000A0000000100002A0200000A0900002201000000030000000A00000001000021030000150900002301000000040000000A00000001000016040000200900002501000000050000000A000000010000080500002A0900002601000000060000000A000000010000F7050000340900002701000000070000000A000000010000E40600003D0900002801000000080000000A000000010000CE070000460900002901000000090000000A000000010000B60800004F09000029010000000A0000000A0000000100009B0900005709000029010000000B0000000A0000000100007D0A00006009000029010000000C0000000A0000000100005D0B00006709000029010000000D0000000A0000000100003A0C00006F09000029010000000E0000000A000000010000150D00007609000028010000000F0000000A000000010000ED0D00007C0900002701000000100000000A000000010000C30E0000830900002601000000000000000B0000000100003A000000D10900002101000000010000000B00000001000037010000DD0900002301000000020000000B00000001000031020000E90900002501000000030000000B00000001000029030000F50900002701000000040000000B0000000100001E040000000A00002801000000050000000B000000010000100500000B0A00002A01000000060000000B00000001000000060000150A00002B01000000070000000B000000010000ED060000200A00002C01000000080000000B000000010000D8070000290A00002C01000000090000000B000000010000C0080000330A00002D010000000A0000000B000000010000A60900003C0A00002D010000000B0000000B000000010000890A0000450A00002D010000000C0000000B000000010000690B00004D0A00002D010000000D0000000B000000010000470C0000550A00002C010000000E0000000B000000010000220D00005D0A00002C010000000F0000000B000000010000FA0D0000640A00002B01000000100000000B000000010000D00E00006B0A00002901000000000000000C00000001000041000000AE0A00002501000000010000000C0000000100003F010000BB0A00002701000000020000000C00000001000039020000C70A00002901000000030000000C00000001000031030000D30A00002A01000000040000000C00000001000027040000DF0A00002C01000000050000000C0000000100001A050000EB0A00002D01000000060000000C0000000100000A060000F60A00002E01000000070000000C000000010000F8060000010B00002F01000000080000000C000000010000E30700000B0B00003001000000090000000C000000010000CB080000150B000030010000000A0000000C000000010000B10900001F0B000030010000000B0000000C000000010000940A0000280B000030010000000C0000000C000000010000750B0000310B000030010000000D0000000C000000010000530C00003A0B000030010000000E0000000C0000000100002F0D0000420B00002F010000000F0000000C000000010000080E00004A0B00002E01000000100000000C000000010000DE0E0000520B00002D01000000000000000D00000001000049000000890B00002801000000010000000D00000001000047010000970B00002A01000000020000000D00000001000042020000A40B00002C01000000030000000D0000000100003A030000B10B00002E01000000040000000D00000001000030040000BD0B00002F01000000050000000D00000001000023050000C90B00003101000000060000000D00000001000014060000D50B00003201000000070000000D00000001000002070000E10B00003301000000080000000D000000010000EE070000EC0B00003301000000090000000D000000010000D7080000F60B000034010000000A0000000D000000010000BD090000010C000034010000000B0000000D000000010000A10A00000B0C000034010000000C0000000D000000010000820B0000150C000033010000000D0000000D000000010000600C00001E0C000033010000000E0000000D0000000100003C0D0000270C000032010000000F0000000D000000010000160E0000300C00003101000000100000000D000000010000ED0E0000380C00003001000000000000000E00000001000051000000630C00002C01000000010000000E0000000100004F010000710C00002E01000000020000000E0000000100004B0200007F0C00003001000000030000000E000000010000430300008D0C00003101000000040000000E0000000100003A0400009A0C00003301000000050000000E0000000100002D050000A70C00003401000000060000000E0000000100001F060000B30C00003501000000070000000E0000000100000D070000BF0C00003601000000080000000E000000010000F9070000CB0C00003601000000090000000E000000010000E2080000D70C000037010000000A0000000E000000010000C9090000E20C000037010000000B0000000E000000010000AD0A0000EC0C000037010000000C0000000E0000000100008F0B0000F70C000037010000000D0000000E0000000100006E0C0000010D000036010000000E0000000E0000000100004A0D00000A0D000035010000000F0000000E000000010000240E0000140D00003401000000100000000E000000010000FB0E00001C0D00003301000000000000000F0000000100005A0000003C0D00002F01000000010000000F000000010000580100004B0D00003101000000020000000F00000001000054020000590D00003301000000030000000F0000000100004D030000680D00003501000000040000000F00000001000044040000750D00003601000000050000000F00000001000038050000830D00003701000000060000000F0000000100002A060000900D00003801000000070000000F000000010000190700009D0D00003901000000080000000F00000001000005080000A90D00003A01000000090000000F000000010000EF080000B50D00003A010000000A0000000F000000010000D6090000C10D00003A010000000B0000000F000000010000BA0A0000CC0D00003A010000000C0000000F0000000100009C0B0000D70D00003A010000000D0000000F0000000100007C0C0000E20D000039010000000E0000000F000000010000590D0000EC0D000038010000000F0000000F000000010000330E0000F60D00003701000000100000000F0000000100000B0F0000000E00003601000000000000001000000001000063000000140E00003201000000010000001000000001000061010000230E0000340100000002000000100000000100005E020000320E00003601000000030000001000000001000057030000410E0000380100000004000000100000000100004F040000500E000039010000000500000010000000010000430500005E0E00003A010000000600000010000000010000350600006C0E00003B01000000070000001000000001000024070000790E00003C01000000080000001000000001000011080000860E00003D010000000900000010000000010000FB080000930E00003D010000000A00000010000000010000E30900009F0E00003D010000000B00000010000000010000C80A0000AB0E00003D010000000C00000010000000010000AB0B0000B70E00003D010000000D000000100000000100008A0C0000C20E00003C010000000E00000010000000010000680D0000CD0E00003B010000000F00000010000000010000420E0000D80E00003A0100000010000000100000000100001A0F0000E20E000039010000000000000000000000020000140000000D000000E70100000001000000000000000200000D01000012000000EA0100000002000000000000000200000302000017000000ED010000000300000000000000020000F60200001B000000EF010000000400000000000000020000E70300001F000000F1010000000500000000000000020000D504000023000000F3010000000600000000000000020000C105000026000000F4010000000700000000000000020000AA06000029000000F6010000000800000000000000020000900700002B000000F7010000000900000000000000020000740800002D000000F8010000000A00000000000000020000550900002F000000F9010000000B00000000000000020000340A000030000000F9010000000C00000000000000020000100B000032000000FA010000000D00000000000000020000EA0B000032000000FA010000000E00000000000000020000C10C000033000000FA010000000F00000000000000020000950D000033000000F9010000001000000000000000020000670E000032000000F901000000000000000100000002000016000000F8000000EC0100000001000000010000000200000F010000FE000000EF0100000002000000010000000200000502000003010000F2010000000300000001000000020000F902000008010000F4010000000400000001000000020000EB0300000C010000F6010000000500000001000000020000D904000011010000F8010000000600000001000000020000C505000015010000F9010000000700000001000000020000AF06000018010000FB010000000800000001000000020000960700001B010000FC0100000009000000010000000200007A0800001E010000FD010000000A000000010000000200005C09000020010000FE010000000B000000010000000200003B0A000023010000FE010000000C00000001000000020000170B000024010000FE010000000D00000001000000020000F10B000026010000FF010000000E00000001000000020000C90C000027010000FE010000000F000000010000000200009D0D000027010000FE010000001000000001000000020000700E000028010000FD01000000000000000200000002000019000000E2010000F101000000010000000200000002000012010000E8010000F401000000020000000200000002000009020000EE010000F6010000000300000002000000020000FD020000F3010000F9010000000400000002000000020000EF030000F9010000FB010000000500000002000000020000DE040000FE010000FD010000000600000002000000020000CA05000002020000FE010000000700000002000000020000B406000006020000000200000008000000020000000200009C0700000A02000001020000000900000002000000020000800800000E02000002020000000A00000002000000020000620900001102000002020000000B00000002000000020000420A00001302000003020000000C000000020000000200001F0B00001602000003020000000D00000002000000020000F90B00001802000003020000000E00000002000000020000D10C00001A02000003020000000F00000002000000020000A60D00001B02000003020000001000000002000000020000790E00001C020000020200000000000000030000000200001C000000CA020000F601000000010000000300000002000016010000D1020000F90100000002000000030000000200000D020000D8020000FB01000000030000000300000002000001030000DE020000FD010000000400000003000000020000F4030000E4020000FF010000000500000003000000020000E3040000E902000001020000000600000003000000020000D0050000EE02000003020000000700000003000000020000BA060000F302000004020000000800000003000000020000A2070000F80200000502000000090000000300000002000087080000FC02000006020000000A000000030000000200006A0900000003000007020000000B000000030000000200004A0A00000303000007020000000C00000003000000020000270B00000603000008020000000D00000003000000020000020C00000903000008020000000E00000003000000020000DA0C00000B03000008020000000F00000003000000020000B00D00000D03000007020000001000000003000000020000830E00000F030000060200000000000000040000000200001F000000B1030000FB01000000010000000400000002000019010000B9030000FE01000000020000000400000002000011020000C00300000002000000030000000400000002000006030000C703000002020000000400000004000000020000F9030000CE03000004020000000500000004000000020000E9040000D403000006020000000600000004000000020000D6050000DA03000007020000000700000004000000020000C1060000DF03000009020000000800000004000000020000A9070000E40300000A0200000009000000040000000200008E080000E90300000B020000000A0000000400000002000071090000ED0300000B020000000B00000004000000020000520A0000F20300000C020000000C00000004000000020000300B0000F50300000C020000000D000000040000000200000B0C0000F90300000C020000000E00000004000000020000E40C0000FC0300000C020000000F00000004000000020000BA0D0000FE0300000C0200000010000000040000000200008D0E0000010400000B0200000000000000050000000200002300000097040000000200000001000000050000000200001E0100009F0400000202000000020000000500000002000016020000A7040000050200000003000000050000000200000B030000AF04000007020000000400000005000000020000FE030000B604000009020000000500000005000000020000EF040000BD0400000A020000000600000005000000020000DC050000C40400000C020000000700000005000000020000C8060000CA0400000D020000000800000005000000020000B0070000D00400000E02000000090000000500000002000096080000D50400000F020000000A000000050000000200007A090000DA04000010020000000B000000050000000200005A0A0000DF04000010020000000C00000005000000020000390B0000E304000011020000000D00000005000000020000140C0000E704000011020000000E00000005000000020000ED0C0000EB04000010020000000F00000005000000020000C40D0000EE04000010020000001000000005000000020000980E0000F10400000F020000000000000006000000020000280000007C050000040200000001000000060000000200002301000085050000070200000002000000060000000200001B0200008D0500000902000000030000000600000002000011030000960500000B020000000400000006000000020000040400009E0500000D020000000500000006000000020000F5040000A50500000F020000000600000006000000020000E3050000AC05000010020000000700000006000000020000CF060000B305000012020000000800000006000000020000B8070000BA050000130200000009000000060000000200009E080000C005000014020000000A0000000600000002000082090000C505000014020000000B00000006000000020000640A0000CB05000015020000000C00000006000000020000420B0000D005000015020000000D000000060000000200001E0C0000D505000015020000000E00000006000000020000F80C0000D905000015020000000F00000006000000020000CF0D0000DD05000014020000001000000006000000020000A30E0000E1050000130200000000000000070000000200002C0000005F0600000902000000010000000700000002000028010000690600000B02000000020000000700000002000021020000720600000E020000000300000007000000020000170300007B060000100200000004000000070000000200000B0400008406000012020000000500000007000000020000FC0400008C06000013020000000600000007000000020000EB0500009406000015020000000700000007000000020000D70600009B06000016020000000800000007000000020000C0070000A206000017020000000900000007000000020000A7080000A906000018020000000A000000070000000200008B090000B006000019020000000B000000070000000200006D0A0000B606000019020000000C000000070000000200004C0B0000BB06000019020000000D00000007000000020000290C0000C106000019020000000E00000007000000020000020D0000C606000019020000000F00000007000000020000DA0D0000CA06000018020000001000000007000000020000AF0E0000CF0600001802000000000000000800000002000032000000420700000D0200000001000000080000000200002E0100004C070000100200000002000000080000000200002702000056070000120200000003000000080000000200001E0300005F07000014020000000400000008000000020000120400006907000016020000000500000008000000020000040500007207000018020000000600000008000000020000F30500007A07000019020000000700000008000000020000DF060000820700001A020000000800000008000000020000C90700008A0700001B020000000900000008000000020000B0080000910700001C020000000A0000000800000002000095090000990700001D020000000B00000008000000020000770A00009F0700001D020000000C00000008000000020000560B0000A60700001D020000000D00000008000000020000330C0000AC0700001D020000000E000000080000000200000E0D0000B10700001D020000000F00000008000000020000E50D0000B70700001C020000001000000008000000020000BB0E0000BC0700001C020000000000000009000000020000370000002308000012020000000100000009000000020000340100002E080000140200000002000000090000000200002E0200003808000016020000000300000009000000020000250300004308000018020000000400000009000000020000190400004C0800001A0200000005000000090000000200000C050000560800001C020000000600000009000000020000FB0500005F0800001D020000000700000009000000020000E8060000680800001F020000000800000009000000020000D20700007008000020020000000900000009000000020000BA0800007808000020020000000A000000090000000200009F0900008008000021020000000B00000009000000020000810A00008808000021020000000C00000009000000020000610B00008F08000021020000000D000000090000000200003F0C00009508000021020000000E00000009000000020000190D00009C08000021020000000F00000009000000020000F20D0000A208000020020000001000000009000000020000C70E0000A70800002002000000000000000A0000000200003E000000030900001602000000010000000A0000000200003A0100000E0900001802000000020000000A000000020000350200001A0900001B02000000030000000A0000000200002C030000240900001D02000000040000000A000000020000210400002F0900001F02000000050000000A00000002000014050000390900002002000000060000000A00000002000004060000430900002202000000070000000A000000020000F10600004C0900002302000000080000000A000000020000DC070000560900002402000000090000000A000000020000C40800005E09000024020000000A0000000A000000020000A90900006709000025020000000B0000000A0000000200008C0A00006F09000025020000000C0000000A0000000200006D0B00007709000025020000000D0000000A0000000200004A0C00007E09000025020000000E0000000A000000020000260D00008509000025020000000F0000000A000000020000FE0D00008B0900002402000000100000000A000000020000D40E0000920900002302000000000000000B00000002000044000000E10900001A02000000010000000B00000002000042010000EE0900001D02000000020000000B0000000200003C020000FA0900001F02000000030000000B00000002000034030000050A00002102000000040000000B0000000200002A040000100A00002302000000050000000B0000000200001D0500001B0A00002402000000060000000B0000000200000D060000260A00002602000000070000000B000000020000FB060000300A00002702000000080000000B000000020000E60700003A0A00002802000000090000000B000000020000CE080000430A000028020000000A0000000B000000020000B40900004C0A000029020000000B0000000B000000020000980A0000550A000029020000000C0000000B000000020000780B00005D0A000029020000000D0000000B000000020000570C0000650A000029020000000E0000000B000000020000320D00006D0A000029020000000F0000000B0000000200000B0E0000740A00002802000000100000000B000000020000E20E00007B0A00002702000000000000000C0000000200004B000000BF0A00001E02000000010000000C00000002000049010000CC0A00002102000000020000000C00000002000044020000D80A00002302000000030000000C0000000200003D030000E40A00002502000000040000000C00000002000033040000F00A00002702000000050000000C00000002000026050000FC0A00002802000000060000000C00000002000017060000070B00002A02000000070000000C00000002000005070000120B00002B02000000080000000C000000020000F00700001C0B00002C02000000090000000C000000020000D9080000260B00002C020000000A0000000C000000020000C0090000300B00002D020000000B0000000C000000020000A30A0000390B00002D020000000C0000000C000000020000850B0000420B00002D020000000D0000000C000000020000630C00004B0B00002D020000000E0000000C0000000200003F0D0000530B00002D020000000F0000000C000000020000190E00005B0B00002C02000000100000000C000000020000EF0E0000630B00002B02000000000000000D000000020000530000009B0B00002202000000010000000D00000002000051010000A90B00002502000000020000000D0000000200004D020000B60B00002702000000030000000D00000002000046030000C30B00002902000000040000000D0000000200003C040000CF0B00002B02000000050000000D00000002000030050000DB0B00002C02000000060000000D00000002000021060000E70B00002E02000000070000000D0000000200000F070000F30B00002F02000000080000000D000000020000FB070000FE0B00003002000000090000000D000000020000E5080000090C000030020000000A0000000D000000020000CB090000130C000031020000000B0000000D000000020000B00A00001D0C000031020000000C0000000D000000020000910B0000270C000031020000000D0000000D000000020000700C0000300C000031020000000E0000000D0000000200004D0D0000390C000030020000000F0000000D000000020000270E0000420C00003002000000100000000D000000020000FE0E00004A0C00002F02000000000000000E0000000200005B000000760C00002602000000010000000E0000000200005A010000840C00002902000000020000000E00000002000056020000920C00002B02000000030000000E0000000200004F030000A00C00002D02000000040000000E00000002000046040000AD0C00002F02000000050000000E0000000200003A050000BA0C00003002000000060000000E0000000200002B060000C60C00003102000000070000000E0000000200001A070000D20C00003202000000080000000E00000002000007080000DE0C00003302000000090000000E000000020000F0080000EA0C000034020000000A0000000E000000020000D8090000F50C000034020000000B0000000E000000020000BC0A0000FF0C000035020000000C0000000E0000000200009E0B00000A0D000035020000000D0000000E0000000200007E0C0000140D000034020000000E0000000E0000000200005B0D00001D0D000034020000000F0000000E000000020000350E0000270D00003302000000100000000E0000000200000D0F00002F0D00003202000000000000000F00000002000064000000500D00002A02000000010000000F000000020000630100005F0D00002D02000000020000000F0000000200005F0200006D0D00002F02000000030000000F000000020000590300007B0D00003102000000040000000F00000002000050040000890D00003202000000050000000F00000002000044050000970D00003402000000060000000F00000002000036060000A40D00003502000000070000000F00000002000026070000B10D00003602000000080000000F00000002000013080000BD0D00003702000000090000000F000000020000FD080000C90D000038020000000A0000000F000000020000E4090000D50D000038020000000B0000000F000000020000C90A0000E00D000038020000000C0000000F000000020000AC0B0000EB0D000038020000000D0000000F0000000200008C0C0000F60D000038020000000E0000000F000000020000690D0000000E000037020000000F0000000F000000020000440E00000A0E00003702000000100000000F0000000200001C0F0000140E0000360200000000000000100000000200006D000000280E00002E0200000001000000100000000200006C010000380E00003002000000020000001000000002000069020000470E00003202000000030000001000000002000063030000560E0000340200000004000000100000000200005A040000650E0000360200000005000000100000000200004F050000730E00003802000000060000001000000002000042060000810E000039020000000700000010000000020000320700008E0E00003A0200000008000000100000000200001F0800009B0E00003B0200000009000000100000000200000A090000A80E00003B020000000A00000010000000020000F2090000B40E00003C020000000B00000010000000020000D70A0000C00E00003C020000000C00000010000000020000BA0B0000CC0E00003C020000000D000000100000000200009A0C0000D70E00003B020000000E00000010000000020000780D0000E20E00003B020000000F00000010000000020000530E0000ED0E00003A0200000010000000100000000200002C0F0000F70E0000390200000000000000000000000300001D00000013000000DA0200000001000000000000000300001601000018000000DD0200000002000000000000000300000D0200001D000000E00200000003000000000000000300000103000021000000E2020000000400000000000000030000F203000025000000E5020000000500000000000000030000E104000028000000E7020000000600000000000000030000CD0500002B000000E9020000000700000000000000030000B60600002E000000EB0200000008000000000000000300009D07000031000000EC0200000009000000000000000300008208000033000000EE020000000A000000000000000300006409000035000000EF020000000B00000000000000030000430A000036000000F0020000000C000000000000000300001F0B000037000000F0020000000D00000000000000030000F90B000038000000F1020000000E00000000000000030000D10C000038000000F1020000000F00000000000000030000A60D000038000000F1020000001000000000000000030000780E000038000000F102000000000000000100000003000020000000FF000000DF0200000001000000010000000300001901000004010000E2020000000200000001000000030000100200000A010000E5020000000300000001000000030000040300000F010000E8020000000400000001000000030000F603000013010000EA020000000500000001000000030000E504000017010000EC020000000600000001000000030000D20500001B010000EE020000000700000001000000030000BC0600001F010000F0020000000800000001000000030000A307000022010000F20200000009000000010000000300008808000025010000F3020000000A000000010000000300006A09000027010000F4020000000B000000010000000300004A0A000029010000F5020000000C00000001000000030000270B00002B010000F6020000000D00000001000000030000010C00002C010000F6020000000E00000001000000030000D90C00002D010000F6020000000F00000001000000030000AE0D00002E010000F6020000001000000001000000030000810E00002E010000F602000000000000000200000003000022000000E9010000E50200000001000000020000000300001C010000F0010000E802000000020000000200000003000013020000F6010000EB02000000030000000200000003000008030000FB010000ED020000000400000002000000030000FA03000000020000F0020000000500000002000000030000EA04000005020000F2020000000600000002000000030000D70500000A020000F4020000000700000002000000030000C10600000E020000F5020000000800000002000000030000A907000012020000F70200000009000000020000000300008E08000015020000F8020000000A000000020000000300007109000018020000F9020000000B00000002000000030000510A00001B020000FA020000000C000000020000000300002E0B00001D020000FB020000000D00000002000000030000090C00001F020000FB020000000E00000002000000030000E10C000021020000FB020000000F00000002000000030000B70D000022020000FB0200000010000000020000000300008A0E000023020000FB02000000000000000300000003000025000000D3020000EA0200000001000000030000000300001F010000DA020000ED02000000020000000300000003000017020000E0020000F00200000003000000030000000300000C030000E6020000F2020000000400000003000000030000FF030000EC020000F5020000000500000003000000030000EF040000F2020000F7020000000600000003000000030000DC050000F7020000F9020000000700000003000000030000C7060000FC020000FB020000000800000003000000030000AF07000000030000FC0200000009000000030000000300009508000004030000FD020000000A000000030000000300007809000008030000FE020000000B00000003000000030000580A00000B030000FF020000000C00000003000000030000360B00000E03000000030000000D00000003000000030000120C00001103000000030000000E00000003000000030000EA0C00001303000000030000000F00000003000000030000C00D00001503000000030000001000000003000000030000940E0000170300000003000000000000000400000003000029000000BB030000EF02000000010000000400000003000023010000C2030000F20200000002000000040000000300001C020000CA030000F502000000030000000400000003000011030000D0030000F802000000040000000400000003000004040000D7030000FA020000000500000004000000030000F5040000DD030000FC020000000600000004000000030000E2050000E3030000FE020000000700000004000000030000CE060000E903000000030000000800000004000000030000B6070000EE030000010300000009000000040000000300009C080000F203000002030000000A0000000400000003000080090000F703000003030000000B00000004000000030000610A0000FB03000004030000000C000000040000000300003F0B0000FF03000005030000000D000000040000000300001B0C00000204000005030000000E00000004000000030000F40C00000504000005030000000F00000004000000030000CA0D000008040000050300000010000000040000000300009E0E00000A040000050300000000000000050000000300002D000000A2040000F502000000010000000500000003000028010000AA040000F802000000020000000500000003000020020000B2040000FA02000000030000000500000003000016030000B9040000FD0200000004000000050000000300000A040000C1040000FF020000000500000005000000030000FB040000C704000001030000000600000005000000030000E9050000CE04000003030000000700000005000000030000D4060000D404000005030000000800000005000000030000BE070000DA04000006030000000900000005000000030000A4080000DF04000007030000000A0000000500000003000088090000E404000008030000000B00000005000000030000690A0000E904000009030000000C00000005000000030000480B0000ED0400000A030000000D00000005000000030000240C0000F10400000A030000000E00000005000000030000FD0C0000F50400000A030000000F00000005000000030000D40D0000F80400000A030000001000000005000000030000A90E0000FB0400000A0300000000000000060000000300003100000087050000FA0200000001000000060000000300002D01000090050000FD0200000002000000060000000300002602000099050000FF0200000003000000060000000300001C030000A10500000203000000040000000600000003000010040000A90500000403000000050000000600000003000001050000B005000006030000000600000006000000030000F0050000B805000008030000000700000006000000030000DC060000BE0500000A030000000800000006000000030000C5070000C50500000B030000000900000006000000030000AC080000CB0500000C030000000A0000000600000003000090090000D10500000D030000000B00000006000000030000720A0000D60500000E030000000C00000006000000030000510B0000DB0500000E030000000D000000060000000300002E0C0000E00500000F030000000E00000006000000030000080D0000E40500000F030000000F00000006000000030000DF0D0000E80500000F030000001000000006000000030000B40E0000EC0500000E030000000000000007000000030000360000006C060000FF0200000001000000070000000300003201000075060000020300000002000000070000000300002B0200007F0600000403000000030000000700000003000022030000870600000703000000040000000700000003000016040000900600000903000000050000000700000003000008050000980600000B030000000600000007000000030000F7050000A00600000D030000000700000007000000030000E4060000A70600000E030000000800000007000000030000CE070000AF06000010030000000900000007000000030000B5080000B506000011030000000A000000070000000300009A090000BC06000012030000000B000000070000000300007C0A0000C206000013030000000C000000070000000300005B0B0000C706000013030000000D00000007000000030000380C0000CD06000013030000000E00000007000000030000130D0000D206000013030000000F00000007000000030000EA0D0000D606000013030000001000000007000000030000C00E0000DB060000130300000000000000080000000300003B0000004F07000004030000000100000008000000030000380100005907000007030000000200000008000000030000320200006307000009030000000300000008000000030000290300006D0700000C0300000004000000080000000300001D040000760700000E030000000500000008000000030000100500007F07000010030000000600000008000000030000FF0500008707000012030000000700000008000000030000EC0600008F07000013030000000800000008000000030000D60700009707000015030000000900000008000000030000BE0800009E07000016030000000A00000008000000030000A3090000A607000017030000000B00000008000000030000860A0000AC07000017030000000C00000008000000030000660B0000B307000018030000000D00000008000000030000430C0000B907000018030000000E000000080000000300001E0D0000BE07000018030000000F00000008000000030000F60D0000C407000018030000001000000008000000030000CC0E0000C9070000170300000000000000090000000300004100000031080000090300000001000000090000000300003E0100003C0800000C03000000020000000900000003000038020000460800000E030000000300000009000000030000300300005108000011030000000400000009000000030000250400005A08000013030000000500000009000000030000170500006408000015030000000600000009000000030000070600006D08000016030000000700000009000000030000F50600007608000018030000000800000009000000030000DF0700007E08000019030000000900000009000000030000C8080000860800001A030000000A00000009000000030000AD0900008E0800001B030000000B00000009000000030000900A0000960800001C030000000C00000009000000030000700B00009D0800001C030000000D000000090000000300004E0C0000A30800001C030000000E00000009000000030000290D0000AA0800001C030000000F00000009000000030000020E0000B00800001C030000001000000009000000030000D80E0000B50800001C03000000000000000A00000003000047000000120900000E03000000010000000A000000030000450100001D0900001003000000020000000A0000000300003F020000280900001303000000030000000A00000003000037030000330900001503000000040000000A0000000300002D0400003E0900001703000000050000000A00000003000020050000480900001903000000060000000A00000003000010060000520900001B03000000070000000A000000030000FE0600005B0900001D03000000080000000A000000030000E9070000640900001E03000000090000000A000000030000D20800006D0900001F030000000A0000000A000000030000B80900007609000020030000000B0000000A0000000300009B0A00007E09000020030000000C0000000A0000000300007C0B00008509000021030000000D0000000A0000000300005A0C00008D09000021030000000E0000000A000000030000360D00009409000021030000000F0000000A0000000300000F0E00009A0900002103000000100000000A000000030000E50E0000A10900002003000000000000000B0000000300004E000000F10900001203000000010000000B0000000300004C010000FD0900001503000000020000000B00000003000047020000090A00001803000000030000000B0000000300003F030000150A00001A03000000040000000B00000003000035040000200A00001C03000000050000000B000000030000290500002B0A00001E03000000060000000B00000003000019060000350A00002003000000070000000B00000003000007070000400A00002103000000080000000B000000030000F3070000490A00002203000000090000000B000000030000DC080000530A000023030000000A0000000B000000030000C20900005C0A000024030000000B0000000B000000030000A60A0000650A000025030000000C0000000B000000030000870B00006D0A000025030000000D0000000B000000030000660C0000750A000025030000000E0000000B000000030000420D00007D0A000025030000000F0000000B0000000300001C0E0000840A00002503000000100000000B000000030000F30E00008B0A00002403000000000000000C00000003000055000000D00A00001703000000010000000C00000003000053010000DC0A00001A03000000020000000C0000000300004F020000E90A00001C03000000030000000C00000003000048030000F50A00001F03000000040000000C0000000300003E040000010B00002103000000050000000C000000030000320500000D0B00002303000000060000000C00000003000023060000180B00002403000000070000000C00000003000012070000230B00002603000000080000000C000000030000FE0700002D0B00002703000000090000000C000000030000E7080000370B000028030000000A0000000C000000030000CE090000410B000029030000000B0000000C000000030000B20A00004A0B000029030000000C0000000C000000030000940B0000530B000029030000000D0000000C000000030000730C00005C0B00002A030000000E0000000C0000000300004F0D0000640B000029030000000F0000000C000000030000290E00006C0B00002903000000100000000C000000030000000F0000740B00002903000000000000000D0000000300005D000000AD0B00001C03000000010000000D0000000300005B010000BA0B00001E03000000020000000D00000003000057020000C80B00002103000000030000000D00000003000051030000D40B00002303000000040000000D00000003000047040000E10B00002503000000050000000D0000000300003C050000ED0B00002703000000060000000D0000000300002D060000F90B00002903000000070000000D0000000300001C070000040C00002A03000000080000000D000000030000090800000F0C00002B03000000090000000D000000030000F20800001A0C00002C030000000A0000000D000000030000DA090000250C00002D030000000B0000000D000000030000BE0A00002F0C00002D030000000C0000000D000000030000A00B0000380C00002E030000000D0000000D000000030000800C0000420C00002E030000000E0000000D0000000300005D0D00004B0C00002E030000000F0000000D000000030000370E0000530C00002D03000000100000000D0000000300000F0F00005C0C00002D03000000000000000E00000003000065000000890C00002003000000010000000E00000003000064010000970C00002303000000020000000E00000003000060020000A50C00002503000000030000000E0000000300005A030000B20C00002703000000040000000E00000003000051040000BF0C00002903000000050000000E00000003000046050000CC0C00002B03000000060000000E00000003000038060000D90C00002D03000000070000000E00000003000027070000E50C00002E03000000080000000E00000003000014080000F10C00002F03000000090000000E000000030000FE080000FC0C000030030000000A0000000E000000030000E6090000070D000031030000000B0000000E000000030000CB0A0000120D000032030000000C0000000E000000030000AD0B00001C0D000032030000000D0000000E0000000300008D0C0000260D000032030000000E0000000E0000000300006B0D0000300D000032030000000F0000000E000000030000450E0000390D00003103000000100000000E0000000300001E0F0000420D00003103000000000000000F0000000300006D000000630D00002403000000010000000F0000000300006D010000720D00002703000000020000000F00000003000069020000810D00002A03000000030000000F000000030000640300008F0D00002C03000000040000000F0000000300005B0400009D0D00002E03000000050000000F00000003000050050000AA0D00003003000000060000000F00000003000043060000B70D00003103000000070000000F00000003000033070000C40D00003203000000080000000F00000003000020080000D10D00003403000000090000000F0000000300000B090000DD0D000034030000000A0000000F000000030000F3090000E90D000035030000000B0000000F000000030000D80A0000F40D000036030000000C0000000F000000030000BB0B0000FF0D000036030000000D0000000F0000000300009B0C00000A0E000036030000000E0000000F000000030000790D0000140E000036030000000F0000000F000000030000540E00001E0E00003503000000100000000F0000000300002D0F0000270E000035030000000000000010000000030000760000003D0E000029030000000100000010000000030000760100004C0E00002B030000000200000010000000030000730200005C0E00002E0300000003000000100000000300006E0300006A0E00003003000000040000001000000003000066040000790E0000320300000005000000100000000300005B050000870E0000340300000006000000100000000300004E060000950E0000350300000007000000100000000300003F070000A20E0000370300000008000000100000000300002C080000B00E00003803000000090000001000000003000017090000BC0E000039030000000A00000010000000030000000A0000C90E000039030000000B00000010000000030000E60A0000D50E00003A030000000C00000010000000030000C90B0000E00E00003A030000000D00000010000000030000AA0C0000EC0E00003A030000000E00000010000000030000880D0000F70E00003A030000000F00000010000000030000640E0000010F0000390300000010000000100000000300003D0F00000C0F0000390300000000000000000000000400002600000019000000CB030000000100000000000000040000200100001E000000CF0300000002000000000000000400001702000022000000D20300000003000000000000000400000B03000026000000D5030000000400000000000000040000FD0300002A000000D8030000000500000000000000040000EC0400002E000000DA030000000600000000000000040000D905000031000000DD030000000700000000000000040000C306000034000000DF030000000800000000000000040000AA07000036000000E10300000009000000000000000400008F08000038000000E3030000000A00000000000000040000710900003A000000E4030000000B00000000000000040000510A00003B000000E5030000000C000000000000000400002E0B00003C000000E6030000000D00000000000000040000090C00003D000000E7030000000E00000000000000040000E10C00003D000000E8030000000F00000000000000040000B60D00003D000000E8030000001000000000000000040000890E00003D000000E80300000000000000010000000400002900000005010000D1030000000100000001000000040000230100000B010000D50300000002000000010000000400001A02000010010000D80300000003000000010000000400000F03000015010000DB030000000400000001000000040000010400001A010000DE030000000500000001000000040000F10400001E010000E0030000000600000001000000040000DE05000021010000E3030000000700000001000000040000C806000025010000E5030000000800000001000000040000B007000028010000E7030000000900000001000000040000950800002B010000E8030000000A00000001000000040000780900002D010000EA030000000B00000001000000040000580A00002F010000EB030000000C00000001000000040000350B000031010000EC030000000D00000001000000040000100C000032010000ED030000000E00000001000000040000E90C000033010000ED030000000F00000001000000040000BE0D000034010000EE030000001000000001000000040000910E000034010000EE0300000000000000020000000400002B000000F1010000D703000000010000000200000004000026010000F7010000DB0300000002000000020000000400001D020000FD010000DE0300000003000000020000000400001303000002020000E10300000004000000020000000400000504000008020000E4030000000500000002000000040000F50400000C020000E6030000000600000002000000040000E305000011020000E8030000000700000002000000040000CE06000015020000EB030000000800000002000000040000B607000019020000EC0300000009000000020000000400009B0800001C020000EE030000000A000000020000000400007F0900001F020000EF030000000B000000020000000400005F0A000022020000F1030000000C000000020000000400003D0B000024020000F2030000000D00000002000000040000180C000026020000F2030000000E00000002000000040000F10C000028020000F3030000000F00000002000000040000C70D000029020000F30300000010000000020000000400009B0E00002A020000F30300000000000000030000000400002E000000DB020000DD03000000010000000300000004000029010000E2020000E103000000020000000300000004000021020000E8020000E403000000030000000300000004000017030000EF020000E70300000004000000030000000400000A040000F4020000E9030000000500000003000000040000FA040000FA020000EC030000000600000003000000040000E8050000FF020000EE030000000700000003000000040000D406000004030000F0030000000800000003000000040000BC07000008030000F2030000000900000003000000040000A20800000C030000F4030000000A000000030000000400008609000010030000F5030000000B00000003000000040000670A000013030000F6030000000C00000003000000040000450B000016030000F7030000000D00000003000000040000210C000019030000F8030000000E00000003000000040000FA0C00001B030000F8030000000F00000003000000040000D10D00001D030000F9030000001000000003000000040000A50E00001F030000F903000000000000000400000004000032000000C4030000E30300000001000000040000000400002D010000CC030000E703000000020000000400000004000026020000D3030000EA0300000003000000040000000400001C030000DA030000EC0300000004000000040000000400000F040000E0030000EF03000000050000000400000004000000050000E6030000F2030000000600000004000000040000EE050000EC030000F4030000000700000004000000040000DA060000F2030000F6030000000800000004000000040000C3070000F7030000F8030000000900000004000000040000AA080000FB030000F9030000000A000000040000000400008E09000000040000FA030000000B000000040000000400006F0A000004040000FC030000000C000000040000000400004E0B000007040000FC030000000D000000040000000400002A0C00000B040000FD030000000E00000004000000040000030D00000E040000FE030000000F00000004000000040000DA0D000010040000FE030000001000000004000000040000AF0E000013040000FE03000000000000000500000004000036000000AC040000E903000000010000000500000004000031010000B4040000EC0300000002000000050000000400002A020000BC040000EF03000000030000000500000004000021030000C3040000F203000000040000000500000004000015040000CB040000F503000000050000000500000004000006050000D1040000F7030000000600000005000000040000F5050000D8040000F9030000000700000005000000040000E1060000DE040000FB030000000800000005000000040000CA070000E4040000FD030000000900000005000000040000B1080000E9040000FF030000000A0000000500000004000096090000EE04000000040000000B00000005000000040000770A0000F304000001040000000C00000005000000040000570B0000F704000002040000000D00000005000000040000330C0000FB04000002040000000E000000050000000400000D0D0000FF04000003040000000F00000005000000040000E50D00000205000003040000001000000005000000040000B90E000005050000030400000000000000060000000400003A00000092050000EF030000000100000006000000040000360100009B050000F203000000020000000600000004000030020000A4050000F503000000030000000600000004000027030000AC050000F80300000004000000060000000400001B040000B4050000FA0300000005000000060000000400000D050000BB050000FD030000000600000006000000040000FC050000C2050000FF030000000700000006000000040000E8060000C905000001040000000800000006000000040000D2070000D005000002040000000900000006000000040000BA080000D605000004040000000A000000060000000400009E090000DB05000005040000000B00000006000000040000800A0000E105000006040000000C00000006000000040000600B0000E605000007040000000D000000060000000400003D0C0000EA05000008040000000E00000006000000040000170D0000EF05000008040000000F00000006000000040000EF0D0000F305000008040000001000000006000000040000C50E0000F6050000080400000000000000070000000400003F00000078060000F40300000001000000070000000400003C01000081060000F7030000000200000007000000040000350200008A060000FA0300000003000000070000000400002D03000093060000FD030000000400000007000000040000210400009C0600000004000000050000000700000004000014050000A40600000204000000060000000700000004000003060000AC06000004040000000700000007000000040000F0060000B306000006040000000800000007000000040000DA070000BA06000008040000000900000007000000040000C2080000C106000009040000000A00000007000000040000A7090000C70600000A040000000B000000070000000400008A0A0000CD0600000B040000000C000000070000000400006A0B0000D30600000C040000000D00000007000000040000470C0000D80600000D040000000E00000007000000040000220D0000DD0600000D040000000F00000007000000040000FA0D0000E20600000D040000001000000007000000040000D00E0000E60600000D040000000000000008000000040000440000005C070000FA0300000001000000080000000400004101000066070000FD0300000002000000080000000400003C02000070070000000400000003000000080000000400003303000079070000030400000004000000080000000400002904000083070000050400000005000000080000000400001B0500008B070000070400000006000000080000000400000B0600009407000009040000000700000008000000040000F80600009C0700000B040000000800000008000000040000E3070000A40700000D040000000900000008000000040000CB080000AB0700000E040000000A00000008000000040000B1090000B207000010040000000B00000008000000040000940A0000B907000011040000000C00000008000000040000740B0000BF07000011040000000D00000008000000040000520C0000C507000012040000000E000000080000000400002D0D0000CB07000012040000000F00000008000000040000060E0000D007000012040000001000000008000000040000DC0E0000D5070000120400000000000000090000000400004A0000003F080000FF0300000001000000090000000400004801000049080000020400000002000000090000000400004202000054080000050400000003000000090000000400003A0300005E0800000804000000040000000900000004000030040000680800000A04000000050000000900000004000023050000720800000D040000000600000009000000040000130600007B0800000F040000000700000009000000040000010700008408000011040000000800000009000000040000EC0700008C08000012040000000900000009000000040000D50800009408000014040000000A00000009000000040000BB0900009C08000015040000000B000000090000000400009E0A0000A308000016040000000C000000090000000400007F0B0000AA08000016040000000D000000090000000400005D0C0000B108000017040000000E00000009000000040000390D0000B708000017040000000F00000009000000040000120E0000BD08000017040000001000000009000000040000E90E0000C30800001704000000000000000A00000004000051000000200900000404000000010000000A0000000400004E0100002C0900000804000000020000000A00000004000049020000370900000A04000000030000000A00000004000042030000420900000D04000000040000000A000000040000380400004C0900001004000000050000000A0000000400002B050000570900001204000000060000000A0000000400001C060000600900001404000000070000000A0000000400000A0700006A0900001604000000080000000A000000040000F6070000730900001704000000090000000A000000040000DF0800007C09000019040000000A0000000A000000040000C5090000840900001A040000000B0000000A000000040000A90A00008C0900001B040000000C0000000A0000000400008A0B0000940900001B040000000D0000000A000000040000690C00009B0900001C040000000E0000000A000000040000450D0000A20900001C040000000F0000000A0000000400001F0E0000A90900001C04000000100000000A000000040000F60E0000AF0900001C04000000000000000B00000004000057000000010A00000A04000000010000000B000000040000550100000D0A00000D04000000020000000B00000004000051020000190A00001004000000030000000B0000000400004A030000240A00001204000000040000000B00000004000040040000300A00001504000000050000000B000000040000340500003A0A00001704000000060000000B00000004000025060000450A00001904000000070000000B000000040000140700004F0A00001B04000000080000000B00000004000000080000590A00001C04000000090000000B000000040000E9080000620A00001E040000000A0000000B000000040000D00900006B0A00001F040000000B0000000B000000040000B50A0000740A000020040000000C0000000B000000040000960B00007C0A000020040000000D0000000B000000040000750C0000840A000021040000000E0000000B000000040000520D00008C0A000021040000000F0000000B0000000400002C0E0000930A00002104000000100000000B000000040000030F00009A0A00002104000000000000000C0000000400005E000000E00A00000F04000000010000000C0000000400005D010000ED0A00001204000000020000000C00000004000059020000F90A00001504000000030000000C00000004000052030000060B00001704000000040000000C00000004000049040000120B00001A04000000050000000C0000000400003D0500001D0B00001C04000000060000000C0000000400002F060000280B00001E04000000070000000C0000000400001E070000330B00002004000000080000000C0000000400000A0800003D0B00002104000000090000000C000000040000F4080000470B000022040000000A0000000C000000040000DC090000510B000023040000000B0000000C000000040000C00A00005B0B000024040000000C0000000C000000040000A20B0000640B000025040000000D0000000C000000040000820C00006C0B000025040000000E0000000C0000000400005F0D0000750B000026040000000F0000000C000000040000390E00007C0B00002604000000100000000C000000040000110F0000840B00002504000000000000000D00000004000066000000BE0B00001404000000010000000D00000004000065010000CC0B00001704000000020000000D00000004000061020000D90B00001A04000000030000000D0000000400005B030000E60B00001C04000000040000000D00000004000052040000F20B00001F04000000050000000D00000004000047050000FE0B00002104000000060000000D000000040000390600000A0C00002304000000070000000D00000004000029070000160C00002504000000080000000D00000004000015080000210C00002604000000090000000D000000040000000900002B0C000027040000000A0000000D000000040000E7090000360C000028040000000B0000000D000000040000CD0A0000400C000029040000000C0000000D000000040000AF0B00004A0C00002A040000000D0000000D0000000400008F0C0000530C00002A040000000E0000000D0000000400006C0D00005C0C00002A040000000F0000000D000000040000470E0000650C00002A04000000100000000D0000000400001F0F00006D0C00002A04000000000000000E0000000400006E0000009B0C00001904000000010000000E0000000400006E010000A90C00001C04000000020000000E0000000400006A020000B70C00001F04000000030000000E00000004000065030000C40C00002104000000040000000E0000000400005C040000D20C00002404000000050000000E00000004000051050000DF0C00002604000000060000000E00000004000044060000EB0C00002804000000070000000E00000004000034070000F70C00002904000000080000000E00000004000021080000030D00002B04000000090000000E0000000400000C0900000E0D00002C040000000A0000000E000000040000F4090000190D00002D040000000B0000000E000000040000D90A0000240D00002E040000000C0000000E000000040000BC0B00002E0D00002E040000000D0000000E0000000400009D0C0000380D00002F040000000E0000000E0000000400007A0D0000420D00002F040000000F0000000E000000040000560E00004B0D00002F04000000100000000E0000000400002E0F0000540D00002E04000000000000000F00000004000077000000760D00001E04000000010000000F00000004000076010000850D00002104000000020000000F00000004000074020000940D00002404000000030000000F0000000400006E030000A20D00002604000000040000000F00000004000066040000B00D00002804000000050000000F0000000400005C050000BD0D00002B04000000060000000F0000000400004F060000CB0D00002C04000000070000000F0000000400003F070000D70D00002E04000000080000000F0000000400002D080000E40D00002F04000000090000000F00000004000018090000F00D000031040000000A0000000F000000040000000A0000FC0D000032040000000B0000000F000000040000E60A0000070E000032040000000C0000000F000000040000CA0B0000120E000033040000000D0000000F000000040000AB0C00001D0E000033040000000E0000000F000000040000890D0000270E000033040000000F0000000F000000040000640E0000310E00003304000000100000000F0000000400003D0F00003B0E00003304000000000000001000000004000080000000510E00002304000000010000001000000004000080010000600E0000260400000002000000100000000400007E020000700E000028040000000300000010000000040000790300007E0E00002B040000000400000010000000040000710400008D0E00002D040000000500000010000000040000670500009B0E00002F0400000006000000100000000400005A060000A90E0000310400000007000000100000000400004B070000B60E00003304000000080000001000000004000039080000C40E00003404000000090000001000000004000025090000D00E000035040000000A000000100000000400000E0A0000DD0E000036040000000B00000010000000040000F40A0000E90E000037040000000C00000010000000040000D80B0000F40E000037040000000D00000010000000040000B90C0000000F000038040000000E00000010000000040000980D00000B0F000038040000000F00000010000000040000740E0000150F0000370400000010000000100000000400004D0F0000200F0000370400000000000000000000000500002F0000001E000000BC0400000001000000000000000500002901000023000000C00400000002000000000000000500002102000027000000C4040000000300000000000000050000160300002B000000C7040000000400000000000000050000080400002F000000CA040000000500000000000000050000F704000033000000CD040000000600000000000000050000E405000036000000D0040000000700000000000000050000CF06000039000000D2040000000800000000000000050000B70700003B000000D50400000009000000000000000500009C0800003D000000D7040000000A000000000000000500007F0900003F000000D8040000000B000000000000000500005F0A000040000000DA040000000C000000000000000500003D0B000041000000DB040000000D00000000000000050000180C000041000000DD040000000E00000000000000050000F00C000042000000DE040000000F00000000000000050000C60D000042000000DE040000001000000000000000050000990E000041000000DF040000000000000001000000050000310000000B010000C30400000001000000010000000500002C01000011010000C70400000002000000010000000500002402000016010000CA040000000300000001000000050000190300001B010000CE0400000004000000010000000500000C0400001F010000D1040000000500000001000000050000FC04000024010000D4040000000600000001000000050000E905000027010000D6040000000700000001000000050000D40600002B010000D9040000000800000001000000050000BC0700002E010000DB040000000900000001000000050000A208000030010000DD040000000A000000010000000500008509000033010000DF040000000B00000001000000050000660A000035010000E0040000000C00000001000000050000440B000036010000E2040000000D000000010000000500001F0C000038010000E3040000000E00000001000000050000F80C000039010000E4040000000F00000001000000050000CE0D000039010000E4040000001000000001000000050000A20E000039010000E504000000000000000200000005000034000000F8010000C90400000001000000020000000500002F010000FE010000CD0400000002000000020000000500002702000004020000D10400000003000000020000000500001D03000009020000D4040000000400000002000000050000100400000E020000D70400000005000000020000000500000005000013020000DA040000000600000002000000050000EE05000018020000DC040000000700000002000000050000DA0600001C020000DF040000000800000002000000050000C20700001F020000E1040000000900000002000000050000A808000023020000E3040000000A000000020000000500008C09000026020000E5040000000B000000020000000500006D0A000028020000E6040000000C000000020000000500004B0B00002B020000E8040000000D00000002000000050000270C00002D020000E9040000000E00000002000000050000000D00002E020000EA040000000F00000002000000050000D70D000030020000EA040000001000000002000000050000AB0E000030020000EB04000000000000000300000005000037000000E3020000D004000000010000000300000005000032010000EA020000D40400000002000000030000000500002B020000F0020000D704000000030000000300000005000021030000F6020000DA04000000040000000300000005000015040000FC020000DD0400000005000000030000000500000605000002030000E0040000000600000003000000050000F405000007030000E3040000000700000003000000050000E00600000C030000E5040000000800000003000000050000C907000010030000E7040000000900000003000000050000AF08000014030000E9040000000A000000030000000500009309000018030000EB040000000B00000003000000050000750A00001B030000EC040000000C00000003000000050000530B00001E030000EE040000000D00000003000000050000300C000021030000EF040000000E00000003000000050000090D000023030000EF040000000F00000003000000050000E00D000025030000F0040000001000000003000000050000B50E000026030000F00400000000000000040000000500003B000000CD030000D604000000010000000400000005000036010000D4030000DA0400000002000000040000000500002F020000DB030000DD04000000030000000400000005000026030000E2030000E00400000004000000040000000500001A040000E9030000E30400000005000000040000000500000B050000EF030000E6040000000600000004000000050000FA050000F5030000E9040000000700000004000000050000E6060000FA030000EB040000000800000004000000050000D0070000FF030000ED040000000900000004000000050000B708000004040000EF040000000A000000040000000500009B09000008040000F1040000000B000000040000000500007D0A00000C040000F2040000000C000000040000000500005C0B000010040000F3040000000D00000004000000050000390C000013040000F4040000000E00000004000000050000130D000016040000F5040000000F00000004000000050000EA0D000019040000F6040000001000000004000000050000BF0E00001B040000F60400000000000000050000000500003F000000B5040000DC0400000001000000050000000500003B010000BE040000E004000000020000000500000005000034020000C5040000E30400000003000000050000000500002B030000CD040000E70400000004000000050000000500001F040000D4040000EA04000000050000000500000005000011050000DB040000EC04000000060000000500000005000000060000E1040000EF040000000700000005000000050000ED060000E7040000F1040000000800000005000000050000D7070000ED040000F3040000000900000005000000050000BE080000F3040000F5040000000A00000005000000050000A3090000F8040000F7040000000B00000005000000050000850A0000FC040000F8040000000C00000005000000050000650B000001050000F9040000000D00000005000000050000420C000005050000FA040000000E000000050000000500001D0D000008050000FB040000000F00000005000000050000F40D00000B050000FC040000001000000005000000050000CA0E00000E050000FC040000000000000006000000050000430000009D050000E304000000010000000600000005000040010000A6050000E60400000002000000060000000500003A020000AE050000EA04000000030000000600000005000031030000B6050000ED04000000040000000600000005000026040000BE050000F004000000050000000600000005000018050000C6050000F204000000060000000600000005000007060000CD050000F5040000000700000006000000050000F4060000D4050000F7040000000800000006000000050000DF070000DA050000F9040000000900000006000000050000C7080000E0050000FB040000000A00000006000000050000AC090000E6050000FC040000000B000000060000000500008E0A0000EB050000FE040000000C000000060000000500006F0B0000F0050000FF040000000D000000060000000500004C0C0000F505000000050000000E00000006000000050000270D0000F905000001050000000F00000006000000050000FF0D0000FD05000001050000001000000006000000050000D50E000000060000010500000000000000070000000500004800000083060000E9040000000100000007000000050000450100008D060000EC0400000002000000070000000500003F02000096060000F0040000000300000007000000050000370300009F060000F30400000004000000070000000500002C040000A7060000F60400000005000000070000000500001F050000AF060000F80400000006000000070000000500000F060000B7060000FB040000000700000007000000050000FC060000BF060000FD040000000800000007000000050000E7070000C6060000FF040000000900000007000000050000CF080000CC06000001050000000A00000007000000050000B5090000D306000002050000000B00000007000000050000980A0000D906000004050000000C00000007000000050000780B0000DE06000005050000000D00000007000000050000560C0000E406000006050000000E00000007000000050000320D0000E906000006050000000F000000070000000500000A0E0000ED06000007050000001000000007000000050000E00E0000F1060000070500000000000000080000000500004D00000068070000EF0400000001000000080000000500004B01000072070000F2040000000200000008000000050000450200007C070000F60400000003000000080000000500003E03000086070000F9040000000400000008000000050000330400008F070000FB0400000005000000080000000500002605000098070000FE04000000060000000800000005000017060000A00700000005000000070000000800000005000004070000A807000003050000000800000008000000050000F0070000B007000005050000000900000008000000050000D8080000B707000006050000000A00000008000000050000BE090000BE07000008050000000B00000008000000050000A20A0000C507000009050000000C00000008000000050000830B0000CB0700000A050000000D00000008000000050000610C0000D10700000B050000000E000000080000000500003D0D0000D70700000C050000000F00000008000000050000160E0000DC0700000C050000001000000008000000050000EC0E0000E10700000C050000000000000009000000050000530000004C080000F50400000001000000090000000500005101000057080000F80400000002000000090000000500004C02000061080000FB040000000300000009000000050000450300006C080000FE0400000004000000090000000500003B04000075080000010500000005000000090000000500002E0500007F080000040500000006000000090000000500001F06000088080000060500000007000000090000000500000D0700009108000008050000000800000009000000050000F9070000990800000A050000000900000009000000050000E2080000A10800000C050000000A00000009000000050000C8090000A90800000D050000000B00000009000000050000AC0A0000B00800000F050000000C000000090000000500008E0B0000B708000010050000000D000000090000000500006C0C0000BE08000011050000000E00000009000000050000480D0000C408000011050000000F00000009000000050000220E0000CA08000012050000001000000009000000050000F90E0000D00800001205000000000000000A000000050000590000002E090000FB04000000010000000A000000050000580100003A090000FE04000000020000000A00000005000053020000450900000105000000030000000A0000000500004C030000500900000405000000040000000A000000050000430400005B0900000705000000050000000A00000005000036050000650900000A05000000060000000A000000050000280600006F0900000C05000000070000000A00000005000016070000780900000E05000000080000000A00000005000002080000810900001005000000090000000A000000050000EC0800008A09000011050000000A0000000A000000050000D30900009209000013050000000B0000000A000000050000B70A00009A09000014050000000C0000000A000000050000990B0000A209000015050000000D0000000A000000050000780C0000A909000016050000000E0000000A000000050000550D0000B009000016050000000F0000000A0000000500002F0E0000B70900001705000000100000000A000000050000060F0000BD0900001705000000000000000B00000005000060000000100A00000005000000010000000B0000000500005F0100001C0A00000405000000020000000B0000000500005B020000280A00000705000000030000000B00000005000054030000330A00000A05000000040000000B0000000500004B0400003F0A00000D05000000050000000B0000000500003F050000490A00000F05000000060000000B00000005000031060000540A00001105000000070000000B000000050000200700005E0A00001305000000080000000B0000000500000D080000680A00001505000000090000000B000000050000F6080000710A000017050000000A0000000B000000050000DE0900007A0A000018050000000B0000000B000000050000C30A0000830A00001A050000000C0000000B000000050000A50B00008B0A00001A050000000D0000000B000000050000840C0000930A00001B050000000E0000000B000000050000610D00009B0A00001C050000000F0000000B0000000500003C0E0000A20A00001C05000000100000000B000000050000130F0000A90A00001C05000000000000000C00000005000067000000F00A00000605000000010000000C00000005000066010000FD0A00000905000000020000000C00000005000063020000090B00000D05000000030000000C0000000500005D030000160B00000F05000000040000000C00000005000054040000210B00001205000000050000000C000000050000490500002D0B00001505000000060000000C0000000500003B060000380B00001705000000070000000C0000000500002A070000430B00001905000000080000000C000000050000170800004D0B00001B05000000090000000C00000005000001090000570B00001C050000000A0000000C000000050000E9090000610B00001E050000000B0000000C000000050000CE0A00006B0B00001F050000000C0000000C000000050000B10B0000740B000020050000000D0000000C000000050000910C00007C0B000020050000000E0000000C0000000500006E0D0000840B000021050000000F0000000C000000050000490E00008C0B00002105000000100000000C000000050000210F0000940B00002105000000000000000D0000000500006F000000CF0B00000C05000000010000000D0000000500006E010000DC0B00000F05000000020000000D0000000500006B020000EA0B00001205000000030000000D00000005000066030000F70B00001505000000040000000D0000000500005D040000030C00001805000000050000000D000000050000520500000F0C00001A05000000060000000D000000050000450600001B0C00001C05000000070000000D00000005000035070000270C00001E05000000080000000D00000005000022080000320C00002005000000090000000D0000000500000D0900003C0C000022050000000A0000000D000000050000F5090000470C000023050000000B0000000D000000050000DB0A0000510C000024050000000C0000000D000000050000BD0B00005A0C000025050000000D0000000D0000000500009E0C0000640C000026050000000E0000000D0000000500007C0D00006D0C000026050000000F0000000D000000050000570E0000750C00002605000000100000000D000000050000300F00007E0C00002605000000000000000E00000005000077000000AD0C00001105000000010000000E00000005000077010000BB0C00001505000000020000000E00000005000074020000C90C00001805000000030000000E0000000500006F030000D60C00001A05000000040000000E00000005000067040000E30C00001D05000000050000000E0000000500005C050000F00C00001F05000000060000000E0000000500004F060000FD0C00002205000000070000000E00000005000040070000090D00002405000000080000000E0000000500002D080000150D00002505000000090000000E00000005000019090000200D000027050000000A0000000E000000050000010A00002B0D000028050000000B0000000E000000050000E70A0000360D000029050000000C0000000E000000050000CB0B0000400D00002A050000000D0000000E000000050000AB0C00004A0D00002B050000000E0000000E0000000500008A0D0000540D00002B050000000F0000000E000000050000650E00005D0D00002B05000000100000000E0000000500003E0F0000660D00002B05000000000000000F00000005000080000000890D00001705000000010000000F00000005000080010000980D00001A05000000020000000F0000000500007E020000A70D00001D05000000030000000F00000005000079030000B50D00002005000000040000000F00000005000071040000C30D00002205000000050000000F00000005000067050000D00D00002505000000060000000F0000000500005A060000DD0D00002705000000070000000F0000000500004B070000EA0D00002905000000080000000F00000005000039080000F70D00002A05000000090000000F00000005000025090000030E00002C050000000A0000000F0000000500000E0A00000E0E00002D050000000B0000000F000000050000F40A00001A0E00002E050000000C0000000F000000050000D80B0000250E00002F050000000D0000000F000000050000B90C00002F0E000030050000000E0000000F000000050000980D00003A0E000030050000000F0000000F000000050000740E0000440E00003005000000100000000F0000000500004E0F00004D0E00003005000000000000001000000005000089000000640E00001C05000000010000001000000005000089010000740E00001F05000000020000001000000005000087020000830E00002205000000030000001000000005000083030000920E0000250500000004000000100000000500007C040000A10E00002805000000050000001000000005000072050000AF0E00002A05000000060000001000000005000066060000BD0E00002C05000000070000001000000005000057070000CA0E00002E05000000080000001000000005000046080000D70E00003005000000090000001000000005000032090000E40E000031050000000A000000100000000500001B0A0000F00E000032050000000B00000010000000050000020B0000FC0E000033050000000C00000010000000050000E60B0000080F000034050000000D00000010000000050000C80C0000130F000034050000000E00000010000000050000A70D00001E0F000035050000000F00000010000000050000830E0000290F0000350500000010000000100000000500005D0F0000330F0000350500000000000000000000000600003800000023000000AC0500000001000000000000000600003201000028000000B10500000002000000000000000600002A0200002C000000B50500000003000000000000000600001F03000030000000B80500000004000000000000000600001204000034000000BC0500000005000000000000000600000205000037000000BF050000000600000000000000060000F00500003A000000C2050000000700000000000000060000DB0600003D000000C5050000000800000000000000060000C30700003F000000C7050000000900000000000000060000A908000041000000CA050000000A000000000000000600008C09000043000000CC050000000B000000000000000600006D0A000044000000CE050000000C000000000000000600004B0B000045000000D0050000000D00000000000000060000260C000046000000D1050000000E00000000000000060000FF0C000046000000D3050000000F00000000000000060000D50D000046000000D4050000001000000000000000060000A90E000045000000D40500000000000000010000000600003A00000011010000B40500000001000000010000000600003501000017010000B80500000002000000010000000600002D0200001C010000BC0500000003000000010000000600002303000021010000BF0500000004000000010000000600001604000025010000C30500000005000000010000000600000605000029010000C6050000000600000001000000060000F40500002D010000C9050000000700000001000000060000E006000030010000CC050000000800000001000000060000C907000033010000CE050000000900000001000000060000AF08000036010000D1050000000A000000010000000600009209000038010000D3050000000B00000001000000060000730A00003A010000D5050000000C00000001000000060000520B00003C010000D6050000000D000000010000000600002E0C00003D010000D8050000000E00000001000000060000070D00003E010000D9050000000F00000001000000060000DE0D00003E010000DA050000001000000001000000060000B20E00003E010000DB0500000000000000020000000600003C000000FE010000BB0500000001000000020000000600003801000005020000BF050000000200000002000000060000300200000A020000C20500000003000000020000000600002703000010020000C60500000004000000020000000600001A04000015020000CA0500000005000000020000000600000B0500001A020000CD050000000600000002000000060000FA0500001E020000D0050000000700000002000000060000E506000022020000D2050000000800000002000000060000CF07000026020000D5050000000900000002000000060000B508000029020000D7050000000A00000002000000060000990900002C020000D9050000000B000000020000000600007B0A00002F020000DB050000000C00000002000000060000590B000031020000DD050000000D00000002000000060000360C000033020000DE050000000E000000020000000600000F0D000034020000DF050000000F00000002000000060000E70D000036020000E0050000001000000002000000060000BB0E000036020000E105000000000000000300000006000040000000EA020000C20500000001000000030000000600003B010000F1020000C605000000020000000300000006000034020000F8020000C90500000003000000030000000600002B030000FE020000CD0500000004000000030000000600001F04000004030000D00500000005000000030000000600001005000009030000D3050000000600000003000000060000FF0500000E030000D6050000000700000003000000060000EB06000013030000D9050000000800000003000000060000D507000017030000DC050000000900000003000000060000BC0800001B030000DE050000000A00000003000000060000A00900001F030000E0050000000B00000003000000060000820A000022030000E2050000000C00000003000000060000620B000025030000E3050000000D000000030000000600003E0C000028030000E5050000000E00000003000000060000180D00002A030000E6050000000F00000003000000060000F00D00002C030000E7050000001000000003000000060000C50E00002D030000E805000000000000000400000006000043000000D5030000C80500000001000000040000000600003F010000DD030000CC05000000020000000400000006000039020000E4030000D005000000030000000400000006000030030000EB030000D405000000040000000400000006000024040000F1030000D705000000050000000400000006000016050000F7030000DA05000000060000000400000006000005060000FD030000DD050000000700000004000000060000F206000002040000E0050000000800000004000000060000DC07000007040000E2050000000900000004000000060000C30800000C040000E4050000000A00000004000000060000A809000010040000E6050000000B000000040000000600008A0A000014040000E8050000000C000000040000000600006A0B000018040000EA050000000D00000004000000060000470C00001B040000EB050000000E00000004000000060000220D00001E040000EC050000000F00000004000000060000FA0D000021040000ED050000001000000004000000060000CF0E000023040000EE05000000000000000500000006000047000000BF040000CF05000000010000000500000006000044010000C7040000D30500000002000000050000000600003E020000CF040000D705000000030000000500000006000035030000D6040000DA0500000004000000050000000600002A040000DD040000DE0500000005000000050000000600001C050000E4040000E10500000006000000050000000600000C060000EB040000E4050000000700000005000000060000F9060000F1040000E6050000000800000005000000060000E3070000F6040000E9050000000900000005000000060000CB080000FC040000EB050000000A00000005000000060000B009000001050000ED050000000B00000005000000060000930A000005050000EE050000000C00000005000000060000730B00000A050000F0050000000D00000005000000060000510C00000E050000F1050000000E000000050000000600002C0D000011050000F2050000000F00000005000000060000040E000014050000F3050000001000000005000000060000DA0E000017050000F40500000000000000060000000600004C000000A7050000D605000000010000000600000006000049010000B0050000DA05000000020000000600000006000043020000B8050000DE0500000003000000060000000600003B030000C1050000E105000000040000000600000006000030040000C8050000E405000000050000000600000006000023050000D0050000E705000000060000000600000006000013060000D7050000EA05000000070000000600000006000000070000DE050000ED050000000800000006000000060000EB070000E4050000EF050000000900000006000000060000D3080000EA050000F1050000000A00000006000000060000B9090000F0050000F3050000000B000000060000000600009C0A0000F5050000F5050000000C000000060000000600007D0B0000FA050000F6050000000D000000060000000600005B0C0000FF050000F7050000000E00000006000000060000360D000003060000F8050000000F000000060000000600000F0E000007060000F9050000001000000006000000060000E50E00000A060000FA050000000000000007000000060000500000008E060000DD0500000001000000070000000600004E01000098060000E005000000020000000700000006000049020000A1060000E405000000030000000700000006000041030000AA060000E705000000040000000700000006000037040000B2060000EB0500000005000000070000000600002A050000BA060000EE0500000006000000070000000600001A060000C2060000F005000000070000000700000006000008070000CA060000F3050000000800000007000000060000F3070000D1060000F5050000000900000007000000060000DC080000D7060000F7050000000A00000007000000060000C2090000DE060000F9050000000B00000007000000060000A60A0000E4060000FB050000000C00000007000000060000860B0000E9060000FC050000000D00000007000000060000650C0000EF060000FD050000000E00000007000000060000410D0000F3060000FE050000000F000000070000000600001A0E0000F8060000FF050000001000000007000000060000F00E0000FC060000000600000000000000080000000600005600000074070000E3050000000100000008000000060000540100007E070000E70500000002000000080000000600004F02000088070000EB0500000003000000080000000600004803000092070000EE0500000004000000080000000600003E0400009B070000F105000000050000000800000006000031050000A4070000F405000000060000000800000006000022060000AC070000F705000000070000000800000006000010070000B4070000F9050000000800000008000000060000FC070000BC070000FB050000000900000008000000060000E5080000C3070000FD050000000A00000008000000060000CC090000CA070000FF050000000B00000008000000060000B00A0000D107000001060000000C00000008000000060000910B0000D707000002060000000D00000008000000060000700C0000DD07000003060000000E000000080000000600004C0D0000E307000004060000000F00000008000000060000250E0000E807000005060000001000000008000000060000FC0E0000ED070000060600000000000000090000000600005C00000059080000EA0500000001000000090000000600005A01000064080000ED050000000200000009000000060000560200006E080000F10500000003000000090000000600004F03000078080000F40500000004000000090000000600004504000082080000F7050000000500000009000000060000390500008C080000FA0500000006000000090000000600002A06000095080000FD050000000700000009000000060000190700009E080000FF05000000080000000900000006000005080000A608000002060000000900000009000000060000EF080000AE08000004060000000A00000009000000060000D6090000B608000005060000000B00000009000000060000BA0A0000BD08000007060000000C000000090000000600009C0B0000C408000008060000000D000000090000000600007B0C0000CB08000009060000000E00000009000000060000570D0000D10800000A060000000F00000009000000060000310E0000D70800000B060000001000000009000000060000090F0000DC0800000B06000000000000000A000000060000620000003C090000F005000000010000000A0000000600006101000048090000F405000000020000000A0000000600005D02000053090000F705000000030000000A000000060000560300005E090000FB05000000040000000A0000000600004D04000068090000FE05000000050000000A00000006000041050000730900000006000000060000000A000000060000330600007C0900000306000000070000000A00000006000022070000860900000506000000080000000A0000000600000F0800008F0900000806000000090000000A000000060000F9080000980900000A060000000A0000000A000000060000E0090000A00900000B060000000B0000000A000000060000C50A0000A80900000D060000000C0000000A000000060000A70B0000B00900000E060000000D0000000A000000060000870C0000B70900000F060000000E0000000A000000060000640D0000BE09000010060000000F0000000A0000000600003E0E0000C40900001106000000100000000A000000060000160F0000CB0900001106000000000000000B000000060000690000001F0A0000F605000000010000000B000000060000680100002B0A0000FA05000000020000000B00000006000064020000370A0000FD05000000030000000B0000000600005E030000420A00000106000000040000000B000000060000550400004D0A00000406000000050000000B0000000600004A050000580A00000706000000060000000B0000000600003C060000630A00000906000000070000000B0000000600002C0700006D0A00000B06000000080000000B00000006000019080000760A00000E06000000090000000B00000006000003090000800A000010060000000A0000000B000000060000EB090000890A000011060000000B0000000B000000060000D00A0000920A000013060000000C0000000B000000060000B30B00009A0A000014060000000D0000000B000000060000930C0000A20A000015060000000E0000000B000000060000700D0000AA0A000016060000000F0000000B0000000600004B0E0000B10A00001606000000100000000B000000060000230F0000B80A00001706000000000000000C00000006000070000000000B0000FD05000000010000000C0000000600006F0100000C0B00000006000000020000000C0000000600006C020000190B00000406000000030000000C00000006000067030000250B00000706000000040000000C0000000600005E040000310B00000A06000000050000000C000000060000530500003D0B00000D06000000060000000C00000006000046060000480B00000F06000000070000000C00000006000036070000520B00001106000000080000000C000000060000230800005D0B00001306000000090000000C0000000600000E090000670B000015060000000A0000000C000000060000F6090000710B000017060000000B0000000C000000060000DC0A00007A0B000018060000000C0000000C000000060000BF0B0000830B00001A060000000D0000000C0000000600009F0C00008C0B00001B060000000E0000000C0000000600007D0D0000940B00001B060000000F0000000C000000060000580E00009C0B00001C06000000100000000C000000060000310F0000A40B00001C06000000000000000D00000006000078000000DF0B00000306000000010000000D00000006000077010000ED0B00000606000000020000000D00000006000075020000FA0B00000A06000000030000000D0000000600006F030000070C00000D06000000040000000D00000006000068040000140C00001006000000050000000D0000000600005D050000200C00001206000000060000000D000000060000500600002C0C00001506000000070000000D00000006000040070000370C00001706000000080000000D0000000600002E080000420C00001906000000090000000D000000060000190900004D0C00001B060000000A0000000D000000060000020A0000570C00001D060000000B0000000D000000060000E80A0000610C00001E060000000C0000000D000000060000CC0B00006B0C00001F060000000D0000000D000000060000AC0C0000740C000020060000000E0000000D0000000600008B0D00007D0C000021060000000F0000000D000000060000660E0000860C00002206000000100000000D0000000600003F0F00008E0C00002206000000000000000E00000006000080000000BE0C00000906000000010000000E00000006000080010000CC0C00000C06000000020000000E0000000600007E020000DA0C00001006000000030000000E00000006000079030000E80C00001306000000040000000E00000006000071040000F50C00001606000000050000000E00000006000067050000020D00001806000000060000000E0000000600005B0600000E0D00001B06000000070000000E0000000600004C0700001A0D00001D06000000080000000E0000000600003A080000260D00001F06000000090000000E00000006000025090000320D000021060000000A0000000E0000000600000E0A00003D0D000022060000000B0000000E000000060000F50A0000470D000024060000000C0000000E000000060000D90B0000520D000025060000000D0000000E000000060000BA0C00005C0D000026060000000E0000000E000000060000990D0000650D000027060000000F0000000E000000060000750E00006F0D00002706000000100000000E0000000600004E0F0000780D00002706000000000000000F000000060000880000009B0D00000F06000000010000000F00000006000089010000AA0D00001206000000020000000F00000006000087020000B90D00001606000000030000000F00000006000083030000C70D00001906000000040000000F0000000600007C040000D50D00001B06000000050000000F00000006000072050000E30D00001E06000000060000000F00000006000066060000F00D00002106000000070000000F00000006000057070000FC0D00002306000000080000000F00000006000046080000090E00002506000000090000000F00000006000032090000150E000026060000000A0000000F0000000600001B0A0000210E000028060000000B0000000F000000060000020B00002C0E000029060000000C0000000F000000060000E60B0000370E00002A060000000D0000000F000000060000C80C0000420E00002B060000000E0000000F000000060000A70D00004C0E00002C060000000F0000000F000000060000830E0000560E00002C06000000100000000F0000000600005D0F0000600E00002D06000000000000001000000006000091000000780E00001506000000010000001000000006000092010000870E00001806000000020000001000000006000091020000960E00001B0600000003000000100000000600008D030000A50E00001E06000000040000001000000006000086040000B40E0000210600000005000000100000000600007D050000C20E00002406000000060000001000000006000071060000D00E00002606000000070000001000000006000063070000DD0E00002806000000080000001000000006000052080000EB0E00002A0600000009000000100000000600003E090000F70E00002C060000000A00000010000000060000280A0000040F00002D060000000B00000010000000060000100B0000100F00002F060000000C00000010000000060000F40B00001B0F000030060000000D00000010000000060000D60C0000270F000031060000000E00000010000000060000B60D0000320F000031060000000F00000010000000060000930E00003C0F0000320600000010000000100000000600006D0F0000470F00003206000000000000000000000007000040000000270000009C0600000001000000000000000700003B0100002C000000A00600000002000000000000000700003302000030000000A50600000003000000000000000700002903000034000000A90600000004000000000000000700001C04000038000000AC0600000005000000000000000700000D0500003C000000B0060000000600000000000000070000FB0500003F000000B3060000000700000000000000070000E606000041000000B7060000000800000000000000070000CF07000043000000BA060000000900000000000000070000B508000045000000BC060000000A000000000000000700009909000047000000BF060000000B000000000000000700007A0A000048000000C1060000000C00000000000000070000580B000049000000C3060000000D00000000000000070000340C00004A000000C5060000000E000000000000000700000E0D00004A000000C7060000000F00000000000000070000E40D00004A000000C8060000001000000000000000070000B90E000049000000C90600000000000000010000000700004200000017010000A30600000001000000010000000700003D0100001C010000A80600000002000000010000000700003602000021010000AC0600000003000000010000000700002C03000026010000B0060000000400000001000000070000200400002A010000B4060000000500000001000000070000110500002E010000B7060000000600000001000000070000FF05000032010000BB060000000700000001000000070000EB06000035010000BE060000000800000001000000070000D407000038010000C1060000000900000001000000070000BB0800003B010000C4060000000A000000010000000700009F0900003D010000C6060000000B00000001000000070000810A00003F010000C8060000000C00000001000000070000600B000041010000CA060000000D000000010000000700003C0C000042010000CC060000000E00000001000000070000160D000043010000CE060000000F00000001000000070000ED0D000043010000CF060000001000000001000000070000C10E000043010000D00600000000000000020000000700004400000005020000AB060000000100000002000000070000400100000B020000AF0600000002000000020000000700003902000011020000B40600000003000000020000000700003003000016020000B8060000000400000002000000070000240400001B020000BB0600000005000000020000000700001605000020020000BF0600000006000000020000000700000406000024020000C2060000000700000002000000070000F106000028020000C5060000000800000002000000070000DA0700002C020000C8060000000900000002000000070000C10800002F020000CB060000000A00000002000000070000A609000032020000CD060000000B00000002000000070000880A000035020000CF060000000C00000002000000070000670B000037020000D1060000000D00000002000000070000440C000039020000D3060000000E000000020000000700001E0D00003A020000D5060000000F00000002000000070000F60D00003B020000D6060000001000000002000000070000CB0E00003C020000D706000000000000000300000007000048000000F2020000B206000000010000000300000007000044010000F8020000B70600000002000000030000000700003D020000FF020000BB0600000003000000030000000700003403000005030000BF060000000400000003000000070000290400000B030000C30600000005000000030000000700001B05000010030000C60600000006000000030000000700000A06000015030000C9060000000700000003000000070000F70600001A030000CC060000000800000003000000070000E10700001E030000CF060000000900000003000000070000C808000022030000D2060000000A00000003000000070000AD09000026030000D4060000000B00000003000000070000900A000029030000D6060000000C000000030000000700006F0B00002C030000D8060000000D000000030000000700004C0C00002E030000DA060000000E00000003000000070000270D000031030000DB060000000F00000003000000070000FF0D000032030000DD060000001000000003000000070000D40E000034030000DE0600000000000000040000000700004B000000DD030000BA06000000010000000400000007000048010000E5030000BE06000000020000000400000007000042020000EC030000C206000000030000000400000007000039030000F3030000C60600000004000000040000000700002E040000F9030000CA06000000050000000400000007000020050000FF030000CD0600000006000000040000000700001006000005040000D0060000000700000004000000070000FD0600000A040000D3060000000800000004000000070000E80700000F040000D6060000000900000004000000070000D008000014040000D9060000000A00000004000000070000B509000018040000DB060000000B00000004000000070000980A00001C040000DD060000000C00000004000000070000780B000020040000DF060000000D00000004000000070000550C000023040000E1060000000E00000004000000070000300D000026040000E2060000000F00000004000000070000090E000028040000E3060000001000000004000000070000DF0E00002A040000E40600000000000000050000000700004F000000C8040000C10600000001000000050000000700004C010000D0040000C506000000020000000500000007000047020000D8040000C90600000003000000050000000700003F030000DF040000CD06000000040000000500000007000034040000E6040000D106000000050000000500000007000026050000ED040000D406000000060000000500000007000017060000F3040000D706000000070000000500000007000004070000F9040000DA060000000800000005000000070000EF070000FF040000DD060000000900000005000000070000D708000004050000E0060000000A00000005000000070000BD09000009050000E2060000000B00000005000000070000A00A00000E050000E4060000000C00000005000000070000810B000012050000E6060000000D000000050000000700005F0C000016050000E7060000000E000000050000000700003A0D00001A050000E9060000000F00000005000000070000130E00001D050000EA060000001000000005000000070000E90E000020050000EB06000000000000000600000007000054000000B1050000C806000000010000000600000007000051010000BA050000CD0600000002000000060000000700004C020000C2050000D106000000030000000600000007000044030000CA050000D40600000004000000060000000700003A040000D2050000D80600000005000000060000000700002D050000DA050000DB0600000006000000060000000700001E060000E1050000DE0600000007000000060000000700000B070000E7050000E1060000000800000006000000070000F7070000EE050000E4060000000900000006000000070000E0080000F4050000E6060000000A00000006000000070000C6090000F9050000E9060000000B00000006000000070000A90A0000FF050000EB060000000C000000060000000700008A0B000004060000ED060000000D00000006000000070000690C000008060000EE060000000E00000006000000070000450D00000C060000EF060000000F000000060000000700001E0E000010060000F1060000001000000006000000070000F40E000014060000F20600000000000000070000000700005900000099060000D006000000010000000700000007000056010000A2060000D406000000020000000700000007000052020000AC060000D80600000003000000070000000700004A030000B4060000DB06000000040000000700000007000041040000BD060000DF06000000050000000700000007000034050000C5060000E206000000060000000700000007000025060000CD060000E506000000070000000700000007000013070000D4060000E8060000000800000007000000070000FF070000DB060000EB060000000900000007000000070000E8080000E2060000ED060000000A00000007000000070000CF090000E8060000EF060000000B00000007000000070000B30A0000EE060000F1060000000C00000007000000070000940B0000F4060000F3060000000D00000007000000070000730C0000F9060000F5060000000E000000070000000700004F0D0000FE060000F6060000000F00000007000000070000290E000002070000F7060000001000000007000000070000000F000007070000F80600000000000000080000000700005E00000080070000D70600000001000000080000000700005C0100008A070000DB0600000002000000080000000700005802000094070000DF060000000300000008000000070000510300009D070000E206000000040000000800000007000048040000A6070000E60600000005000000080000000700003C050000AF070000E90600000006000000080000000700002D060000B8070000EC0600000007000000080000000700001C070000C0070000EF06000000080000000800000007000008080000C7070000F1060000000900000008000000070000F1080000CF070000F4060000000A00000008000000070000D8090000D6070000F6060000000B00000008000000070000BD0A0000DC070000F8060000000C000000080000000700009F0B0000E3070000FA060000000D000000080000000700007E0C0000E9070000FB060000000E000000080000000700005A0D0000EE070000FC060000000F00000008000000070000340E0000F3070000FD0600000010000000080000000700000C0F0000F8070000FE0600000000000000090000000700006400000065080000DE0600000001000000090000000700006301000070080000E20600000002000000090000000700005F0200007B080000E60600000003000000090000000700005803000085080000E90600000004000000090000000700004F0400008F080000ED0600000005000000090000000700004305000098080000F006000000060000000900000007000035060000A1080000F306000000070000000900000007000024070000AA080000F606000000080000000900000007000011080000B2080000F8060000000900000009000000070000FB080000BA080000FA060000000A00000009000000070000E2090000C2080000FD060000000B00000009000000070000C70A0000C9080000FE060000000C00000009000000070000A90B0000D008000000070000000D00000009000000070000890C0000D708000001070000000E00000009000000070000660D0000DD08000003070000000F00000009000000070000410E0000E308000004070000001000000009000000070000180F0000E90800000407000000000000000A0000000700006A0000004A090000E506000000010000000A0000000700006901000055090000E906000000020000000A0000000700006602000060090000EC06000000030000000A000000070000600300006B090000F006000000040000000A0000000700005704000076090000F306000000050000000A0000000700004C05000080090000F706000000060000000A0000000700003E0600008A090000F906000000070000000A0000000700002E07000093090000FC06000000080000000A0000000700001B0800009C090000FF06000000090000000A00000007000005090000A509000001070000000A0000000A000000070000ED090000AD09000003070000000B0000000A000000070000D20A0000B509000005070000000C0000000A000000070000B50B0000BD09000006070000000D0000000A000000070000950C0000C409000008070000000E0000000A000000070000720D0000CB09000009070000000F0000000A0000000700004D0E0000D20900000A07000000100000000A000000070000250F0000D80900000B07000000000000000B000000070000710000002D0A0000EB06000000010000000B00000007000070010000390A0000EF06000000020000000B0000000700006D020000450A0000F306000000030000000B00000007000068030000500A0000F706000000040000000B0000000700005F0400005C0A0000FA06000000050000000B00000007000055050000660A0000FD06000000060000000B00000007000047060000710A00000007000000070000000B000000070000370700007B0A00000307000000080000000B00000007000025080000850A00000507000000090000000B0000000700000F0900008E0A000007070000000A0000000B000000070000F8090000970A000009070000000B0000000B000000070000DD0A0000A00A00000B070000000C0000000B000000070000C00B0000A80A00000D070000000D0000000B000000070000A10C0000B00A00000E070000000E0000000B0000000700007F0D0000B80A00000F070000000F0000000B0000000700005A0E0000BF0A00001007000000100000000B000000070000330F0000C60A00001107000000000000000C000000070000780000000F0B0000F206000000010000000C000000070000780100001C0B0000F606000000020000000C00000007000075020000280B0000FA06000000030000000C00000007000070030000340B0000FD06000000040000000C00000007000068040000400B00000107000000050000000C0000000700005E0500004C0B00000407000000060000000C00000007000051060000570B00000607000000070000000C00000007000041070000620B00000907000000080000000C0000000700002F0800006C0B00000C07000000090000000C0000000700001A090000760B00000E070000000A0000000C000000070000030A0000800B000010070000000B0000000C000000070000E90A0000890B000011070000000C0000000C000000070000CD0B0000920B000013070000000D0000000C000000070000AD0C00009B0B000014070000000E0000000C0000000700008C0D0000A30B000015070000000F0000000C000000070000670E0000AB0B00001607000000100000000C000000070000410F0000B30B00001707000000000000000D00000007000080000000F00B0000F906000000010000000D00000007000080010000FD0B0000FD06000000020000000D0000000700007E0200000A0C00000007000000030000000D00000007000079030000170C00000407000000040000000D00000007000072040000240C00000707000000050000000D00000007000068050000300C00000A07000000060000000D0000000700005B0600003C0C00000D07000000070000000D0000000700004C070000470C00000F07000000080000000D0000000700003A080000520C00001207000000090000000D000000070000260900005D0C000014070000000A0000000D0000000700000F0A0000670C000016070000000B0000000D000000070000F50A0000710C000018070000000C0000000D000000070000D90B00007B0C000019070000000D0000000D000000070000BB0C0000840C00001A070000000E0000000D000000070000990D00008D0C00001B070000000F0000000D000000070000750E0000960C00001C07000000100000000D0000000700004F0F00009E0C00001D07000000000000000E00000007000088000000CF0C0000FF06000000010000000E00000007000089010000DD0C00000307000000020000000E00000007000087020000EB0C00000707000000030000000E00000007000082030000F90C00000A07000000040000000E0000000700007B040000060D00000E07000000050000000E00000007000072050000130D00001007000000060000000E000000070000660600001F0D00001307000000070000000E000000070000570700002B0D00001607000000080000000E00000007000046080000370D00001807000000090000000E00000007000032090000430D00001A070000000A0000000E0000000700001B0A00004E0D00001C070000000B0000000E000000070000020B0000580D00001E070000000C0000000E000000070000E60B0000630D00001F070000000D0000000E000000070000C80C00006D0D000020070000000E0000000E000000070000A70D0000760D000021070000000F0000000E000000070000840E0000800D00002207000000100000000E0000000700005E0F0000890D00002307000000000000000F00000007000091000000AD0D00000607000000010000000F00000007000092010000BC0D00000A07000000020000000F00000007000090020000CB0D00000D07000000030000000F0000000700008C030000D90D00001107000000040000000F00000007000086040000E70D00001407000000050000000F0000000700007D050000F40D00001707000000060000000F00000007000071060000020E00001907000000070000000F000000070000620700000E0E00001C07000000080000000F000000070000510800001B0E00001E07000000090000000F0000000700003E090000270E000020070000000A0000000F000000070000280A0000330E000022070000000B0000000F0000000700000F0B00003E0E000024070000000C0000000F000000070000F40B0000490E000025070000000D0000000F000000070000D60C0000540E000026070000000E0000000F000000070000B60D00005E0E000027070000000F0000000F000000070000930E0000680E00002807000000100000000F0000000700006D0F0000720E0000280700000000000000100000000700009A0000008A0E00000C0700000001000000100000000700009B0100009A0E0000100700000002000000100000000700009A020000A90E00001407000000030000001000000007000097030000B80E00001707000000040000001000000007000090040000C70E00001A07000000050000001000000007000088050000D50E00001D0700000006000000100000000700007C060000E30E0000200700000007000000100000000700006E070000F00E0000220700000008000000100000000700005E080000FD0E0000240700000009000000100000000700004B0900000A0F000026070000000A00000010000000070000350A0000170F000028070000000B000000100000000700001D0B0000230F00002A070000000C00000010000000070000020C00002E0F00002B070000000D00000010000000070000E40C00003A0F00002C070000000E00000010000000070000C40D0000450F00002D070000000F00000010000000070000A20E00004F0F00002E0700000010000000100000000700007D0F00005A0F00002E070000000000000000000000080000470000002B0000008A07000000010000000000000008000043010000300000008F0700000002000000000000000800003C0200003400000094070000000300000000000000080000320300003800000098070000000400000000000000080000260400003C0000009C070000000500000000000000080000170500003F000000A00700000006000000000000000800000506000042000000A4070000000700000000000000080000F106000045000000A8070000000800000000000000080000DA07000047000000AB070000000900000000000000080000C108000049000000AE070000000A00000000000000080000A50900004B000000B1070000000B00000000000000080000870A00004C000000B4070000000C00000000000000080000660B00004D000000B6070000000D00000000000000080000420C00004D000000B8070000000E000000000000000800001C0D00004D000000BA070000000F00000000000000080000F30D00004D000000BC070000001000000000000000080000C80E00004C000000BE0700000000000000010000000800004A0000001B010000920700000001000000010000000800004501000021010000970700000002000000010000000800003F020000260100009C070000000300000001000000080000350300002B010000A0070000000400000001000000080000290400002F010000A40700000005000000010000000800001B05000033010000A80700000006000000010000000800000A06000037010000AC070000000700000001000000080000F60600003A010000AF070000000800000001000000080000E00700003D010000B3070000000900000001000000080000C70800003F010000B6070000000A00000001000000080000AC09000042010000B9070000000B000000010000000800008E0A000044010000BB070000000C000000010000000800006D0B000045010000BE070000000D000000010000000800004A0C000046010000C0070000000E00000001000000080000240D000047010000C2070000000F00000001000000080000FC0D000047010000C3070000001000000001000000080000D10E000047010000C50700000000000000020000000800004C0000000A0200009B07000000010000000200000008000048010000110200009F0700000002000000020000000800004202000016020000A4070000000300000002000000080000390300001C020000A80700000004000000020000000800002E04000021020000AC0700000005000000020000000800002005000025020000B00700000006000000020000000800000F0600002A020000B4070000000700000002000000080000FC0600002E020000B7070000000800000002000000080000E607000031020000BA070000000900000002000000080000CD08000035020000BD070000000A00000002000000080000B209000037020000C0070000000B00000002000000080000950A00003A020000C3070000000C00000002000000080000750B00003C020000C5070000000D00000002000000080000520C00003E020000C7070000000E000000020000000800002C0D00003F020000C9070000000F00000002000000080000040E000041020000CB070000001000000002000000080000DA0E000041020000CC0700000000000000030000000800004F000000F8020000A30700000001000000030000000800004C010000FF020000A70700000002000000030000000800004602000005030000AC0700000003000000030000000800003E0300000C030000B00700000004000000030000000800003304000011030000B40700000005000000030000000800002505000017030000B8070000000600000003000000080000150600001C030000BB0700000007000000030000000800000207000020030000BF070000000800000003000000080000EC07000025030000C2070000000900000003000000080000D408000028030000C5070000000A00000003000000080000BA0900002C030000C8070000000B000000030000000800009C0A00002F030000CA070000000C000000030000000800007D0B000032030000CC070000000D000000030000000800005A0C000035030000CE070000000E00000003000000080000350D000037030000D0070000000F000000030000000800000E0E000039030000D2070000001000000003000000080000E40E00003A030000D307000000000000000400000008000053000000E5030000AB07000000010000000400000008000050010000EC030000AF0700000002000000040000000800004B020000F3030000B407000000030000000400000008000042030000FA030000B80700000004000000040000000800003804000001040000BC0700000005000000040000000800002A05000007040000C00700000006000000040000000800001B0600000C040000C30700000007000000040000000800000807000012040000C6070000000800000004000000080000F307000017040000CA070000000900000004000000080000DC0800001B040000CC070000000A00000004000000080000C10900001F040000CF070000000B00000004000000080000A50A000023040000D2070000000C00000004000000080000850B000027040000D4070000000D00000004000000080000630C00002A040000D6070000000E000000040000000800003F0D00002D040000D8070000000F00000004000000080000180E00002F040000D9070000001000000004000000080000EE0E000032040000DA07000000000000000500000008000057000000D0040000B207000000010000000500000008000054010000D8040000B70700000002000000050000000800004F020000E0040000BB07000000030000000500000008000048030000E8040000BF0700000004000000050000000800003D040000EF040000C307000000050000000500000008000031050000F5040000C707000000060000000500000008000021060000FC040000CB0700000007000000050000000800000F07000002050000CE070000000800000005000000080000FB07000007050000D1070000000900000005000000080000E30800000D050000D4070000000A00000005000000080000CA09000012050000D6070000000B00000005000000080000AD0A000016050000D9070000000C000000050000000800008E0B00001A050000DB070000000D000000050000000800006D0C00001E050000DD070000000E00000005000000080000490D000022050000DF070000000F00000005000000080000220E000025050000E0070000001000000005000000080000F80E000028050000E10700000000000000060000000800005B000000BA050000BA07000000010000000600000008000059010000C3050000BF07000000020000000600000008000055020000CC050000C30700000003000000060000000800004D030000D4050000C707000000040000000600000008000044040000DB050000CB07000000050000000600000008000037050000E3050000CF07000000060000000600000008000028060000EA050000D207000000070000000600000008000017070000F1050000D507000000080000000600000008000002080000F7050000D8070000000900000006000000080000EC080000FD050000DB070000000A00000006000000080000D209000003060000DE070000000B00000006000000080000B60A000008060000E0070000000C00000006000000080000980B00000D060000E2070000000D00000006000000080000770C000011060000E4070000000E00000006000000080000530D000015060000E6070000000F000000060000000800002C0E000019060000E7070000001000000006000000080000040F00001D060000E807000000000000000700000008000060000000A3060000C20700000001000000070000000800005F010000AD060000C60700000002000000070000000800005A020000B6060000CB07000000030000000700000008000054030000BF060000CF0700000004000000070000000800004A040000C7060000D20700000005000000070000000800003E050000CF060000D607000000060000000700000008000030060000D7060000D90700000007000000070000000800001E070000DE060000DD0700000008000000070000000800000B080000E5060000E0070000000900000007000000080000F4080000EC060000E2070000000A00000007000000080000DB090000F2060000E5070000000B00000007000000080000C00A0000F8060000E7070000000C00000007000000080000A20B0000FE060000E9070000000D00000007000000080000810C000003070000EB070000000E000000070000000800005E0D000008070000ED070000000F00000007000000080000380E00000C070000EE0700000010000000070000000800000F0F000011070000EF070000000000000008000000080000660000008B070000C90700000001000000080000000800006501000095070000CE070000000200000008000000080000610200009F070000D20700000003000000080000000800005A030000A8070000D607000000040000000800000008000051040000B2070000DA07000000050000000800000008000046050000BA070000DD07000000060000000800000008000037060000C3070000E107000000070000000800000008000027070000CB070000E407000000080000000800000008000013080000D2070000E7070000000900000008000000080000FD080000DA070000E9070000000A00000008000000080000E5090000E1070000EC070000000B00000008000000080000CA0A0000E7070000EE070000000C00000008000000080000AC0B0000EE070000F0070000000D000000080000000800008C0C0000F4070000F2070000000E00000008000000080000690D0000F9070000F4070000000F00000008000000080000430E0000FE070000F50700000010000000080000000800001B0F000003080000F60700000000000000090000000800006C00000071080000D10700000001000000090000000800006B0100007C080000D50700000002000000090000000800006702000087080000D90700000003000000090000000800006103000091080000DD070000000400000009000000080000590400009B080000E10700000005000000090000000800004E050000A4080000E507000000060000000900000008000040060000AD080000E80700000007000000090000000800002F070000B6080000EB0700000008000000090000000800001C080000BE080000EE07000000090000000900000008000007090000C6080000F0070000000A00000009000000080000EF090000CE080000F3070000000B00000009000000080000D40A0000D5080000F5070000000C00000009000000080000B70B0000DC080000F7070000000D00000009000000080000970C0000E3080000F9070000000E00000009000000080000740D0000E9080000FA070000000F000000090000000800004F0E0000EF080000FC070000001000000009000000080000280F0000F5080000FD07000000000000000A0000000800007200000057090000D807000000010000000A0000000800007201000062090000DD07000000020000000A0000000800006F0200006D090000E107000000030000000A0000000800006903000078090000E507000000040000000A0000000800006104000083090000E807000000050000000A000000080000560500008D090000EC07000000060000000A0000000800004906000097090000EF07000000070000000A00000008000039070000A0090000F207000000080000000A00000008000026080000A9090000F507000000090000000A00000008000011090000B2090000F7070000000A0000000A000000080000F9090000BA090000FA070000000B0000000A000000080000DF0A0000C2090000FC070000000C0000000A000000080000C20B0000CA090000FE070000000D0000000A000000080000A30C0000D109000000080000000E0000000A000000080000800D0000D809000001080000000F0000000A0000000800005C0E0000DF0900000208000000100000000A000000080000350F0000E50900000308000000000000000B000000080000790000003B0A0000E007000000010000000B00000008000079010000470A0000E407000000020000000B00000008000076020000530A0000E807000000030000000B000000080000710300005E0A0000EC07000000040000000B000000080000690400006A0A0000F007000000050000000B0000000800005F050000740A0000F307000000060000000B000000080000520600007F0A0000F607000000070000000B00000008000042070000890A0000F907000000080000000B00000008000030080000930A0000FC07000000090000000B0000000800001B0900009C0A0000FE070000000A0000000B000000080000040A0000A50A000001080000000B0000000B000000080000EA0A0000AE0A000003080000000C0000000B000000080000CE0B0000B60A000005080000000D0000000B000000080000AF0C0000BE0A000006080000000E0000000B0000000800008D0D0000C60A000008080000000F0000000B000000080000690E0000CD0A00000908000000100000000B000000080000420F0000D40A00000A08000000000000000C000000080000800000001E0B0000E707000000010000000C000000080000800100002B0B0000EB07000000020000000C0000000800007E020000370B0000EF07000000030000000C00000008000079030000430B0000F307000000040000000C000000080000720400004F0B0000F707000000050000000C000000080000680500005B0B0000FA07000000060000000C0000000800005C060000660B0000FD07000000070000000C0000000800004C070000700B00000008000000080000000C0000000800003B0800007B0B00000308000000090000000C00000008000026090000850B000005080000000A0000000C0000000800000F0A00008F0B000007080000000B0000000C000000080000F60A0000980B000009080000000C0000000C000000080000DA0B0000A10B00000B080000000D0000000C000000080000BB0C0000AA0B00000D080000000E0000000C0000000800009A0D0000B20B00000E080000000F0000000C000000080000760E0000BA0B00000F08000000100000000C000000080000500F0000C10B00001008000000000000000D00000008000088000000FF0B0000EE07000000010000000D000000080000880100000D0C0000F207000000020000000D000000080000870200001A0C0000F607000000030000000D00000008000082030000270C0000FA07000000040000000D0000000800007B040000330C0000FE07000000050000000D00000008000072050000400C00000108000000060000000D000000080000660600004B0C00000408000000070000000D00000008000057070000570C00000708000000080000000D00000008000046080000620C00000A08000000090000000D000000080000320900006D0C00000C080000000A0000000D0000000800001B0A0000770C00000E080000000B0000000D000000080000020B0000810C000010080000000C0000000D000000080000E70B00008B0C000012080000000D0000000D000000080000C80C0000940C000013080000000E0000000D000000080000A70D00009D0C000015080000000F0000000D000000080000840E0000A60C00001608000000100000000D0000000800005E0F0000AE0C00001708000000000000000E00000008000090000000E00C0000F507000000010000000E00000008000091010000EE0C0000FA07000000020000000E00000008000090020000FC0C0000FD07000000030000000E0000000800008C030000090D00000108000000040000000E00000008000085040000170D00000508000000050000000E0000000800007C050000230D00000808000000060000000E00000008000070060000300D00000B08000000070000000E000000080000620700003C0D00000E08000000080000000E00000008000051080000480D00001008000000090000000E0000000800003E090000530D000013080000000A0000000E000000080000280A00005E0D000015080000000B0000000E0000000800000F0B0000690D000017080000000C0000000E000000080000F40B0000730D000018080000000D0000000E000000080000D60C00007D0D00001A080000000E0000000E000000080000B50D0000870D00001B080000000F0000000E000000080000920E0000900D00001C08000000100000000E0000000800006D0F0000990D00001D08000000000000000F00000008000098000000BF0D0000FC07000000010000000F0000000800009A010000CE0D00000008000000020000000F00000008000099020000DC0D00000408000000030000000F00000008000096030000EB0D00000808000000040000000F0000000800008F040000F80D00000B08000000050000000F00000008000087050000060E00000F08000000060000000F0000000800007B060000130E00001208000000070000000F0000000800006E070000200E00001408000000080000000F0000000800005D0800002C0E00001708000000090000000F0000000800004A090000390E000019080000000A0000000F000000080000340A0000440E00001B080000000B0000000F0000000800001C0B0000500E00001D080000000C0000000F000000080000010C00005B0E00001F080000000D0000000F000000080000E40C0000650E000020080000000E0000000F000000080000C40D0000700E000021080000000F0000000F000000080000A10E00007A0E00002208000000100000000F0000000800007C0F0000830E000023080000000000000010000000080000A10000009D0E000003080000000100000010000000080000A4010000AC0E000007080000000200000010000000080000A3020000BC0E00000B080000000300000010000000080000A0030000CB0E00000F0800000004000000100000000800009A040000D90E00001208000000050000001000000008000092050000E70E00001508000000060000001000000008000087060000F50E00001808000000070000001000000008000079070000030F00001B08000000080000001000000008000069080000100F00001D080000000900000010000000080000570900001D0F000020080000000A00000010000000080000410A0000290F000022080000000B000000100000000800002A0B0000350F000024080000000C000000100000000800000F0C0000410F000025080000000D00000010000000080000F20C00004C0F000027080000000E00000010000000080000D30D0000570F000028080000000F00000010000000080000B00E0000620F0000290800000010000000100000000800008C0F00006C0F0000290800000000000000000000000900004F0000002F000000780800000001000000000000000900004B010000340000007D0800000002000000000000000900004402000038000000820800000003000000000000000900003B0300003C000000870800000004000000000000000900002F040000400000008C0800000005000000000000000900002005000043000000900800000006000000000000000900000F0600004600000094080000000700000000000000090000FC0600004800000098080000000800000000000000090000E60700004A0000009C080000000900000000000000090000CD0800004C0000009F080000000A00000000000000090000B10900004E000000A2080000000B00000000000000090000930A00004F000000A5080000000C00000000000000090000730B000050000000A8080000000D00000000000000090000500C000050000000AB080000000E000000000000000900002A0D000050000000AD080000000F00000000000000090000020E000050000000AF080000001000000000000000090000D70E00004F000000B10800000000000000010000000900005100000020010000810800000001000000010000000900004D0100002501000086080000000200000001000000090000470200002A0100008B0800000003000000010000000900003E0300002F01000090080000000400000001000000090000330400003301000094080000000500000001000000090000250500003701000098080000000600000001000000090000140600003B0100009C080000000700000001000000090000010700003E010000A0080000000800000001000000090000EB07000041010000A4080000000900000001000000090000D308000044010000A7080000000A00000001000000090000B809000046010000AA080000000B000000010000000900009A0A000048010000AD080000000C000000010000000900007A0B000049010000B0080000000D00000001000000090000570C00004A010000B3080000000E00000001000000090000320D00004B010000B5080000000F000000010000000900000A0E00004B010000B7080000001000000001000000090000E00E00004B010000B908000000000000000200000009000054000000100200008908000000010000000200000009000050010000160200008E0800000002000000020000000900004A0200001C0200009308000000030000000200000009000042030000210200009808000000040000000200000009000037040000260200009C080000000500000002000000090000290500002B020000A1080000000600000002000000090000190600002F020000A50800000007000000020000000900000607000033020000A8080000000800000002000000090000F107000036020000AC080000000900000002000000090000D90800003A020000AF080000000A00000002000000090000BE0900003D020000B2080000000B00000002000000090000A10A00003F020000B5080000000C00000002000000090000820B000041020000B8080000000D000000020000000900005F0C000043020000BA080000000E000000020000000900003A0D000044020000BD080000000F00000002000000090000130E000046020000BF080000001000000002000000090000E90E000046020000C008000000000000000300000009000057000000FF020000920800000001000000030000000900005401000005030000970800000002000000030000000900004E0200000C0300009C0800000003000000030000000900004603000012030000A00800000004000000030000000900003C04000017030000A50800000005000000030000000900002F0500001D030000A90800000006000000030000000900001F06000022030000AD0800000007000000030000000900000C07000026030000B1080000000800000003000000090000F70700002B030000B4080000000900000003000000090000E00800002F030000B7080000000A00000003000000090000C609000032030000BA080000000B00000003000000090000A90A000035030000BD080000000C000000030000000900008A0B000038030000C0080000000D00000003000000090000680C00003B030000C2080000000E00000003000000090000430D00003D030000C4080000000F000000030000000900001C0E00003E030000C6080000001000000003000000090000F30E000040030000C80800000000000000040000000900005A000000EC0300009A08000000010000000400000009000058010000F40300009F08000000020000000400000009000053020000FB030000A40800000003000000040000000900004B03000001040000A90800000004000000040000000900004104000008040000AD080000000500000004000000090000340500000E040000B10800000006000000040000000900002506000013040000B50800000007000000040000000900001307000019040000B9080000000800000004000000090000FE0700001E040000BC080000000900000004000000090000E708000022040000BF080000000A00000004000000090000CD09000026040000C2080000000B00000004000000090000B10A00002A040000C5080000000C00000004000000090000920B00002E040000C8080000000D00000004000000090000710C000031040000CA080000000E000000040000000900004D0D000034040000CC080000000F00000004000000090000260E000036040000CE080000001000000004000000090000FD0E000038040000D00800000000000000050000000900005E000000D8040000A30800000001000000050000000900005C010000E0040000A808000000020000000500000009000058020000E8040000AC08000000030000000500000009000051030000F0040000B108000000040000000500000009000047040000F7040000B50800000005000000050000000900003A050000FD040000B90800000006000000050000000900002B06000004050000BD0800000007000000050000000900001A0700000A050000C1080000000800000005000000090000060800000F050000C4080000000900000005000000090000EF08000015050000C7080000000A00000005000000090000D609000019050000CA080000000B00000005000000090000BA0A00001E050000CD080000000C000000050000000900009B0B000022050000CF080000000D000000050000000900007A0C000026050000D2080000000E00000005000000090000560D00002A050000D4080000000F00000005000000090000300E00002D050000D5080000001000000005000000090000070F00002F050000D708000000000000000600000009000063000000C3050000AB08000000010000000600000009000061010000CC050000B00800000002000000060000000900005D020000D5050000B508000000030000000600000009000056030000DD050000B90800000004000000060000000900004D040000E4050000BD08000000050000000600000009000041050000EC050000C108000000060000000600000009000032060000F3050000C508000000070000000600000009000021070000F9050000C80800000008000000060000000900000D08000000060000CC080000000900000006000000090000F708000006060000CF080000000A00000006000000090000DE0900000B060000D2080000000B00000006000000090000C30A000011060000D4080000000C00000006000000090000A50B000015060000D7080000000D00000006000000090000840C00001A060000D9080000000E00000006000000090000610D00001E060000DB080000000F000000060000000900003B0E000022060000DD080000001000000006000000090000120F000025060000DE08000000000000000700000009000068000000AD060000B308000000010000000700000009000067010000B7060000B808000000020000000700000009000063020000C0060000BD0800000003000000070000000900005C030000C9060000C108000000040000000700000009000053040000D1060000C508000000050000000700000009000048050000D9060000C90800000006000000070000000900003A060000E1060000CD08000000070000000700000009000029070000E8060000D008000000080000000700000009000016080000EF060000D408000000090000000700000009000000090000F6060000D7080000000A00000007000000090000E7090000FC060000D9080000000B00000007000000090000CC0A000002070000DC080000000C00000007000000090000AF0B000007070000DE080000000D000000070000000900008E0C00000D070000E1080000000E000000070000000900006B0D000012070000E3080000000F00000007000000090000460E000016070000E40800000010000000070000000900001E0F00001A070000E60800000000000000080000000900006D00000096070000BB0800000001000000080000000900006C010000A0070000C008000000020000000800000009000069020000AA070000C508000000030000000800000009000063030000B3070000C90800000004000000080000000900005B040000BC070000CD0800000005000000080000000900004F050000C5070000D108000000060000000800000009000042060000CD070000D508000000070000000800000009000031070000D5070000D80800000008000000080000000900001E080000DD070000DB08000000090000000800000009000009090000E4070000DE080000000A00000008000000090000F1090000EB070000E1080000000B00000008000000090000D60A0000F2070000E4080000000C00000008000000090000B90B0000F8070000E6080000000D00000008000000090000990C0000FE070000E8080000000E00000008000000090000770D000004080000EA080000000F00000008000000090000520E000009080000EC0800000010000000080000000900002A0F00000E080000ED080000000000000009000000090000730000007D080000C30800000001000000090000000900007301000088080000C80800000002000000090000000900007002000093080000CD0800000003000000090000000900006A0300009D080000D108000000040000000900000009000062040000A6080000D508000000050000000900000009000057050000B0080000D90800000006000000090000000900004A060000B9080000DC0800000007000000090000000900003A070000C2080000E008000000080000000900000009000028080000CA080000E308000000090000000900000009000013090000D2080000E6080000000A00000009000000090000FB090000DA080000E9080000000B00000009000000090000E10A0000E1080000EB080000000C00000009000000090000C40B0000E8080000ED080000000D00000009000000090000A40C0000EE080000EF080000000E00000009000000090000820D0000F5080000F1080000000F000000090000000900005E0E0000FB080000F3080000001000000009000000090000360F000000090000F408000000000000000A0000000900007900000063090000CB08000000010000000A000000090000790100006F090000D008000000020000000A000000090000770200007A090000D408000000030000000A0000000900007203000085090000D908000000040000000A0000000900006A0400008F090000DD08000000050000000A0000000900006005000099090000E008000000060000000A00000009000053060000A3090000E408000000070000000A00000009000043070000AD090000E708000000080000000A00000009000031080000B6090000EA08000000090000000A0000000900001D090000BE090000ED080000000A0000000A000000090000050A0000C7090000F0080000000B0000000A000000090000EB0A0000CF090000F2080000000C0000000A000000090000CF0B0000D6090000F5080000000D0000000A000000090000B00C0000DE090000F7080000000E0000000A0000000900008E0D0000E4090000F8080000000F0000000A0000000900006A0E0000EB090000FA08000000100000000A000000090000430F0000F1090000FB08000000000000000B00000009000080000000480A0000D308000000010000000B00000009000081010000550A0000D808000000020000000B0000000900007F020000600A0000DC08000000030000000B0000000900007A0300006C0A0000E008000000040000000B00000009000072040000770A0000E408000000050000000B00000009000069050000820A0000E808000000060000000B0000000900005C0600008C0A0000EC08000000070000000B0000000900004D070000960A0000EF08000000080000000B0000000900003B080000A00A0000F208000000090000000B00000009000027090000A90A0000F5080000000A0000000B000000090000100A0000B20A0000F7080000000B0000000B000000090000F70A0000BB0A0000FA080000000C0000000B000000090000DB0B0000C30A0000FC080000000D0000000B000000090000BC0C0000CB0A0000FE080000000E0000000B0000000900009B0D0000D30A0000FF080000000F0000000B000000090000770E0000DA0A00000109000000100000000B000000090000510F0000E10A00000209000000000000000C000000090000880000002C0B0000DB08000000010000000C00000009000088010000390B0000E008000000020000000C00000009000087020000460B0000E408000000030000000C00000009000082030000520B0000E808000000040000000C0000000900007B0400005E0B0000EC08000000050000000C00000009000072050000690B0000F008000000060000000C00000009000066060000740B0000F308000000070000000C000000090000570700007F0B0000F608000000080000000C00000009000046080000890B0000F908000000090000000C00000009000032090000930B0000FC080000000A0000000C0000000900001C0A00009D0B0000FE080000000B0000000C000000090000030B0000A60B000001090000000C0000000C000000090000E70B0000AF0B000003090000000D0000000C000000090000C90C0000B80B000005090000000E0000000C000000090000A80D0000C00B000006090000000F0000000C000000090000850E0000C80B00000809000000100000000C0000000900005F0F0000D00B00000909000000000000000D0000000900008F0000000F0C0000E308000000010000000D000000090000900100001C0C0000E708000000020000000D0000000900008F020000290C0000EC08000000030000000D0000000900008B030000360C0000F008000000040000000D00000009000085040000430C0000F308000000050000000D0000000900007C0500004F0C0000F708000000060000000D000000090000700600005B0C0000FA08000000070000000D00000009000062070000660C0000FE08000000080000000D00000009000051080000710C00000009000000090000000D0000000900003D0900007C0C000003090000000A0000000D000000090000270A0000860C000006090000000B0000000D0000000900000F0B0000900C000008090000000C0000000D000000090000F40B00009A0C00000A090000000D0000000D000000090000D60C0000A30C00000C090000000E0000000D000000090000B50D0000AC0C00000D090000000F0000000D000000090000920E0000B50C00000F09000000100000000D0000000900006D0F0000BD0C00001009000000000000000E00000009000097000000F00C0000EB08000000010000000E00000009000099010000FE0C0000EF08000000020000000E000000090000980200000C0D0000F308000000030000000E000000090000950300001A0D0000F708000000040000000E0000000900008F040000270D0000FB08000000050000000E00000009000086050000340D0000FE08000000060000000E0000000900007B060000400D00000209000000070000000E0000000900006D0700004C0D00000509000000080000000E0000000900005C080000580D00000809000000090000000E00000009000049090000630D00000A090000000A0000000E000000090000340A00006F0D00000D090000000B0000000E0000000900001B0B0000790D00000F090000000C0000000E000000090000010C0000840D000011090000000D0000000E000000090000E30C00008E0D000013090000000E0000000E000000090000C30D0000970D000014090000000F0000000E000000090000A10E0000A10D00001609000000100000000E0000000900007C0F0000AA0D00001709000000000000000F000000090000A0000000D00D0000F208000000010000000F000000090000A2010000DF0D0000F608000000020000000F000000090000A2020000EE0D0000FB08000000030000000F0000000900009E030000FC0D0000FE08000000040000000F000000090000990400000A0E00000209000000050000000F00000009000091050000170E00000609000000060000000F00000009000086060000240E00000909000000070000000F00000009000078070000310E00000C09000000080000000F000000090000680800003E0E00000F09000000090000000F000000090000560900004A0E000011090000000A0000000F000000090000400A0000550E000014090000000B0000000F000000090000290B0000610E000016090000000C0000000F0000000900000E0C00006C0E000018090000000D0000000F000000090000F10C0000770E00001A090000000E0000000F000000090000D20D0000810E00001B090000000F0000000F000000090000B00E00008B0E00001C09000000100000000F0000000900008B0F0000950E00001D090000000000000010000000090000A9000000AF0E0000FA080000000100000010000000090000AC010000BE0E0000FE080000000200000010000000090000AB020000CE0E000002090000000300000010000000090000A9030000DD0E000006090000000400000010000000090000A4040000EB0E0000090900000005000000100000000900009C050000F90E00000D09000000060000001000000009000091060000070F00001009000000070000001000000009000084070000150F00001309000000080000001000000009000075080000220F000016090000000900000010000000090000620900002F0F000018090000000A000000100000000900004E0A00003B0F00001B090000000B00000010000000090000360B0000470F00001D090000000C000000100000000900001C0C0000530F00001F090000000D00000010000000090000000D00005E0F000020090000000E00000010000000090000E00D0000690F000022090000000F00000010000000090000BF0E0000740F0000230900000010000000100000000900009A0F00007E0F0000240900000000000000000000000A00005600000032000000650900000001000000000000000A000052010000370000006B0900000002000000000000000A00004C0200003B000000700900000003000000000000000A0000430300003F000000750900000004000000000000000A000038040000430000007A0900000005000000000000000A00002A050000460000007F0900000006000000000000000A00001906000049000000830900000007000000000000000A0000060700004B000000870900000008000000000000000A0000F00700004D0000008B0900000009000000000000000A0000D80800004F0000008F090000000A000000000000000A0000BD0900005100000093090000000B000000000000000A0000A00A00005200000096090000000C000000000000000A0000800B00005300000099090000000D000000000000000A00005D0C0000530000009C090000000E000000000000000A0000380D0000530000009F090000000F000000000000000A0000100E000053000000A10900000010000000000000000A0000E50E000052000000A40900000000000000010000000A000058000000240100006E0900000001000000010000000A0000550100002A010000740900000002000000010000000A00004F0200002E010000790900000003000000010000000A000046030000330100007E0900000004000000010000000A00003C04000037010000830900000005000000010000000A00002E0500003B010000880900000006000000010000000A00001E0600003F0100008C0900000007000000010000000A00000B07000042010000900900000008000000010000000A0000F607000045010000940900000009000000010000000A0000DE0800004701000098090000000A000000010000000A0000C30900004A0100009B090000000B000000010000000A0000A60A00004B0100009F090000000C000000010000000A0000870B00004D010000A2090000000D000000010000000A0000640C00004E010000A5090000000E000000010000000A0000400D00004F010000A7090000000F000000010000000A0000180E00004F010000AA0900000010000000010000000A0000EE0E00004F010000AC0900000000000000020000000A00005B00000015020000770900000001000000020000000A0000580100001B0200007D0900000002000000020000000A00005202000021020000820900000003000000020000000A00004A03000026020000870900000004000000020000000A0000400400002B0200008C0900000005000000020000000A00003305000030020000900900000006000000020000000A00002306000034020000950900000007000000020000000A00001107000038020000990900000008000000020000000A0000FC0700003B0200009D0900000009000000020000000A0000E40800003E020000A0090000000A000000020000000A0000CA09000041020000A4090000000B000000020000000A0000AE0A000044020000A7090000000C000000020000000A00008E0B000046020000AA090000000D000000020000000A00006C0C000048020000AD090000000E000000020000000A0000480D000049020000AF090000000F000000020000000A0000210E00004A020000B20900000010000000020000000A0000F70E00004B020000B40900000000000000030000000A00005E00000005030000810900000001000000030000000A00005B0100000B030000860900000002000000030000000A000056020000120300008B0900000003000000030000000A00004F03000018030000900900000004000000030000000A0000450400001D030000950900000005000000030000000A00003805000023030000990900000006000000030000000A000029060000270300009D0900000007000000030000000A0000170700002C030000A10900000008000000030000000A00000208000030030000A50900000009000000030000000A0000EB08000034030000A9090000000A000000030000000A0000D109000038030000AC090000000B000000030000000A0000B50A00003B030000AF090000000C000000030000000A0000960B00003E030000B2090000000D000000030000000A0000750C000040030000B5090000000E000000030000000A0000510D000042030000B8090000000F000000030000000A00002A0E000044030000BA0900000010000000030000000A0000010F000045030000BC0900000000000000040000000A000061000000F3030000890900000001000000040000000A00005F010000FA0300008F0900000002000000040000000A00005B02000001040000940900000003000000040000000A00005403000008040000990900000004000000040000000A00004A0400000E0400009D0900000005000000040000000A00003E05000014040000A20900000006000000040000000A00002F0600001A040000A60900000007000000040000000A00001D0700001F040000AA0900000008000000040000000A00000908000024040000AE0900000009000000040000000A0000F208000029040000B1090000000A000000040000000A0000D90900002D040000B5090000000B000000040000000A0000BD0A000031040000B8090000000C000000040000000A00009F0B000034040000BB090000000D000000040000000A00007E0C000037040000BD090000000E000000040000000A00005A0D00003A040000C0090000000F000000040000000A0000340E00003D040000C20900000010000000040000000A00000B0F00003F040000C40900000000000000050000000A000065000000E0040000920900000001000000050000000A000064010000E8040000980900000002000000050000000A000060020000F00400009D0900000003000000050000000A000059030000F7040000A10900000004000000050000000A000050040000FE040000A60900000005000000050000000A00004405000005050000AA0900000006000000050000000A0000350600000B050000AF0900000007000000050000000A00002407000011050000B20900000008000000050000000A00001008000017050000B60900000009000000050000000A0000FA0800001C050000BA090000000A000000050000000A0000E109000021050000BD090000000B000000050000000A0000C60A000025050000C0090000000C000000050000000A0000A80B00002A050000C3090000000D000000050000000A0000870C00002D050000C5090000000E000000050000000A0000640D000031050000C8090000000F000000050000000A00003E0E000034050000CA0900000010000000050000000A0000160F000037050000CC0900000000000000060000000A00006A000000CC0500009B0900000001000000060000000A000069010000D5050000A00900000002000000060000000A000065020000DD050000A50900000003000000060000000A00005F030000E5050000AA0900000004000000060000000A000056040000ED050000AF0900000005000000060000000A00004A050000F4050000B30900000006000000060000000A00003C060000FB050000B70900000007000000060000000A00002C07000002060000BB0900000008000000060000000A00001808000008060000BF0900000009000000060000000A0000020900000E060000C2090000000A000000060000000A0000EA09000014060000C5090000000B000000060000000A0000CF0A000019060000C8090000000C000000060000000A0000B10B00001E060000CB090000000D000000060000000A0000910C000022060000CD090000000E000000060000000A00006E0D000027060000D0090000000F000000060000000A0000490E00002A060000D20900000010000000060000000A0000210F00002E060000D40900000000000000070000000A00006F000000B7060000A40900000001000000070000000A00006E010000C0060000A90900000002000000070000000A00006B020000C9060000AE0900000003000000070000000A000065030000D2060000B30900000004000000070000000A00005C040000DA060000B70900000005000000070000000A000051050000E2060000BB0900000006000000070000000A000044060000EA060000BF0900000007000000070000000A000033070000F1060000C30900000008000000070000000A000021080000F8060000C70900000009000000070000000A00000B090000FF060000CA090000000A000000070000000A0000F309000005070000CD090000000B000000070000000A0000D80A00000B070000D0090000000C000000070000000A0000BB0B000011070000D3090000000D000000070000000A00009B0C000016070000D5090000000E000000070000000A0000790D00001B070000D8090000000F000000070000000A0000540E00001F070000DA0900000010000000070000000A00002D0F000023070000DC0900000000000000080000000A000074000000A0070000AD0900000001000000080000000A000074010000AA070000B20900000002000000080000000A000071020000B4070000B70900000003000000080000000A00006C030000BE070000BB0900000004000000080000000A000063040000C7070000C00900000005000000080000000A000059050000CF070000C40900000006000000080000000A00004C060000D8070000C80900000007000000080000000A00003C070000E0070000CB0900000008000000080000000A000029080000E7070000CF0900000009000000080000000A000014090000EF070000D2090000000A000000080000000A0000FD090000F6070000D5090000000B000000080000000A0000E20A0000FC070000D8090000000C000000080000000A0000C60B000003080000DB090000000D000000080000000A0000A60C000008080000DD090000000E000000080000000A0000840D00000E080000E0090000000F000000080000000A0000600E000013080000E10900000010000000080000000A0000390F000018080000E30900000000000000090000000A00007A00000089080000B50900000001000000090000000A00007A01000093080000BA0900000002000000090000000A0000780200009E080000BF0900000003000000090000000A000073030000A8080000C40900000004000000090000000A00006B040000B2080000C80900000005000000090000000A000061050000BB080000CC0900000006000000090000000A000054060000C4080000D00900000007000000090000000A000044070000CD080000D40900000008000000090000000A000032080000D5080000D70900000009000000090000000A00001E090000DD080000DA090000000A000000090000000A0000070A0000E5080000DD090000000B000000090000000A0000ED0A0000EC080000E0090000000C000000090000000A0000D00B0000F3080000E3090000000D000000090000000A0000B10C0000FA080000E5090000000E000000090000000A0000900D000000090000E7090000000F000000090000000A00006C0E000006090000E90900000010000000090000000A0000450F00000B090000EB09000000000000000A0000000A00008100000070090000BE09000000010000000A0000000A0000810100007B090000C309000000020000000A0000000A00007F02000086090000C709000000030000000A0000000A00007A03000091090000CC09000000040000000A0000000A0000730400009C090000D009000000050000000A0000000A000069050000A6090000D409000000060000000A0000000A00005D060000AF090000D809000000070000000A0000000A00004E070000B9090000DC09000000080000000A0000000A00003C080000C2090000DF09000000090000000A0000000A000028090000CA090000E2090000000A0000000A0000000A0000110A0000D3090000E5090000000B0000000A0000000A0000F80A0000DB090000E8090000000C0000000A0000000A0000DC0B0000E2090000EA090000000D0000000A0000000A0000BD0C0000EA090000ED090000000E0000000A0000000A00009C0D0000F1090000EF090000000F0000000A0000000A0000780E0000F7090000F109000000100000000A0000000A0000520F0000FD090000F209000000000000000B0000000A000087000000550A0000C609000000010000000B0000000A000088010000620A0000CB09000000020000000B0000000A0000870200006E0A0000D009000000030000000B0000000A000082030000790A0000D409000000040000000B0000000A00007B040000840A0000D809000000050000000B0000000A0000720500008F0A0000DC09000000060000000B0000000A000066060000990A0000E009000000070000000B0000000A000057070000A30A0000E409000000080000000B0000000A000046080000AD0A0000E709000000090000000B0000000A000032090000B70A0000EA090000000A0000000B0000000A00001C0A0000C00A0000ED090000000B0000000B0000000A0000030B0000C80A0000F0090000000C0000000B0000000A0000E70B0000D00A0000F2090000000D0000000B0000000A0000C90C0000D80A0000F4090000000E0000000B0000000A0000A80D0000E00A0000F6090000000F0000000B0000000A0000850E0000E70A0000F809000000100000000B0000000A00005F0F0000EE0A0000FA09000000000000000C0000000A00008F0000003A0B0000CE09000000010000000C0000000A000090010000470B0000D309000000020000000C0000000A00008F020000540B0000D809000000030000000C0000000A00008B030000600B0000DC09000000040000000C0000000A0000840400006C0B0000E009000000050000000C0000000A00007B050000770B0000E409000000060000000C0000000A000070060000820B0000E809000000070000000C0000000A0000610700008D0B0000EC09000000080000000C0000000A000051080000970B0000EF09000000090000000C0000000A00003D090000A10B0000F2090000000A0000000C0000000A0000270A0000AB0B0000F5090000000B0000000C0000000A00000F0B0000B40B0000F7090000000C0000000C0000000A0000F40B0000BD0B0000FA090000000D0000000C0000000A0000D60C0000C60B0000FC090000000E0000000C0000000A0000B50D0000CE0B0000FE090000000F0000000C0000000A0000930E0000D60B0000000A000000100000000C0000000A00006D0F0000DE0B0000010A000000000000000D0000000A0000960000001E0C0000D709000000010000000D0000000A0000980100002B0C0000DB09000000020000000D0000000A000097020000380C0000E009000000030000000D0000000A000094030000450C0000E409000000040000000D0000000A00008E040000520C0000E809000000050000000D0000000A0000850500005E0C0000EC09000000060000000D0000000A00007A0600006A0C0000F009000000070000000D0000000A00006C070000750C0000F309000000080000000D0000000A00005C080000800C0000F709000000090000000D0000000A0000490900008B0C0000FA090000000A0000000D0000000A0000330A0000950C0000FC090000000B0000000D0000000A00001B0B00009F0C0000FF090000000C0000000D0000000A0000000C0000A90C0000010A0000000D0000000D0000000A0000E30C0000B20C0000030A0000000E0000000D0000000A0000C30D0000BB0C0000050A0000000F0000000D0000000A0000A00E0000C40C0000070A000000100000000D0000000A00007B0F0000CC0C0000080A000000000000000E0000000A00009F000000000D0000DF09000000010000000E0000000A0000A10100000E0D0000E409000000020000000E0000000A0000A00200001C0D0000E809000000030000000E0000000A00009D030000290D0000EC09000000040000000E0000000A000098040000370D0000F009000000050000000E0000000A00008F050000440D0000F409000000060000000E0000000A000084060000500D0000F809000000070000000E0000000A0000770700005C0D0000FB09000000080000000E0000000A000067080000680D0000FE09000000090000000E0000000A000055090000730D0000010A0000000A0000000E0000000A00003F0A00007E0D0000040A0000000B0000000E0000000A0000280B0000890D0000060A0000000C0000000E0000000A00000D0C0000930D0000090A0000000D0000000E0000000A0000F00C00009D0D00000B0A0000000E0000000E0000000A0000D10D0000A70D00000D0A0000000F0000000E0000000A0000AF0E0000B00D00000E0A000000100000000E0000000A00008A0F0000B90D0000100A000000000000000F0000000A0000A7000000E10D0000E709000000010000000F0000000A0000AA010000F00D0000EC09000000020000000F0000000A0000AA020000FE0D0000F009000000030000000F0000000A0000A70300000D0E0000F409000000040000000F0000000A0000A20400001A0E0000F809000000050000000F0000000A00009A050000280E0000FC09000000060000000F0000000A000090060000350E0000FF09000000070000000F0000000A000083070000420E0000030A000000080000000F0000000A0000730800004E0E0000060A000000090000000F0000000A0000610900005B0E0000090A0000000A0000000F0000000A00004C0A0000660E00000B0A0000000B0000000F0000000A0000350B0000720E00000E0A0000000C0000000F0000000A00001B0C00007D0E0000100A0000000D0000000F0000000A0000FE0C0000870E0000120A0000000E0000000F0000000A0000DF0D0000920E0000140A0000000F0000000F0000000A0000BD0E00009C0E0000150A000000100000000F0000000A0000990F0000A50E0000170A00000000000000100000000A0000B0000000C10E0000EF0900000001000000100000000A0000B3010000D00E0000F40900000002000000100000000A0000B4020000DF0E0000F80900000003000000100000000A0000B1030000EE0E0000FC0900000004000000100000000A0000AD040000FD0E0000000A00000005000000100000000A0000A50500000B0F0000040A00000006000000100000000A00009B060000190F0000070A00000007000000100000000A00008F070000270F00000A0A00000008000000100000000A00007F080000340F00000D0A00000009000000100000000A00006E090000400F0000100A0000000A000000100000000A0000590A00004D0F0000130A0000000B000000100000000A0000420B0000590F0000150A0000000C000000100000000A0000290C0000650F0000170A0000000D000000100000000A00000D0D0000700F0000190A0000000E000000100000000A0000EE0D00007B0F00001B0A0000000F000000100000000A0000CD0E0000860F00001D0A00000010000000100000000A0000A90F0000900F00001E0A00000000000000000000000B00005C00000035000000510A00000001000000000000000B0000590100003A000000570A00000002000000000000000B0000530200003E0000005D0A00000003000000000000000B00004B03000042000000620A00000004000000000000000B00004004000045000000680A00000005000000000000000B000033050000490000006D0A00000006000000000000000B0000230600004B000000710A00000007000000000000000B0000100700004E000000760A00000008000000000000000B0000FB070000500000007A0A00000009000000000000000B0000E3080000520000007F0A0000000A000000000000000B0000C809000053000000820A0000000B000000000000000B0000AB0A000054000000860A0000000C000000000000000B00008C0B0000550000008A0A0000000D000000000000000B00006A0C0000550000008D0A0000000E000000000000000B0000450D000055000000900A0000000F000000000000000B00001E0E000055000000930A00000010000000000000000B0000F40E000054000000950A00000000000000010000000B00005E000000280100005B0A00000001000000010000000B00005C0100002D010000610A00000002000000010000000B00005602000032010000670A00000003000000010000000B00004F030000370100006C0A00000004000000010000000B0000440400003B010000710A00000005000000010000000B0000370500003F010000760A00000006000000010000000B000027060000420100007B0A00000007000000010000000B000015070000460100007F0A00000008000000010000000B00000008000048010000840A00000009000000010000000B0000E90800004B010000880A0000000A000000010000000B0000CF0900004D0100008C0A0000000B000000010000000B0000B20A00004F0100008F0A0000000C000000010000000B0000930B000050010000930A0000000D000000010000000B0000710C000051010000960A0000000E000000010000000B00004D0D000052010000990A0000000F000000010000000B0000260E0000520100009C0A00000010000000010000000B0000FC0E0000520100009E0A00000000000000020000000B0000610000001A020000650A00000001000000020000000B00005F010000200200006A0A00000002000000020000000B00005A02000025020000700A00000003000000020000000B0000520300002B020000750A00000004000000020000000B0000480400002F0200007A0A00000005000000020000000B00003C050000340200007F0A00000006000000020000000B00002C06000038020000840A00000007000000020000000B00001B0700003C020000880A00000008000000020000000B000006080000400200008D0A00000009000000020000000B0000EF08000043020000910A0000000A000000020000000B0000D609000046020000950A0000000B000000020000000B0000B90A000048020000980A0000000C000000020000000B00009B0B00004A0200009B0A0000000D000000020000000B0000790C00004C0200009F0A0000000E000000020000000B0000550D00004D020000A20A0000000F000000020000000B00002F0E00004E020000A40A00000010000000020000000B0000060F00004F020000A70A00000000000000030000000B0000640000000A0300006E0A00000001000000030000000B00006201000011030000740A00000002000000030000000B00005E02000017030000790A00000003000000030000000B0000570300001D0300007F0A00000004000000030000000B00004D04000023030000840A00000005000000030000000B00004105000028030000890A00000006000000030000000B0000320600002D0300008D0A00000007000000030000000B00002107000031030000920A00000008000000030000000B00000D08000036030000960A00000009000000030000000B0000F6080000390300009A0A0000000A000000030000000B0000DD0900003D0300009D0A0000000B000000030000000B0000C10A000040030000A10A0000000C000000030000000B0000A30B000043030000A40A0000000D000000030000000B0000820C000045030000A70A0000000E000000030000000B00005E0D000047030000AA0A0000000F000000030000000B0000380E000049030000AD0A00000010000000030000000B00000F0F00004A030000AF0A00000000000000040000000B000068000000F9030000780A00000001000000040000000B000066010000010400007D0A00000002000000040000000B00006202000008040000830A00000003000000040000000B00005C0300000E040000880A00000004000000040000000B000052040000150400008D0A00000005000000040000000B0000470500001B040000920A00000006000000040000000B00003806000020040000960A00000007000000040000000B000027070000260400009B0A00000008000000040000000B0000140800002A0400009F0A00000009000000040000000B0000FD0800002F040000A30A0000000A000000040000000B0000E509000033040000A60A0000000B000000040000000B0000C90A000037040000AA0A0000000C000000040000000B0000AB0B00003A040000AD0A0000000D000000040000000B00008B0C00003D040000B00A0000000E000000040000000B0000680D000040040000B30A0000000F000000040000000B0000420E000043040000B50A00000010000000040000000B0000190F000045040000B80A00000000000000050000000B00006C000000E7040000810A00000001000000050000000B00006B010000F0040000870A00000002000000050000000B000067020000F70400008C0A00000003000000050000000B000061030000FF040000910A00000004000000050000000B00005804000006050000960A00000005000000050000000B00004D0500000C0500009B0A00000006000000050000000B00003F060000120500009F0A00000007000000050000000B00002E07000018050000A40A00000008000000050000000B00001B0800001E050000A80A00000009000000050000000B00000509000023050000AB0A0000000A000000050000000B0000ED09000028050000AF0A0000000B000000050000000B0000D20A00002D050000B20A0000000C000000050000000B0000B40B000031050000B60A0000000D000000050000000B0000940C000035050000B90A0000000E000000050000000B0000710D000038050000BB0A0000000F000000050000000B00004C0E00003B050000BE0A00000010000000050000000B0000240F00003E050000C00A00000000000000060000000B000071000000D40500008B0A00000001000000060000000B000070010000DD050000900A00000002000000060000000B00006D020000E5050000950A00000003000000060000000B000067030000ED0500009A0A00000004000000060000000B00005E040000F50500009F0A00000005000000060000000B000053050000FC050000A40A00000006000000060000000B00004606000003060000A80A00000007000000060000000B0000350700000A060000AD0A00000008000000060000000B00002308000010060000B00A00000009000000060000000B00000D09000016060000B40A0000000A000000060000000B0000F50900001C060000B80A0000000B000000060000000B0000DB0A000021060000BB0A0000000C000000060000000B0000BE0B000026060000BE0A0000000D000000060000000B00009E0C00002A060000C10A0000000E000000060000000B00007C0D00002E060000C40A0000000F000000060000000B0000570E000032060000C60A00000010000000060000000B00002F0F000036060000C80A00000000000000070000000B000076000000C0060000940A00000001000000070000000B000075010000C9060000990A00000002000000070000000B000072020000D20600009E0A00000003000000070000000B00006D030000DB060000A30A00000004000000070000000B000065040000E4060000A80A00000005000000070000000B00005A050000EC060000AD0A00000006000000070000000B00004D060000F3060000B10A00000007000000070000000B00003D070000FB060000B50A00000008000000070000000B00002B08000001070000B90A00000009000000070000000B00001609000008070000BD0A0000000A000000070000000B0000FE0900000E070000C00A0000000B000000070000000B0000E40A000014070000C40A0000000C000000070000000B0000C80B00001A070000C70A0000000D000000070000000B0000A80C00001F070000C90A0000000E000000070000000B0000860D000024070000CC0A0000000F000000070000000B0000620E000028070000CE0A00000010000000070000000B00003B0F00002C070000D10A00000000000000080000000B00007B000000AA0700009D0A00000001000000080000000B00007B010000B4070000A20A00000002000000080000000B000079020000BE070000A80A00000003000000080000000B000074030000C8070000AC0A00000004000000080000000B00006C040000D1070000B10A00000005000000080000000B000062050000D9070000B60A00000006000000080000000B000055060000E2070000BA0A00000007000000080000000B000046070000EA070000BE0A00000008000000080000000B000034080000F1070000C20A00000009000000080000000B00001F090000F9070000C60A0000000A000000080000000B0000080A000000080000C90A0000000B000000080000000B0000EE0A000006080000CC0A0000000C000000080000000B0000D20B00000C080000CF0A0000000D000000080000000B0000B30C000012080000D20A0000000E000000080000000B0000910D000018080000D40A0000000F000000080000000B00006D0E00001D080000D70A00000010000000080000000B0000470F000022080000D90A00000000000000090000000B00008100000094080000A60A00000001000000090000000B0000820100009E080000AB0A00000002000000090000000B00007F020000A9080000B10A00000003000000090000000B00007B030000B3080000B50A00000004000000090000000B000074040000BD080000BA0A00000005000000090000000B00006A050000C6080000BE0A00000006000000090000000B00005D060000CF080000C30A00000007000000090000000B00004E070000D8080000C70A00000008000000090000000B00003D080000E0080000CA0A00000009000000090000000B000029090000E8080000CE0A0000000A000000090000000B0000120A0000F0080000D10A0000000B000000090000000B0000F90A0000F7080000D40A0000000C000000090000000B0000DD0B0000FE080000D70A0000000D000000090000000B0000BE0C000004090000DA0A0000000E000000090000000B00009D0D00000B090000DD0A0000000F000000090000000B0000790E000010090000DF0A00000010000000090000000B0000530F000016090000E10A000000000000000A0000000B0000870000007B090000AF0A000000010000000A0000000B00008801000087090000B40A000000020000000A0000000B00008702000092090000B90A000000030000000A0000000B0000820300009D090000BE0A000000040000000A0000000B00007C040000A7090000C30A000000050000000A0000000B000072050000B1090000C70A000000060000000A0000000B000066060000BB090000CB0A000000070000000A0000000B000058070000C5090000CF0A000000080000000A0000000B000046080000CE090000D30A000000090000000A0000000B000033090000D6090000D60A0000000A0000000A0000000B00001C0A0000DF090000DA0A0000000B0000000A0000000B0000030B0000E7090000DD0A0000000C0000000A0000000B0000E80B0000EE090000E00A0000000D0000000A0000000B0000CA0C0000F5090000E20A0000000E0000000A0000000B0000A90D0000FC090000E50A0000000F0000000A0000000B0000860E0000030A0000E70A000000100000000A0000000B0000600F0000090A0000E90A000000000000000B0000000B00008E000000620A0000B80A000000010000000B0000000B0000900100006E0A0000BD0A000000020000000B0000000B00008E0200007A0A0000C20A000000030000000B0000000B00008A030000860A0000C70A000000040000000B0000000B000084040000910A0000CB0A000000050000000B0000000B00007B0500009C0A0000D00A000000060000000B0000000B00006F060000A60A0000D40A000000070000000B0000000B000061070000B00A0000D80A000000080000000B0000000B000051080000BA0A0000DB0A000000090000000B0000000B00003D090000C30A0000DF0A0000000A0000000B0000000B0000270A0000CC0A0000E20A0000000B0000000B0000000B00000F0B0000D50A0000E50A0000000C0000000B0000000B0000F40B0000DD0A0000E80A0000000D0000000B0000000B0000D60C0000E50A0000EA0A0000000E0000000B0000000B0000B60D0000ED0A0000ED0A0000000F0000000B0000000B0000930E0000F40A0000EF0A000000100000000B0000000B00006D0F0000FB0A0000F10A000000000000000C0000000B000095000000480B0000C10A000000010000000C0000000B000097010000550B0000C60A000000020000000C0000000B000096020000610B0000CB0A000000030000000C0000000B0000930300006D0B0000D00A000000040000000C0000000B00008D040000790B0000D40A000000050000000C0000000B000084050000850B0000D80A000000060000000C0000000B000079060000900B0000DC0A000000070000000C0000000B00006B0700009B0B0000E00A000000080000000C0000000B00005B080000A50B0000E40A000000090000000C0000000B000048090000AF0B0000E70A0000000A0000000C0000000B0000330A0000B90B0000EA0A0000000B0000000C0000000B00001B0B0000C20B0000ED0A0000000C0000000C0000000B0000000C0000CB0B0000F00A0000000D0000000C0000000B0000E30C0000D40B0000F20A0000000E0000000C0000000B0000C30D0000DC0B0000F50A0000000F0000000C0000000B0000A00E0000E40B0000F70A000000100000000C0000000B00007B0F0000EB0B0000F80A000000000000000D0000000B00009D0000002C0C0000CA0A000000010000000D0000000B00009F0100003A0C0000CF0A000000020000000D0000000B00009F020000470C0000D40A000000030000000D0000000B00009C030000540C0000D80A000000040000000D0000000B000096040000600C0000DD0A000000050000000D0000000B00008E0500006C0C0000E10A000000060000000D0000000B000083060000780C0000E50A000000070000000D0000000B000076070000840C0000E80A000000080000000D0000000B0000660800008F0C0000EC0A000000090000000D0000000B000054090000990C0000EF0A0000000A0000000D0000000B00003E0A0000A40C0000F20A0000000B0000000D0000000B0000270B0000AE0C0000F50A0000000C0000000D0000000B00000C0C0000B80C0000F80A0000000D0000000D0000000B0000F00C0000C10C0000FA0A0000000E0000000D0000000B0000D00D0000CA0C0000FC0A0000000F0000000D0000000B0000AE0E0000D20C0000FE0A000000100000000D0000000B0000890F0000DB0C0000000B000000000000000E0000000B0000A50000000F0D0000D20A000000010000000E0000000B0000A80100001D0D0000D70A000000020000000E0000000B0000A80200002B0D0000DC0A000000030000000E0000000B0000A5030000390D0000E10A000000040000000E0000000B0000A0040000460D0000E50A000000050000000E0000000B000098050000530D0000E90A000000060000000E0000000B00008E0600005F0D0000ED0A000000070000000E0000000B0000810700006C0D0000F10A000000080000000E0000000B000072080000770D0000F40A000000090000000E0000000B00005F090000830D0000F70A0000000A0000000E0000000B00004B0A00008E0D0000FA0A0000000B0000000E0000000B0000330B0000990D0000FD0A0000000C0000000E0000000B00001A0C0000A30D0000000B0000000D0000000E0000000B0000FD0C0000AD0D0000020B0000000E0000000E0000000B0000DE0D0000B70D0000040B0000000F0000000E0000000B0000BC0E0000C00D0000060B000000100000000E0000000B0000980F0000C90D0000080B000000000000000F0000000B0000AE000000F10D0000DB0A000000010000000F0000000B0000B1010000000E0000E00A000000020000000F0000000B0000B10200000F0E0000E50A000000030000000F0000000B0000AF0300001D0E0000E90A000000040000000F0000000B0000AA0400002B0E0000ED0A000000050000000F0000000B0000A3050000380E0000F10A000000060000000F0000000B000099060000450E0000F50A000000070000000F0000000B00008D070000520E0000F90A000000080000000F0000000B00007D0800005F0E0000FC0A000000090000000F0000000B00006C0900006B0E0000FF0A0000000A0000000F0000000B0000570A0000770E0000020B0000000B0000000F0000000B0000410B0000820E0000050B0000000C0000000F0000000B0000270C00008D0E0000080B0000000D0000000F0000000B00000B0D0000980E00000A0B0000000E0000000F0000000B0000EC0D0000A20E00000C0B0000000F0000000F0000000B0000CB0E0000AC0E00000E0B000000100000000F0000000B0000A70F0000B60E00000F0B00000000000000100000000B0000B7000000D20E0000E40A00000001000000100000000B0000BB010000E10E0000E80A00000002000000100000000B0000BB020000F10E0000ED0A00000003000000100000000B0000BA030000000F0000F10A00000004000000100000000B0000B50400000E0F0000F60A00000005000000100000000B0000AE0500001C0F0000FA0A00000006000000100000000B0000A50600002A0F0000FD0A00000007000000100000000B000099070000380F0000010B00000008000000100000000B00008A080000450F0000040B00000009000000100000000B000079090000520F0000070B0000000A000000100000000B0000650A00005E0F00000A0B0000000B000000100000000B00004E0B00006A0F00000D0B0000000C000000100000000B0000350C0000760F00000F0B0000000D000000100000000B0000190D0000810F0000120B0000000E000000100000000B0000FB0D00008C0F0000140B0000000F000000100000000B0000DA0E0000970F0000150B00000010000000100000000B0000B70F0000A10F0000170B00000000000000000000000C000062000000370000003D0B00000001000000000000000C0000600100003C000000430B00000002000000000000000C00005B02000040000000490B00000003000000000000000C000053030000440000004F0B00000004000000000000000C00004804000048000000540B00000005000000000000000C00003B0500004B0000005A0B00000006000000000000000C00002C0600004E0000005F0B00000007000000000000000C00001A07000050000000640B00000008000000000000000C00000508000052000000690B00000009000000000000000C0000ED080000540000006D0B0000000A000000000000000C0000D309000055000000710B0000000B000000000000000C0000B70A000056000000750B0000000C000000000000000C0000980B000057000000790B0000000D000000000000000C0000760C0000570000007D0B0000000E000000000000000C0000520D000057000000800B0000000F000000000000000C00002B0E000057000000830B00000010000000000000000C0000010F000056000000860B00000000000000010000000C0000650000002B010000470B00000001000000010000000C000063010000310100004D0B00000002000000010000000C00005E02000035010000530B00000003000000010000000C0000560300003A010000590B00000004000000010000000C00004C0400003E0100005E0B00000005000000010000000C00004005000042010000640B00000006000000010000000C00003006000046010000690B00000007000000010000000C00001F070000490100006E0B00000008000000010000000C00000A0800004B010000720B00000009000000010000000C0000F30800004E010000770B0000000A000000010000000C0000DA090000500100007B0B0000000B000000010000000C0000BE0A0000520100007F0B0000000C000000010000000C00009F0B000053010000830B0000000D000000010000000C00007E0C000054010000860B0000000E000000010000000C00005A0D0000550100008A0B0000000F000000010000000C0000330E0000550100008D0B00000010000000010000000C00000A0F000055010000900B00000000000000020000000C0000670000001E020000510B00000001000000020000000C00006601000024020000570B00000002000000020000000C000061020000290200005D0B00000003000000020000000C00005A0300002F020000630B00000004000000020000000C00005104000034020000680B00000005000000020000000C000044050000380200006E0B00000006000000020000000C0000360600003C020000730B00000007000000020000000C00002407000040020000770B00000008000000020000000C000010080000440200007C0B00000009000000020000000C0000FA08000047020000800B0000000A000000020000000C0000E109000049020000840B0000000B000000020000000C0000C50A00004C020000880B0000000C000000020000000C0000A70B00004E0200008C0B0000000D000000020000000C0000860C000050020000900B0000000E000000020000000C0000620D000051020000930B0000000F000000020000000C00003C0E000052020000960B00000010000000020000000C0000130F000053020000990B00000000000000030000000C00006B0000000F0300005B0B00000001000000030000000C00006901000016030000610B00000002000000030000000C0000650200001C030000670B00000003000000030000000C00005F030000220300006D0B00000004000000030000000C00005504000028030000720B00000005000000030000000C00004A0500002D030000770B00000006000000030000000C00003B060000320300007C0B00000007000000030000000C00002A07000036030000810B00000008000000030000000C0000170800003B030000850B00000009000000030000000C0000010900003E0300008A0B0000000A000000030000000C0000E8090000420300008E0B0000000B000000030000000C0000CD0A000045030000920B0000000C000000030000000C0000AF0B000048030000950B0000000D000000030000000C00008E0C00004A030000990B0000000E000000030000000C00006B0D00004C0300009C0B0000000F000000030000000C0000450E00004E0300009F0B00000010000000030000000C00001D0F00004F030000A20B00000000000000040000000C00006E000000FF030000650B00000001000000040000000C00006D010000070400006B0B00000002000000040000000C00006A0200000E040000710B00000003000000040000000C00006303000014040000770B00000004000000040000000C00005B0400001B0400007C0B00000005000000040000000C00004F05000021040000810B00000006000000040000000C00004106000026040000860B00000007000000040000000C0000310700002B0400008B0B00000008000000040000000C00001E080000300400008F0B00000009000000040000000C00000809000035040000930B0000000A000000040000000C0000F009000039040000970B0000000B000000040000000C0000D50A00003D0400009B0B0000000C000000040000000C0000B70B0000400400009F0B0000000D000000040000000C0000970C000043040000A20B0000000E000000040000000C0000740D000046040000A50B0000000F000000040000000C00004F0E000048040000A80B00000010000000040000000C0000270F00004A040000AB0B00000000000000050000000C000072000000EE0400006F0B00000001000000050000000C000072010000F6040000750B00000002000000050000000C00006F020000FE0400007B0B00000003000000050000000C00006903000005050000800B00000004000000050000000C0000600400000C050000860B00000005000000050000000C000055050000130500008B0B00000006000000050000000C000048060000190500008F0B00000007000000050000000C0000380700001F050000940B00000008000000050000000C00002508000025050000980B00000009000000050000000C0000100900002A0500009C0B0000000A000000050000000C0000F80900002F050000A00B0000000B000000050000000C0000DD0A000033050000A40B0000000C000000050000000C0000C00B000037050000A80B0000000D000000050000000C0000A00C00003B050000AB0B0000000E000000050000000C00007E0D00003F050000AE0B0000000F000000050000000C0000590E000042050000B10B00000010000000050000000C0000320F000044050000B30B00000000000000060000000C000077000000DC050000790B00000001000000060000000C000077010000E50500007F0B00000002000000060000000C000074020000ED050000850B00000003000000060000000C00006F030000F50500008A0B00000004000000060000000C000067040000FD0500008F0B00000005000000060000000C00005C05000004060000940B00000006000000060000000C00004F0600000B060000990B00000007000000060000000C00003F070000120600009D0B00000008000000060000000C00002D08000018060000A20B00000009000000060000000C0000180900001E060000A60B0000000A000000060000000C0000000A000023060000AA0B0000000B000000060000000C0000E60A000029060000AD0B0000000C000000060000000C0000CA0B00002D060000B10B0000000D000000060000000C0000AA0C000032060000B40B0000000E000000060000000C0000880D000036060000B70B0000000F000000060000000C0000640E00003A060000BA0B00000010000000060000000C00003D0F00003D060000BC0B00000000000000070000000C00007C000000C9060000830B00000001000000070000000C00007C010000D2060000890B00000002000000070000000C00007A020000DB0600008E0B00000003000000070000000C000075030000E4060000940B00000004000000070000000C00006D040000EC060000990B00000005000000070000000C000063050000F40600009E0B00000006000000070000000C000056060000FC060000A20B00000007000000070000000C00004707000003070000A70B00000008000000070000000C0000350800000A070000AB0B00000009000000070000000C00002109000011070000AF0B0000000A000000070000000C0000090A000017070000B30B0000000B000000070000000C0000F00A00001D070000B60B0000000C000000070000000C0000D30B000022070000BA0B0000000D000000070000000C0000B50C000027070000BD0B0000000E000000070000000C0000930D00002C070000C00B0000000F000000070000000C00006F0E000031070000C20B00000010000000070000000C0000480F000035070000C50B00000000000000080000000C000081000000B40700008D0B00000001000000080000000C000082010000BE070000920B00000002000000080000000C000080020000C8070000980B00000003000000080000000C00007B030000D10700009D0B00000004000000080000000C000074040000DA070000A20B00000005000000080000000C00006B050000E3070000A70B00000006000000080000000C00005E060000EB070000AC0B00000007000000080000000C00004F070000F3070000B00B00000008000000080000000C00003E080000FB070000B40B00000009000000080000000C00002A09000002080000B80B0000000A000000080000000C0000130A000009080000BC0B0000000B000000080000000C0000FA0A000010080000BF0B0000000C000000080000000C0000DE0B000016080000C20B0000000D000000080000000C0000BF0C00001C080000C60B0000000E000000080000000C00009E0D000021080000C80B0000000F000000080000000C00007B0E000026080000CB0B00000010000000080000000C0000540F00002B080000CD0B00000000000000090000000C0000870000009E080000960B00000001000000090000000C000088010000A90800009C0B00000002000000090000000C000087020000B3080000A10B00000003000000090000000C000083030000BD080000A60B00000004000000090000000C00007C040000C7080000AB0B00000005000000090000000C000073050000D1080000B00B00000006000000090000000C000067060000DA080000B50B00000007000000090000000C000058070000E2080000B90B00000008000000090000000C000047080000EB080000BD0B00000009000000090000000C000033090000F3080000C10B0000000A000000090000000C00001D0A0000FA080000C50B0000000B000000090000000C0000040B000001090000C80B0000000C000000090000000C0000E90B000008090000CB0B0000000D000000090000000C0000CB0C00000F090000CE0B0000000E000000090000000C0000AA0D000015090000D10B0000000F000000090000000C0000870E00001B090000D40B00000010000000090000000C0000610F000020090000D60B000000000000000A0000000C00008E00000087090000A00B000000010000000A0000000C00008F01000092090000A50B000000020000000A0000000C00008E0200009E090000AB0B000000030000000A0000000C00008A030000A8090000B00B000000040000000A0000000C000084040000B3090000B50B000000050000000A0000000C00007B050000BD090000B90B000000060000000A0000000C00006F060000C7090000BE0B000000070000000A0000000C000061070000D0090000C20B000000080000000A0000000C000051080000D9090000C60B000000090000000A0000000C00003D090000E2090000CA0B0000000A0000000A0000000C0000270A0000EA090000CD0B0000000B0000000A0000000C00000F0B0000F2090000D10B0000000C0000000A0000000C0000F40B0000F9090000D40B0000000D0000000A0000000C0000D60C0000010A0000D70B0000000E0000000A0000000C0000B60D0000080A0000DA0B0000000F0000000A0000000C0000930E00000E0A0000DC0B000000100000000A0000000C00006E0F0000140A0000DE0B000000000000000B0000000C0000950000006F0A0000A90B000000010000000B0000000C0000960100007B0A0000AF0B000000020000000B0000000C000096020000870A0000B40B000000030000000B0000000C000092030000920A0000B90B000000040000000B0000000C00008C0400009D0A0000BE0B000000050000000B0000000C000084050000A80A0000C20B000000060000000B0000000C000079060000B20A0000C70B000000070000000B0000000C00006B070000BC0A0000CB0B000000080000000B0000000C00005B080000C60A0000CF0B000000090000000B0000000C000048090000D00A0000D30B0000000A0000000B0000000C0000320A0000D80A0000D60B0000000B0000000B0000000C00001A0B0000E10A0000DA0B0000000C0000000B0000000C0000000C0000E90A0000DD0B0000000D0000000B0000000C0000E20C0000F10A0000DF0B0000000E0000000B0000000C0000C20D0000F90A0000E20B0000000F0000000B0000000C0000A00E0000000B0000E40B000000100000000B0000000C00007B0F0000070B0000E70B000000000000000C0000000C00009C000000550B0000B30B000000010000000C0000000C00009E010000620B0000B80B000000020000000C0000000C00009E0200006E0B0000BD0B000000030000000C0000000C00009B0300007B0B0000C20B000000040000000C0000000C000095040000860B0000C70B000000050000000C0000000C00008D050000920B0000CC0B000000060000000C0000000C0000820600009D0B0000D00B000000070000000C0000000C000075070000A80B0000D40B000000080000000C0000000C000065080000B20B0000D80B000000090000000C0000000C000053090000BC0B0000DB0B0000000A0000000C0000000C00003E0A0000C60B0000DF0B0000000B0000000C0000000C0000260B0000CF0B0000E20B0000000C0000000C0000000C00000C0C0000D80B0000E50B0000000D0000000C0000000C0000EF0C0000E10B0000E80B0000000E0000000C0000000C0000CF0D0000E90B0000EA0B0000000F0000000C0000000C0000AD0E0000F10B0000ED0B000000100000000C0000000C0000890F0000F90B0000EF0B000000000000000D0000000C0000A40000003A0C0000BC0B000000010000000D0000000C0000A6010000480C0000C10B000000020000000D0000000C0000A6020000550C0000C60B000000030000000D0000000C0000A4030000620C0000CB0B000000040000000D0000000C00009F0400006E0C0000D00B000000050000000D0000000C0000970500007B0C0000D40B000000060000000D0000000C00008D060000860C0000D90B000000070000000D0000000C000080070000920C0000DD0B000000080000000D0000000C0000700800009D0C0000E10B000000090000000D0000000C00005E090000A80C0000E40B0000000A0000000D0000000C0000490A0000B20C0000E80B0000000B0000000D0000000C0000320B0000BC0C0000EB0B0000000C0000000D0000000C0000180C0000C60C0000EE0B0000000D0000000D0000000C0000FC0C0000CF0C0000F00B0000000E0000000D0000000C0000DD0D0000D80C0000F30B0000000F0000000D0000000C0000BB0E0000E10C0000F50B000000100000000D0000000C0000970F0000E90C0000F70B000000000000000E0000000C0000AC0000001E0D0000C50B000000010000000E0000000C0000AF0100002D0D0000CA0B000000020000000E0000000C0000AF0200003A0D0000D00B000000030000000E0000000C0000AD030000480D0000D40B000000040000000E0000000C0000A8040000550D0000D90B000000050000000E0000000C0000A1050000620D0000DD0B000000060000000E0000000C0000970600006F0D0000E20B000000070000000E0000000C00008B0700007B0D0000E50B000000080000000E0000000C00007C080000860D0000E90B000000090000000E0000000C00006A090000920D0000ED0B0000000A0000000E0000000C0000560A00009D0D0000F00B0000000B0000000E0000000C00003F0B0000A80D0000F30B0000000C0000000E0000000C0000250C0000B20D0000F60B0000000D0000000E0000000C0000090D0000BC0D0000F90B0000000E0000000E0000000C0000EB0D0000C60D0000FB0B0000000F0000000E0000000C0000CA0E0000CF0D0000FD0B000000100000000E0000000C0000A60F0000D80D0000FF0B000000000000000F0000000C0000B5000000010E0000CE0B000000010000000F0000000C0000B8010000100E0000D40B000000020000000F0000000C0000B90200001F0E0000D90B000000030000000F0000000C0000B70300002D0E0000DD0B000000040000000F0000000C0000B30400003B0E0000E20B000000050000000F0000000C0000AC050000480E0000E60B000000060000000F0000000C0000A2060000550E0000EA0B000000070000000F0000000C000096070000620E0000EE0B000000080000000F0000000C0000880800006F0E0000F20B000000090000000F0000000C0000760900007B0E0000F50B0000000A0000000F0000000C0000620A0000870E0000F80B0000000B0000000F0000000C00004C0B0000920E0000FB0B0000000C0000000F0000000C0000330C00009D0E0000FE0B0000000D0000000F0000000C0000170D0000A80E0000010C0000000E0000000F0000000C0000F90D0000B20E0000030C0000000F0000000F0000000C0000D80E0000BC0E0000050C000000100000000F0000000C0000B50F0000C60E0000070C00000000000000100000000C0000BE000000E30E0000D70B00000001000000100000000C0000C2010000F20E0000DD0B00000002000000100000000C0000C3020000020F0000E10B00000003000000100000000C0000C1030000110F0000E60B00000004000000100000000C0000BD0400001F0F0000EB0B00000005000000100000000C0000B70500002D0F0000EF0B00000006000000100000000C0000AE0600003B0F0000F30B00000007000000100000000C0000A2070000490F0000F70B00000008000000100000000C000094080000560F0000FA0B00000009000000100000000C000083090000630F0000FE0B0000000A000000100000000C0000700A00006F0F0000010C0000000B000000100000000C00005A0B00007B0F0000040C0000000C000000100000000C0000410C0000870F0000070C0000000D000000100000000C0000260D0000920F0000090C0000000E000000100000000C0000080E00009D0F00000B0C0000000F000000100000000C0000E80E0000A80F00000D0C00000010000000100000000C0000C50F0000B20F00000F0C00000000000000000000000D0000680000003A000000270C00000001000000000000000D0000660100003E0000002E0C00000002000000000000000D00006102000042000000340C00000003000000000000000D00005A030000460000003B0C00000004000000000000000D0000500400004A000000400C00000005000000000000000D0000440500004D000000460C00000006000000000000000D0000340600004F0000004C0C00000007000000000000000D00002307000052000000510C00000008000000000000000D00000E08000054000000560C00000009000000000000000D0000F8080000560000005B0C0000000A000000000000000D0000DE09000057000000600C0000000B000000000000000D0000C20A000058000000640C0000000C000000000000000D0000A30B000058000000680C0000000D000000000000000D0000820C0000590000006C0C0000000E000000000000000D00005E0D000059000000700C0000000F000000000000000D0000380E000058000000730C00000010000000000000000D00000F0F000057000000770C00000000000000010000000D00006B0000002E010000320C00000001000000010000000D00006901000034010000390C00000002000000010000000D000065020000380100003F0C00000003000000010000000D00005E0300003D010000450C00000004000000010000000D000054040000410100004B0C00000005000000010000000D00004805000045010000510C00000006000000010000000D00003906000048010000560C00000007000000010000000D0000280700004B0100005B0C00000008000000010000000D0000140800004E010000600C00000009000000010000000D0000FE08000050010000650C0000000A000000010000000D0000E4090000530100006A0C0000000B000000010000000D0000C90A0000540100006E0C0000000C000000010000000D0000AB0B000056010000720C0000000D000000010000000D00008A0C000056010000760C0000000E000000010000000D0000660D0000570100007A0C0000000F000000010000000D0000400E0000570100007D0C00000010000000010000000D0000180F000057010000800C00000000000000020000000D00006D000000220200003D0C00000001000000020000000D00006C01000028020000430C00000002000000020000000D0000680200002D0200004A0C00000003000000020000000D00006203000032020000500C00000004000000020000000D00005804000037020000550C00000005000000020000000D00004D0500003C0200005B0C00000006000000020000000D00003E06000040020000600C00000007000000020000000D00002D07000044020000650C00000008000000020000000D00001A080000470200006A0C00000009000000020000000D0000040900004A0200006F0C0000000A000000020000000D0000EB0900004D020000740C0000000B000000020000000D0000D00A00004F020000780C0000000C000000020000000D0000B20B0000510200007C0C0000000D000000020000000D0000920C000053020000800C0000000E000000020000000D00006F0D000054020000830C0000000F000000020000000D0000490E000055020000870C00000010000000020000000D0000210F0000560200008A0C00000000000000030000000D00007100000014030000480C00000001000000030000000D0000700100001B0300004E0C00000002000000030000000D00006C02000021030000540C00000003000000030000000D000066030000270300005A0C00000004000000030000000D00005D0400002C030000600C00000005000000030000000D00005205000032030000650C00000006000000030000000D000044060000360300006B0C00000007000000030000000D0000340700003B030000700C00000008000000030000000D0000200800003F030000740C00000009000000030000000D00000B09000043030000790C0000000A000000030000000D0000F3090000460300007D0C0000000B000000030000000D0000D80A000049030000820C0000000C000000030000000D0000BA0B00004C030000860C0000000D000000030000000D00009A0C00004E030000890C0000000E000000030000000D0000780D0000500300008D0C0000000F000000030000000D0000520E000052030000900C00000010000000030000000D00002B0F000053030000930C00000000000000040000000D00007400000005040000520C00000001000000040000000D0000740100000C040000580C00000002000000040000000D000071020000130400005E0C00000003000000040000000D00006B0300001A040000640C00000004000000040000000D000063040000200400006A0C00000005000000040000000D000058050000260400006F0C00000006000000040000000D00004A0600002C040000750C00000007000000040000000D00003A070000310400007A0C00000008000000040000000D000027080000360400007E0C00000009000000040000000D0000120900003A040000830C0000000A000000040000000D0000FA0900003E040000870C0000000B000000040000000D0000E00A0000420400008B0C0000000C000000040000000D0000C30B0000450400008F0C0000000D000000040000000D0000A30C000048040000930C0000000E000000040000000D0000810D00004B040000960C0000000F000000040000000D00005C0E00004D0400009A0C00000010000000040000000D0000350F00004F0400009D0C00000000000000050000000D000078000000F50400005D0C00000001000000050000000D000078010000FD040000630C00000002000000050000000D00007602000005050000690C00000003000000050000000D0000700300000C0500006F0C00000004000000050000000D00006804000013050000740C00000005000000050000000D00005E050000190500007A0C00000006000000050000000D000051060000200500007F0C00000007000000050000000D00004107000026050000840C00000008000000050000000D00002F0800002B050000880C00000009000000050000000D00001A090000300500008D0C0000000A000000050000000D0000020A000035050000910C0000000B000000050000000D0000E80A00003A050000950C0000000C000000050000000D0000CC0B00003E050000990C0000000D000000050000000D0000AD0C0000410500009C0C0000000E000000050000000D00008B0D000045050000A00C0000000F000000050000000D0000660E000048050000A30C00000010000000050000000D00003F0F00004A050000A60C00000000000000060000000D00007D000000E4050000670C00000001000000060000000D00007D010000EC0500006D0C00000002000000060000000D00007B020000F5050000730C00000003000000060000000D000076030000FD050000790C00000004000000060000000D00006E040000040600007E0C00000005000000060000000D0000640500000C060000840C00000006000000060000000D00005806000013060000890C00000007000000060000000D000048070000190600008D0C00000008000000060000000D0000360800001F060000920C00000009000000060000000D00002209000025060000960C0000000A000000060000000D00000B0A00002B0600009B0C0000000B000000060000000D0000F10A0000300600009F0C0000000C000000060000000D0000D50B000035060000A20C0000000D000000060000000D0000B60C000039060000A60C0000000E000000060000000D0000950D00003D060000A90C0000000F000000060000000D0000710E000041060000AC0C00000010000000060000000D00004A0F000044060000AF0C00000000000000070000000D000082000000D1060000710C00000001000000070000000D000083010000DA060000770C00000002000000070000000D000081020000E30600007D0C00000003000000070000000D00007C030000EC060000830C00000004000000070000000D000075040000F5060000880C00000005000000070000000D00006B050000FC0600008D0C00000006000000070000000D00005F06000004070000920C00000007000000070000000D0000500700000B070000970C00000008000000070000000D00003F080000120700009C0C00000009000000070000000D00002B09000019070000A00C0000000A000000070000000D0000140A00001F070000A40C0000000B000000070000000D0000FB0A000025070000A80C0000000C000000070000000D0000DF0B00002A070000AC0C0000000D000000070000000D0000C10C000030070000AF0C0000000E000000070000000D0000A00D000034070000B20C0000000F000000070000000D00007C0E000039070000B50C00000010000000070000000D0000560F00003D070000B80C00000000000000080000000D000088000000BD0700007B0C00000001000000080000000D000089010000C7070000810C00000002000000080000000D000087020000D1070000870C00000003000000080000000D000083030000DA0700008D0C00000004000000080000000D00007C040000E3070000920C00000005000000080000000D000073050000EC070000970C00000006000000080000000D000067060000F40700009C0C00000007000000080000000D000059070000FC070000A10C00000008000000080000000D00004708000004080000A50C00000009000000080000000D0000340900000B080000AA0C0000000A000000080000000D00001E0A000012080000AE0C0000000B000000080000000D0000050B000019080000B10C0000000C000000080000000D0000E90B00001F080000B50C0000000D000000080000000D0000CB0C000025080000B80C0000000E000000080000000D0000AB0D00002A080000BC0C0000000F000000080000000D0000880E00002F080000BF0C00000010000000080000000D0000620F000034080000C10C00000000000000090000000D00008D000000A8080000860C00000001000000090000000D00008F010000B30800008C0C00000002000000090000000D00008E020000BD080000910C00000003000000090000000D00008A030000C8080000970C00000004000000090000000D000084040000D10800009C0C00000005000000090000000D00007B050000DB080000A10C00000006000000090000000D00006F060000E4080000A60C00000007000000090000000D000061070000EC080000AB0C00000008000000090000000D000051080000F5080000AF0C00000009000000090000000D00003D090000FD080000B30C0000000A000000090000000D0000280A000004090000B70C0000000B000000090000000D00000F0B00000B090000BB0C0000000C000000090000000D0000F40B000012090000BE0C0000000D000000090000000D0000D70C000019090000C20C0000000E000000090000000D0000B60D00001F090000C50C0000000F000000090000000D0000940E000025090000C80C00000010000000090000000D00006E0F00002A090000CA0C000000000000000A0000000D00009400000092090000900C000000010000000A0000000D0000960100009D090000960C000000020000000A0000000D000095020000A90900009B0C000000030000000A0000000D000092030000B3090000A10C000000040000000A0000000D00008C040000BE090000A60C000000050000000A0000000D000083050000C8090000AB0C000000060000000A0000000D000078060000D2090000B00C000000070000000A0000000D00006B070000DB090000B40C000000080000000A0000000D00005A080000E4090000B80C000000090000000A0000000D000047090000ED090000BD0C0000000A0000000A0000000D0000320A0000F5090000C00C0000000B0000000A0000000D00001A0B0000FD090000C40C0000000C0000000A0000000D0000FF0B0000040A0000C80C0000000D0000000A0000000D0000E20C00000C0A0000CB0C0000000E0000000A0000000D0000C20D0000120A0000CE0C0000000F0000000A0000000D0000A00E0000190A0000D10C000000100000000A0000000D00007B0F00001F0A0000D30C000000000000000B0000000D00009B0000007B0A00009A0C000000010000000B0000000D00009D010000870A00009F0C000000020000000B0000000D00009D020000930A0000A50C000000030000000B0000000D00009A0300009E0A0000AA0C000000040000000B0000000D000094040000A90A0000B00C000000050000000B0000000D00008C050000B40A0000B40C000000060000000B0000000D000081060000BE0A0000B90C000000070000000B0000000D000074070000C80A0000BE0C000000080000000B0000000D000064080000D20A0000C20C000000090000000B0000000D000052090000DB0A0000C60C0000000A0000000B0000000D00003D0A0000E40A0000CA0C0000000B0000000B0000000D0000250B0000ED0A0000CD0C0000000C0000000B0000000D00000B0C0000F50A0000D10C0000000D0000000B0000000D0000EE0C0000FD0A0000D40C0000000E0000000B0000000D0000CF0D0000050B0000D70C0000000F0000000B0000000D0000AD0E00000C0B0000D90C000000100000000B0000000D0000880F0000130B0000DC0C000000000000000C0000000D0000A2000000620B0000A40C000000010000000C0000000D0000A50100006F0B0000A90C000000020000000C0000000D0000A50200007B0B0000AF0C000000030000000C0000000D0000A2030000870B0000B40C000000040000000C0000000D00009D040000930B0000B90C000000050000000C0000000D0000950500009F0B0000BE0C000000060000000C0000000D00008B060000AA0B0000C30C000000070000000C0000000D00007E070000B50B0000C70C000000080000000C0000000D00006F080000BF0B0000CB0C000000090000000C0000000D00005D090000C90B0000CF0C0000000A0000000C0000000D0000480A0000D30B0000D30C0000000B0000000C0000000D0000310B0000DC0B0000D60C0000000C0000000C0000000D0000170C0000E50B0000DA0C0000000D0000000C0000000D0000FB0C0000EE0B0000DD0C0000000E0000000C0000000D0000DC0D0000F60B0000E00C0000000F0000000C0000000D0000BA0E0000FE0B0000E20C000000100000000C0000000D0000960F0000050C0000E50C000000000000000D0000000D0000AA000000480C0000AD0C000000010000000D0000000D0000AD010000560C0000B30C000000020000000D0000000D0000AD020000630C0000B80C000000030000000D0000000D0000AB030000700C0000BE0C000000040000000D0000000D0000A70400007C0C0000C30C000000050000000D0000000D00009F050000880C0000C70C000000060000000D0000000D000095060000940C0000CC0C000000070000000D0000000D000089070000A00C0000D00C000000080000000D0000000D00007A080000AB0C0000D40C000000090000000D0000000D000068090000B50C0000D80C0000000A0000000D0000000D0000540A0000C00C0000DC0C0000000B0000000D0000000D00003D0B0000CA0C0000DF0C0000000C0000000D0000000D0000240C0000D30C0000E30C0000000D0000000D0000000D0000080D0000DD0C0000E60C0000000E0000000D0000000D0000E90D0000E60C0000E80C0000000F0000000D0000000D0000C80E0000EE0C0000EB0C000000100000000D0000000D0000A50F0000F70C0000ED0C000000000000000E0000000D0000B20000002D0D0000B70C000000010000000E0000000D0000B50100003B0D0000BD0C000000020000000E0000000D0000B6020000490D0000C20C000000030000000E0000000D0000B5030000570D0000C70C000000040000000E0000000D0000B0040000640D0000CC0C000000050000000E0000000D0000AA050000710D0000D10C000000060000000E0000000D0000A00600007D0D0000D50C000000070000000E0000000D000094070000890D0000DA0C000000080000000E0000000D000085080000950D0000DE0C000000090000000E0000000D000074090000A10D0000E10C0000000A0000000E0000000D0000600A0000AC0D0000E50C0000000B0000000E0000000D00004A0B0000B60D0000E80C0000000C0000000E0000000D0000310C0000C10D0000EB0C0000000D0000000E0000000D0000150D0000CB0D0000EE0C0000000E0000000E0000000D0000F70D0000D40D0000F10C0000000F0000000E0000000D0000D70E0000DE0D0000F40C000000100000000E0000000D0000B30F0000E70D0000F60C000000000000000F0000000D0000BB000000110E0000C10C000000010000000F0000000D0000BF010000200E0000C60C000000020000000F0000000D0000C00200002E0E0000CC0C000000030000000F0000000D0000BF0300003C0E0000D10C000000040000000F0000000D0000BB0400004A0E0000D50C000000050000000F0000000D0000B4050000580E0000DA0C000000060000000F0000000D0000AB060000650E0000DE0C000000070000000F0000000D0000A0070000720E0000E30C000000080000000F0000000D0000910800007E0E0000E70C000000090000000F0000000D0000810900008B0E0000EA0C0000000A0000000F0000000D00006D0A0000960E0000EE0C0000000B0000000F0000000D0000570B0000A20E0000F10C0000000C0000000F0000000D00003F0C0000AD0E0000F40C0000000D0000000F0000000D0000230D0000B70E0000F70C0000000E0000000F0000000D0000060E0000C20E0000FA0C0000000F0000000F0000000D0000E50E0000CC0E0000FC0C000000100000000F0000000D0000C20F0000D50E0000FE0C00000000000000100000000D0000C4000000F30E0000CA0C00000001000000100000000D0000C8010000030F0000D00C00000002000000100000000D0000CA020000120F0000D50C00000003000000100000000D0000C9030000210F0000DA0C00000004000000100000000D0000C5040000300F0000DF0C00000005000000100000000D0000BF0500003E0F0000E30C00000006000000100000000D0000B70600004C0F0000E80C00000007000000100000000D0000AC070000590F0000EC0C00000008000000100000000D00009E080000660F0000F00C00000009000000100000000D00008D090000730F0000F30C0000000A000000100000000D00007A0A0000800F0000F70C0000000B000000100000000D0000650B00008C0F0000FA0C0000000C000000100000000D00004D0C0000980F0000FD0C0000000D000000100000000D0000320D0000A30F0000000D0000000E000000100000000D0000140E0000AE0F0000020D0000000F000000100000000D0000F40E0000B90F0000050D00000010000000100000000D0000D20F0000C30F0000070D00000000000000000000000E00006E0000003B000000110D00000001000000000000000E00006C01000040000000180D00000002000000000000000E000068020000440000001F0D00000003000000000000000E00006103000048000000250D00000004000000000000000E0000580400004B0000002C0D00000005000000000000000E00004C0500004E000000320D00000006000000000000000E00003D06000051000000380D00000007000000000000000E00002C070000530000003D0D00000008000000000000000E00001808000055000000430D00000009000000000000000E00000109000057000000480D0000000A000000000000000E0000E8090000580000004D0D0000000B000000000000000E0000CD0A000059000000520D0000000C000000000000000E0000AF0B00005A000000560D0000000D000000000000000E00008E0C00005A0000005B0D0000000E000000000000000E00006B0D00005A0000005F0D0000000F000000000000000E0000450E000059000000620D00000010000000000000000E00001C0F000058000000660D00000000000000010000000E000070000000310100001D0D00000001000000010000000E00006F01000036010000230D00000002000000010000000E00006B0200003B0100002A0D00000003000000010000000E0000650300003F010000310D00000004000000010000000E00005C04000043010000370D00000005000000010000000E000050050000470100003D0D00000006000000010000000E0000420600004B010000430D00000007000000010000000E0000310700004E010000480D00000008000000010000000E00001D080000500100004D0D00000009000000010000000E00000709000053010000530D0000000A000000010000000E0000EF09000055010000570D0000000B000000010000000E0000D40A0000560100005C0D0000000C000000010000000E0000B60B000058010000610D0000000D000000010000000E0000950C000059010000650D0000000E000000010000000E0000730D000059010000690D0000000F000000010000000E00004D0E0000590100006D0D00000010000000010000000E0000250F000059010000700D00000000000000020000000E00007300000025020000280D00000001000000020000000E0000720100002B0200002F0D00000002000000020000000E00006F02000031020000350D00000003000000020000000E000069030000360200003C0D00000004000000020000000E0000600400003B020000420D00000005000000020000000E0000550500003F020000480D00000006000000020000000E000047060000430200004D0D00000007000000020000000E00003607000047020000530D00000008000000020000000E0000230800004A020000580D00000009000000020000000E00000E0900004D0200005D0D0000000A000000020000000E0000F609000050020000620D0000000B000000020000000E0000DB0A000052020000660D0000000C000000020000000E0000BD0B0000540200006B0D0000000D000000020000000E00009D0C0000560200006F0D0000000E000000020000000E00007B0D000057020000730D0000000F000000020000000E0000560E000058020000770D00000010000000020000000E00002E0F0000590200007A0D00000000000000030000000E00007600000018030000330D00000001000000030000000E0000760100001F0300003A0D00000002000000030000000E00007302000025030000400D00000003000000030000000E00006D0300002B030000460D00000004000000030000000E000065040000310300004D0D00000005000000030000000E00005A05000036030000520D00000006000000030000000E00004C0600003B030000580D00000007000000030000000E00003C0700003F0300005D0D00000008000000030000000E00002A08000043030000630D00000009000000030000000E00001509000047030000680D0000000A000000030000000E0000FD0900004A0300006C0D0000000B000000030000000E0000E20A00004D030000710D0000000C000000030000000E0000C50B000050030000750D0000000D000000030000000E0000A60C000052030000790D0000000E000000030000000E0000840D0000540300007D0D0000000F000000030000000E00005F0E000056030000810D00000010000000030000000E0000380F000057030000840D00000000000000040000000E00007A0000000A0400003E0D00000001000000040000000E00007A01000012040000450D00000002000000040000000E000077020000190400004B0D00000003000000040000000E0000720300001F040000510D00000004000000040000000E00006A04000025040000570D00000005000000040000000E0000600500002B0400005D0D00000006000000040000000E00005306000031040000630D00000007000000040000000E00004307000036040000680D00000008000000040000000E0000310800003B0400006D0D00000009000000040000000E00001C0900003F040000720D0000000A000000040000000E0000050A000043040000770D0000000B000000040000000E0000EB0A0000470400007B0D0000000C000000040000000E0000CE0B00004A0400007F0D0000000D000000040000000E0000AF0C00004D040000830D0000000E000000040000000E00008D0D000050040000870D0000000F000000040000000E0000690E0000520400008B0D00000010000000040000000E0000420F0000540400008E0D00000000000000050000000E00007E000000FB040000490D00000001000000050000000E00007E01000003050000500D00000002000000050000000E00007C0200000B050000560D00000003000000050000000E000077030000120500005C0D00000004000000050000000E00007004000019050000620D00000005000000050000000E00006605000020050000680D00000006000000050000000E000059060000260500006D0D00000007000000050000000E00004A0700002C050000720D00000008000000050000000E00003808000031050000770D00000009000000050000000E000024090000360500007C0D0000000A000000050000000E00000D0A00003B050000810D0000000B000000050000000E0000F30A00003F050000850D0000000C000000050000000E0000D70B000043050000890D0000000D000000050000000E0000B80C0000470500008D0D0000000E000000050000000E0000970D00004B050000910D0000000F000000050000000E0000730E00004E050000940D00000010000000050000000E00004C0F000050050000980D00000000000000060000000E000083000000EB050000540D00000001000000060000000E000083010000F30500005A0D00000002000000060000000E000081020000FC050000610D00000003000000060000000E00007D03000004060000670D00000004000000060000000E0000760400000B0600006D0D00000005000000060000000E00006C05000013060000720D00000006000000060000000E00006006000019060000780D00000007000000060000000E000051070000200600007D0D00000008000000060000000E00004008000026060000820D00000009000000060000000E00002C0900002C060000860D0000000A000000060000000E0000150A0000320600008B0D0000000B000000060000000E0000FC0A0000370600008F0D0000000C000000060000000E0000E00B00003B060000930D0000000D000000060000000E0000C20C000040060000970D0000000E000000060000000E0000A10D0000440600009B0D0000000F000000060000000E00007E0E0000480600009E0D00000010000000060000000E0000580F00004B060000A10D00000000000000070000000E000088000000D90600005F0D00000001000000070000000E000089010000E2060000650D00000002000000070000000E000087020000EB0600006B0D00000003000000070000000E000083030000F4060000710D00000004000000070000000E00007D040000FC060000770D00000005000000070000000E000073050000040700007D0D00000006000000070000000E0000680600000C070000820D00000007000000070000000E00005907000013070000870D00000008000000070000000E0000480800001A0700008C0D00000009000000070000000E00003509000021070000910D0000000A000000070000000E00001E0A000027070000950D0000000B000000070000000E0000060B00002D070000990D0000000C000000070000000E0000EA0B0000320700009D0D0000000D000000070000000E0000CC0C000037070000A10D0000000E000000070000000E0000AC0D00003C070000A40D0000000F000000070000000E0000890E000040070000A80D00000010000000070000000E0000630F000044070000AB0D00000000000000080000000E00008D000000C60700006A0D00000001000000080000000E00008F010000D0070000700D00000002000000080000000E00008E020000DA070000760D00000003000000080000000E00008A030000E30700007C0D00000004000000080000000E000084040000EC070000820D00000005000000080000000E00007B050000F5070000870D00000006000000080000000E00006F060000FD0700008C0D00000007000000080000000E00006107000005080000910D00000008000000080000000E0000510800000D080000960D00000009000000080000000E00003E090000140800009B0D0000000A000000080000000E0000280A00001B0800009F0D0000000B000000080000000E0000100B000021080000A30D0000000C000000080000000E0000F50B000028080000A70D0000000D000000080000000E0000D70C00002D080000AB0D0000000E000000080000000E0000B70D000033080000AE0D0000000F000000080000000E0000940E000038080000B10D00000010000000080000000E00006F0F00003D080000B40D00000000000000090000000E000093000000B2080000740D00000001000000090000000E000095010000BD0800007A0D00000002000000090000000E000094020000C7080000810D00000003000000090000000E000091030000D1080000860D00000004000000090000000E00008B040000DB0800008C0D00000005000000090000000E000083050000E4080000910D00000006000000090000000E000078060000ED080000960D00000007000000090000000E00006A070000F60800009B0D00000008000000090000000E00005A080000FE080000A00D00000009000000090000000E00004709000006090000A50D0000000A000000090000000E0000320A00000E090000A90D0000000B000000090000000E00001A0B000015090000AD0D0000000C000000090000000E0000FF0B00001C090000B10D0000000D000000090000000E0000E20C000022090000B40D0000000E000000090000000E0000C30D000029090000B80D0000000F000000090000000E0000A00E00002E090000BB0D00000010000000090000000E00007B0F000034090000BE0D000000000000000A0000000E00009A0000009D0900007F0D000000010000000A0000000E00009C010000A8090000850D000000020000000A0000000E00009C020000B30900008B0D000000030000000A0000000E000099030000BE090000910D000000040000000A0000000E000093040000C8090000960D000000050000000A0000000E00008B050000D30900009B0D000000060000000A0000000E000081060000DC090000A10D000000070000000A0000000E000073070000E6090000A50D000000080000000A0000000E000064080000EF090000AA0D000000090000000A0000000E000051090000F7090000AE0D0000000A0000000A0000000E00003C0A0000FF090000B30D0000000B0000000A0000000E0000250B0000070A0000B70D0000000C0000000A0000000E00000B0C00000F0A0000BA0D0000000D0000000A0000000E0000EE0C0000160A0000BE0D0000000E0000000A0000000E0000CF0D00001D0A0000C10D0000000F0000000A0000000E0000AD0E0000240A0000C40D000000100000000A0000000E0000880F00002A0A0000C70D000000000000000B0000000E0000A0000000860A0000890D000000010000000B0000000E0000A3010000920A00008F0D000000020000000B0000000E0000A30200009E0A0000950D000000030000000B0000000E0000A1030000AA0A00009B0D000000040000000B0000000E00009C040000B50A0000A00D000000050000000B0000000E000094050000BF0A0000A60D000000060000000B0000000E00008A060000CA0A0000AB0D000000070000000B0000000E00007D070000D40A0000AF0D000000080000000B0000000E00006E080000DE0A0000B40D000000090000000B0000000E00005C090000E70A0000B80D0000000A0000000B0000000E0000470A0000F00A0000BC0D0000000B0000000B0000000E0000300B0000F90A0000C00D0000000C0000000B0000000E0000160C0000010B0000C40D0000000D0000000B0000000E0000FA0C0000090B0000C70D0000000E0000000B0000000E0000DB0D0000100B0000CB0D0000000F0000000B0000000E0000BA0E0000170B0000CE0D000000100000000B0000000E0000960F00001E0B0000D00D000000000000000C0000000E0000A80000006E0B0000940D000000010000000C0000000E0000AB0100007B0B00009A0D000000020000000C0000000E0000AB020000880B0000A00D000000030000000C0000000E0000A9030000940B0000A50D000000040000000C0000000E0000A5040000A00B0000AA0D000000050000000C0000000E00009E050000AB0B0000B00D000000060000000C0000000E000094060000B60B0000B50D000000070000000C0000000E000087070000C10B0000B90D000000080000000C0000000E000078080000CB0B0000BE0D000000090000000C0000000E000067090000D50B0000C20D0000000A0000000C0000000E0000530A0000DF0B0000C60D0000000B0000000C0000000E00003C0B0000E80B0000CA0D0000000C0000000C0000000E0000230C0000F10B0000CD0D0000000D0000000C0000000E0000070D0000FA0B0000D10D0000000E0000000C0000000E0000E80D0000020C0000D40D0000000F0000000C0000000E0000C70E00000A0C0000D70D000000100000000C0000000E0000A30F0000120C0000DA0D000000000000000D0000000E0000B0000000550C00009E0D000000010000000D0000000E0000B3010000630C0000A40D000000020000000D0000000E0000B4020000700C0000AA0D000000030000000D0000000E0000B20300007D0C0000AF0D000000040000000D0000000E0000AE0400008A0C0000B50D000000050000000D0000000E0000A7050000960C0000BA0D000000060000000D0000000E00009E060000A20C0000BE0D000000070000000D0000000E000092070000AD0C0000C30D000000080000000D0000000E000083080000B80C0000C70D000000090000000D0000000E000072090000C30C0000CC0D0000000A0000000D0000000E00005E0A0000CD0C0000D00D0000000B0000000D0000000E0000480B0000D70C0000D30D0000000C0000000D0000000E00002F0C0000E10C0000D70D0000000D0000000D0000000E0000140D0000EA0C0000DA0D0000000E0000000D0000000E0000F60D0000F30C0000DD0D0000000F0000000D0000000E0000D50E0000FC0C0000E00D000000100000000D0000000E0000B20F0000040D0000E30D000000000000000E0000000E0000B80000003B0D0000A80D000000010000000E0000000E0000BC010000490D0000AE0D000000020000000E0000000E0000BD020000570D0000B40D000000030000000E0000000E0000BC030000650D0000B90D000000040000000E0000000E0000B8040000720D0000BE0D000000050000000E0000000E0000B20500007F0D0000C30D000000060000000E0000000E0000A90600008B0D0000C80D000000070000000E0000000E00009D070000980D0000CD0D000000080000000E0000000E00008F080000A30D0000D10D000000090000000E0000000E00007E090000AF0D0000D50D0000000A0000000E0000000E00006B0A0000BA0D0000D90D0000000B0000000E0000000E0000550B0000C50D0000DD0D0000000C0000000E0000000E00003C0C0000CF0D0000E00D0000000D0000000E0000000E0000210D0000D90D0000E30D0000000E0000000E0000000E0000030E0000E30D0000E60D0000000F0000000E0000000E0000E30E0000EC0D0000E90D000000100000000E0000000E0000C00F0000F50D0000EC0D000000000000000F0000000E0000C0000000200E0000B30D000000010000000F0000000E0000C50100002F0E0000B80D000000020000000F0000000E0000C70200003D0E0000BE0D000000030000000F0000000E0000C60300004C0E0000C30D000000040000000F0000000E0000C20400005A0E0000C80D000000050000000F0000000E0000BC050000670E0000CD0D000000060000000F0000000E0000B4060000740E0000D20D000000070000000F0000000E0000A8070000810E0000D60D000000080000000F0000000E00009B0800008E0E0000DB0D000000090000000F0000000E00008A0900009A0E0000DF0D0000000A0000000F0000000E0000770A0000A60E0000E20D0000000B0000000F0000000E0000620B0000B10E0000E60D0000000C0000000F0000000E00004A0C0000BC0E0000E90D0000000D0000000F0000000E00002F0D0000C70E0000EC0D0000000E0000000F0000000E0000120E0000D10E0000EF0D0000000F0000000F0000000E0000F20E0000DB0E0000F20D000000100000000F0000000E0000CF0F0000E50E0000F50D00000000000000100000000E0000CA000000030F0000BD0D00000001000000100000000E0000CE010000130F0000C20D00000002000000100000000E0000D1020000220F0000C80D00000003000000100000000E0000D0030000310F0000CD0D00000004000000100000000E0000CD040000400F0000D20D00000005000000100000000E0000C70500004E0F0000D70D00000006000000100000000E0000BF0600005C0F0000DC0D00000007000000100000000E0000B4070000690F0000E00D00000008000000100000000E0000A7080000770F0000E40D00000009000000100000000E000097090000830F0000E80D0000000A000000100000000E0000850A0000900F0000EC0D0000000B000000100000000E00006F0B00009C0F0000EF0D0000000C000000100000000E0000580C0000A80F0000F30D0000000D000000100000000E00003D0D0000B30F0000F60D0000000E000000100000000E0000210E0000BE0F0000F80D0000000F000000100000000E0000010F0000C90F0000FB0D00000010000000100000000E0000DF0F0000D30F0000FD0D00000000000000000000000F0000730000003D000000FA0D00000001000000000000000F00007201000041000000020E00000002000000000000000F00006E02000045000000090E00000003000000000000000F00006803000049000000100E00000004000000000000000F00005F0400004C000000160E00000005000000000000000F0000530500004F0000001D0E00000006000000000000000F00004506000052000000230E00000007000000000000000F00003407000054000000290E00000008000000000000000F000021080000560000002F0E00000009000000000000000F00000B09000058000000340E0000000A000000000000000F0000F2090000590000003A0E0000000B000000000000000F0000D70A00005A0000003F0E0000000C000000000000000F0000BA0B00005A000000430E0000000D000000000000000F0000990C00005B000000480E0000000E000000000000000F0000760D00005A0000004D0E0000000F000000000000000F0000510E00005A000000510E00000010000000000000000F0000290F000059000000550E00000000000000010000000F00007500000033010000060E00000001000000010000000F000075010000380100000D0E00000002000000010000000F0000710200003D010000140E00000003000000010000000F00006B030000410100001B0E00000004000000010000000F00006304000046010000220E00000005000000010000000F00005705000049010000280E00000006000000010000000F00004A0600004D0100002E0E00000007000000010000000F00003907000050010000340E00000008000000010000000F000026080000520100003A0E00000009000000010000000F000011090000550100003F0E0000000A000000010000000F0000F909000057010000450E0000000B000000010000000F0000DE0A0000580100004A0E0000000C000000010000000F0000C10B0000590100004E0E0000000D000000010000000F0000A10C00005A010000530E0000000E000000010000000F00007E0D00005B010000570E0000000F000000010000000F0000590E00005B0100005B0E00000010000000010000000F0000320F00005B0100005F0E00000000000000020000000F00007800000028020000120E00000001000000020000000F0000780100002E020000190E00000002000000020000000F00007502000034020000200E00000003000000020000000F00006F03000039020000270E00000004000000020000000F0000670400003E0200002D0E00000005000000020000000F00005C05000042020000330E00000006000000020000000F00004F06000046020000390E00000007000000020000000F00003F0700004A0200003F0E00000008000000020000000F00002C0800004D020000450E00000009000000020000000F000017090000500200004A0E0000000A000000020000000F0000000A0000530200004F0E0000000B000000020000000F0000E50A000055020000540E0000000C000000020000000F0000C80B000057020000590E0000000D000000020000000F0000A90C0000590200005E0E0000000E000000020000000F0000870D00005A020000620E0000000F000000020000000F0000620E00005B020000660E00000010000000020000000F00003B0F00005B0200006A0E00000000000000030000000F00007B0000001C0300001E0E00000001000000030000000F00007B01000023030000250E00000002000000030000000F000079020000290300002C0E00000003000000030000000F0000740300002F030000320E00000004000000030000000F00006C04000035030000390E00000005000000030000000F0000610500003A0300003F0E00000006000000030000000F0000540600003E030000450E00000007000000030000000F000045070000430300004A0E00000008000000030000000F00003308000047030000500E00000009000000030000000F00001E0900004B030000550E0000000A000000030000000F0000070A00004E0300005A0E0000000B000000030000000F0000ED0A0000510300005F0E0000000C000000030000000F0000D00B000054030000640E0000000D000000030000000F0000B10C000056030000680E0000000E000000030000000F0000900D0000580300006C0E0000000F000000030000000F00006B0E000059030000700E00000010000000030000000F0000450F00005B030000740E00000000000000040000000F00007F0000000F040000290E00000001000000040000000F00008001000017040000300E00000002000000040000000F00007D0200001D040000370E00000003000000040000000F000079030000240400003D0E00000004000000040000000F0000710400002A040000440E00000005000000040000000F000067050000300400004A0E00000006000000040000000F00005B06000035040000500E00000007000000040000000F00004B0700003B040000550E00000008000000040000000F00003A0800003F0400005B0E00000009000000040000000F00002509000044040000600E0000000A000000040000000F00000E0A000048040000650E0000000B000000040000000F0000F50A00004C0400006A0E0000000C000000040000000F0000D90B00004F0400006E0E0000000D000000040000000F0000BA0C000052040000730E0000000E000000040000000F0000990D000055040000770E0000000F000000040000000F0000750E0000570400007B0E00000010000000040000000F00004F0F0000590400007E0E00000000000000050000000F00008300000001050000350E00000001000000050000000F000084010000090500003C0E00000002000000050000000F00008202000011050000420E00000003000000050000000F00007E03000018050000490E00000004000000050000000F0000770400001F0500004F0E00000005000000050000000F00006D05000025050000550E00000006000000050000000F0000610600002B0500005B0E00000007000000050000000F00005207000031050000600E00000008000000050000000F00004108000037050000660E00000009000000050000000F00002D0900003C0500006B0E0000000A000000050000000F0000170A000041050000700E0000000B000000050000000F0000FE0A000045050000740E0000000C000000050000000F0000E20B000049050000790E0000000D000000050000000F0000C40C00004D0500007D0E0000000E000000050000000F0000A30D000050050000810E0000000F000000050000000F00007F0E000053050000850E00000010000000050000000F0000590F000056050000890E00000000000000060000000F000088000000F1050000400E00000001000000060000000F000089010000FA050000470E00000002000000060000000F000088020000020600004E0E00000003000000060000000F0000840300000A060000540E00000004000000060000000F00007D040000120600005A0E00000005000000060000000F00007405000019060000600E00000006000000060000000F00006806000020060000660E00000007000000060000000F00005A070000270600006B0E00000008000000060000000F0000490800002D060000700E00000009000000060000000F00003509000033060000760E0000000A000000060000000F00001F0A0000380600007A0E0000000B000000060000000F0000070B00003D0600007F0E0000000C000000060000000F0000EB0B000042060000830E0000000D000000060000000F0000CD0C000046060000880E0000000E000000060000000F0000AD0D00004A0600008B0E0000000F000000060000000F00008A0E00004E0600008F0E00000010000000060000000F0000640F000051060000930E00000000000000070000000F00008D000000E10600004C0E00000001000000070000000F00008F010000EA060000520E00000002000000070000000F00008E020000F3060000590E00000003000000070000000F00008A030000FC0600005F0E00000004000000070000000F00008404000004070000650E00000005000000070000000F00007B0500000C0700006B0E00000006000000070000000F00007006000013070000710E00000007000000070000000F0000620700001B070000760E00000008000000070000000F000051080000220700007B0E00000009000000070000000F00003E09000028070000800E0000000A000000070000000F0000280A00002E070000850E0000000B000000070000000F0000100B000034070000890E0000000C000000070000000F0000F50B0000390700008E0E0000000D000000070000000F0000D80C00003F070000920E0000000E000000070000000F0000B80D000043070000960E0000000F000000070000000F0000950E000048070000990E00000010000000070000000F0000700F00004C0700009D0E00000000000000080000000F000092000000CF070000570E00000001000000080000000F000094010000D90700005D0E00000002000000080000000F000094020000E2070000640E00000003000000080000000F000091030000EC0700006A0E00000004000000080000000F00008B040000F5070000700E00000005000000080000000F000083050000FD070000760E00000006000000080000000F000078060000060800007B0E00000007000000080000000F00006A0700000E080000810E00000008000000080000000F00005A08000015080000860E00000009000000080000000F0000470900001C0800008B0E0000000A000000080000000F0000320A0000230800008F0E0000000B000000080000000F00001A0B00002A080000940E0000000C000000080000000F0000FF0B000030080000980E0000000D000000080000000F0000E20C0000360800009C0E0000000E000000080000000F0000C30D00003B080000A00E0000000F000000080000000F0000A10E000040080000A30E00000010000000080000000F00007C0F000045080000A70E00000000000000090000000F000098000000BB080000620E00000001000000090000000F00009B010000C6080000690E00000002000000090000000F00009B020000D10800006F0E00000003000000090000000F000098030000DB080000750E00000004000000090000000F000092040000E40800007B0E00000005000000090000000F00008B050000EE080000810E00000006000000090000000F000080060000F7080000860E00000007000000090000000F000073070000FF0800008B0E00000008000000090000000F00006308000008090000900E00000009000000090000000F0000510900000F090000950E0000000A000000090000000F00003C0A0000170900009A0E0000000B000000090000000F0000240B00001E0900009E0E0000000C000000090000000F00000A0C000025090000A20E0000000D000000090000000F0000EE0C00002C090000A60E0000000E000000090000000F0000CE0D000032090000AA0E0000000F000000090000000F0000AD0E000038090000AD0E00000010000000090000000F0000880F00003D090000B10E000000000000000A0000000F00009F000000A70900006D0E000000010000000A0000000F0000A2010000B2090000740E000000020000000A0000000F0000A2020000BE0900007A0E000000030000000A0000000F00009F030000C8090000800E000000040000000A0000000F00009B040000D3090000860E000000050000000A0000000F000093050000DD0900008B0E000000060000000A0000000F000089060000E6090000910E000000070000000A0000000F00007C070000F0090000960E000000080000000A0000000F00006D080000F90900009B0E000000090000000A0000000F00005B090000010A00009F0E0000000A0000000A0000000F0000460A00000A0A0000A40E0000000B0000000A0000000F00002F0B0000120A0000A80E0000000C0000000A0000000F0000160C0000190A0000AC0E0000000D0000000A0000000F0000F90C0000200A0000B00E0000000E0000000A0000000F0000DA0D0000270A0000B40E0000000F0000000A0000000F0000B90E00002E0A0000B70E000000100000000A0000000F0000950F0000340A0000BA0E000000000000000B0000000F0000A6000000910A0000780E000000010000000B0000000F0000A90100009E0A00007F0E000000020000000B0000000F0000AA020000A90A0000850E000000030000000B0000000F0000A8030000B50A00008B0E000000040000000B0000000F0000A3040000C00A0000900E000000050000000B0000000F00009C050000CB0A0000960E000000060000000B0000000F000092060000D50A00009B0E000000070000000B0000000F000086070000DF0A0000A00E000000080000000B0000000F000077080000E90A0000A50E000000090000000B0000000F000065090000F20A0000AA0E0000000A0000000B0000000F0000510A0000FB0A0000AE0E0000000B0000000B0000000F00003A0B0000040B0000B20E0000000C0000000B0000000F0000210C00000C0B0000B60E0000000D0000000B0000000F0000050D0000140B0000BA0E0000000E0000000B0000000F0000E70D00001B0B0000BE0E0000000F0000000B0000000F0000C60E0000230B0000C10E000000100000000B0000000F0000A20F0000290B0000C40E000000000000000C0000000F0000AD0000007A0B0000830E000000010000000C0000000F0000B1010000870B0000890E000000020000000C0000000F0000B2020000940B0000900E000000030000000C0000000F0000B0030000A00B0000950E000000040000000C0000000F0000AC040000AC0B00009B0E000000050000000C0000000F0000A5050000B70B0000A00E000000060000000C0000000F00009C060000C20B0000A60E000000070000000C0000000F000090070000CD0B0000AB0E000000080000000C0000000F000081080000D70B0000AF0E000000090000000C0000000F000070090000E10B0000B40E0000000A0000000C0000000F00005D0A0000EB0B0000B80E0000000B0000000C0000000F0000460B0000F40B0000BC0E0000000C0000000C0000000F00002D0C0000FD0B0000C00E0000000D0000000C0000000F0000120D0000060C0000C40E0000000E0000000C0000000F0000F40D00000E0C0000C70E0000000F0000000C0000000F0000D30E0000160C0000CB0E000000100000000C0000000F0000B00F00001E0C0000CE0E000000000000000D0000000F0000B5000000620C00008E0E000000010000000D0000000F0000B9010000700C0000940E000000020000000D0000000F0000BA0200007D0C00009A0E000000030000000D0000000F0000B90300008A0C0000A00E000000040000000D0000000F0000B5040000970C0000A60E000000050000000D0000000F0000AF050000A30C0000AB0E000000060000000D0000000F0000A6060000AE0C0000B00E000000070000000D0000000F00009A070000BA0C0000B50E000000080000000D0000000F00008C080000C50C0000BA0E000000090000000D0000000F00007C090000D00C0000BE0E0000000A0000000D0000000F0000680A0000DA0C0000C20E0000000B0000000D0000000F0000520B0000E40C0000C60E0000000C0000000D0000000F00003A0C0000EE0C0000CA0E0000000D0000000D0000000F00001F0D0000F70C0000CE0E0000000E0000000D0000000F0000010E0000000D0000D10E0000000F0000000D0000000F0000E10E0000090D0000D40E000000100000000D0000000F0000BE0F0000110D0000D70E000000000000000E0000000F0000BD000000490D0000990E000000010000000E0000000F0000C2010000570D00009F0E000000020000000E0000000F0000C3020000650D0000A50E000000030000000E0000000F0000C3030000730D0000AB0E000000040000000E0000000F0000BF040000800D0000B00E000000050000000E0000000F0000B90500008D0D0000B50E000000060000000E0000000F0000B1060000990D0000BA0E000000070000000E0000000F0000A6070000A60D0000BF0E000000080000000E0000000F000098080000B10D0000C40E000000090000000E0000000F000088090000BD0D0000C80E0000000A0000000E0000000F0000750A0000C80D0000CC0E0000000B0000000E0000000F00005F0B0000D30D0000D00E0000000C0000000E0000000F0000470C0000DD0D0000D40E0000000D0000000E0000000F00002C0D0000E70D0000D70E0000000E0000000E0000000F00000F0E0000F10D0000DB0E0000000F0000000E0000000F0000EF0E0000FA0D0000DE0E000000100000000E0000000F0000CD0F0000030E0000E10E000000000000000F0000000F0000C60000002F0E0000A40E000000010000000F0000000F0000CB0100003E0E0000AA0E000000020000000F0000000F0000CD0200004C0E0000AF0E000000030000000F0000000F0000CD0300005A0E0000B50E000000040000000F0000000F0000CA040000680E0000BA0E000000050000000F0000000F0000C4050000760E0000C00E000000060000000F0000000F0000BC060000830E0000C50E000000070000000F0000000F0000B1070000900E0000C90E000000080000000F0000000F0000A40800009C0E0000CE0E000000090000000F0000000F000094090000A90E0000D20E0000000A0000000F0000000F0000810A0000B40E0000D60E0000000B0000000F0000000F00006C0B0000C00E0000DA0E0000000C0000000F0000000F0000550C0000CB0E0000DE0E0000000D0000000F0000000F00003A0D0000D60E0000E10E0000000E0000000F0000000F00001D0E0000E00E0000E40E0000000F0000000F0000000F0000FE0E0000EA0E0000E70E000000100000000F0000000F0000DC0F0000F40E0000EA0E00000000000000100000000F0000CF000000130F0000AE0E00000001000000100000000F0000D4010000230F0000B40E00000002000000100000000F0000D7020000320F0000BA0E00000003000000100000000F0000D7030000410F0000BF0E00000004000000100000000F0000D40400004F0F0000C50E00000005000000100000000F0000CF0500005E0F0000CA0E00000006000000100000000F0000C70600006C0F0000CF0E00000007000000100000000F0000BD070000790F0000D30E00000008000000100000000F0000B0080000860F0000D80E00000009000000100000000F0000A1090000930F0000DC0E0000000A000000100000000F00008F0A0000A00F0000E00E0000000B000000100000000F00007A0B0000AC0F0000E40E0000000C000000100000000F0000630C0000B80F0000E70E0000000D000000100000000F0000490D0000C30F0000EB0E0000000E000000100000000F00002C0E0000CE0F0000EE0E0000000F000000100000000F00000D0F0000D90F0000F10E00000010000000100000000F0000EC0F0000E30F0000F30E0000000000000000000000100000780000003D000000E30E00000001000000000000001000007701000042000000EA0E00000002000000000000001000007402000046000000F20E00000003000000000000001000006E0300004A000000F90E0000000400000000000000100000650400004D000000000F00000005000000000000001000005A05000050000000070F00000006000000000000001000004D060000530000000D0F00000007000000000000001000003C07000055000000140F000000080000000000000010000029080000570000001A0F00000009000000000000001000001409000058000000200F0000000A00000000000000100000FC09000059000000250F0000000B00000000000000100000E10A00005A0000002B0F0000000C00000000000000100000C40B00005B000000300F0000000D00000000000000100000A40C00005B000000350F0000000E00000000000000100000820D00005B0000003A0F0000000F000000000000001000005D0E00005A0000003E0F0000001000000000000000100000350F000059000000430F00000000000000010000001000007A00000035010000EF0E00000001000000010000001000007A0100003A010000F70E0000000200000001000000100000770200003F010000FE0E00000003000000010000001000007103000043010000050F000000040000000100000010000069040000470100000C0F00000005000000010000001000005F0500004B010000130F0000000600000001000000100000510600004E010000190F000000070000000100000010000041070000510100001F0F00000008000000010000001000002F08000054010000250F00000009000000010000001000001A090000560100002B0F0000000A00000001000000100000020A000058010000310F0000000B00000001000000100000E80A00005A010000360F0000000C00000001000000100000CB0B00005B0100003B0F0000000D00000001000000100000AC0C00005C010000400F0000000E000000010000001000008A0D00005C010000450F0000000F00000001000000100000650E00005C010000490F00000010000000010000001000003E0F00005C0100004E0F00000000000000020000001000007D0000002B020000FB0E00000001000000020000001000007D01000031020000030F00000002000000020000001000007B020000360200000A0F0000000300000002000000100000750300003B020000110F00000004000000020000001000006E04000040020000180F000000050000000200000010000063050000450200001F0F00000006000000020000001000005706000049020000250F0000000700000002000000100000470700004C0200002B0F00000008000000020000001000003508000050020000310F00000009000000020000001000002009000053020000370F0000000A00000002000000100000090A0000550200003C0F0000000B00000002000000100000EF0A000057020000410F0000000C00000002000000100000D30B000059020000470F0000000D00000002000000100000B40C00005B0200004B0F0000000E00000002000000100000920D00005C020000500F0000000F000000020000001000006E0E00005D020000540F0000001000000002000000100000470F00005D020000590F00000000000000030000001000008000000020030000080F000000010000000300000010000081010000270300000F0F00000002000000030000001000007F0200002D030000160F00000003000000030000001000007A030000330300001D0F00000004000000030000001000007304000038030000240F0000000500000003000000100000690500003D0300002A0F00000006000000030000001000005C06000042030000310F00000007000000030000001000004D07000046030000370F00000008000000030000001000003B0800004A0300003C0F0000000900000003000000100000270900004E030000420F0000000A00000003000000100000100A000051030000480F0000000B00000003000000100000F70A0000540300004D0F0000000C00000003000000100000DB0B000057030000520F0000000D00000003000000100000BC0C000059030000560F0000000E000000030000001000009B0D00005B0300005B0F0000000F00000003000000100000770E00005D0300005F0F0000001000000003000000100000510F00005E030000630F00000000000000040000001000008400000014040000140F0000000100000004000000100000850100001B0400001B0F00000002000000040000001000008302000022040000220F00000003000000040000001000007F03000028040000290F0000000400000004000000100000780400002F040000300F00000005000000040000001000006E05000034040000360F0000000600000004000000100000620600003A0400003C0F0000000700000004000000100000540700003F040000420F00000008000000040000001000004208000044040000480F00000009000000040000001000002F090000480400004D0F0000000A00000004000000100000180A00004C040000530F0000000B00000004000000100000FF0A000050040000580F0000000C00000004000000100000E30B0000530400005D0F0000000D00000004000000100000C50C000056040000610F0000000E00000004000000100000A40D000059040000660F0000000F00000004000000100000810E00005B0400006A0F00000010000000040000001000005B0F00005D0400006E0F00000000000000050000001000008800000006050000200F0000000100000005000000100000890100000E050000270F000000020000000500000010000088020000160500002E0F0000000300000005000000100000840300001D050000350F00000004000000050000001000007E040000240500003B0F0000000500000005000000100000750500002A050000420F00000006000000050000001000006906000031050000480F00000007000000050000001000005B070000360500004E0F00000008000000050000001000004A0800003C050000530F00000009000000050000001000003609000041050000590F0000000A00000005000000100000200A0000460500005E0F0000000B00000005000000100000080B00004A050000630F0000000C00000005000000100000EC0B00004E050000680F0000000D00000005000000100000CF0C0000520500006C0F0000000E00000005000000100000AE0D000055050000710F0000000F000000050000001000008B0E000058050000750F0000001000000005000000100000660F00005B050000790F00000000000000060000001000008D000000F80500002C0F00000001000000060000001000008E01000000060000330F00000002000000060000001000008E020000090600003A0F00000003000000060000001000008A03000011060000400F00000004000000060000001000008404000018060000470F00000005000000060000001000007B0500001F0600004D0F00000006000000060000001000007006000026060000530F0000000700000006000000100000620700002D060000590F000000080000000600000010000052080000330600005F0F00000009000000060000001000003E09000039060000640F0000000A00000006000000100000290A00003E060000690F0000000B00000006000000100000110B0000430600006E0F0000000C00000006000000100000F60B000048060000730F0000000D00000006000000100000D80C00004C060000770F0000000E00000006000000100000B80D0000500600007B0F0000000F00000006000000100000960E0000540600007F0F0000001000000006000000100000710F000057060000830F000000000000000700000010000092000000E8060000380F000000010000000700000010000094010000F10600003F0F000000020000000700000010000093020000FA060000450F000000030000000700000010000090030000030700004C0F00000004000000070000001000008B0400000B070000520F00000005000000070000001000008205000013070000590F0000000600000007000000100000770600001B0700005E0F00000007000000070000001000006A07000022070000640F00000008000000070000001000005A080000290700006A0F0000000900000007000000100000470900002F0700006F0F0000000A00000007000000100000320A000035070000740F0000000B000000070000001000001A0B00003B070000790F0000000C00000007000000100000000C0000400700007E0F0000000D00000007000000100000E30C000045070000820F0000000E00000007000000100000C30D00004A070000860F0000000F00000007000000100000A10E00004F0700008A0F00000010000000070000001000007C0F0000530700008E0F000000000000000800000010000097000000D7070000430F00000001000000080000001000009A010000E10700004A0F00000002000000080000001000009A020000EA070000510F000000030000000800000010000097030000F4070000580F000000040000000800000010000092040000FD0700005E0F00000005000000080000001000008A05000005080000640F00000006000000080000001000007F0600000E0800006A0F000000070000000800000010000072070000160800006F0F0000000800000008000000100000630800001D080000750F000000090000000800000010000050090000240800007A0F0000000A000000080000001000003B0A00002B0800007F0F0000000B00000008000000100000240B000032080000840F0000000C000000080000001000000A0C000038080000880F0000000D00000008000000100000ED0C00003E0800008D0F0000000E00000008000000100000CE0D000043080000910F0000000F00000008000000100000AC0E000048080000950F0000001000000008000000100000880F00004D080000980F00000000000000090000001000009D000000C40800004F0F0000000100000009000000100000A0010000CF080000560F0000000200000009000000100000A1020000DA0800005D0F00000003000000090000001000009E030000E4080000630F000000040000000900000010000099040000ED080000690F000000050000000900000010000092050000F70800006F0F00000006000000090000001000008806000000090000750F00000007000000090000001000007B070000080900007B0F00000008000000090000001000006C08000010090000800F00000009000000090000001000005A09000018090000850F0000000A00000009000000100000450A0000200900008A0F0000000B000000090000001000002E0B0000270900008E0F0000000C00000009000000100000150C00002E090000930F0000000D00000009000000100000F90C000034090000970F0000000E00000009000000100000DA0D00003B0900009B0F0000000F00000009000000100000B80E0000400900009F0F0000001000000009000000100000940F000046090000A30F000000000000000A000000100000A4000000B10900005B0F000000010000000A000000100000A7010000BC090000620F000000020000000A000000100000A8020000C7090000680F000000030000000A000000100000A6030000D20900006E0F000000040000000A000000100000A1040000DD090000750F000000050000000A0000001000009A050000E70900007A0F000000060000000A00000010000091060000F0090000800F000000070000000A00000010000084070000FA090000860F000000080000000A00000010000075080000030A00008B0F000000090000000A000000100000640900000B0A0000900F0000000A0000000A000000100000500A0000130A0000950F0000000B0000000A000000100000390B00001B0A0000990F0000000C0000000A000000100000200C0000230A00009E0F0000000D0000000A000000100000040D00002A0A0000A20F0000000E0000000A000000100000E60D0000310A0000A60F0000000F0000000A000000100000C50E0000370A0000A90F000000100000000A000000100000A10F00003D0A0000AD0F000000000000000B000000100000AB0000009C0A0000660F000000010000000B000000100000AE010000A80A00006D0F000000020000000B000000100000B0020000B40A0000730F000000030000000B000000100000AE030000C00A00007A0F000000040000000B000000100000AA040000CB0A0000800F000000050000000B000000100000A3050000D50A0000860F000000060000000B0000001000009A060000E00A00008B0F000000070000000B0000001000008E070000EA0A0000900F000000080000000B0000001000007F080000F30A0000960F000000090000000B0000001000006E090000FD0A00009B0F0000000A0000000B0000001000005B0A0000060B00009F0F0000000B0000000B000000100000450B00000E0B0000A40F0000000C0000000B0000001000002C0C0000170B0000A80F0000000D0000000B000000100000100D00001E0B0000AC0F0000000E0000000B000000100000F20D0000260B0000B00F0000000F0000000B000000100000D20E00002D0B0000B40F000000100000000B000000100000AF0F0000340B0000B70F000000000000000C000000100000B2000000860B0000720F000000010000000C000000100000B6010000930B0000780F000000020000000C000000100000B8020000A00B00007F0F000000030000000C000000100000B7030000AC0B0000850F000000040000000C000000100000B3040000B70B00008B0F000000050000000C000000100000AC050000C30B0000910F000000060000000C000000100000A4060000CE0B0000960F000000070000000C00000010000098070000D90B00009B0F000000080000000C0000001000008A080000E30B0000A00F000000090000000C00000010000079090000ED0B0000A50F0000000A0000000C000000100000660A0000F70B0000AA0F0000000B0000000C000000100000500B0000000C0000AE0F0000000C0000000C000000100000380C0000090C0000B20F0000000D0000000C0000001000001D0D0000120C0000B60F0000000E0000000C000000100000FF0D00001A0C0000BA0F0000000F0000000C000000100000DF0E0000220C0000BE0F000000100000000C000000100000BC0F0000290C0000C10F000000000000000D000000100000BA0000006F0C00007D0F000000010000000D000000100000BE0100007D0C0000840F000000020000000D000000100000C00200008A0C00008A0F000000030000000D000000100000C0030000970C0000900F000000040000000D000000100000BC040000A30C0000960F000000050000000D000000100000B6050000AF0C00009C0F000000060000000D000000100000AE060000BB0C0000A10F000000070000000D000000100000A3070000C60C0000A60F000000080000000D00000010000095080000D20C0000AB0F000000090000000D00000010000085090000DC0C0000B00F0000000A0000000D000000100000720A0000E70C0000B40F0000000B0000000D0000001000005D0B0000F10C0000B90F0000000C0000000D000000100000440C0000FA0C0000BD0F0000000D0000000D0000001000002A0D0000040D0000C10F0000000E0000000D0000001000000D0E00000D0D0000C40F0000000F0000000D000000100000ED0E0000150D0000C80F000000100000000D000000100000CB0F00001D0D0000CB0F000000000000000E000000100000C2000000570D0000890F000000010000000E000000100000C7010000650D00008F0F000000020000000E000000100000C9020000730D0000950F000000030000000E000000100000C9030000800D00009B0F000000040000000E000000100000C60400008E0D0000A10F000000050000000E000000100000C10500009A0D0000A60F000000060000000E000000100000B8060000A70D0000AC0F000000070000000E000000100000AE070000B30D0000B10F000000080000000E000000100000A1080000BF0D0000B60F000000090000000E00000010000091090000CA0D0000BA0F0000000A0000000E0000001000007E0A0000D50D0000BF0F0000000B0000000E000000100000690B0000E00D0000C30F0000000C0000000E000000100000520C0000EA0D0000C70F0000000D0000000E000000100000370D0000F40D0000CB0F0000000E0000000E0000001000001B0E0000FE0D0000CE0F0000000F0000000E000000100000FB0E0000070E0000D20F000000100000000E000000100000D90F0000100E0000D50F000000000000000F000000100000CB0000003D0E0000940F000000010000000F000000100000D00100004C0E00009A0F000000020000000F000000100000D30200005B0E0000A00F000000030000000F000000100000D3030000690E0000A60F000000040000000F000000100000D0040000770E0000AC0F000000050000000F000000100000CB050000840E0000B10F000000060000000F000000100000C4060000920E0000B60F000000070000000F000000100000B90700009E0E0000BB0F000000080000000F000000100000AC080000AB0E0000C00F000000090000000F0000001000009D090000B70E0000C50F0000000A0000000F0000001000008B0A0000C30E0000C90F0000000B0000000F000000100000760B0000CE0E0000CD0F0000000C0000000F0000001000005F0C0000D90E0000D10F0000000D0000000F000000100000450D0000E40E0000D50F0000000E0000000F000000100000290E0000EE0E0000D80F0000000F0000000F0000001000000A0F0000F80E0000DC0F000000100000000F000000100000E80F0000020F0000DF0F0000000000000010000000100000D4000000220F00009F0F0000000100000010000000100000DA010000320F0000A50F0000000200000010000000100000DD020000410F0000AB0F0000000300000010000000100000DD030000500F0000B10F0000000400000010000000100000DB0400005F0F0000B70F0000000500000010000000100000D60500006D0F0000BC0F0000000600000010000000100000CF0600007B0F0000C10F0000000700000010000000100000C5070000880F0000C60F0000000800000010000000100000B9080000960F0000CB0F0000000900000010000000100000AA090000A30F0000CF0F0000000A00000010000000100000980A0000AF0F0000D40F0000000B00000010000000100000840B0000BB0F0000D80F0000000C000000100000001000006D0C0000C70F0000DB0F0000000D00000010000000100000540D0000D20F0000DF0F0000000E00000010000000100000380E0000DD0F0000E20F0000000F00000010000000100000190F0000E80F0000E60F0000001000000010000000100000F80F0000F20F0000E90F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000CF0300001200000007000000000800000000000000000000750700001F0000000A000000000C00000000000000000000F10A0000250000000A000000001000000000000000000000440E000026000000060000000000000000040000000000000B0000009D0300000F000000000400000004000000000000E1030000B9030000160000000008000000040000000000008D070000D003000019000000000C00000004000000000000100B0000E2030000190000000010000000040000000000006A0E0000ED030000150000000000000000080000000000001D000000260700001E000000000400000008000000000000FA0300004D07000024000000000800000008000000000000AD0700006F07000027000000000C00000008000000000000370B00008A07000026000000001000000008000000000000980E0000A10700002200000000000000000C000000000000370000009C0A00002A00000000040000000C0000000000001B040000CE0A00003000000000080000000C000000000000D5070000FA0A000033000000000C0000000C000000000000650B0000200B00003200000000100000000C000000000000CD0E0000400B00002E00000000000000001000000000000058000000FE0D000036000000000400000010000000000000420400003B0E00003C00000000080000001000000000000003080000710E00003E000000000C000000100000000000009B0B0000A20E00003D000000001000000010000000000000090F0000CD0E0000380000000000000000000000000400002600000019000000CB030000000400000000000000040000FD0300002A000000D8030000000800000000000000040000AA07000036000000E1030000000C000000000000000400002E0B00003C000000E6030000001000000000000000040000890E00003D000000E803000000000000000400000004000032000000C4030000E30300000004000000040000000400000F040000E0030000EF030000000800000004000000040000C3070000F7030000F8030000000C000000040000000400004E0B000007040000FC030000001000000004000000040000AF0E000013040000FE030000000000000008000000040000440000005C070000FA030000000400000008000000040000290400008307000005040000000800000008000000040000E3070000A40700000D040000000C00000008000000040000740B0000BF07000011040000001000000008000000040000DC0E0000D50700001204000000000000000C0000000400005E000000E00A00000F04000000040000000C00000004000049040000120B00001A04000000080000000C0000000400000A0800003D0B000021040000000C0000000C000000040000A20B0000640B00002504000000100000000C000000040000110F0000840B00002504000000000000001000000004000080000000510E000023040000000400000010000000040000710400008D0E00002D04000000080000001000000004000039080000C40E000034040000000C00000010000000040000D80B0000F40E0000370400000010000000100000000400004D0F0000200F000037040000000000000000000000080000470000002B0000008A070000000400000000000000080000260400003C0000009C070000000800000000000000080000DA07000047000000AB070000000C00000000000000080000660B00004D000000B6070000001000000000000000080000C80E00004C000000BE07000000000000000400000008000053000000E5030000AB0700000004000000040000000800003804000001040000BC070000000800000004000000080000F307000017040000CA070000000C00000004000000080000850B000027040000D4070000001000000004000000080000EE0E000032040000DA070000000000000008000000080000660000008B070000C907000000040000000800000008000051040000B2070000DA07000000080000000800000008000013080000D2070000E7070000000C00000008000000080000AC0B0000EE070000F00700000010000000080000000800001B0F000003080000F607000000000000000C000000080000800000001E0B0000E707000000040000000C000000080000720400004F0B0000F707000000080000000C0000000800003B0800007B0B000003080000000C0000000C000000080000DA0B0000A10B00000B08000000100000000C000000080000500F0000C10B000010080000000000000010000000080000A10000009D0E0000030800000004000000100000000800009A040000D90E00001208000000080000001000000008000069080000100F00001D080000000C000000100000000800000F0C0000410F0000250800000010000000100000000800008C0F00006C0F0000290800000000000000000000000C000062000000370000003D0B00000004000000000000000C00004804000048000000540B00000008000000000000000C00000508000052000000690B0000000C000000000000000C0000980B000057000000790B00000010000000000000000C0000010F000056000000860B00000000000000040000000C00006E000000FF030000650B00000004000000040000000C00005B0400001B0400007C0B00000008000000040000000C00001E080000300400008F0B0000000C000000040000000C0000B70B0000400400009F0B00000010000000040000000C0000270F00004A040000AB0B00000000000000080000000C000081000000B40700008D0B00000004000000080000000C000074040000DA070000A20B00000008000000080000000C00003E080000FB070000B40B0000000C000000080000000C0000DE0B000016080000C20B00000010000000080000000C0000540F00002B080000CD0B000000000000000C0000000C00009C000000550B0000B30B000000040000000C0000000C000095040000860B0000C70B000000080000000C0000000C000065080000B20B0000D80B0000000C0000000C0000000C00000C0C0000D80B0000E50B000000100000000C0000000C0000890F0000F90B0000EF0B00000000000000100000000C0000BE000000E30E0000D70B00000004000000100000000C0000BD0400001F0F0000EB0B00000008000000100000000C000094080000560F0000FA0B0000000C000000100000000C0000410C0000870F0000070C00000010000000100000000C0000C50F0000B20F00000F0C0000000000000000000000100000780000003D000000E30E0000000400000000000000100000650400004D000000000F000000080000000000000010000029080000570000001A0F0000000C00000000000000100000C40B00005B000000300F0000001000000000000000100000350F000059000000430F00000000000000040000001000008400000014040000140F0000000400000004000000100000780400002F040000300F00000008000000040000001000004208000044040000480F0000000C00000004000000100000E30B0000530400005D0F00000010000000040000001000005B0F00005D0400006E0F000000000000000800000010000097000000D7070000430F000000040000000800000010000092040000FD0700005E0F0000000800000008000000100000630800001D080000750F0000000C000000080000001000000A0C000038080000880F0000001000000008000000100000880F00004D080000980F000000000000000C000000100000B2000000860B0000720F000000040000000C000000100000B3040000B70B00008B0F000000080000000C0000001000008A080000E30B0000A00F0000000C0000000C000000100000380C0000090C0000B20F000000100000000C000000100000BC0F0000290C0000C10F0000000000000010000000100000D4000000220F00009F0F0000000400000010000000100000DB0400005F0F0000B70F0000000800000010000000100000B9080000960F0000CB0F0000000C000000100000001000006D0C0000C70F0000DB0F0000001000000010000000100000F80F0000F20F0000E90F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000400000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000003D0000005200000062000000700000007B000000850000008D000000950000009C000000A3000000AA000000B0000000B6000000BC000000C1000000C7000000CC000000D1000000D6000000DB000000DF000000E6000000EB000000F0000000F5000000FA0000000001000004010000090100000D01000011010000160100001A0100001E01000023010000260100002A0100002E0100003201000035010000390100003D0100004001000043010000470100004A0100004D010000500100005301000056010000590100005C0100005F0100006201000064010000670100006A0100006C0100006F010000720100007401000077010000790100007C0100007E01000080010000820100008401000087010000890100008B0100008E01000090010000920100009401000096010000990100009B0100009D010000A0010000A1010000A3010000A5010000A7010000A9010000AC010000AE010000B0010000B2010000B4010000B6010000B8010000B9010000BB010000BD010000BF010000C0010000C2010000C4010000C6010000C8010000C9010000CB010000CD010000CE010000D0010000D2010000D3010000D5010000D6010000D8010000DA010000DB010000DD010000DF010000E0010000E1010000E2010000E5010000E6010000E8010000E9010000EB010000EC010000EE010000EF010000F0010000F2010000F3010000F5010000F6010000F8010000F9010000FA010000FC010000FD010000FF010000FF010000010200000302000004020000050200000602000008020000090200000A0200000B0200000D0200000E0200000F02000010020000120200001302000014020000150200001602000018020000190200001A0200001B0200001C0200001E0200001F0200002002000021020000220200002302000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000067020000680200006A0200006B0200006C0200006D0200006E0200006F0200007002000071020000710200007202000073020000740200007502000076020000770200007802000079020000790200007A0200007B0200007C0200007D0200007E0200007F0200008002000080020000810200008202000083020000840200008502000085020000860200008702000088020000890200008A0200008A0200008B0200008C0200008D0200008E0200008F020000900200009002000091020000920200009302000094020000940200009502000096020000970200009802000099020000990200009A0200009B0200009C0200009D0200009D0200009E0200009F020000A0020000A1020000A2020000A2020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A9020000A9020000AA020000AB020000AC020000AD020000AD020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B4020000B4020000B5020000B6020000B7020000B7020000B8020000B9020000BA020000BB020000BB020000BC020000BD020000BE020000BE020000C0020000C0020000C1020000C2020000C2020000C3020000C3020000C4020000C5020000C6020000C6020000C7020000C8020000C8020000C9020000CA020000CB020000CB020000CC020000CD020000CD020000CE020000D0020000D0020000D1020000D2020000D3020000D3020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D9020000DA020000DA020000DB020000DC020000DC020000DD020000DE020000DE020000DF020000E0020000E0020000E1020000E2020000E2020000E3020000E4020000E4020000E5020000E5020000E6020000E7020000E7020000E8020000E9020000E9020000EA020000EB020000EB020000EC020000ED020000ED020000EE020000EF020000EF020000F0020000F1020000F1020000F2020000F2020000F3020000F4020000F4020000F5020000F6020000F6020000F7020000F8020000F8020000F9020000FA020000FA020000FB020000FC020000FC020000FD020000FE020000FE020000FF02000000030000000300000103000002030000020300000303000003030000040300000503000005030000060300000603000007030000080300000803000009030000090300000A0300000B0300000B0300000D0300000E0300000E0300000F0300000F030000100300001103000011030000120300001203000013030000140300001403000015030000160300001603000017030000170300001803000019030000190300001A0300001A0300001B0300001B0300001C0300001D0300001D0300001E0300001E0300001F0300001F03000020030000210300002103000022030000220300002303000023030000240300002503000025030000260300002603000027030000270300002803000028030000290300002A0300002A0300002B0300002B0300002C0300002C0300002D0300002D0300002E0300002F0300002F0300003003000030030000310300003103000032030000330300003303000034030000340300003503000035030000360300003703000037030000380300003803000039030000390300003A0300003C0300003C0300003D0300003D0300003E0300003E0300003F0300003F0300003F03000040030000410300004103000042030000420300004303000043030000440300004403000045030000450300004503000046030000460300004703000047030000480300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004E0300004F0300004F03000050030000500300005103000051030000520300005203000053030000530300005403000054030000550300005503000056030000560300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005B0300005C0300005C0300005D0300005D0300005E0300005E0300005F0300006003000060030000600300006103000061030000610300006203000062030000620300006303000063030000640300006403000065030000650300006603000066030000670300006703000067030000680300006803000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006C0300006D0300006D0300006E0300006E0300006E0300006F0300006F03000070030000700300007003000071030000710300007203000072030000720300007303000073030000740300007403000075030000750300007603000076030000770300007703000077030000780300007803000079030000790300007A0300007A0300007A0300007B0300007B0300007C0300007C0300007C0300007D0300007D0300007E0300007E0300007E0300007F0300007F030000800300008003000080030000810300008103000082030000820300008303000083030000830300008403000084030000850300008503000086030000860300008603000087030000870300008703000088030000880300008903000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F0300008F03000090030000900300009103000091030000920300009203000092030000930300009303000094030000940300009503000095030000950300009603000096030000970300009703000098030000980300009803000099030000990300009A0300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009D0300009E0300009E0300009E0300009F0300009F030000A0030000A0030000A0030000A1030000A1030000A1030000A2030000A2030000A3030000A3030000A3030000A4030000A4030000A5030000A5030000A5030000A6030000A6030000A6030000A7030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AB030000AB030000AC030000AC030000AC030000AD030000AD030000AE030000AE030000AE030000AF030000AF030000B0030000B0030000B0030000B1030000B1030000B2030000B2030000B2030000B3030000B3030000B3030000B4030000B4030000B5030000B5030000B5030000B6030000B6030000B7030000B7030000B7030000B8030000B8030000B9030000B9030000B9030000BA030000BA030000BB030000BB030000BB030000BC030000BC030000BC030000BD030000BD030000BE030000BE030000BE030000BF030000BF030000BF030000C0030000C0030000C0030000C1030000C1030000C2030000C2030000C2030000C3030000C3030000C3030000C4030000C4030000C4030000C5030000C5030000C5030000C6030000C6030000C6030000C7030000C7030000C7030000C8030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CC030000CC030000CC030000CD030000CD030000CE030000CE030000CE030000CF030000CF030000CF030000D0030000D0030000D0030000D0030000D1030000D1030000D2030000D2030000D2030000D3030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D6030000D7030000D7030000D7030000D8030000D8030000D8030000D9030000D9030000DA030000DA030000DA030000DB030000DB030000DB030000DC030000DC030000DC030000DD030000DD030000DE030000DE030000DE030000DF030000DF030000DF030000DF030000E0030000E0030000E1030000E1030000E1030000E2030000E2030000E2030000E3030000E3030000E3030000E4030000E4030000E4030000E5030000E5030000E5030000E6030000E6030000E6030000E7030000E7030000E8030000E8030000E8030000E9030000E9030000E9030000EA030000EA030000EA030000EB030000EB030000EC030000EC030000EC030000ED030000ED030000ED030000EE030000EE030000EE030000EF030000EF030000EF030000F0030000F0030000F0030000F1030000F1030000F1030000F2030000F2030000F2030000F3030000F3030000F3030000F4030000F4030000F4030000F5030000F5030000F5030000F6030000F6030000F6030000F7030000F7030000F8030000F8030000F8030000F9030000F9030000F9030000FA030000FA030000FA030000FB030000FB030000FB030000FC030000FC030000FC030000FD030000FD030000FD030000FE030000FE030000FE030000FF030000FF030000000000003C00000051000000610000006E00000079000000830000008B000000930000009A000000A1000000A8000000AE000000B4000000BA000000BF000000C5000000CA000000CF000000D4000000D9000000DD000000E3000000E8000000ED000000F3000000F8000000FE00000002010000070100000B0100000F01000014010000180100001C0100002101000024010000280100002C0100003001000033010000370100003B0100003E0100004101000045010000480100004B0100004E0100005101000054010000570100005A0100005D010000600100006201000065010000680100006A0100006D010000700100007201000075010000770100007A0100007C0100007F010000810100008301000086010000880100008A0100008D0100008F010000910100009301000095010000980100009A0100009C0100009F010000A0010000A2010000A4010000A6010000A8010000AA010000AC010000AE010000B0010000B2010000B4010000B6010000B7010000B9010000BB010000BD010000BE010000C0010000C2010000C4010000C6010000C7010000C9010000CB010000CC010000CE010000D0010000D1010000D3010000D4010000D6010000D8010000D9010000DB010000DD010000DE010000E0010000E1010000E3010000E4010000E6010000E7010000E9010000EA010000EC010000ED010000EE010000F0010000F1010000F3010000F4010000F6010000F7010000F8010000FA010000FB010000FD010000FD010000FF01000001020000020200000302000004020000060200000702000008020000090200000B0200000C0200000D0200000E0200001002000011020000120200001302000014020000160200001702000018020000190200001A0200001C0200001D0200001E0200001F0200002002000021020000230200002402000025020000260200002702000028020000290200002A0200002B0200002D0200002E0200002F0200003002000031020000320200003302000034020000350200003602000037020000380200003A0200003B0200003C0200003D0200003E0200003F02000040020000410200004202000043020000440200004502000046020000470200004802000048020000490200004A0200004B0200004C0200004D0200004E0200004F02000050020000510200005202000053020000540200005502000056020000570200005802000058020000590200005A0200005B0200005C0200005D0200005E0200005F02000060020000610200006202000063020000640200006502000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006E0200006F02000070020000710200007202000073020000740200007502000076020000760200007702000078020000790200007A0200007B0200007C0200007D0200007D0200007E0200007F0200008002000081020000820200008202000083020000840200008502000086020000870200008702000088020000890200008A0200008B0200008C0200008D0200008D0200008E0200008F0200009002000091020000910200009202000093020000940200009502000096020000960200009702000098020000990200009A0200009A0200009B0200009C0200009D0200009E0200009F0200009F020000A0020000A1020000A2020000A2020000A3020000A4020000A5020000A6020000A6020000A7020000A8020000A9020000AA020000AA020000AB020000AC020000AD020000AD020000AE020000AF020000B0020000B1020000B1020000B2020000B3020000B4020000B4020000B5020000B6020000B7020000B8020000B8020000B9020000BA020000BB020000BB020000BD020000BD020000BE020000BF020000BF020000C0020000C0020000C1020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C7020000C8020000C8020000C9020000CA020000CA020000CB020000CC020000CC020000CD020000CE020000CF020000CF020000D0020000D1020000D1020000D2020000D3020000D3020000D4020000D5020000D6020000D6020000D7020000D8020000D8020000D9020000DA020000DA020000DB020000DC020000DC020000DD020000DE020000DE020000DF020000E0020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E5020000E5020000E6020000E7020000E7020000E8020000E9020000E9020000EA020000EB020000EB020000EC020000ED020000ED020000EE020000EE020000EF020000F0020000F0020000F1020000F2020000F2020000F3020000F4020000F4020000F5020000F6020000F6020000F7020000F8020000F8020000F9020000FA020000FA020000FB020000FC020000FC020000FD020000FE020000FE020000FF020000FF020000000300000103000001030000020300000203000003030000040300000403000005030000050300000603000007030000070300000803000009030000090300000A0300000A0300000B0300000C0300000C0300000D0300000D0300000E0300000F0300000F03000010030000110300001103000012030000120300001303000014030000140300001503000015030000160300001603000017030000180300001803000019030000190300001A0300001A0300001B0300001C0300001C0300001D0300001D0300001E0300001E0300001F0300002003000020030000210300002103000022030000220300002303000023030000240300002503000025030000260300002603000027030000270300002803000028030000290300002A0300002A0300002B0300002B0300002C0300002C0300002D0300002E0300002E0300002F0300002F030000300300003003000031030000320300003203000033030000330300003403000034030000350300003603000036030000370300003703000038030000380300003903000039030000390300003B0300003C0300003C0300003D0300003D0300003E0300003E0300003F0300003F030000400300004003000040030000410300004103000042030000420300004303000043030000440300004403000045030000450300004603000046030000470300004703000048030000480300004903000049030000490300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F030000510300005103000052030000520300005303000053030000540300005403000055030000550300005603000056030000570300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005C0300005C0300005C0300005D0300005D0300005D0300005E0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000630300006303000063030000640300006403000065030000650300006603000066030000670300006703000068030000680300006803000069030000690300006B0300006B0300006B0300006C0300006C0300006D0300006D0300006D0300006E0300006E0300006F0300006F0300006F03000070030000700300007103000071030000720300007203000073030000730300007403000074030000740300007503000075030000760300007603000077030000770300007703000078030000780300007903000079030000790300007A0300007A0300007B0300007B0300007B0300007C0300007C0300007D0300007D0300007D0300007E0300007E0300007F0300007F030000800300008003000080030000810300008103000082030000820300008303000083030000830300008403000084030000840300008503000085030000860300008603000086030000870300008703000088030000880300008903000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F0300008F0300009103000091030000920300009203000093030000930300009303000094030000940300009503000095030000960300009603000096030000970300009703000098030000980300009803000099030000990300009A0300009A0300009B0300009B0300009B0300009C0300009C0300009C0300009D0300009D0300009E0300009E0300009E0300009F0300009F0300009F030000A0030000A0030000A1030000A1030000A1030000A2030000A2030000A3030000A3030000A3030000A4030000A4030000A4030000A5030000A5030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AB030000AB030000AC030000AC030000AC030000AD030000AD030000AE030000AE030000AE030000AF030000B0030000B1030000B1030000B1030000B2030000B2030000B2030000B3030000B3030000B4030000B4030000B4030000B5030000B5030000B6030000B6030000B6030000B7030000B7030000B8030000B8030000B8030000B9030000B9030000BA030000BA030000BA030000BB030000BB030000BB030000BC030000BC030000BD030000BD030000BD030000BE030000BE030000BE030000BF030000BF030000BF030000C0030000C0030000C1030000C1030000C1030000C2030000C2030000C2030000C3030000C3030000C3030000C4030000C4030000C4030000C5030000C5030000C5030000C6030000C6030000C6030000C7030000C7030000C7030000C8030000C8030000C9030000C9030000C9030000CA030000CA030000CB030000CB030000CB030000CC030000CC030000CD030000CD030000CD030000CE030000CE030000CE030000CF030000CF030000CF030000CF030000D0030000D0030000D1030000D1030000D1030000D2030000D2030000D2030000D3030000D3030000D3030000D4030000D4030000D5030000D5030000D5030000D6030000D6030000D6030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DA030000DB030000DB030000DB030000DC030000DC030000DC030000DD030000DD030000DE030000DE030000DE030000DF030000DF030000DF030000DF030000E0030000E0030000E1030000E1030000E1030000E2030000E2030000E2030000E3030000E3030000E3030000E4030000E4030000E4030000E5030000E5030000E5030000E6030000E6030000E6030000E7030000E7030000E8030000E8030000E8030000E9030000E9030000E9030000EA030000EA030000EA030000EB030000EB030000EC030000EC030000EC030000ED030000ED030000ED030000EE030000EE030000EE030000EF030000EF030000EF030000F0030000F0030000F0030000F1030000F1030000F1030000F2030000F2030000F2030000F3030000F3030000F3030000F4030000F4030000F4030000F5030000F5030000F5030000F6030000F6030000F6030000F7030000F7030000F8030000F8030000F8030000F9030000F9030000F9030000FA030000FA030000FA030000FB030000FB030000FB030000FC030000FC030000FC030000FD030000FD030000FD030000FE030000FE030000FE030000FF030000FF030000000000003E0000005300000064000000710000007C000000850000008D000000950000009C000000A3000000AA000000B1000000B7000000BD000000C2000000C7000000CC000000D1000000D6000000DB000000DF000000E5000000EA000000EF000000F5000000FA000000FF00000003010000080100000C0100001001000015010000190100001D0100002101000024010000280100002C0100003001000033010000370100003B0100003E0100004101000044010000470100004A0100004D010000500100005301000056010000590100005C0100005F010000610100006301000066010000680100006B0100006E010000700100007301000075010000780100007A0100007D0100007F010000810100008301000085010000870100008A0100008C0100008E01000090010000920100009501000097010000980100009B0100009C0100009E010000A0010000A2010000A4010000A6010000A8010000AA010000AC010000AE010000B0010000B2010000B3010000B4010000B6010000B8010000B9010000BB010000BD010000BF010000C1010000C2010000C4010000C6010000C7010000C9010000CB010000CC010000CE010000CF010000D1010000D2010000D3010000D5010000D7010000D8010000DA010000DB010000DD010000DE010000E0010000E1010000E3010000E4010000E6010000E7010000E8010000EA010000EB010000ED010000EE010000F0010000F1010000F2010000F4010000F4010000F6010000F7010000F8010000FA010000FB010000FC010000FE0100000002000001020000020200000202000004020000050200000602000007020000090200000A0200000B0200000C0200000D0200000F0200001002000011020000120200001302000015020000160200001702000018020000190200001A0200001C0200001D0200001E0200001F0200002002000021020000220200002302000024020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003002000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003D0200003E0200003F0200004002000041020000410200004202000043020000440200004502000046020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F02000050020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005D0200005E0200005F02000060020000610200006202000063020000640200006502000066020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006E0200006F02000070020000710200007202000073020000740200007502000075020000760200007702000078020000790200007A0200007A0200007B0200007C0200007D0200007E0200007F0200007F020000800200008102000082020000820200008302000084020000840200008502000086020000870200008802000088020000890200008A0200008B0200008C0200008D0200008D0200008E0200008F020000900200009102000091020000920200009302000094020000950200009602000096020000970200009802000099020000990200009A0200009B0200009C0200009D0200009D0200009E0200009F020000A0020000A1020000A1020000A2020000A3020000A4020000A4020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AE020000AF020000AF020000B0020000B1020000B2020000B2020000B3020000B4020000B5020000B6020000B6020000B7020000B7020000B8020000B9020000BA020000BA020000BB020000BC020000BC020000BD020000BE020000BF020000BF020000C0020000C1020000C1020000C2020000C3020000C3020000C4020000C5020000C6020000C6020000C7020000C8020000C8020000C9020000CA020000CA020000CB020000CC020000CD020000CD020000CE020000CF020000CF020000D0020000D1020000D1020000D2020000D3020000D3020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D8020000D9020000DA020000DA020000DB020000DC020000DC020000DD020000DE020000DE020000DF020000E0020000E0020000E1020000E2020000E2020000E3020000E4020000E4020000E5020000E5020000E6020000E7020000E7020000E8020000E9020000E9020000EA020000EB020000EB020000EC020000ED020000ED020000EE020000EF020000EF020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F5020000F5020000F6020000F6020000F7020000F8020000F8020000F9020000F9020000FA020000FB020000FB020000FC020000FC020000FD020000FE020000FE020000FF02000000030000000300000103000001030000020300000303000003030000040300000403000005030000060300000603000007030000080300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000F0300000F0300001003000010030000110300001103000012030000130300001303000014030000140300001503000015030000160300001703000017030000180300001803000019030000190300001A0300001A0300001B0300001C0300001C0300001D0300001D0300001E0300001E0300001F030000200300002003000021030000210300002203000022030000240300002403000025030000260300002603000027030000270300002803000028030000290300002A0300002A0300002B0300002B0300002C0300002C0300002D0300002E0300002E0300002F0300002F030000300300003003000031030000310300003103000033030000330300003403000034030000350300003503000036030000370300003703000038030000380300003803000039030000390300003A0300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003E0300003F0300003F0300004003000040030000410300004103000042030000420300004303000043030000440300004403000045030000450300004603000047030000470300004803000048030000490300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F030000500300005003000051030000510300005203000052030000530300005303000054030000540300005503000055030000560300005603000056030000570300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005C0300005C0300005C0300005D0300005D0300005E0300005E0300005F0300005F03000060030000600300006103000061030000620300006203000063030000640300006403000065030000650300006603000066030000670300006703000068030000680300006903000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006E0300006F0300006F0300007003000070030000710300007103000071030000720300007203000073030000730300007303000074030000740300007503000075030000750300007603000076030000770300007703000077030000780300007803000079030000790300007A0300007A0300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007D0300007E0300007E0300007F03000080030000800300008103000081030000810300008203000082030000830300008303000084030000840300008403000085030000850300008603000086030000870300008703000087030000880300008803000089030000890300008A0300008A0300008A0300008C0300008C0300008D0300008D0300008E0300008E0300008E0300008F0300008F030000900300009003000091030000910300009103000092030000920300009303000093030000930300009403000094030000950300009503000096030000960300009603000097030000970300009703000098030000980300009903000099030000990300009A0300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009E0300009E0300009F0300009F0300009F030000A0030000A0030000A0030000A1030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A4030000A5030000A5030000A6030000A6030000A6030000A7030000A7030000A8030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AB030000AC030000AD030000AD030000AD030000AE030000AE030000AE030000AF030000AF030000B0030000B0030000B0030000B1030000B1030000B2030000B2030000B2030000B3030000B3030000B4030000B4030000B4030000B5030000B5030000B6030000B6030000B6030000B7030000B7030000B7030000B8030000B8030000B9030000B9030000B9030000BA030000BB030000BB030000BC030000BC030000BC030000BD030000BD030000BE030000BE030000BE030000BF030000BF030000BF030000C0030000C0030000C0030000C1030000C1030000C1030000C2030000C2030000C2030000C3030000C3030000C3030000C4030000C4030000C4030000C5030000C5030000C6030000C6030000C6030000C7030000C7030000C8030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CB030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000CF030000D0030000D0030000D0030000D1030000D1030000D1030000D2030000D2030000D3030000D3030000D3030000D4030000D4030000D4030000D5030000D6030000D6030000D7030000D7030000D8030000D8030000D8030000D9030000D9030000D9030000DA030000DA030000DA030000DB030000DB030000DC030000DC030000DC030000DD030000DD030000DD030000DD030000DE030000DE030000DF030000DF030000DF030000E0030000E0030000E0030000E1030000E2030000E2030000E2030000E3030000E3030000E4030000E4030000E4030000E5030000E5030000E5030000E6030000E6030000E7030000E7030000E7030000E8030000E8030000E8030000E9030000E9030000E9030000EA030000EA030000EB030000EB030000EB030000EC030000EC030000EC030000ED030000ED030000ED030000EE030000EE030000EE030000EF030000EF030000EF030000F0030000F0030000F0030000F1030000F1030000F1030000F2030000F2030000F2030000F3030000F3030000F3030000F4030000F4030000F4030000F6030000F6030000F6030000F7030000F7030000F8030000F8030000F8030000F9030000F9030000F9030000FA030000FA030000FA030000FB030000FB030000FB030000FC030000FC030000FC030000FD030000FD030000FD030000FE030000FE030000FE030000FF030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ <Feature FeatureType="28" Disable="false" DataSize="8192">3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D227574662D38223F3E3C6864725F6C69622076657273696F6E3D22322E30223E3C5144434D5F76657273696F6E3E362E31303C2F5144434D5F76657273696F6E3E3C70616E656C5F636F6C6F725F6D6F64653E44434950333C2F70616E656C5F636F6C6F725F6D6F64653E3C70616E656C5F6D61785F6C756D696E616E63653E3937352E3930303032343431343036333C2F70616E656C5F6D61785F6C756D696E616E63653E3C70616E656C5F6D696E5F6C756D696E616E63653E302E3030323534363C2F70616E656C5F6D696E5F6C756D696E616E63653E3C6E6F6D696E616C5F7065616B5F6C756D696E616E63653E313530303C2F6E6F6D696E616C5F7065616B5F6C756D696E616E63653E3C5344525F7065616B5F6C756D696E616E63653E3430303C2F5344525F7065616B5F6C756D696E616E63653E3C6F75747075745F67616D6D615F73706163653E3C73706163653E3270323C2F73706163653E3C76616C3E322E323C2F76616C3E3C2F6F75747075745F67616D6D615F73706163653E3C70616E656C5F7063633E3C723E3C633E303C2F633E3C723E302E3937323630323830353735323030333C2F723E3C673E302E30303732363237313836383037383534323C2F673E3C623E302E303430333638383636373933333038313C2F623E3C72673E302E303236363238363433383133303634373C2F72673E3C67623E302E3030303939373336333633303636343032313C2F67623E3C72623E302E303239373534353834363033313436363C2F72623E3C72723E2D302E303830383830363539313639323733383C2F72723E3C67673E302E303134323537343539313039353539343C2F67673E3C62623E2D302E303131303734383535363833313731343C2F62623E3C7267623E2D302E30303136353532333632323937363436353C2F7267623E3C2F723E3C673E3C633E303C2F633E3C723E302E303230343832323338323731373932373C2F723E3C673E302E3931323835323038353438373436363C2F673E3C623E302E3032373234373338303936383934393C2F623E3C72673E302E303431303233353137333331343337323C2F72673E3C67623E302E303536323332393837353335363730333C2F67623E3C72623E2D302E30303235393830383836393531333538373C2F72623E3C72723E2D302E303131303933343339313330323635373C2F72723E3C67673E2D302E3033383032303836383539393938393C2F67673E3C62623E2D302E303132323430393637303935333235343C2F62623E3C7267623E302E30303330353230353735323038313338313C2F7267623E3C2F673E3C623E3C633E303C2F633E3C723E302E30303834333035393630333739343434353C2F723E3C673E302E303135363638343237313932303532323C2F673E3C623E302E3935343937303330363735383731333C2F623E3C72673E2D302E3030303938313834353431383935313737323C2F72673E3C67623E302E303332383130383230343633373732383C2F67623E3C72623E302E303231393035353833323837343533393C2F72623E3C72723E2D302E30303638363937313232333033363338383C2F72723E3C67673E2D302E30303235303838303935313530323636363C2F67673E3C62623E2D302E3032343430343436353135383332363C2F62623E3C7267623E2D302E30303435313438383137313237313534383C2F7267623E3C2F623E3C2F70616E656C5F7063633E3C746F6E655F6D61703E3C706F696E74733E3C783E303C2F783E3C793E303C2F793E3C783E36323C2F783E3C793E31383C2F793E3C783E3132333C2F783E3C793E33353C2F793E3C783E3138353C2F783E3C793E35383C2F793E3C783E3235343C2F783E3C793E39333C2F793E3C783E3330383C2F783E3C793E3132393C2F793E3C783E3338363C2F783E3C793E3139343C2F793E3C783E3435313C2F783E3C793E3236363C2F793E3C783E3438323C2F783E3C793E3330373C2F793E3C783E3531333C2F783E3C793E3335323C2F793E3C783E3534343C2F783E3C793E3430343C2F793E3C783E3537353C2F783E3C793E3436323C2F793E3C783E3630363C2F783E3C793E3532373C2F793E3C783E3633373C2F783E3C793E3630313C2F793E3C783E3636383C2F783E3C793E3638333C2F793E3C783E3830303C2F783E3C793E3935343C2F793E3C783E3932333C2F783E3C793E313032333C2F793E3C2F706F696E74733E3C2F746F6E655F6D61703E3C73616D706C696E675F677269643E3C7265643E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F7265643E3C677265656E3E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F677265656E3E3C626C75653E3C703E303C2F703E3C703E3234383C2F703E3C703E3439323C2F703E3C703E3734313C2F703E3C703E313031373C2F703E3C703E313233333C2F703E3C703E313534363C2F703E3C703E313830363C2F703E3C703E313933303C2F703E3C703E323035343C2F703E3C703E323137383C2F703E3C703E323330323C2F703E3C703E323432363C2F703E3C703E323535303C2F703E3C703E323637353C2F703E3C703E333230333C2F703E3C703E333639373C2F703E3C2F626C75653E3C2F73616D706C696E675F677269643E3C647370705F73616D706C696E675F677269643E3C747970653E637573746F6D3C2F747970653E3C73697A653E31373C2F73697A653E3C2F647370705F73616D706C696E675F677269643E3C2F6864725F6C69623E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ </Mode>
+ <Mode ModeID="2" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="P3" NumOfFeatures="14" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="dcip3" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">000000000000000000000000311300000000000000000000000000000000000000000000000000000001000000000000000000000C0100001F00000032000000000200000000000000000000F6010000300000003B000000000300000000000000000000DA0200003F00000043000000000400000000000000000000B80300004D0000004B0000000005000000000000000000008F04000059000000510000000006000000000000000000006105000065000000550000000007000000000000000000002C0600006F00000059000000000800000000000000000000F1060000780000005C000000000900000000000000000000B0070000800000005D000000000A0000000000000000000069080000860000005D000000000B000000000000000000001B0900008B0000005C000000000C00000000000000000000C70900008F0000005A000000000D000000000000000000006D0A00009100000056000000000E000000000000000000000D0B00009300000052000000000F00000000000000000000A70B0000930000004C0000000010000000000000000000003A0C0000920000004500000000000000000100000000000028000000EC0000002900000000010000000100000000000019010000FF0000003400000000020000000100000000000004020000110100003D000000000300000001000000000000E90200002101000046000000000400000001000000000000C7030000300100004D0000000005000000010000000000009F0400003E01000053000000000600000001000000000000720500004A010000570000000007000000010000000000003D060000550100005B000000000800000001000000000000030700005F0100005E000000000900000001000000000000C3070000680100005F000000000A000000010000000000007C080000700100005F000000000B000000010000000000002F090000760100005E000000000C00000001000000000000DC0900007B0100005C000000000D00000001000000000000830A00007E01000058000000000E00000001000000000000230B00008101000054000000000F00000001000000000000BD0B0000820100004E000000001000000001000000000000520C0000820100004700000000000000000200000000000034000000C60100002B00000000010000000200000000000026010000DA0100003600000000020000000200000000000011020000EC0100003F000000000300000002000000000000F7020000FE01000048000000000400000002000000000000D60300000E0200004F000000000500000002000000000000AF0400001D02000055000000000600000002000000000000820500002A020000590000000007000000020000000000004E060000370200005D00000000080000000200000000000015070000420200005F000000000900000002000000000000D50700004B02000061000000000A000000020000000000008F0800005402000061000000000B00000002000000000000430900005B02000060000000000C00000002000000000000F0090000610200005D000000000D00000002000000000000980A0000660200005A000000000E00000002000000000000390B00006A02000055000000000F00000002000000000000D40B00006C02000050000000001000000002000000000000680C00006D020000490000000000000000030000000000003F0000009A0200002E00000000010000000300000000000032010000AF020000380000000002000000030000000000001E020000C30200004200000000030000000300000000000004030000D50200004A000000000400000003000000000000E4030000E602000051000000000500000003000000000000BD040000F60200005700000000060000000300000000000091050000050300005C0000000007000000030000000000005E060000130300005F000000000800000003000000000000250700001F03000061000000000900000003000000000000E60700002A03000063000000000A00000003000000000000A10800003303000063000000000B00000003000000000000550900003C03000062000000000C00000003000000000000040A0000430300005F000000000D00000003000000000000AC0A0000490300005C000000000E000000030000000000004E0B00004D03000057000000000F00000003000000000000E90B000051030000510000000010000000030000000000007F0C0000530300004A0000000000000000040000000000004A00000069030000300000000001000000040000000000003D0100007F0300003A0000000002000000040000000000002A020000940300004400000000030000000400000000000011030000A80300004C000000000400000004000000000000F1030000BA03000053000000000500000004000000000000CC040000CB03000059000000000600000004000000000000A0050000DB0300005E0000000007000000040000000000006E060000E90300006100000000080000000400000000000035070000F703000063000000000900000004000000000000F70700000304000065000000000A00000004000000000000B20800000D04000065000000000B00000004000000000000680900001704000063000000000C00000004000000000000170A00001F04000061000000000D00000004000000000000BF0A0000260400005E000000000E00000004000000000000620B00002C04000059000000000F00000004000000000000FE0B00003004000053000000001000000004000000000000940C0000330400004C000000000000000005000000000000540000003304000032000000000100000005000000000000480100004A0400003D0000000002000000050000000000003502000060040000460000000003000000050000000000001D030000750400004E000000000400000005000000000000FE0300008804000055000000000500000005000000000000D90400009A0400005B000000000600000005000000000000AE050000AB040000600000000007000000050000000000007D060000BB0400006300000000080000000500000000000045070000C90400006500000000090000000500000000000007080000D604000066000000000A00000005000000000000C3080000E204000066000000000B0000000500000000000079090000ED04000065000000000C00000005000000000000290A0000F604000063000000000D00000005000000000000D20A0000FE0400005F000000000E00000005000000000000760B0000050500005B000000000F00000005000000000000130C00000B05000055000000001000000005000000000000AA0C00000F0500004E0000000000000000060000000000005D000000F80400003400000000010000000600000000000052010000100500003F000000000200000006000000000000400200002705000048000000000300000006000000000000280300003D050000500000000004000000060000000000000A0400005105000057000000000500000006000000000000E6040000650500005D000000000600000006000000000000BB05000077050000620000000007000000060000000000008B060000870500006500000000080000000600000000000054070000970500006700000000090000000600000000000017080000A505000068000000000A00000006000000000000D4080000B205000068000000000B000000060000000000008A090000BE05000067000000000C000000060000000000003A0A0000C805000065000000000D00000006000000000000E50A0000D105000061000000000E00000006000000000000890B0000D90500005C000000000F00000006000000000000260C0000E005000057000000001000000006000000000000BE0C0000E50500004F00000000000000000700000000000066000000B8050000370000000001000000070000000000005B010000D1050000410000000002000000070000000000004A020000E90500004A000000000300000007000000000000330300000006000052000000000400000007000000000000150400001506000059000000000500000007000000000000F20400002A0600005F000000000600000007000000000000C80500003D06000064000000000700000007000000000000980600004F06000067000000000800000007000000000000620700005F06000069000000000900000007000000000000260800006E0600006A000000000A00000007000000000000E30800007C0600006A000000000B000000070000000000009A0900008906000069000000000C000000070000000000004B0A00009506000067000000000D00000007000000000000F60A00009F06000063000000000E000000070000000000009B0B0000A80600005E000000000F00000007000000000000390C0000B006000058000000001000000007000000000000D20C0000B6060000510000000000000000080000000000006E0000007206000039000000000100000008000000000000640100008C0600004300000000020000000800000000000053020000A60600004C0000000003000000080000000000003D030000BE0600005500000000040000000800000000000020040000D40600005B000000000500000008000000000000FD040000EA06000061000000000600000008000000000000D4050000FE06000066000000000700000008000000000000A5060000110700006900000000080000000800000000000070070000220700006B00000000090000000800000000000034080000330700006C000000000A00000008000000000000F2080000420700006C000000000B00000008000000000000AA090000500700006B000000000C000000080000000000005C0A00005C07000068000000000D00000008000000000000070B00006807000065000000000E00000008000000000000AD0B00007207000060000000000F000000080000000000004C0C00007B0700005A000000001000000008000000000000E50C0000820700005300000000000000000900000000000075000000270700003B0000000001000000090000000000006C01000043070000450000000002000000090000000000005C0200005D0700004F0000000003000000090000000000004603000076070000570000000004000000090000000000002B0400008E0700005E00000000050000000900000000000008050000A407000063000000000600000009000000000000E0050000BA07000068000000000700000009000000000000B1060000CE0700006B0000000008000000090000000000007D070000E00700006D00000000090000000900000000000042080000F20700006E000000000A0000000900000000000001090000020800006E000000000B00000009000000000000B9090000110800006D000000000C000000090000000000006C0A00001F0800006A000000000D00000009000000000000180B00002B08000067000000000E00000009000000000000BE0B00003608000062000000000F000000090000000000005E0C0000400800005C000000001000000009000000000000F70C0000490800005500000000000000000A0000000000007C000000D70700003D00000000010000000A00000000000073010000F40700004800000000020000000A000000000000640200000F0800005100000000030000000A0000000000004F030000290800005900000000040000000A00000000000034040000420800006000000000050000000A000000000000130500005A0800006500000000060000000A000000000000EB050000700800006A00000000070000000A000000000000BD060000850800006D00000000080000000A00000000000089070000990800006F00000000090000000A0000000000004F080000AC08000070000000000A0000000A0000000000000E090000BD08000070000000000B0000000A000000000000C8090000CD0800006F000000000C0000000A0000000000007B0A0000DC0800006C000000000D0000000A000000000000280B0000E908000068000000000E0000000A000000000000CE0B0000F608000063000000000F0000000A0000000000006F0C0000010900005D00000000100000000A000000000000090D00000A0900005600000000000000000B00000000000082000000820800004000000000010000000B0000000000007A010000A00800004A00000000020000000B0000000000006C020000BC0800005300000000030000000B00000000000058030000D80800005B00000000040000000B0000000000003D040000F20800006200000000050000000B0000000000001C0500000A0900006700000000060000000B000000000000F5050000220900006C00000000070000000B000000000000C8060000380900006F00000000080000000B000000000000950700004D0900007100000000090000000B0000000000005B0800006009000072000000000A0000000B0000000000001B0900007309000072000000000B0000000B000000000000D50900008409000070000000000C0000000B000000000000890A0000940900006E000000000D0000000B000000000000370B0000A30900006A000000000E0000000B000000000000DE0B0000B009000065000000000F0000000B0000000000007F0C0000BC0900005F00000000100000000B0000000000001A0D0000C70900005800000000000000000C00000000000088000000280900004200000000010000000C00000000000080010000470900004C00000000020000000C00000000000073020000640900005500000000030000000C0000000000005F030000810900005D00000000040000000C000000000000450400009C0900006400000000050000000C00000000000025050000B50900006900000000060000000C000000000000FF050000CE0900006E00000000070000000C000000000000D2060000E50900007100000000080000000C000000000000A0070000FB0900007300000000090000000C00000000000067080000100A000074000000000A0000000C00000000000028090000240A000074000000000B0000000C000000000000E2090000360A000072000000000C0000000C000000000000970A0000470A000070000000000D0000000C000000000000450B0000560A00006C000000000E0000000C000000000000ED0B0000650A000067000000000F0000000C0000000000008F0C0000720A00006100000000100000000C0000000000002B0D00007E0A00005A00000000000000000D0000000000008D000000C80900004400000000010000000D00000000000086010000E80900004E00000000020000000D00000000000079020000070A00005700000000030000000D00000000000066030000240A00005F00000000040000000D0000000000004D040000410A00006600000000050000000D0000000000002E0500005B0A00006C00000000060000000D00000000000008060000750A00007000000000070000000D000000000000DC0600008D0A00007300000000080000000D000000000000AA070000A50A00007500000000090000000D00000000000072080000BA0A000076000000000A0000000D00000000000034090000CF0A000076000000000B0000000D000000000000EF090000E20A000074000000000C0000000D000000000000A40A0000F40A000072000000000D0000000D000000000000530B0000050B00006E000000000E0000000D000000000000FC0B0000150B000069000000000F0000000D0000000000009F0C0000230B00006300000000100000000D0000000000003B0D0000300B00005B00000000000000000E00000000000091000000640A00004600000000010000000E0000000000008B010000850A00005100000000020000000E0000000000007F020000A50A00005A00000000030000000E0000000000006D030000C30A00006100000000040000000E00000000000054040000E00A00006800000000050000000E00000000000035050000FC0A00006E00000000060000000E00000000000010060000170B00007200000000070000000E000000000000E5060000300B00007500000000080000000E000000000000B4070000490B00007700000000090000000E0000000000007C080000600B000078000000000A0000000E0000000000003F090000750B000078000000000B0000000E000000000000FB0900008A0B000076000000000C0000000E000000000000B10A00009D0B000073000000000D0000000E000000000000600B0000AF0B000070000000000E0000000E0000000000000A0C0000BF0B00006B000000000F0000000E000000000000AD0C0000CF0B00006400000000100000000E0000000000004A0D0000DD0B00005D00000000000000000F00000000000094000000FA0A00004900000000010000000F0000000000008F0100001C0B00005300000000020000000F000000000000840200003D0B00005C00000000030000000F000000000000720300005D0B00006400000000040000000F0000000000005A0400007B0B00006A00000000050000000F0000000000003C050000980B00007000000000060000000F00000000000018060000B40B00007400000000070000000F000000000000EE060000CE0B00007700000000080000000F000000000000BD070000E80B00007900000000090000000F00000000000086080000000C00007A000000000A0000000F00000000000049090000160C00007A000000000B0000000F000000000000060A00002C0C000078000000000C0000000F000000000000BD0A0000400C000075000000000D0000000F0000000000006D0B0000530C000071000000000E0000000F000000000000170C0000650C00006C000000000F0000000F000000000000BB0C0000750C00006600000000100000000F000000000000590D0000850C00005F000000000000000010000000000000970000008B0B00004B00000000010000001000000000000093010000AE0B00005500000000020000001000000000000088020000D00B00005E00000000030000001000000000000077030000F10B00006600000000040000001000000000000060040000100C00006C000000000500000010000000000000430500002E0C0000720000000006000000100000000000001F0600004B0C000076000000000700000010000000000000F6060000670C000079000000000800000010000000000000C6070000810C00007B000000000900000010000000000000900800009A0C00007C000000000A0000001000000000000053090000B20C00007B000000000B00000010000000000000110A0000C90C00007A000000000C00000010000000000000C80A0000DE0C000077000000000D00000010000000000000790B0000F20C000073000000000E00000010000000000000240C0000050D00006E000000000F00000010000000000000C90C0000170D000068000000001000000010000000000000670D0000270D00006000000000000000000000000001000033000000250000001D010000000100000000000000010000250100003600000029010000000200000000000000010000110200004600000034010000000300000000000000010000F7020000550000003D010000000400000000000000010000D60300006200000046010000000500000000000000010000AF0400006F0000004D010000000600000000000000010000820500007A000000530100000007000000000000000100004F0600008300000058010000000800000000000000010000160700008C0000005B010000000900000000000000010000D6070000930000005E010000000A0000000000000001000090080000990000005F010000000B00000000000000010000440900009D0000005F010000000C00000000000000010000F2090000A10000005E010000000D000000000000000100009A0A0000A30000005C010000000E000000000000000100003B0B0000A400000059010000000F00000000000000010000D60B0000A3000000540100000010000000000000000100006B0C0000A20000004F0100000000000000010000000100003F000000060100002001000000010000000100000001000032010000180100002C0100000002000000010000000100001F0200002901000037010000000300000001000000010000050300003901000040010000000400000001000000010000E50300004801000049010000000500000001000000010000BF0400005501000050010000000600000001000000010000930500006101000056010000000700000001000000010000600600006C0100005B01000000080000000100000001000028070000750100005E010000000900000001000000010000E90700007E01000061010000000A00000001000000010000A40800008501000062010000000B00000001000000010000580900008B01000062010000000C00000001000000010000070A00008F01000061010000000D00000001000000010000AF0A0000920100005F010000000E00000001000000010000510B0000940100005C010000000F00000001000000010000ED0B00009501000057010000001000000001000000010000830C000095010000520100000000000000020000000100004B000000E1010000240100000001000000020000000100003F010000F5010000300100000002000000020000000100002C020000070200003A010000000300000002000000010000130300001802000044010000000400000002000000010000F4030000280200004C010000000500000002000000010000CE0400003602000053010000000600000002000000010000A30500004302000059010000000700000002000000010000710600004F0200005E010000000800000002000000010000390700005A02000062010000000900000002000000010000FB0700006302000064010000000A00000002000000010000B70800006C02000065010000000B000000020000000100006C0900007302000065010000000C000000020000000100001B0A00007802000064010000000D00000002000000010000C40A00007D02000062010000000E00000002000000010000670B0000800200005F010000000F00000002000000010000040C0000820200005A0100000010000000020000000100009A0C0000820200005501000000000000000300000001000056000000B7020000270100000001000000030000000100004A010000CC0200003301000000020000000300000001000038020000E00200003E01000000030000000300000001000020030000F20200004701000000040000000300000001000002040000030300004F010000000500000003000000010000DD0400001203000056010000000600000003000000010000B2050000200300005C010000000700000003000000010000810600002E030000610100000008000000030000000100004A07000039030000650100000009000000030000000100000C0800004403000067010000000A00000003000000010000C90800004D03000068010000000B000000030000000100007F0900005503000068010000000C000000030000000100002F0A00005C03000067010000000D00000003000000010000D90A00006203000065010000000E000000030000000100007C0B00006603000062010000000F000000030000000100001A0C0000690300005D010000001000000003000000010000B10C00006B0300005701000000000000000400000001000061000000890300002A010000000100000004000000010000560100009E0300003601000000020000000400000001000044020000B3030000410100000003000000040000000100002D030000C60300004A0100000004000000040000000100000F040000D803000053010000000500000004000000010000EB040000E90300005A010000000600000004000000010000C1050000F8030000600100000007000000040000000100009006000007040000640100000008000000040000000100005A07000014040000680100000009000000040000000100001D0800001F0400006A010000000A00000004000000010000DA0800002A0400006B010000000B0000000400000001000091090000330400006C010000000C00000004000000010000420A00003B0400006A010000000D00000004000000010000EC0A00004204000068010000000E00000004000000010000910B00004704000065010000000F000000040000000100002F0C00004B04000060010000001000000004000000010000C60C00004E0400005A0100000000000000050000000100006A000000540400002E010000000100000005000000010000600100006B0400003A0100000002000000050000000100004F020000810400004401000000030000000500000001000039030000950400004E0100000004000000050000000100001C040000A904000056010000000500000005000000010000F8040000BB0400005D010000000600000005000000010000CF050000CB040000630100000007000000050000000100009F060000DB0400006701000000080000000500000001000069070000E90400006B0100000009000000050000000100002D080000F60400006D010000000A00000005000000010000EB080000010500006F010000000B00000005000000010000A30900000B0500006F010000000C00000005000000010000540A0000150500006D010000000D00000005000000010000FF0A00001C0500006B010000000E00000005000000010000A40B00002305000068010000000F00000005000000010000430C00002805000063010000001000000005000000010000DC0C00002C0500005D010000000000000006000000010000740000001B050000310100000001000000060000000100006A010000330500003D0100000002000000060000000100005A0200004A05000047010000000300000006000000010000440300006005000051010000000400000006000000010000280400007405000059010000000500000006000000010000050500008705000060010000000600000006000000010000DC0500009905000066010000000700000006000000010000AD060000A90500006B01000000080000000600000001000078070000B90500006E0100000009000000060000000100003D080000C705000070010000000A00000006000000010000FB080000D305000072010000000B00000006000000010000B4090000DF05000072010000000C00000006000000010000660A0000E905000070010000000D00000006000000010000120B0000F20500006E010000000E00000006000000010000B70B0000FA0500006B010000000F00000006000000010000570C00000006000066010000001000000006000000010000F00C000005060000600100000000000000070000000100007C000000DD0500003501000000010000000700000001000073010000F605000040010000000200000007000000010000640200000E0600004B0100000003000000070000000100004F0300002506000054010000000400000007000000010000330400003A0600005C010000000500000007000000010000110500004E06000063010000000600000007000000010000E90500006106000069010000000700000007000000010000BB060000730600006E0100000008000000070000000100008707000083060000710100000009000000070000000100004C0800009206000074010000000A000000070000000100000B090000A006000075010000000B00000007000000010000C4090000AD06000075010000000C00000007000000010000770A0000B806000073010000000D00000007000000010000230B0000C206000071010000000E00000007000000010000CA0B0000CB0600006E010000000F000000070000000100006A0C0000D306000069010000001000000007000000010000040D0000D9060000630100000000000000080000000100008400000099060000380100000001000000080000000100007C010000B4060000440100000002000000080000000100006D020000CD0600004E01000000030000000800000001000059030000E4060000570100000004000000080000000100003E040000FB0600005F0100000005000000080000000100001D0500001007000066010000000600000008000000010000F5050000240700006C010000000700000008000000010000C806000037070000710100000008000000080000000100009407000049070000740100000009000000080000000100005A0800005907000077010000000A000000080000000100001A0900006807000078010000000B00000008000000010000D40900007607000078010000000C00000008000000010000870A00008207000076010000000D00000008000000010000350B00008D07000074010000000E00000008000000010000DC0B00009707000071010000000F000000080000000100007D0C0000A00700006C010000001000000008000000010000170D0000A8070000660100000000000000090000000100008B000000500700003B010000000100000009000000010000840100006C07000047010000000200000009000000010000760200008607000051010000000300000009000000010000620300009F0700005B01000000040000000900000001000048040000B70700006301000000050000000900000001000027050000CD0700006A01000000060000000900000001000001060000E20700006F010000000700000009000000010000D4060000F607000074010000000800000009000000010000A10700000908000077010000000900000009000000010000680800001A0800007A010000000A00000009000000010000280900002B0800007B010000000B00000009000000010000E3090000390800007B010000000C00000009000000010000970A00004708000079010000000D00000009000000010000450B00005308000077010000000E00000009000000010000ED0B00005F08000073010000000F000000090000000100008F0C0000680800006F0100000010000000090000000100002A0D0000710800006901000000000000000A00000001000092000000020800003F01000000010000000A0000000100008B0100001F0800004A01000000020000000A0000000100007E0200003A0800005501000000030000000A0000000100006B030000540800005E01000000040000000A000000010000510400006D0800006601000000050000000A00000001000032050000850800006D01000000060000000A0000000100000C0600009B0800007301000000070000000A000000010000E0060000B00800007701000000080000000A000000010000AD070000C40800007B01000000090000000A00000001000075080000D70800007D010000000A0000000A00000001000036090000E80800007E010000000B0000000A000000010000F1090000F80800007E010000000C0000000A000000010000A60A0000070900007D010000000D0000000A000000010000550B0000140900007A010000000E0000000A000000010000FE0B00002109000076010000000F0000000A000000010000A00C00002C0900007201000000100000000A0000000100003C0D0000350900006C01000000000000000B00000001000098000000AF0800004201000000010000000B00000001000092010000CD0800004E01000000020000000B00000001000085020000E90800005801000000030000000B00000001000073030000050900006101000000040000000B0000000100005A0400001F0900006901000000050000000B0000000100003B050000370900007001000000060000000B000000010000160600004F0900007601000000070000000B000000010000EB060000650900007A01000000080000000B000000010000B90700007A0900007E01000000090000000B000000010000810800008E09000080010000000A0000000B00000001000043090000A009000081010000000B0000000B000000010000FF090000B109000081010000000C0000000B000000010000B50A0000C109000080010000000D0000000B000000010000640B0000D00900007D010000000E0000000B0000000100000D0C0000DD09000079010000000F0000000B000000010000B00C0000E90900007501000000100000000B0000000100004D0D0000F40900006F01000000000000000C0000000100009D000000570900004501000000010000000C00000001000098010000760900005101000000020000000C0000000100008C020000930900005B01000000030000000C0000000100007A030000B00900006401000000040000000C00000001000062040000CB0900006C01000000050000000C00000001000044050000E50900007301000000060000000C00000001000020060000FD0900007901000000070000000C000000010000F5060000150A00007D01000000080000000C000000010000C40700002B0A00008101000000090000000C0000000100008D080000400A000083010000000A0000000C00000001000050090000530A000084010000000B0000000C0000000100000C0A0000660A000084010000000C0000000C000000010000C30A0000770A000083010000000D0000000C000000010000730B0000860A000080010000000E0000000C0000000100001D0C0000950A00007C010000000F0000000C000000010000C10C0000A20A00007801000000100000000C0000000100005E0D0000AE0A00007201000000000000000D000000010000A2000000F90900004901000000010000000D0000000100009D010000190A00005401000000020000000D00000001000092020000380A00005F01000000030000000D00000001000081030000560A00006801000000040000000D0000000100006A040000720A00007001000000050000000D0000000100004C0500008D0A00007701000000060000000D00000001000029060000A70A00007C01000000070000000D000000010000FF060000BF0A00008101000000080000000D000000010000CF070000D60A00008401000000090000000D00000001000098080000EC0A000086010000000A0000000D0000000100005C090000010B000087010000000B0000000D000000010000190A0000150B000087010000000C0000000D000000010000D00A0000270B000086010000000D0000000D000000010000810B0000380B000083010000000E0000000D0000000100002B0C0000470B00007F010000000F0000000D000000010000D00C0000560B00007A01000000100000000D0000000100006E0D0000630B00007401000000000000000E000000010000A6000000970A00004C01000000010000000E000000010000A2010000B80A00005801000000020000000E00000001000098020000D80A00006201000000030000000E00000001000087030000F60A00006B01000000040000000E00000001000071040000140B00007301000000050000000E00000001000054050000300B00007A01000000060000000E000000010000310600004B0B00007F01000000070000000E00000001000008070000640B00008401000000080000000E000000010000D80700007D0B00008701000000090000000E000000010000A3080000940B000089010000000A0000000E00000001000067090000AA0B00008A010000000B0000000E000000010000250A0000BE0B00008A010000000C0000000E000000010000DD0A0000D20B000089010000000D0000000E0000000100008E0B0000E40B000086010000000E0000000E000000010000390C0000F50B000082010000000F0000000E000000010000DF0C0000040C00007D01000000100000000E0000000100007E0D0000120C00007701000000000000000F000000010000AA0000002F0B00004F01000000010000000F000000010000A6010000510B00005B01000000020000000F0000000100009D020000720B00006501000000030000000F0000000100008D030000920B00006E01000000040000000F00000001000077040000B00B00007601000000050000000F0000000100005B050000CE0B00007D01000000060000000F00000001000039060000EA0B00008301000000070000000F00000001000010070000050C00008701000000080000000F000000010000E10700001E0C00008A01000000090000000F000000010000AD080000360C00008C010000000A0000000F000000010000710900004D0C00008D010000000B0000000F000000010000300A0000630C00008D010000000C0000000F000000010000E90A0000770C00008C010000000D0000000F0000000100009B0B00008B0C000089010000000E0000000F000000010000470C00009D0C000085010000000F0000000F000000010000ED0C0000AD0C00008001000000100000000F0000000100008C0D0000BD0C00007A010000000000000010000000010000AD000000C20B000053010000000100000010000000010000AA010000E50B00005E010000000200000010000000010000A1020000070C00006801000000030000001000000001000092030000280C0000720100000004000000100000000100007D040000480C00007901000000050000001000000001000061050000660C00008001000000060000001000000001000040060000840C000086010000000700000010000000010000180700009F0C00008A010000000800000010000000010000EA070000BA0C00008D010000000900000010000000010000B6080000D30C00008F010000000A000000100000000100007B090000EC0C000090010000000B000000100000000100003B0A0000020D000090010000000C00000010000000010000F40A0000180D00008F010000000D00000010000000010000A70B00002C0D00008C010000000E00000010000000010000540C00003F0D000088010000000F00000010000000010000FA0C0000510D0000830100000010000000100000000100009B0D0000620D00007D010000000000000000000000020000490000003B0000000E0200000001000000000000000200003D0100004B0000001B0200000002000000000000000200002A0200005B00000027020000000300000000000000020000110300006900000032020000000400000000000000020000F2030000760000003C020000000500000000000000020000CD0400008200000044020000000600000000000000020000A20500008C0000004B020000000700000000000000020000700600009600000051020000000800000000000000020000380700009E00000056020000000900000000000000020000FA070000A40000005A020000000A00000000000000020000B6080000AA0000005C020000000B000000000000000200006C090000AE0000005E020000000C000000000000000200001B0A0000B10000005E020000000D00000000000000020000C50A0000B20000005D020000000E00000000000000020000680B0000B30000005B020000000F00000000000000020000050C0000B2000000580200000010000000000000000200009B0C0000B000000053020000000000000001000000020000550000001D01000013020000000100000001000000020000490100002F0100002002000000020000000100000002000038020000400100002C020000000300000001000000020000200300004F01000036020000000400000001000000020000010400005D01000040020000000500000001000000020000DD0400006A01000048020000000600000001000000020000B205000076010000500200000007000000010000000200008106000080010000560200000008000000010000000200004A0700008A0100005A0200000009000000010000000200000D080000910100005E020000000A00000001000000020000CA0800009801000061020000000B00000001000000020000800900009D01000062020000000C00000001000000020000300A0000A201000062020000000D00000001000000020000DA0A0000A401000061020000000E000000010000000200007E0B0000A60100005F020000000F000000010000000200001C0C0000A60100005C020000001000000001000000020000B30C0000A50100005702000000000000000200000002000061000000FB01000017020000000100000002000000020000560100000E020000240200000002000000020000000200004502000020020000300200000003000000020000000200002D030000300200003B020000000400000002000000020000100400004002000044020000000500000002000000020000EC0400004E0200004D020000000600000002000000020000C20500005B0200005402000000070000000200000002000092060000660200005A0200000008000000020000000200005C070000700200005F0200000009000000020000000200001F0800007A02000062020000000A00000002000000020000DD0800008102000065020000000B00000002000000020000940900008802000066020000000C00000002000000020000450A00008D02000066020000000D00000002000000020000EF0A00009102000065020000000E00000002000000020000940B00009402000063020000000F00000002000000020000320C00009602000060020000001000000002000000020000CA0C0000960200005B0200000000000000030000000200006C000000D30200001C02000000010000000300000002000061010000E70200002902000000020000000300000002000051020000FA020000350200000003000000030000000200003A0300000C0300003F0200000004000000030000000200001E0400001D03000049020000000500000003000000020000FB0400002C03000051020000000600000003000000020000D20500003A03000058020000000700000003000000020000A2060000470300005E0200000008000000030000000200006D0700005203000063020000000900000003000000020000310800005C03000067020000000A00000003000000020000EF0800006503000069020000000B00000003000000020000A70900006D0300006B020000000C00000003000000020000580A0000740300006B020000000D00000003000000020000040B0000790300006A020000000E00000003000000020000A90B00007D03000067020000000F00000003000000020000480C00007F03000064020000001000000003000000020000E10C0000810300006002000000000000000400000002000076000000A6030000200200000001000000040000000200006C010000BB0300002D0200000002000000040000000200005D020000D00300003902000000030000000400000002000047030000E3030000440200000004000000040000000200002B040000F40300004D020000000500000004000000020000090500000504000055020000000600000004000000020000E0050000140400005D020000000700000004000000020000B206000022040000630200000008000000040000000200007D0700002F04000067020000000900000004000000020000420800003A0400006B020000000A0000000400000002000000090000440400006D020000000B00000004000000020000B90900004D0400006F020000000C000000040000000200006B0A0000550400006F020000000D00000004000000020000170B00005B0400006E020000000E00000004000000020000BD0B0000600400006C020000000F000000040000000200005D0C00006404000068020000001000000004000000020000F70C00006704000064020000000000000005000000020000800000007404000025020000000100000005000000020000770100008A0400003202000000020000000500000002000068020000A00400003D02000000030000000500000002000053030000B40400004802000000040000000500000002000037040000C70400005102000000050000000500000002000016050000D90400005A020000000600000005000000020000EE050000E904000061020000000700000005000000020000C0060000F8040000670200000008000000050000000200008C070000060500006C02000000090000000500000002000052080000130500006F020000000A00000005000000020000110900001E05000072020000000B00000005000000020000CB0900002805000073020000000C000000050000000200007E0A00003105000073020000000D000000050000000200002B0B00003905000072020000000E00000005000000020000D10B00003F05000070020000000F00000005000000020000720C0000440500006C0200000010000000050000000200000C0D00004805000068020000000000000006000000020000890000003C05000029020000000100000006000000020000810100005405000036020000000200000006000000020000720200006B050000420200000003000000060000000200005E030000800500004C02000000040000000600000002000043040000940500005602000000050000000600000002000023050000A70500005E020000000600000006000000020000FC050000B905000065020000000700000006000000020000CE060000C90500006B0200000008000000060000000200009B070000D80500007002000000090000000600000002000061080000E605000073020000000A0000000600000002000022090000F305000076020000000B00000006000000020000DC090000FE05000077020000000C000000060000000200008F0A00000806000077020000000D000000060000000200003D0B00001106000076020000000E00000006000000020000E40B00001806000074020000000F00000006000000020000860C00001E06000070020000001000000006000000020000210D0000230600006C02000000000000000700000002000091000000000600002D0200000001000000070000000200008A010000190600003A0200000002000000070000000200007C02000031060000460200000003000000070000000200006903000047060000510200000004000000070000000200004F0400005D0600005A0200000005000000070000000200002F050000710600006202000000060000000700000002000008060000830600006A020000000700000007000000020000DC060000950600006F020000000800000007000000020000A9070000A50600007402000000090000000700000002000070080000B406000078020000000A0000000700000002000031090000C20600007A020000000B00000007000000020000EC090000CE0600007B020000000C00000007000000020000A10A0000DA0600007B020000000D000000070000000200004F0B0000E30600007A020000000E00000007000000020000F70B0000EC06000078020000000F00000007000000020000990C0000F406000075020000001000000007000000020000350D0000FA0600007002000000000000000800000002000099000000BE0600003202000000010000000800000002000092010000D90600003F02000000020000000800000002000085020000F20600004B02000000030000000800000002000072030000090700005502000000040000000800000002000059040000200700005F0200000005000000080000000200003A050000350700006702000000060000000800000002000014060000490700006E020000000700000008000000020000E90600005C07000074020000000800000008000000020000B70700006D070000780200000009000000080000000200007F0800007D0700007C020000000A00000008000000020000400900008C0700007E020000000B00000008000000020000FC0900009A07000080020000000C00000008000000020000B10A0000A607000080020000000D00000008000000020000600B0000B10700007E020000000E00000008000000020000090C0000BB0700007C020000000F00000008000000020000AC0C0000C407000079020000001000000008000000020000480D0000CB07000074020000000000000009000000020000A000000077070000360200000001000000090000000200009A01000093070000430200000002000000090000000200008E020000AD0700004F0200000003000000090000000200007C030000C60700005A02000000040000000900000002000063040000DE0700006302000000050000000900000002000045050000F40700006B020000000600000009000000020000200600000908000072020000000700000009000000020000F50600001D08000078020000000800000009000000020000C4070000300800007D0200000009000000090000000200008C0800004108000080020000000A000000090000000200004F0900005108000083020000000B000000090000000200000B0A00006008000084020000000C00000009000000020000C10A00006D08000084020000000D00000009000000020000710B00007A08000083020000000E000000090000000200001A0C00008508000080020000000F00000009000000020000BE0C00008F0800007D0200000010000000090000000200005B0D0000970800007802000000000000000A000000020000A60000002B0800003B02000000010000000A000000020000A1010000480800004802000000020000000A00000002000096020000630800005302000000030000000A000000020000840300007D0800005E02000000040000000A0000000200006D040000960800006702000000050000000A0000000200004F050000AE0800006F02000000060000000A0000000200002B060000C40800007602000000070000000A00000002000000070000D90800007C02000000080000000A000000020000D0070000ED0800008102000000090000000A000000020000990800000009000085020000000A0000000A0000000200005C0900001109000087020000000B0000000A000000020000190A00002109000088020000000C0000000A000000020000D00A00003009000088020000000D0000000A000000020000810B00003D09000087020000000E0000000A0000000200002B0C00004909000084020000000F0000000A000000020000CF0C0000540900008102000000100000000A0000000200006D0D00005E0900007C02000000000000000B000000020000AC000000DA0800003F02000000010000000B000000020000A8010000F80800004C02000000020000000B0000000200009D020000150900005802000000030000000B0000000200008C030000300900006202000000040000000B000000020000750400004A0900006C02000000050000000B00000002000058050000630900007402000000060000000B000000020000350600007A0900007B02000000070000000B0000000200000B070000900900008102000000080000000B000000020000DC070000A50900008502000000090000000B000000020000A6080000B909000089020000000A0000000B0000000200006A090000CB0900008B020000000B0000000B000000020000270A0000DD0900008C020000000C0000000B000000020000DF0A0000ED0900008C020000000D0000000B000000020000900B0000FB0900008B020000000E0000000B0000000200003B0C0000090A000089020000000F0000000B000000020000E00C0000150A00008502000000100000000B0000000200007E0D0000200A00008002000000000000000C000000020000B1000000840900004402000000010000000C000000020000AE010000A30900005102000000020000000C000000020000A4020000C10900005C02000000030000000C00000002000094030000DD0900006702000000040000000C0000000200007E040000F80900007002000000050000000C00000002000061050000120A00007802000000060000000C0000000200003F0600002B0A00007F02000000070000000C00000002000016070000420A00008502000000080000000C000000020000E7070000580A00008A02000000090000000C000000020000B10800006D0A00008D020000000A0000000C00000002000076090000810A00008F020000000B0000000C000000020000340A0000930A000090020000000C0000000C000000020000ED0A0000A40A000090020000000D0000000C0000000200009F0B0000B40A00008F020000000E0000000C0000000200004A0C0000C30A00008D020000000F0000000C000000020000F00C0000D00A00008902000000100000000C0000000200008F0D0000DC0A00008502000000000000000D000000020000B6000000280A00004802000000010000000D000000020000B3010000480A00005502000000020000000D000000020000AA020000670A00006102000000030000000D0000000200009B030000850A00006B02000000040000000D00000002000085040000A10A00007402000000050000000D00000002000069050000BC0A00007D02000000060000000D00000002000047060000D60A00008302000000070000000D0000000200001F070000EF0A00008902000000080000000D000000020000F1070000060B00008E02000000090000000D000000020000BD0800001C0B000091020000000A0000000D00000002000082090000310B000094020000000B0000000D000000020000410A0000450B000095020000000C0000000D000000020000FA0A0000570B000095020000000D0000000D000000020000AD0B0000680B000093020000000E0000000D000000020000590C0000780B000091020000000F0000000D000000020000FF0C0000860B00008D02000000100000000D000000020000A00D0000940B00008902000000000000000E000000020000BA000000C80A00004D02000000010000000E000000020000B8010000E90A00005A02000000020000000E000000020000AF020000090B00006502000000030000000E000000020000A1030000280B00007002000000040000000E0000000200008C040000450B00007902000000050000000E00000002000071050000620B00008102000000060000000E000000020000500600007D0B00008802000000070000000E00000002000028070000960B00008E02000000080000000E000000020000FB070000AF0B00009202000000090000000E000000020000C7080000C60B000096020000000A0000000E0000000200008D090000DC0B000098020000000B0000000E0000000200004D0A0000F10B000099020000000C0000000E000000020000070B0000040C000099020000000D0000000E000000020000BA0B0000170C000098020000000E0000000E000000020000670C0000280C000095020000000F0000000E0000000200000E0D0000370C00009202000000100000000E000000020000AF0D0000460C00008D02000000000000000F000000020000BD000000620B00005102000000010000000F000000020000BC010000840B00005E02000000020000000F000000020000B4020000A50B00006A02000000030000000F000000020000A6030000C50B00007402000000040000000F00000002000092040000E40B00007D02000000050000000F00000002000078050000020C00008502000000060000000F000000020000570600001E0C00008C02000000070000000F00000002000031070000390C00009202000000080000000F00000002000004080000530C00009602000000090000000F000000020000D10800006B0C00009A020000000A0000000F00000002000098090000820C00009C020000000B0000000F000000020000580A0000980C00009D020000000C0000000F000000020000130B0000AD0C00009D020000000D0000000F000000020000C70B0000C00C00009C020000000E0000000F000000020000750C0000D20C000099020000000F0000000F0000000200001D0D0000E30C00009602000000100000000F000000020000BE0D0000F30C000091020000000000000010000000020000C0000000F70B000056020000000100000010000000020000BF0100001A0C000062020000000200000010000000020000B80200003D0C00006E020000000300000010000000020000AB0300005E0C000078020000000400000010000000020000980400007E0C0000820200000005000000100000000200007E0500009C0C00008A0200000006000000100000000200005F060000BA0C00009102000000070000001000000002000039070000D60C0000960200000008000000100000000200000C080000F10C00009B020000000900000010000000020000DA0800000A0D00009E020000000A00000010000000020000A2090000230D0000A0020000000B00000010000000020000630A00003A0D0000A1020000000C000000100000000200001E0B0000500D0000A1020000000D00000010000000020000D30B0000640D0000A0020000000E00000010000000020000820C0000780D00009D020000000F000000100000000200002A0D00008A0D00009A020000001000000010000000020000CC0D00009B0D0000950200000000000000000000000300005D0000004E000000FB020000000100000000000000030000520100005E00000009030000000200000000000000030000410200006E000000160300000003000000000000000300002A0300007B000000220300000004000000000000000300000D040000880000002D030000000500000000000000030000E90400009300000036030000000600000000000000030000C00500009D0000003F03000000070000000000000003000090060000A60000004603000000080000000000000003000059070000AD0000004C0300000009000000000000000300001D080000B400000051030000000A00000000000000030000DB080000B900000055030000000B0000000000000003000092090000BC00000057030000000C00000000000000030000430A0000BF00000059030000000D00000000000000030000EE0A0000C000000059030000000E00000000000000030000920B0000C000000058030000000F00000000000000030000310C0000BF00000056030000001000000000000000030000C90C0000BC000000530300000000000000010000000300006900000033010000000300000001000000010000000300005F010000440100000E0300000002000000010000000300004F020000550100001B0300000003000000010000000300003803000064010000270300000004000000010000000300001C0400007101000032030000000500000001000000030000F90400007E0100003C030000000600000001000000030000D00500008901000044030000000700000001000000030000A1060000930100004B0300000008000000010000000300006B0700009C0100005203000000090000000100000003000030080000A301000056030000000A00000001000000030000EE080000A90100005A030000000B00000001000000030000A6090000AE0100005D030000000C00000001000000030000580A0000B20100005E030000000D00000001000000030000030B0000B40100005E030000000E00000001000000030000A90B0000B60100005E030000000F00000001000000030000480C0000B60100005B030000001000000001000000030000E10C0000B4010000580300000000000000020000000300007400000012020000060300000001000000020000000300006B01000025020000140300000002000000020000000300005C020000360200002103000000030000000200000003000046030000470200002D0300000004000000020000000300002A0400005602000038030000000500000002000000030000080500006302000041030000000600000002000000030000E0050000700200004A030000000700000002000000030000B10600007B020000510300000008000000020000000300007D0700008502000057030000000900000002000000030000420800008E0200005C030000000A00000002000000030000010900009502000060030000000B00000002000000030000BA0900009B02000062030000000C000000020000000300006C0A0000A002000064030000000D00000002000000030000190B0000A402000064030000000E00000002000000030000BF0B0000A602000063030000000F000000020000000300005F0C0000A702000061030000001000000002000000030000F80C0000A70200005D0300000000000000030000000300007F000000EC0200000B03000000010000000300000003000077010000000300001903000000020000000300000003000068020000130300002703000000030000000300000003000053030000240300003203000000040000000300000003000038040000350300003D030000000500000003000000030000170500004403000047030000000600000003000000030000EF050000510300004F030000000700000003000000030000C10600005E030000560300000008000000030000000300008E070000690300005C030000000900000003000000030000530800007303000061030000000A00000003000000030000130900007C03000065030000000B00000003000000030000CD0900008303000068030000000C00000003000000030000800A00008903000069030000000D000000030000000300002D0B00008E03000069030000000E00000003000000030000D40B00009203000068030000000F00000003000000030000750C000094030000660300000010000000030000000300000F0D0000950300006303000000000000000400000003000089000000C10300001103000000010000000400000003000082010000D60300001F03000000020000000400000003000074020000EA0300002C0300000003000000040000000300005F030000FD03000038030000000400000004000000030000450400000F04000043030000000500000004000000030000240500001F0400004C030000000600000004000000030000FE0500002E04000055030000000700000004000000030000D10600003B0400005C0300000008000000040000000300009E0700004804000062030000000900000004000000030000640800005304000067030000000A00000004000000030000250900005D0400006A030000000B00000004000000030000DF090000650400006D030000000C00000004000000030000930A00006D0400006E030000000D00000004000000030000410B0000730400006F030000000E00000004000000030000E80B0000780400006E030000000F000000040000000300008A0C00007B0400006B030000001000000004000000030000250D00007E040000680300000000000000050000000300009300000091040000160300000001000000050000000300008C010000A8040000250300000002000000050000000300007F020000BD040000320300000003000000050000000300006B030000D10400003D03000000040000000500000003000052040000E30400004803000000050000000500000003000032050000F5040000520300000006000000050000000300000C060000050500005A030000000700000005000000030000DF0600001405000061030000000800000005000000030000AD0700002105000067030000000900000005000000030000740800002E0500006C030000000A00000005000000030000360900003905000070030000000B00000005000000030000F10900004305000072030000000C00000005000000030000A50A00004B05000074030000000D00000005000000030000540B00005305000074030000000E00000005000000030000FC0B00005905000073030000000F000000050000000300009F0C00005E050000710300000010000000050000000300003B0D0000610500006D0300000000000000060000000300009C0000005C0500001C03000000010000000600000003000095010000730500002A030000000200000006000000030000890200008A05000037030000000300000006000000030000760300009F050000430300000004000000060000000300005D040000B30500004E0300000005000000060000000300003E050000C60500005703000000060000000600000003000019060000D705000060030000000700000006000000030000EE060000E705000067030000000800000006000000030000BC070000F60500006D030000000900000006000000030000840800000306000072030000000A00000006000000030000460900001006000075030000000B00000006000000030000020A00001B06000078030000000C00000006000000030000B70A00002506000079030000000D00000006000000030000670B00002D06000079030000000E00000006000000030000100C00003506000078030000000F00000006000000030000B30C00003B060000760300000010000000060000000300004F0D00003F06000073030000000000000007000000030000A400000021060000210300000001000000070000000300009E0100003A0600003003000000020000000700000003000093020000520600003D030000000300000007000000030000810300006806000049030000000400000007000000030000690400007D060000530300000005000000070000000300004A050000910600005D03000000060000000700000003000026060000A406000065030000000700000007000000030000FB060000B50600006C030000000800000007000000030000CA070000C50600007203000000090000000700000003000093080000D406000077030000000A0000000700000003000056090000E20600007B030000000B00000007000000030000120A0000EE0600007D030000000C00000007000000030000C80A0000F90600007E030000000D00000007000000030000780B0000030700007F030000000E00000007000000030000220C00000B0700007E030000000F00000007000000030000C60C0000130700007B030000001000000007000000030000640D00001907000078030000000000000008000000030000AB000000E106000027030000000100000008000000030000A7010000FC060000350300000002000000080000000300009C02000014070000420300000003000000080000000300008B0300002C0700004E030000000400000008000000030000730400004207000059030000000500000008000000030000560500005807000062030000000600000008000000030000320600006B0700006A030000000700000008000000030000080700007E07000072030000000800000008000000030000D80700008F07000078030000000900000008000000030000A10800009F0700007C030000000A0000000800000003000065090000AE07000080030000000B00000008000000030000220A0000BC07000083030000000C00000008000000030000D90A0000C807000084030000000D000000080000000300008A0B0000D307000084030000000E00000008000000030000340C0000DD07000083030000000F00000008000000030000D90C0000E507000081030000001000000008000000030000770D0000ED0700007D030000000000000009000000030000B20000009D0700002D030000000100000009000000030000AE010000B80700003B030000000200000009000000030000A4020000D20700004803000000030000000900000003000094030000EB070000540300000004000000090000000300007D040000020800005E0300000005000000090000000300006005000019080000680300000006000000090000000300003D0600002E08000070030000000700000009000000030000140700004208000077030000000800000009000000030000E5070000540800007D030000000900000009000000030000AF0800006508000082030000000A00000009000000030000730900007608000085030000000B00000009000000030000310A00008408000088030000000C00000009000000030000E90A00009208000089030000000D000000090000000300009A0B00009E08000089030000000E00000009000000030000460C0000A908000088030000000F00000009000000030000EB0C0000B3080000860300000010000000090000000300008A0D0000BB0800008303000000000000000A000000030000B9000000530800003203000000010000000A000000030000B50100006F0800004003000000020000000A000000030000AC0200008A0800004D03000000030000000A0000000300009C030000A50800005903000000040000000A00000003000086040000BD0800006403000000050000000A0000000300006A050000D50800006D03000000060000000A00000003000048060000EB0800007503000000070000000A00000003000020070000000900007D03000000080000000A000000030000F1070000140900008203000000090000000A000000030000BC0800002609000087030000000A0000000A00000003000081090000380900008B030000000B0000000A000000030000400A0000480900008D030000000C0000000A000000030000F80A0000560900008F030000000D0000000A000000030000AA0B0000640900008F030000000E0000000A000000030000570C0000700900008E030000000F0000000A000000030000FC0C00007B0900008B03000000100000000A0000000300009C0D0000850900008803000000000000000B000000030000BE000000030900003803000000010000000B000000030000BC010000210900004603000000020000000B000000030000B30200003E0900005303000000030000000B000000030000A4030000590900005F03000000040000000B0000000300008F040000730900006903000000050000000B000000030000740500008C0900007303000000060000000B00000003000052060000A30900007B03000000070000000B0000000300002A070000BA0900008203000000080000000B000000030000FD070000CF0900008803000000090000000B000000030000C8080000E20900008D030000000A0000000B0000000300008E090000F509000090030000000B0000000B0000000300004D0A0000060A000093030000000C0000000B000000030000070B0000160A000094030000000D0000000B000000030000BA0B0000250A000094030000000E0000000B000000030000670C0000320A000093030000000F0000000B0000000300000D0D00003E0A00009103000000100000000B000000030000AE0D0000490A00008D03000000000000000C000000030000C3000000AF0900003D03000000010000000C000000030000C2010000CE0900004B03000000020000000C000000030000BA020000EC0900005803000000030000000C000000030000AB030000080A00006403000000040000000C00000003000097040000230A00006F03000000050000000C0000000300007D0500003D0A00007803000000060000000C0000000300005C060000560A00008003000000070000000C000000030000350700006E0A00008703000000080000000C00000003000008080000840A00008D03000000090000000C000000030000D4080000990A000092030000000A0000000C0000000300009B090000AD0A000096030000000B0000000C0000000300005B0A0000BF0A000098030000000C0000000C000000030000150B0000D00A000099030000000D0000000C000000030000C90B0000E00A000099030000000E0000000C000000030000760C0000EF0A000098030000000F0000000C0000000300001E0D0000FC0A00009603000000100000000C000000030000BF0D0000080B00009303000000000000000D000000030000C8000000550A00004303000000010000000D000000030000C7010000750A00005103000000020000000D000000030000C0020000940A00005E03000000030000000D000000030000B2030000B20A00006A03000000040000000D0000000300009F040000CF0A00007403000000050000000D00000003000085050000EA0A00007E03000000060000000D00000003000065060000040B00008603000000070000000D0000000300003E0700001D0B00008D03000000080000000D00000003000012080000340B00009303000000090000000D000000030000DF0800004A0B000098030000000A0000000D000000030000A60900005F0B00009B030000000B0000000D000000030000670A0000730B00009D030000000C0000000D000000030000220B0000850B00009F030000000D0000000D000000030000D70B0000970B00009F030000000E0000000D000000030000850C0000A60B00009E030000000F0000000D0000000300002D0D0000B50B00009B03000000100000000D000000030000CF0D0000C20B00009803000000000000000E000000030000CC000000F60A00004903000000010000000E000000030000CB010000180B00005703000000020000000E000000030000C5020000380B00006303000000030000000E000000030000B8030000570B00006F03000000040000000E000000030000A5040000750B00007A03000000050000000E0000000300008C050000910B00008303000000060000000E0000000300006D060000AD0B00008B03000000070000000E00000003000047070000C60B00009203000000080000000E0000000300001C080000DF0B00009803000000090000000E000000030000EA080000F70B00009D030000000A0000000E000000030000B20900000D0C0000A1030000000B0000000E000000030000730A0000220C0000A3030000000C0000000E0000000300002F0B0000350C0000A4030000000D0000000E000000030000E40B0000480C0000A4030000000E0000000E000000030000930C0000590C0000A3030000000F0000000E0000000300003C0D0000690C0000A103000000100000000E000000030000DF0D0000770C00009D03000000000000000F000000030000CF000000920B00004E03000000010000000F000000030000CF010000B50B00005C03000000020000000F000000030000CA020000D70B00006903000000030000000F000000030000BE030000F70B00007503000000040000000F000000030000AB040000160C00007F03000000050000000F00000003000093050000330C00008903000000060000000F00000003000074060000500C00009103000000070000000F000000030000500700006B0C00009803000000080000000F00000003000025080000850C00009E03000000090000000F000000030000F40800009E0C0000A2030000000A0000000F000000030000BC090000B50C0000A6030000000B0000000F0000000300007F0A0000CB0C0000A8030000000C0000000F0000000300003B0B0000E00C0000A9030000000D0000000F000000030000F10B0000F40C0000A9030000000E0000000F000000030000A10C0000060D0000A8030000000F0000000F0000000300004A0D0000170D0000A603000000100000000F000000030000EE0D0000270D0000A3030000000000000010000000030000D1000000290C000054030000000100000010000000030000D30100004D0C000062030000000200000010000000030000CE020000700C00006F030000000300000010000000030000C2030000910C00007A030000000400000010000000030000B1040000B20C00008503000000050000001000000003000099050000D00C00008E0300000006000000100000000300007B060000EE0C000096030000000700000010000000030000570700000B0D00009D0300000008000000100000000300002D080000260D0000A3030000000900000010000000030000FD080000400D0000A8030000000A00000010000000030000C6090000580D0000AB030000000B00000010000000030000890A0000700D0000AE030000000C00000010000000030000460B0000860D0000AF030000000D00000010000000030000FD0B00009A0D0000AF030000000E00000010000000030000AE0C0000AE0D0000AE030000000F00000010000000030000580D0000C00D0000AB030000001000000010000000030000FC0D0000D10D0000A80300000000000000000000000400006F00000060000000E20300000001000000000000000400006601000070000000F1030000000200000000000000040000570200007E00000000040000000300000000000000040000410300008B0000000D04000000040000000000000004000026040000980000001904000000050000000000000004000004050000A200000024040000000600000000000000040000DC050000AC0000002D040000000700000000000000040000AD060000B40000003604000000080000000000000004000079070000BB0000003D0400000009000000000000000400003E080000C100000043040000000A00000000000000040000FD080000C600000048040000000B00000000000000040000B6090000C90000004C040000000C00000000000000040000690A0000CB0000004F040000000D00000000000000040000150B0000CB00000050040000000E00000000000000040000BB0B0000CB00000050040000000F000000000000000400005B0C0000C900000050040000001000000000000000040000F50C0000C60000004E0400000000000000010000000400007B00000046010000E90300000001000000010000000400007301000057010000F80300000002000000010000000400006402000067010000060400000003000000010000000400004F030000760100001304000000040000000100000004000035040000830100001F040000000500000001000000040000130500008F0100002A040000000600000001000000040000EC0500009A01000034040000000700000001000000040000BE060000A40100003C0400000008000000010000000400008B070000AC0100004404000000090000000100000004000051080000B30100004A040000000A0000000100000004000011090000B90100004F040000000B00000001000000040000CA090000BD01000053040000000C000000010000000400007E0A0000C101000055040000000D000000010000000400002B0B0000C301000057040000000E00000001000000040000D20B0000C301000057040000000F00000001000000040000730C0000C3010000560400000010000000010000000400000D0D0000C1010000540400000000000000020000000400008600000028020000EF0300000001000000020000000400007F0100003A020000FF030000000200000002000000040000710200004B0200000D0400000003000000020000000400005D0300005B0200001A040000000400000002000000040000430400006A02000026040000000500000002000000040000220500007702000031040000000600000002000000040000FC050000830200003B040000000700000002000000040000CF0600008E020000430400000008000000020000000400009C070000970200004A04000000090000000200000004000063080000A002000050040000000A0000000200000004000023090000A702000055040000000B00000002000000040000DE090000AD02000059040000000C00000002000000040000920A0000B10200005C040000000D00000002000000040000400B0000B40200005D040000000E00000002000000040000E80B0000B60200005E040000000F00000002000000040000890C0000B70200005D040000001000000002000000040000250D0000B70200005B0400000000000000030000000400009100000004030000F60300000001000000030000000400008A01000017030000050400000002000000030000000400007D0200002A030000140400000003000000030000000400006A0300003B03000021040000000400000003000000040000500400004B0300002D0400000005000000030000000400003105000059030000380400000006000000030000000400000B0600006703000041040000000700000003000000040000DF060000730300004A040000000800000003000000040000AD0700007E03000051040000000900000003000000040000740800008703000057040000000A0000000300000004000036090000900300005C040000000B00000003000000040000F10900009703000060040000000C00000003000000040000A60A00009D03000062040000000D00000003000000040000550B0000A103000064040000000E00000003000000040000FD0B0000A403000064040000000F000000030000000400009F0C0000A6030000630400000010000000030000000400003C0D0000A7030000610400000000000000040000000400009B000000DB030000FD03000000010000000400000004000095010000F00300000C04000000020000000400000004000089020000030400001A0400000003000000040000000400007603000016040000270400000004000000040000000400005D04000027040000330400000005000000040000000400003F050000370400003E0400000006000000040000000400001A0600004504000048040000000700000004000000040000EE0600005304000050040000000800000004000000040000BD0700005F04000057040000000900000004000000040000850800006A0400005E040000000A00000004000000040000470900007304000063040000000B00000004000000040000030A00007C04000066040000000C00000004000000040000B90A00008304000069040000000D00000004000000040000680B0000890400006A040000000E00000004000000040000120C00008D0400006B040000000F00000004000000040000B50C0000900400006A040000001000000004000000040000520D00009304000068040000000000000005000000040000A4000000AC040000030400000001000000050000000400009F010000C30400001304000000020000000500000004000093020000D80400002104000000030000000500000004000082030000EB0400002E0400000004000000050000000400006A040000FE0400003A0400000005000000050000000400004C0500000F05000045040000000600000005000000040000270600001F0500004E040000000700000005000000040000FD0600002D05000057040000000800000005000000040000CC0700003B0500005E040000000900000005000000040000950800004705000064040000000A00000005000000040000580900005205000069040000000B00000005000000040000150A00005B0500006D040000000C00000005000000040000CB0A0000640500006F040000000D000000050000000400007C0B00006B05000071040000000E00000005000000040000260C00007105000071040000000F00000005000000040000CA0C00007505000070040000001000000005000000040000670D0000790500006E040000000000000006000000040000AD000000790500000A040000000100000006000000040000A801000090050000190400000002000000060000000400009E020000A7050000280400000003000000060000000400008D030000BC0500003504000000040000000600000004000076040000CF0500004104000000050000000600000004000058050000E20500004B04000000060000000600000004000035060000F3050000550400000007000000060000000400000B070000030600005D040000000800000006000000040000DB0700001206000065040000000900000006000000040000A50800001F0600006B040000000A00000006000000040000690900002B06000070040000000B00000006000000040000260A00003606000073040000000C00000006000000040000DD0A00004006000076040000000D000000060000000400008E0B00004806000077040000000E00000006000000040000390C00004F06000078040000000F00000006000000040000DE0C000055060000770400000010000000060000000400007C0D00005A06000075040000000000000007000000040000B50000004006000011040000000100000007000000040000B10100005906000020040000000200000007000000040000A7020000710600002E04000000030000000700000004000097030000870600003B040000000400000007000000040000810400009C0600004704000000050000000700000004000064050000B00600005204000000060000000700000004000041060000C20600005C04000000070000000700000004000018070000D306000064040000000800000007000000040000E9070000E30600006B040000000900000007000000040000B4080000F206000071040000000A0000000700000004000078090000FF06000076040000000B00000007000000040000360A00000B0700007A040000000C00000007000000040000EF0A0000160700007D040000000D00000007000000040000A00B0000200700007E040000000E000000070000000400004C0C0000280700007E040000000F00000007000000040000F10C0000300700007D040000001000000007000000040000910D0000350700007B040000000000000008000000040000BD0000000307000017040000000100000008000000040000B90100001D07000027040000000200000008000000040000B00200003507000035040000000300000008000000040000A10300004D070000420400000004000000080000000400008B040000630700004E0400000005000000080000000400006F05000078070000590400000006000000080000000400004D0600008C07000062040000000700000008000000040000250700009E0700006B040000000800000008000000040000F7070000B007000072040000000900000008000000040000C2080000C007000078040000000A0000000800000004000087090000CE0700007D040000000B00000008000000040000460A0000DC07000081040000000C00000008000000040000FF0A0000E807000083040000000D00000008000000040000B20B0000F307000084040000000E000000080000000400005E0C0000FC07000085040000000F00000008000000040000040D00000508000084040000001000000008000000040000A40D00000C08000082040000000000000009000000040000C3000000C00700001E040000000100000009000000040000C1010000DB0700002D040000000200000009000000040000B9020000F50700003C040000000300000009000000040000AA0300000E080000490400000004000000090000000400009504000025080000550400000005000000090000000400007A0500003C0800005F040000000600000009000000040000590600005108000069040000000700000009000000040000310700006408000071040000000800000009000000040000040800007708000078040000000900000009000000040000D0080000880800007E040000000A00000009000000040000960900009808000083040000000B00000009000000040000560A0000A708000087040000000C000000090000000400000F0B0000B40800008A040000000D00000009000000040000C20B0000C00800008B040000000E00000009000000040000700C0000CB0800008B040000000F00000009000000040000160D0000D50800008A040000001000000009000000040000B70D0000DD0800008804000000000000000A000000040000C9000000780800002504000000010000000A000000040000C8010000940800003404000000020000000A000000040000C0020000AF0800004204000000030000000A000000040000B2030000CA0800004F04000000040000000A0000000400009E040000E20800005B04000000050000000A00000004000084050000FA0800006604000000060000000A00000004000064060000100900006F04000000070000000A0000000400003D070000250900007804000000080000000A00000004000010080000390900007F04000000090000000A000000040000DD0800004B09000085040000000A0000000A000000040000A40900005D0900008A040000000B0000000A000000040000640A00006D0900008E040000000C0000000A0000000400001E0B00007B09000090040000000D0000000A000000040000D20B00008909000092040000000E0000000A000000040000800C00009509000092040000000F0000000A000000040000280D0000A00900009104000000100000000A000000040000CA0D0000AA0900008F04000000000000000B000000040000CF0000002A0900002B04000000010000000B000000040000CE010000480900003B04000000020000000B000000040000C7020000650900004904000000030000000B000000040000BA030000800900005604000000040000000B000000040000A70400009A0900006204000000050000000B0000000400008D050000B30900006D04000000060000000B0000000400006E060000CA0900007604000000070000000B00000004000048070000E10900007E04000000080000000B0000000400001C080000F60900008604000000090000000B000000040000E90800000A0A00008C040000000A0000000B000000040000B10900001C0A000091040000000B0000000B000000040000720A00002D0A000094040000000C0000000B0000000400002D0B00003D0A000097040000000D0000000B000000040000E20B00004C0A000098040000000E0000000B000000040000910C00005A0A000098040000000F0000000B000000040000390D0000660A00009704000000100000000B000000040000DB0D0000710A00009504000000000000000C000000040000D4000000D80900003204000000010000000C000000040000D4010000F70900004104000000020000000C000000040000CE020000150A00005004000000030000000C000000040000C1030000310A00005D04000000040000000C000000040000AF0400004D0A00006804000000050000000C00000004000096050000670A00007304000000060000000C00000004000077060000800A00007D04000000070000000C00000004000052070000970A00008504000000080000000C00000004000027080000AD0A00008C04000000090000000C000000040000F5080000C30A000092040000000A0000000C000000040000BD090000D60A000097040000000B0000000C0000000400007F0A0000E90A00009B040000000C0000000C0000000400003B0B0000FA0A00009D040000000D0000000C000000040000F10B00000A0B00009F040000000E0000000C000000040000A00C0000190B00009F040000000F0000000C000000040000490D0000260B00009E04000000100000000C000000040000EC0D0000330B00009C04000000000000000D000000040000D8000000800A00003904000000010000000D000000040000D9010000A10A00004804000000020000000D000000040000D4020000C00A00005604000000030000000D000000040000C8030000DE0A00006304000000040000000D000000040000B6040000FA0A00006F04000000050000000D0000000400009E050000150B00007A04000000060000000D00000004000080060000300B00008304000000070000000D0000000400005C070000480B00008C04000000080000000D00000004000031080000600B00009304000000090000000D00000004000000090000760B000099040000000A0000000D000000040000C90900008B0B00009E040000000B0000000D0000000400008C0A00009F0B0000A1040000000C0000000D000000040000490B0000B20B0000A4040000000D0000000D000000040000FF0B0000C30B0000A5040000000E0000000D000000040000AF0C0000D30B0000A5040000000F0000000D000000040000590D0000E20B0000A404000000100000000D000000040000FD0D0000EF0B0000A204000000000000000E000000040000DC000000230B00003F04000000010000000E000000040000DD010000450B00004F04000000020000000E000000040000D9020000650B00005D04000000030000000E000000040000CE030000850B00006A04000000040000000E000000040000BD040000A20B00007604000000050000000E000000040000A6050000BF0B00008004000000060000000E00000004000088060000DA0B00008A04000000070000000E00000004000065070000F40B00009204000000080000000E0000000400003B0800000D0C00009904000000090000000E0000000400000B090000250C00009F040000000A0000000E000000040000D40900003B0C0000A4040000000B0000000E000000040000980A0000500C0000A8040000000C0000000E000000040000550B0000640C0000AA040000000D0000000E0000000400000D0C0000770C0000AC040000000E0000000E000000040000BD0C0000880C0000AC040000000F0000000E000000040000680D0000980C0000AB04000000100000000E0000000400000D0E0000A70C0000A904000000000000000F000000040000DF000000C10B00004604000000010000000F000000040000E1010000E40B00005504000000020000000F000000040000DD020000060C00006404000000030000000F000000040000D3030000260C00007104000000040000000F000000040000C3040000450C00007C04000000050000000F000000040000AC050000630C00008704000000060000000F00000004000090060000800C00009104000000070000000F0000000400006D0700009B0C00009904000000080000000F00000004000044080000B50C0000A004000000090000000F00000004000015090000CE0C0000A6040000000A0000000F000000040000DF090000E60C0000AB040000000B0000000F000000040000A30A0000FC0C0000AF040000000C0000000F000000040000620B0000110D0000B1040000000D0000000F000000040000190C0000250D0000B2040000000E0000000F000000040000CB0C0000380D0000B2040000000F0000000F000000040000770D0000490D0000B104000000100000000F0000000400001C0E0000590D0000AF040000000000000010000000040000E10000005A0C00004D040000000100000010000000040000E40100007E0C00005C040000000200000010000000040000E1020000A10C00006A040000000300000010000000040000D8030000C30C000077040000000400000010000000040000C8040000E30C000083040000000500000010000000040000B3050000030D00008E04000000060000001000000004000097060000200D000097040000000700000010000000040000750700003D0D0000A00400000008000000100000000400004C080000580D0000A70400000009000000100000000400001E090000730D0000AD040000000A00000010000000040000E90900008B0D0000B1040000000B00000010000000040000AE0A0000A30D0000B5040000000C000000100000000400006D0B0000B90D0000B8040000000D00000010000000040000260C0000CF0D0000B9040000000E00000010000000040000D80C0000E20D0000B9040000000F00000010000000040000850D0000F50D0000B80400000010000000100000000400002B0E0000060E0000B6040000000000000000000000050000800000006F000000C4040000000100000000000000050000780100007F000000D50400000002000000000000000500006B0200008D000000E4040000000300000000000000050000570300009A000000F30400000004000000000000000500003D040000A5000000000500000005000000000000000500001C050000B00000000C050000000600000000000000050000F6050000B900000017050000000700000000000000050000C9060000C10000002105000000080000000000000005000096070000C7000000290500000009000000000000000500005D080000CC00000031050000000A000000000000000500001E090000D000000037050000000B00000000000000050000D8090000D30000003C050000000C000000000000000500008D0A0000D500000040050000000D000000000000000500003B0B0000D500000042050000000E00000000000000050000E30B0000D400000044050000000F00000000000000050000840C0000D200000044050000001000000000000000050000200D0000CE000000430500000000000000010000000500008C00000058010000CC0400000001000000010000000500008501000068010000DD0400000002000000010000000500007802000078010000EC0400000003000000010000000500006503000086010000FB0400000004000000010000000500004B04000093010000080500000005000000010000000500002C0500009F0100001405000000060000000100000005000006060000A90100001F050000000700000001000000050000DA060000B201000028050000000800000001000000050000A8070000BA0100003105000000090000000100000005000070080000C101000038050000000A0000000100000005000031090000C60100003E050000000B00000001000000050000ED090000CA01000043050000000C00000001000000050000A20A0000CD01000047050000000D00000001000000050000510B0000CF0100004A050000000E00000001000000050000F90B0000CF0100004B050000000F000000010000000500009C0C0000CE0100004C050000001000000001000000050000380D0000CC0100004B050000000000000002000000050000970000003B020000D4040000000100000002000000050000910100004D020000E4040000000200000002000000050000850200005E020000F4040000000300000002000000050000720300006D020000020500000004000000020000000500005A0400007C020000100500000005000000020000000500003B050000880200001C050000000600000002000000050000160600009402000026050000000700000002000000050000EB0600009F02000030050000000800000002000000050000B9070000A80200003905000000090000000200000005000082080000B002000040050000000A0000000200000005000044090000B602000046050000000B00000002000000050000000A0000BC0200004B050000000C00000002000000050000B60A0000C00200004F050000000D00000002000000050000660B0000C302000052050000000E000000020000000500000F0C0000C502000053050000000F00000002000000050000B20C0000C502000054050000001000000002000000050000500D0000C402000053050000000000000003000000050000A100000019030000DC0400000001000000030000000500009C0100002C030000EC040000000200000003000000050000910200003F030000FC0400000003000000030000000500007F0300004F0300000A050000000400000003000000050000670400005F03000017050000000500000003000000050000490500006D03000023050000000600000003000000050000250600007A0300002E050000000700000003000000050000FB0600008603000038050000000800000003000000050000CA0700009003000040050000000900000003000000050000930800009A03000048050000000A0000000300000005000056090000A20300004E050000000B00000003000000050000130A0000A903000053050000000C00000003000000050000CA0A0000AE03000057050000000D000000030000000500007A0B0000B203000059050000000E00000003000000050000250C0000B50300005B050000000F00000003000000050000C90C0000B70300005B050000001000000003000000050000660D0000B70300005A050000000000000004000000050000AB000000F2030000E3040000000100000004000000050000A701000007040000F40400000002000000040000000500009C0200001A040000040500000003000000040000000500008B0300002C04000012050000000400000004000000050000740400003D0400001F050000000500000004000000050000570500004D0400002B050000000600000004000000050000340600005B040000360500000007000000040000000500000A0700006804000040050000000800000004000000050000DA0700007404000048050000000900000004000000050000A40800007F0400004F050000000A00000004000000050000680900008804000056050000000B00000004000000050000260A0000900400005B050000000C00000004000000050000DD0A0000970400005E050000000D000000040000000500008E0B00009C04000061050000000E00000004000000050000390C0000A104000063050000000F00000004000000050000DE0C0000A4040000630500000010000000040000000500007D0D0000A504000062050000000000000005000000050000B4000000C6040000EB040000000100000005000000050000B0010000DC040000FC040000000200000005000000050000A7020000F00400000B05000000030000000500000005000097030000040500001A05000000040000000500000005000080040000160500002705000000050000000500000005000064050000270500003305000000060000000500000005000041060000370500003E050000000700000005000000050000190700004505000047050000000800000005000000050000EA0700005205000050050000000900000005000000050000B40800005E05000057050000000A0000000500000005000079090000690500005D050000000B00000005000000050000370A00007205000062050000000C00000005000000050000F00A00007A05000066050000000D00000005000000050000A20B00008105000069050000000E000000050000000500004D0C0000870500006A050000000F00000005000000050000F30C00008B0500006B050000001000000005000000050000920D00008E0500006A050000000000000006000000050000BD00000094050000F3040000000100000006000000050000BA010000AC05000004050000000200000006000000050000B1020000C205000013050000000300000006000000050000A2030000D6050000210500000004000000060000000500008C040000EA0500002F05000000050000000600000005000071050000FC0500003B0500000006000000060000000500004F0600000D06000045050000000700000006000000050000270700001D0600004F050000000800000006000000050000F80700002B06000058050000000900000006000000050000C4080000390600005F050000000A00000006000000050000890900004406000065050000000B00000006000000050000490A00004F0600006A050000000C00000006000000050000020B0000590600006E050000000D00000006000000050000B40B00006106000071050000000E00000006000000050000610C00006806000072050000000F00000006000000050000070D00006D06000072050000001000000006000000050000A70D00007206000072050000000000000007000000050000C50000005E060000FB040000000100000007000000050000C2010000760600000B050000000200000007000000050000BA0200008E0600001B050000000300000007000000050000AC030000A40600002905000000040000000700000005000097040000B9060000360500000005000000070000000500007C050000CC060000420500000006000000070000000500005B060000DE0600004D05000000070000000700000005000034070000EF0600005705000000080000000700000005000007080000FF0600005F050000000900000007000000050000D30800000E07000067050000000A00000007000000050000990900001B0700006D050000000B00000007000000050000590A00002707000072050000000C00000007000000050000130B00003207000076050000000D00000007000000050000C60B00003B07000078050000000E00000007000000050000740C0000430700007A050000000F000000070000000500001B0D00004A0700007A050000001000000007000000050000BC0D00005007000079050000000000000008000000050000CC0000002207000002050000000100000008000000050000CB0100003C07000013050000000200000008000000050000C30200005407000023050000000300000008000000050000B50300006C07000031050000000400000008000000050000A2040000820700003E05000000050000000800000005000088050000970700004A05000000060000000800000005000067060000AA0700005505000000070000000800000005000041070000BD0700005F05000000080000000800000005000014080000CE07000067050000000900000008000000050000E1080000DE0700006E050000000A00000008000000050000A8090000EC07000075050000000B00000008000000050000690A0000FA0700007A050000000C00000008000000050000240B0000060800007D050000000D00000008000000050000D80B00001108000080050000000E00000008000000050000860C00001A08000082050000000F000000080000000500002E0D00002208000082050000001000000008000000050000D00D00002908000081050000000000000009000000050000D2000000E10700000A050000000100000009000000050000D2010000FC0700001B050000000200000009000000050000CB020000160800002A050000000300000009000000050000BE0300002F08000039050000000400000009000000050000AB0400004608000046050000000500000009000000050000920500005C0800005205000000060000000900000005000073060000710800005D0500000007000000090000000500004D070000850800006605000000080000000900000005000021080000970800006F050000000900000009000000050000EF080000A908000076050000000A00000009000000050000B7090000B90800007C050000000B00000009000000050000780A0000C708000081050000000C00000009000000050000340B0000D508000085050000000D00000009000000050000E90B0000E108000088050000000E00000009000000050000980C0000EC08000089050000000F00000009000000050000400D0000F50800008A050000001000000009000000050000E30D0000FE0800008905000000000000000A000000050000D80000009B0800001205000000010000000A000000050000D9010000B70800002305000000020000000A000000050000D3020000D30800003205000000030000000A000000050000C7030000ED0800004105000000040000000A000000050000B4040000050900004E05000000050000000A0000000500009C0500001D0900005A05000000060000000A0000000500007D060000330900006505000000070000000A00000005000058070000480900006E05000000080000000A0000000500002D0800005C0900007705000000090000000A000000050000FC0800006E0900007E050000000A0000000A000000050000C40900008009000084050000000B0000000A000000050000870A00009009000089050000000C0000000A000000050000430B00009E0900008D050000000D0000000A000000050000F90B0000AC09000090050000000E0000000A000000050000A90C0000B809000091050000000F0000000A000000050000520D0000C30900009105000000100000000A000000050000F50D0000CC0900009005000000000000000B000000050000DE0000004F0900001A05000000010000000B000000050000DF0100006D0900002B05000000020000000B000000050000DA0200008A0900003A05000000030000000B000000050000CE030000A50900004805000000040000000B000000050000BD040000BF0900005505000000050000000B000000050000A5050000D80900006105000000060000000B00000005000087060000F00900006C05000000070000000B00000005000063070000060A00007605000000080000000B000000050000390800001B0A00007E05000000090000000B000000050000080900002F0A000086050000000A0000000B000000050000D2090000410A00008C050000000B0000000B000000050000950A0000530A000091050000000C0000000B000000050000520B0000630A000095050000000D0000000B000000050000080C0000710A000097050000000E0000000B000000050000B90C00007F0A000099050000000F0000000B000000050000630D00008B0A00009905000000100000000B000000050000070E0000960A00009805000000000000000C000000050000E3000000FF0900002205000000010000000C000000050000E40100001E0A00003205000000020000000C000000050000E00200003C0A00004205000000030000000C000000050000D6030000590A00005005000000040000000C000000050000C5040000740A00005D05000000050000000C000000050000AE0500008E0A00006905000000060000000C00000005000091060000A70A00007405000000070000000C0000000500006D070000BF0A00007E05000000080000000C00000005000044080000D50A00008605000000090000000C00000005000014090000EA0A00008D050000000A0000000C000000050000DE090000FE0A000094050000000B0000000C000000050000A20A0000110B000099050000000C0000000C000000050000600B0000220B00009C050000000D0000000C000000050000170C0000320B00009F050000000E0000000C000000050000C90C0000410B0000A0050000000F0000000C000000050000740D00004E0B0000A105000000100000000C000000050000180E00005B0B0000A005000000000000000D000000050000E7000000A90A00002905000000010000000D000000050000E9010000CA0A00003A05000000020000000D000000050000E6020000E90A00004A05000000030000000D000000050000DC030000070B00005805000000040000000D000000050000CC040000240B00006505000000050000000D000000050000B60500003F0B00007105000000060000000D0000000500009A060000590B00007C05000000070000000D00000005000077070000720B00008505000000080000000D0000000500004E0800008A0B00008E05000000090000000D0000000500001F090000A00B000095050000000A0000000D000000050000EA090000B50B00009B050000000B0000000D000000050000AF0A0000C90B0000A0050000000C0000000D0000000500006D0B0000DC0B0000A4050000000D0000000D000000050000250C0000ED0B0000A7050000000E0000000D000000050000D80C0000FE0B0000A8050000000F0000000D000000050000830D00000C0C0000A805000000100000000D000000050000290E00001A0C0000A805000000000000000E000000050000EA0000004E0B00003105000000010000000E000000050000EE010000700B00004205000000020000000E000000050000EB020000910B00005105000000030000000E000000050000E2030000B00B00006005000000040000000E000000050000D3040000CE0B00006D05000000050000000E000000050000BD050000EB0B00007905000000060000000E000000050000A2060000060C00008405000000070000000E00000005000080070000210C00008D05000000080000000E000000050000580800003A0C00009605000000090000000E0000000500002A090000510C00009D050000000A0000000E000000050000F5090000680C0000A3050000000B0000000E000000050000BB0A00007D0C0000A8050000000C0000000E0000000500007A0B0000910C0000AC050000000D0000000E000000050000330C0000A40C0000AE050000000E0000000E000000050000E60C0000B50C0000B0050000000F0000000E000000050000930D0000C50C0000B005000000100000000E000000050000390E0000D40C0000AF05000000000000000F000000050000ED000000EE0B00003905000000010000000F000000050000F1010000110C00004A05000000020000000F000000050000EF020000330C00005905000000030000000F000000050000E7030000540C00006705000000040000000F000000050000D9040000730C00007505000000050000000F000000050000C4050000910C00008105000000060000000F000000050000A9060000AE0C00008B05000000070000000F00000005000088070000CA0C00009505000000080000000F00000005000061080000E40C00009D05000000090000000F00000005000034090000FD0C0000A5050000000A0000000F000000050000000A0000150D0000AB050000000B0000000F000000050000C60A00002B0D0000B0050000000C0000000F000000050000860B0000410D0000B4050000000D0000000F000000050000400C0000550D0000B6050000000E0000000F000000050000F40C0000680D0000B8050000000F0000000F000000050000A10D0000790D0000B805000000100000000F000000050000480E0000890D0000B7050000000000000010000000050000EF000000890C000041050000000100000010000000050000F4010000AD0C000051050000000200000010000000050000F3020000D10C000061050000000300000010000000050000EC030000F20C00006F050000000400000010000000050000DE040000130D00007C050000000500000010000000050000CA050000330D000088050000000600000010000000050000B0060000510D000093050000000700000010000000050000900700006E0D00009D0500000008000000100000000500006A080000890D0000A50500000009000000100000000500003D090000A40D0000AD050000000A000000100000000500000A0A0000BD0D0000B3050000000B00000010000000050000D10A0000D50D0000B8050000000C00000010000000050000920B0000EB0D0000BB050000000D000000100000000500004C0C0000010E0000BE050000000E00000010000000050000010D0000150E0000BF050000000F00000010000000050000AF0D0000280E0000C0050000001000000010000000050000570E0000390E0000BF0500000000000000000000000600008F0000007D000000A2050000000100000000000000060000890100008C000000B40500000002000000000000000600007D02000099000000C40500000003000000000000000600006A030000A6000000D405000000040000000000000006000052040000B1000000E205000000050000000000000006000033050000BB000000F00500000006000000000000000600000E060000C3000000FC050000000700000000000000060000E3060000CB00000007060000000800000000000000060000B2070000D1000000100600000009000000000000000600007A080000D600000019060000000A000000000000000600003D090000D900000020060000000B00000000000000060000F9090000DC00000026060000000C00000000000000060000AF0A0000DD0000002C060000000D000000000000000600005E0B0000DD0000002F060000000E00000000000000060000080C0000DB00000032060000000F00000000000000060000AB0C0000D800000034060000001000000000000000060000480D0000D4000000340600000000000000010000000600009A00000067010000AB0500000001000000010000000600009501000078010000BC0500000002000000010000000600008A02000087010000CD0500000003000000010000000600007803000094010000DD05000000040000000100000006000061040000A1010000EB05000000050000000100000006000043050000AC010000F80500000006000000010000000600001F060000B601000005060000000700000001000000060000F4060000BF0100000F060000000800000001000000060000C4070000C6010000190600000009000000010000000600008D080000CC01000022060000000A0000000100000006000050090000D101000029060000000B000000010000000600000D0A0000D50100002F060000000C00000001000000060000C40A0000D701000034060000000D00000001000000060000740B0000D901000038060000000E000000010000000600001F0C0000D90100003B060000000F00000001000000060000C30C0000D70100003D060000001000000001000000060000610D0000D50100003D060000000000000002000000060000A50000004C020000B3050000000100000002000000060000A10100005E020000C5050000000200000002000000060000960200006F020000D6050000000300000002000000060000860300007E020000E60500000004000000020000000600006F0400008B020000F40500000005000000020000000600005205000098020000010600000006000000020000000600002E060000A30200000D06000000070000000200000006000005070000AE02000018060000000800000002000000060000D5070000B6020000220600000009000000020000000600009F080000BE0200002B060000000A0000000200000006000063090000C402000032060000000B00000002000000060000210A0000C902000038060000000C00000002000000060000D80A0000CD0200003D060000000D000000020000000600008A0B0000D002000041060000000E00000002000000060000350C0000D102000044060000000F00000002000000060000DA0C0000D102000045060000001000000002000000060000780D0000D002000046060000000000000003000000060000AF0000002D030000BC050000000100000003000000060000AC01000040030000CE050000000200000003000000060000A202000051030000DF0500000003000000030000000600009203000062030000EF0500000004000000030000000600007C04000071030000FD050000000500000003000000060000600500007F0300000A0600000006000000030000000600003D0600008C03000016060000000700000003000000060000150700009703000021060000000800000003000000060000E6070000A10300002B060000000900000003000000060000B1080000AA03000034060000000A0000000300000006000075090000B20300003B060000000B00000003000000060000340A0000B803000041060000000C00000003000000060000EC0A0000BD03000046060000000D000000030000000600009E0B0000C10300004A060000000E000000030000000600004A0C0000C40300004D060000000F00000003000000060000F00C0000C50300004E0600000010000000030000000600008F0D0000C50300004F060000000000000004000000060000B900000007040000C5050000000100000004000000060000B60100001C040000D7050000000200000004000000060000AD0200002F040000E80500000003000000040000000600009E03000041040000F70500000004000000040000000600008904000051040000060600000005000000040000000600006E05000061040000130600000006000000040000000600004C0600006F0400001F060000000700000004000000060000240700007B0400002A060000000800000004000000060000F60700008704000034060000000900000004000000060000C2080000910400003C060000000A00000004000000060000870900009A04000044060000000B00000004000000060000460A0000A20400004A060000000C00000004000000060000000B0000A90400004F060000000D00000004000000060000B20B0000AE04000053060000000E000000040000000600005F0C0000B204000056060000000F00000004000000060000060D0000B504000057060000001000000004000000060000A60D0000B604000058060000000000000005000000060000C2000000DD040000CE050000000100000005000000060000C0010000F3040000E0050000000200000005000000060000B802000007050000F1050000000300000005000000060000AA0300001A05000000060000000400000005000000060000950400002C0500000F0600000005000000050000000600007B0500003D0500001C0600000006000000050000000600005A0600004D05000028060000000700000005000000060000330700005B0500003306000000080000000500000006000005080000680500003D060000000900000005000000060000D20800007305000045060000000A00000005000000060000980900007E0500004D060000000B00000005000000060000580A00008705000053060000000C00000005000000060000120B00008F05000058060000000D00000005000000060000C60B0000950500005C060000000E00000005000000060000730C00009B0500005F060000000F000000050000000600001B0D00009F05000060060000001000000005000000060000BC0D0000A205000061060000000000000006000000060000CA000000AE050000D7050000000100000006000000060000C9010000C5050000E9050000000200000006000000060000C2020000DA050000FA050000000300000006000000060000B5030000EF05000009060000000400000006000000060000A1040000020600001806000000050000000600000006000087050000140600002506000000060000000600000006000067060000250600003106000000070000000600000006000041070000350600003C060000000800000006000000060000140800004306000046060000000900000006000000060000E1080000500600004E060000000A00000006000000060000A80900005C06000056060000000B00000006000000060000690A0000660600005C060000000C00000006000000060000240B00007006000061060000000D00000006000000060000D90B00007806000065060000000E00000006000000060000870C00007E06000068060000000F000000060000000600002F0D00008406000069060000001000000006000000060000D10D0000880600006A060000000000000007000000060000D200000079060000E0050000000100000007000000060000D201000091060000F2050000000200000007000000060000CB020000A906000003060000000300000007000000060000BF030000BE06000012060000000400000007000000060000AC040000D30600002106000000050000000700000006000093050000E70600002E06000000060000000700000006000073060000F90600003A0600000007000000070000000600004E0700000A0700004506000000080000000700000006000022080000190700004F060000000900000007000000060000F00800002807000057060000000A00000007000000060000B8090000350700005F060000000B000000070000000600007A0A00004107000065060000000C00000007000000060000350B00004B0700006A060000000D00000007000000060000EB0B0000550700006E060000000E000000070000000600009A0C00005D07000071060000000F00000007000000060000430D00006307000072060000001000000007000000060000E50D00006907000072060000000000000008000000060000D90000003F070000E9050000000100000008000000060000DA01000059070000FB050000000200000008000000060000D4020000710700000B060000000300000008000000060000C8030000890700001B060000000400000008000000060000B60400009F0700002A0600000005000000080000000600009E050000B4070000370600000006000000080000000600007F060000C7070000430600000007000000080000000600005B070000D90700004E06000000080000000800000006000030080000EA07000058060000000900000008000000060000FF080000FA07000060060000000A00000008000000060000C70900000908000067060000000B000000080000000600008A0A0000160800006E060000000C00000008000000060000460B00002208000073060000000D00000008000000060000FC0B00002C08000077060000000E00000008000000060000AC0C00003608000079060000000F00000008000000060000560D00003E0800007B060000001000000008000000060000F90D0000450800007B060000000000000009000000060000E000000000080000F2050000000100000009000000060000E10100001B08000004060000000200000009000000060000DC0200003508000014060000000300000009000000060000D10300004E08000024060000000400000009000000060000C00400006508000032060000000500000009000000060000A80500007B080000400600000006000000090000000600008B060000900800004C06000000070000000900000006000067070000A4080000570600000008000000090000000600003D080000B6080000600600000009000000090000000600000C090000C708000069060000000A00000009000000060000D6090000D708000070060000000B00000009000000060000990A0000E608000077060000000C00000009000000060000560B0000F30800007C060000000D000000090000000600000D0C0000FF08000080060000000E00000009000000060000BE0C00000A09000082060000000F00000009000000060000680D000013090000840600000010000000090000000600000D0E00001C0900008406000000000000000A000000060000E6000000BC080000FB05000000010000000A000000060000E8010000D80800000D06000000020000000A000000060000E4020000F40800001D06000000030000000A000000060000D90300000E0900002D06000000040000000A000000060000C9040000260900003B06000000050000000A000000060000B20500003E0900004906000000060000000A00000006000095060000540900005506000000070000000A00000006000072070000690900006006000000080000000A000000060000490800007D0900006906000000090000000A000000060000190900008F09000072060000000A0000000A000000060000E4090000A009000079060000000B0000000A000000060000A80A0000B009000080060000000C0000000A000000060000660B0000BF09000085060000000D0000000A0000000600001D0C0000CD09000089060000000E0000000A000000060000CF0C0000D90900008B060000000F0000000A0000000600007A0D0000E40900008D06000000100000000A0000000600001F0E0000ED0900008D06000000000000000B000000060000EB000000720900000306000000010000000B000000060000EE010000900900001506000000020000000B000000060000EA020000AD0900002606000000030000000B000000060000E1030000C80900003606000000040000000B000000060000D1040000E20900004406000000050000000B000000060000BB050000FB0900005106000000060000000B0000000600009F060000130A00005E06000000070000000B0000000600007D070000290A00006806000000080000000B000000060000540800003E0A00007206000000090000000B00000006000026090000520A00007B060000000A0000000B000000060000F1090000650A000082060000000B0000000B000000060000B60A0000760A000088060000000C0000000B000000060000740B0000860A00008E060000000D0000000B0000000600002D0C0000950A000091060000000E0000000B000000060000DF0C0000A20A000094060000000F0000000B0000000600008B0D0000AF0A00009606000000100000000B000000060000310E0000BA0A00009606000000000000000C000000060000EF000000240A00000C06000000010000000C000000060000F3010000430A00001E06000000020000000C000000060000F1020000610A00002F06000000030000000C000000060000E80300007E0A00003F06000000040000000C000000060000D9040000990A00004D06000000050000000C000000060000C4050000B40A00005A06000000060000000C000000060000A9060000CC0A00006606000000070000000C00000006000087070000E40A00007106000000080000000C0000000600005F080000FB0A00007B06000000090000000C00000006000032090000100B000084060000000A0000000C000000060000FD090000240B00008B060000000B0000000C000000060000C30A0000360B000091060000000C0000000C000000060000830B0000480B000096060000000D0000000C0000000600003C0C0000580B00009A060000000E0000000C000000060000EF0C0000670B00009D060000000F0000000C0000000600009C0D0000750B00009F06000000100000000C000000060000430E0000810B00009F06000000000000000D000000060000F3000000D00A00001506000000010000000D000000060000F8010000F10A00002706000000020000000D000000060000F6020000100B00003806000000030000000D000000060000EE0300002E0B00004806000000040000000D000000060000E00400004B0B00005606000000050000000D000000060000CC050000670B00006306000000060000000D000000060000B1060000810B00006F06000000070000000D000000060000910700009A0B00007A06000000080000000D0000000600006A080000B20B00008406000000090000000D0000000600003D090000C80B00008D060000000A0000000D000000060000090A0000DE0B000094060000000B0000000D000000060000D00A0000F20B00009A060000000C0000000D000000060000900B0000040C00009F060000000D0000000D0000000600004A0C0000160C0000A3060000000E0000000D000000060000FE0C0000260C0000A6060000000F0000000D000000060000AC0D0000350C0000A806000000100000000D000000060000530E0000430C0000A806000000000000000E000000060000F7000000770B00001E06000000010000000E000000060000FC010000990B00003006000000020000000E000000060000FB020000BA0B00004106000000030000000E000000060000F4030000D90B00005106000000040000000E000000060000E7040000F80B00005F06000000050000000E000000060000D3050000140C00006C06000000060000000E000000060000B9060000300C00007806000000070000000E0000000600009A0700004B0C00008306000000080000000E00000006000073080000640C00008D06000000090000000E000000060000470900007C0C000096060000000A0000000E000000060000150A0000920C00009D060000000B0000000E000000060000DC0A0000A80C0000A3060000000C0000000E0000000600009D0B0000BC0C0000A8060000000D0000000E000000060000580C0000CF0C0000AC060000000E0000000E0000000600000D0D0000E00C0000AF060000000F0000000E000000060000BB0D0000F10C0000B106000000100000000E000000060000630E0000000D0000B106000000000000000F000000060000F9000000190C00002706000000010000000F000000060000FF0100003C0C00003906000000020000000F000000060000FF0200005E0C00004A06000000030000000F000000060000F90300007F0C00005906000000040000000F000000060000ED0400009F0C00006806000000050000000F000000060000DA050000BD0C00007506000000060000000F000000060000C1060000DA0C00008106000000070000000F000000060000A2070000F60C00008C06000000080000000F0000000600007D080000110D00009606000000090000000F000000060000510900002A0D00009E060000000A0000000F0000000600001F0A0000420D0000A6060000000B0000000F000000060000E70A0000590D0000AC060000000C0000000F000000060000A90B00006E0D0000B1060000000D0000000F000000060000650C0000820D0000B5060000000E0000000F0000000600001B0D0000950D0000B8060000000F0000000F000000060000CA0D0000A70D0000B906000000100000000F000000060000730E0000B70D0000BA060000000000000010000000060000FB000000B60C00003006000000010000001000000006000002020000DA0C00004206000000020000001000000006000003030000FE0C000053060000000300000010000000060000FD030000200D000062060000000400000010000000060000F2040000410D000071060000000500000010000000060000E0050000610D00007E060000000600000010000000060000C80600007F0D00008A060000000700000010000000060000A90700009C0D00009506000000080000001000000006000085080000B80D00009F0600000009000000100000000600005A090000D30D0000A7060000000A00000010000000060000290A0000EC0D0000AF060000000B00000010000000060000F20A0000040E0000B5060000000C00000010000000060000B50B00001B0E0000BA060000000D00000010000000060000710C0000310E0000BE060000000E00000010000000060000280D0000450E0000C1060000000F00000010000000060000D80D0000580E0000C2060000001000000010000000060000820E00006A0E0000C30600000000000000000000000700009C000000880000007A06000000010000000000000007000097010000970000008D0600000002000000000000000700008D020000A40000009F0600000003000000000000000700007C030000B0000000B006000000040000000000000007000065040000BB000000C006000000050000000000000007000048050000C4000000CE06000000060000000000000007000025060000CC000000DB060000000700000000000000070000FC060000D3000000E7060000000800000000000000070000CC070000D9000000F206000000090000000000000007000096080000DD000000FC060000000A000000000000000700005A090000E000000005070000000B00000000000000070000180A0000E20000000C070000000C00000000000000070000CF0A0000E300000013070000000D00000000000000070000810B0000E200000018070000000E000000000000000700002C0C0000E00000001C070000000F00000000000000070000D10C0000DD0000001E0700000010000000000000000700006F0D0000D900000020070000000000000001000000070000A70000007501000084060000000100000001000000070000A401000085010000970600000002000000010000000700009A02000093010000A90600000003000000010000000700008A030000A1010000BA06000000040000000100000007000074040000AD010000CA06000000050000000100000007000058050000B7010000D806000000060000000100000007000035060000C1010000E50600000007000000010000000700000D070000C9010000F2060000000800000001000000070000DE070000D0010000FC060000000900000001000000070000A9080000D601000006070000000A000000010000000700006D090000DB0100000F070000000B000000010000000700002C0A0000DE01000016070000000C00000001000000070000E40A0000E00100001D070000000D00000001000000070000970B0000E101000022070000000E00000001000000070000420C0000E001000026070000000F00000001000000070000E80C0000DE01000028070000001000000001000000070000880D0000DB0100002A070000000000000002000000070000B20000005C0200008E060000000100000002000000070000AF0100006D020000A1060000000200000002000000070000A60200007D020000B3060000000300000002000000070000970300008C020000C40600000004000000020000000700008204000099020000D406000000050000000200000007000067050000A6020000E206000000060000000200000007000045060000B1020000EF0600000007000000020000000700001D070000BA020000FC060000000800000002000000070000EF070000C302000007070000000900000002000000070000BB080000CA02000010070000000A0000000200000007000080090000D002000019070000000B00000002000000070000400A0000D502000020070000000C00000002000000070000F90A0000D802000027070000000D00000002000000070000AC0B0000DA0200002C070000000E00000002000000070000590C0000DB02000030070000000F00000002000000070000FF0C0000DB02000032070000001000000002000000070000A00D0000D902000034070000000000000003000000070000BC0000003E03000098060000000100000003000000070000BA01000051030000AB060000000200000003000000070000B202000062030000BD060000000300000003000000070000A403000072030000CE0600000004000000030000000700008F04000081030000DE060000000500000003000000070000750500008F030000EC060000000600000003000000070000540600009B030000FA0600000007000000030000000700002D070000A60300000607000000080000000300000007000000080000B003000011070000000900000003000000070000CC080000B90300001A070000000A0000000300000007000093090000C003000023070000000B00000003000000070000530A0000C60300002A070000000C000000030000000700000D0B0000CB03000031070000000D00000003000000070000C10B0000CE03000036070000000E000000030000000700006E0C0000D10300003A070000000F00000003000000070000160D0000D20300003D070000001000000003000000070000B70D0000D20300003E070000000000000004000000070000C50000001B040000A2060000000100000004000000070000C40100002F040000B5060000000200000004000000070000BD02000042040000C7060000000300000004000000070000B003000053040000D80600000004000000040000000700009C04000064040000E80600000005000000040000000700008205000073040000F60600000006000000040000000700006206000080040000040700000007000000040000000700003C0700008D0400001007000000080000000400000007000010080000980400001B070000000900000004000000070000DD080000A204000024070000000A00000004000000070000A4090000AB0400002D070000000B00000004000000070000650A0000B204000035070000000C00000004000000070000200B0000B90400003B070000000D00000004000000070000D50B0000BE04000040070000000E00000004000000070000830C0000C104000044070000000F000000040000000700002B0D0000C404000047070000001000000004000000070000CD0D0000C504000048070000000000000005000000070000CE000000F2040000AC060000000100000005000000070000CE01000008050000BF060000000200000005000000070000C80200001C050000D1060000000300000005000000070000BB0300002F050000E2060000000400000005000000070000A804000041050000F20600000005000000050000000700008F050000510500000007000000060000000500000007000070060000600500000E0700000007000000050000000700004B0700006E0500001A0700000008000000050000000700001F0800007B05000025070000000900000005000000070000ED080000860500002F070000000A00000005000000070000B50900009105000037070000000B00000005000000070000770A00009A0500003F070000000C00000005000000070000330B0000A105000045070000000D00000005000000070000E80B0000A80500004A070000000E00000005000000070000970C0000AD0500004E070000000F00000005000000070000400D0000B005000051070000001000000005000000070000E30D0000B305000052070000000000000006000000070000D7000000C5050000B6060000000100000006000000070000D7010000DC050000C9060000000200000006000000070000D2020000F1050000DB060000000300000006000000070000C603000006060000EC060000000400000006000000070000B404000019060000FC0600000005000000060000000700009C0500002B0600000A0700000006000000060000000700007D0600003B06000018070000000700000006000000070000590700004B060000240700000008000000060000000700002E080000590600002F070000000900000006000000070000FD0800006606000039070000000A00000006000000070000C60900007106000041070000000B00000006000000070000880A00007B06000049070000000C00000006000000070000450B0000840600004F070000000D00000006000000070000FB0B00008C06000054070000000E00000006000000070000AB0C00009306000058070000000F00000006000000070000550D0000980600005B070000001000000006000000070000F90D00009C0600005D070000000000000007000000070000DE00000092060000C0060000000100000007000000070000E0010000AA060000D3060000000200000007000000070000DB020000C1060000E5060000000300000007000000070000D0030000D7060000F6060000000400000007000000070000BF040000EC06000006070000000500000007000000070000A7050000FF060000140700000006000000070000000700008A060000110700002207000000070000000700000007000066070000220700002E0700000008000000070000000700003C08000031070000390700000009000000070000000700000C0900004007000043070000000A00000007000000070000D60900004C0700004B070000000B00000007000000070000990A00005807000053070000000C00000007000000070000560B00006307000059070000000D000000070000000700000D0C00006C0700005E070000000E00000007000000070000BE0C00007407000062070000000F00000007000000070000690D00007A070000650700000010000000070000000700000D0E00008007000067070000000000000008000000070000E50000005A070000CA060000000100000008000000070000E701000074070000DD060000000200000008000000070000E30200008C070000EF060000000300000008000000070000D9030000A407000000070000000400000008000000070000C9040000BA07000010070000000500000008000000070000B2050000CE0700001E07000000060000000800000007000096060000E20700002C07000000070000000800000007000073070000F4070000380700000008000000080000000700004A08000005080000430700000009000000080000000700001A090000140800004D070000000A00000008000000070000E50900002308000055070000000B00000008000000070000A90A0000300800005D070000000C00000008000000070000670B00003C08000063070000000D000000080000000700001F0C00004608000068070000000E00000008000000070000D10C0000500800006C070000000F000000080000000700007C0D0000580800006F070000001000000008000000070000210E00005E08000071070000000000000009000000070000EB0000001D080000D4060000000100000009000000070000EE01000038080000E7060000000200000009000000070000EB02000052080000F9060000000300000009000000070000E20300006B0800000A070000000400000009000000070000D3040000820800001A070000000500000009000000070000BD0500009808000028070000000600000009000000070000A1060000AD080000360700000007000000090000000700007F070000C10800004207000000080000000900000007000056080000D30800004D07000000090000000900000007000028090000E408000057070000000A00000009000000070000F3090000F408000060070000000B00000009000000070000B80A00000209000067070000000C00000009000000070000770B00000F0900006D070000000D00000009000000070000300C00001B09000073070000000E00000009000000070000E20C00002609000076070000000F000000090000000700008F0D00003009000079070000001000000009000000070000350E0000380900007B07000000000000000A000000070000F1000000DB080000DE06000000010000000A000000070000F5010000F7080000F106000000020000000A000000070000F3020000130900000307000000030000000A000000070000EA0300002D0900001407000000040000000A000000070000DB040000450900002407000000050000000A000000070000C70500005D0900003207000000060000000A000000070000AB060000730900004007000000070000000A0000000700008A070000880900004C07000000080000000A000000070000630800009C0900005707000000090000000A00000007000035090000AE09000061070000000A0000000A000000070000010A0000BF0900006A070000000B0000000A000000070000C70A0000CF09000071070000000C0000000A000000070000870B0000DE09000077070000000D0000000A000000070000400C0000EB0900007D070000000E0000000A000000070000F30C0000F809000081070000000F0000000A000000070000A10D0000020A00008307000000100000000A000000070000470E00000C0A00008507000000000000000B000000070000F600000093090000E806000000010000000B000000070000FB010000B1090000FB06000000020000000B000000070000F9020000CE0900000D07000000030000000B000000070000F2030000E90900001E07000000040000000B000000070000E4040000040A00002E07000000050000000B000000070000D00500001C0A00003D07000000060000000B000000070000B5060000340A00004A07000000070000000B000000070000950700004A0A00005607000000080000000B0000000700006E080000600A00006107000000090000000B00000007000041090000730A00006B070000000A0000000B0000000700000E0A0000860A000074070000000B0000000B000000070000D50A0000970A00007B070000000C0000000B000000070000960B0000A70A000082070000000D0000000B000000070000500C0000B60A000087070000000E0000000B000000070000040D0000C40A00008B070000000F0000000B000000070000B20D0000D00A00008E07000000100000000B0000000700005A0E0000DB0A00008F07000000000000000C000000070000FB000000470A0000F206000000010000000C00000007000000020000660A00000507000000020000000C000000070000FF020000840A00001707000000030000000C000000070000F9030000A10A00002807000000040000000C000000070000EB040000BD0A00003807000000050000000C000000070000D8050000D70A00004707000000060000000C000000070000BF060000F00A00005407000000070000000C0000000700009F070000080B00006007000000080000000C000000070000790800001E0B00006B07000000090000000C0000000700004D090000330B000075070000000A0000000C0000000700001B0A0000470B00007E070000000B0000000C000000070000E20A00005A0B000085070000000C0000000C000000070000A40B00006C0B00008C070000000D0000000C0000000700005F0C00007C0B000091070000000E0000000C000000070000140D00008B0B000095070000000F0000000C000000070000C30D0000990B00009807000000100000000C0000000700006B0E0000A50B00009907000000000000000D000000070000FE000000F50A0000FC06000000010000000D00000007000005020000160B00000F07000000020000000D00000007000005030000350B00002107000000030000000D000000070000FF030000530B00003207000000040000000D000000070000F3040000700B00004207000000050000000D000000070000E00500008C0B00005107000000060000000D000000070000C7060000A70B00005E07000000070000000D000000070000A9070000C00B00006A07000000080000000D00000007000084080000D80B00007507000000090000000D00000007000058090000EE0B00007F070000000A0000000D000000070000270A0000040C000088070000000B0000000D000000070000EF0A0000180C00008F070000000C0000000D000000070000B10B00002B0C000096070000000D0000000D0000000700006D0C00003C0C00009B070000000E0000000D000000070000230D00004D0C00009F070000000F0000000D000000070000D30D00005C0C0000A207000000100000000D0000000700007C0E00006A0C0000A407000000000000000E000000070000020100009E0B00000607000000010000000E00000007000009020000C00B00001907000000020000000E0000000700000A030000E10B00002C07000000030000000E00000007000004040000010C00003C07000000040000000E000000070000F90400001F0C00004C07000000050000000E000000070000E70500003C0C00005B07000000060000000E000000070000CF060000580C00006807000000070000000E000000070000B1070000730C00007407000000080000000E0000000700008D0800008C0C00007F07000000090000000E00000007000063090000A40C000089070000000A0000000E000000070000320A0000BB0C000092070000000B0000000E000000070000FB0A0000D00C000099070000000C0000000E000000070000BE0B0000E50C0000A0070000000D0000000E0000000700007B0C0000F80C0000A5070000000E0000000E000000070000320D0000090D0000A9070000000F0000000E000000070000E20D00001A0D0000AC07000000100000000E0000000700008C0E0000290D0000AE07000000000000000F00000007000004010000420C00001007000000010000000F0000000700000C020000650C00002307000000020000000F0000000700000E030000880C00003607000000030000000F00000007000009040000A90C00004607000000040000000F000000070000FF040000C90C00005607000000050000000F000000070000EE050000E70C00006507000000060000000F000000070000D7060000040D00007207000000070000000F000000070000BA070000200D00007E07000000080000000F000000070000960800003B0D00008907000000090000000F0000000700006D090000550D000093070000000A0000000F0000000700003D0A00006D0D00009C070000000B0000000F000000070000070B0000840D0000A4070000000C0000000F000000070000CB0B0000990D0000AA070000000D0000000F000000070000880C0000AE0D0000AF070000000E0000000F000000070000400D0000C10D0000B3070000000F0000000F000000070000F10D0000D30D0000B607000000100000000F0000000700009C0E0000E40D0000B807000000000000001000000007000006010000E10C00001A0700000001000000100000000700000F020000050D00002D07000000020000001000000007000011030000290D0000400700000003000000100000000700000E0400004C0D000050070000000400000010000000070000040500006D0D000060070000000500000010000000070000F40500008D0D00006F070000000600000010000000070000DE060000AB0D00007C070000000700000010000000070000C1070000C90D0000880700000008000000100000000700009F080000E50D00009407000000090000001000000007000076090000000E00009D070000000A00000010000000070000470A0000190E0000A6070000000B00000010000000070000120B0000320E0000AE070000000C00000010000000070000D60B0000490E0000B4070000000D00000010000000070000950C00005F0E0000B9070000000E000000100000000700004D0D0000730E0000BD070000000F00000010000000070000FF0D0000870E0000C0070000001000000010000000070000AB0E0000990E0000C2070000000000000000000000080000A7000000920000004E070000000100000000000000080000A4010000A0000000620700000002000000000000000800009B020000AD000000750700000003000000000000000800008C030000B80000008707000000040000000000000008000077040000C2000000980700000005000000000000000800005C050000CB000000A80700000006000000000000000800003A060000D3000000B607000000070000000000000008000012070000DA000000C4070000000800000000000000080000E4070000DF000000D0070000000900000000000000080000B0080000E3000000DB070000000A0000000000000008000075090000E5000000E4070000000B00000000000000080000350A0000E7000000ED070000000C00000000000000080000EE0A0000E7000000F5070000000D00000000000000080000A10B0000E6000000FB070000000E000000000000000800004E0C0000E300000000080000000F00000000000000080000F40C0000E000000004080000001000000000000000080000940D0000DB00000007080000000000000001000000080000B20000008001000059070000000100000001000000080000B0010000900100006D070000000200000001000000080000A80200009E010000800700000003000000010000000800009A030000AB0100009207000000040000000100000008000086040000B7010000A30700000005000000010000000800006B050000C1010000B30700000006000000010000000800004A060000CA010000C107000000070000000100000008000023070000D2010000CF070000000800000001000000080000F6070000D9010000DB070000000900000001000000080000C3080000DE010000E6070000000A0000000100000008000089090000E2010000F0070000000B00000001000000080000490A0000E5010000F8070000000C00000001000000080000030B0000E701000000080000000D00000001000000080000B70B0000E701000006080000000E00000001000000080000640C0000E60100000B080000000F000000010000000800000C0D0000E40100000F080000001000000001000000080000AD0D0000E001000012080000000000000002000000080000BD0000006902000064070000000100000002000000080000BC0100007A02000078070000000200000002000000080000B50200008A0200008B070000000300000002000000080000A7030000980200009E07000000040000000200000008000094040000A5020000AE0700000005000000020000000800007A050000B1020000BE0700000006000000020000000800005A060000BC020000CD07000000070000000200000008000034070000C5020000DA07000000080000000200000008000007080000CD020000E6070000000900000002000000080000D5080000D4020000F1070000000A000000020000000800009C090000DA020000FB070000000B000000020000000800005D0A0000DE02000004080000000C00000002000000080000180B0000E10200000B080000000D00000002000000080000CC0B0000E302000011080000000E000000020000000800007B0C0000E302000017080000000F00000002000000080000230D0000E30200001B080000001000000002000000080000C50D0000E10200001D080000000000000003000000080000C70000004D0300006F070000000100000003000000080000C70100006003000083070000000200000003000000080000C00200007103000097070000000300000003000000080000B403000081030000A9070000000400000003000000080000A10400008F030000BA070000000500000003000000080000880500009D030000C907000000060000000300000008000069060000A9030000D807000000070000000300000008000043070000B3030000E507000000080000000300000008000018080000BD030000F1070000000900000003000000080000E6080000C5030000FC070000000A00000003000000080000AE090000CC03000006080000000B00000003000000080000700A0000D20300000F080000000C000000030000000800002C0B0000D603000016080000000D00000003000000080000E10B0000DA0300001D080000000E00000003000000080000900C0000DC03000022080000000F00000003000000080000390D0000DC03000026080000001000000003000000080000DC0D0000DC03000029080000000000000004000000080000D00000002C0400007A070000000100000004000000080000D1010000400400008F070000000200000004000000080000CB02000053040000A2070000000300000004000000080000C003000064040000B4070000000400000004000000080000AE04000074040000C50700000005000000040000000800009605000083040000D40700000006000000040000000800007706000090040000E3070000000700000004000000080000530700009C040000F007000000080000000400000008000028080000A7040000FD070000000900000004000000080000F7080000B104000008080000000A00000004000000080000C0090000B904000011080000000B00000004000000080000830A0000C10400001A080000000C000000040000000800003F0B0000C704000022080000000D00000004000000080000F50B0000CB04000028080000000E00000004000000080000A50C0000CF0400002D080000000F000000040000000800004F0D0000D104000031080000001000000004000000080000F30D0000D204000034080000000000000005000000080000D90000000605000085070000000100000005000000080000DA0100001B0500009A070000000200000005000000080000D60200002F050000AD070000000300000005000000080000CB03000042050000BF070000000400000005000000080000BA04000053050000D0070000000500000005000000080000A205000063050000E00700000006000000050000000800008506000072050000EE0700000007000000050000000800006107000080050000FC070000000800000005000000080000370800008C05000008080000000900000005000000080000070900009805000013080000000A00000005000000080000D1090000A20500001D080000000B00000005000000080000940A0000AA05000025080000000C00000005000000080000520B0000B20500002D080000000D00000005000000080000090C0000B805000033080000000E00000005000000080000BA0C0000BD05000038080000000F00000005000000080000650D0000C00500003D080000001000000005000000080000090E0000C30500003F080000000000000006000000080000E1000000DA05000090070000000100000006000000080000E3010000F1050000A5070000000200000006000000080000DF02000006060000B8070000000300000006000000080000D50300001A060000CA070000000400000006000000080000C50400002D060000DB070000000500000006000000080000AF0500003F060000EB070000000600000006000000080000920600004F060000F90700000007000000060000000800006F0700005F06000007080000000800000006000000080000460800006C0600001308000000090000000600000008000017090000790600001E080000000A00000006000000080000E10900008406000028080000000B00000006000000080000A60A00008F06000031080000000C00000006000000080000640B00009706000038080000000D000000060000000800001C0C00009F0600003F080000000E00000006000000080000CE0C0000A506000044080000000F00000006000000080000790D0000AA060000480800000010000000060000000800001E0E0000AE0600004B080000000000000007000000080000E8000000A90600009B070000000100000007000000080000EB010000C2060000B0070000000200000007000000080000E8020000D8060000C3070000000300000007000000080000DF030000EE060000D5070000000400000007000000080000D004000002070000E6070000000500000007000000080000BA05000016070000F60700000006000000070000000800009E06000027070000050800000007000000070000000800007C070000380700001208000000080000000700000008000054080000470700001E080000000900000007000000080000260900005507000029080000000A00000007000000080000F10900006207000033080000000B00000007000000080000B60A00006E0700003C080000000C00000007000000080000750B00007807000043080000000D000000070000000800002E0C0000810700004A080000000E00000007000000080000E10C0000890700004F080000000F000000070000000800008D0D00008F07000053080000001000000007000000080000330E00009507000056080000000000000008000000080000EF00000073070000A7070000000100000008000000080000F30100008D070000BB070000000200000008000000080000F1020000A5070000CE070000000300000008000000080000E9030000BC070000E0070000000400000008000000080000DA040000D2070000F1070000000500000008000000080000C5050000E707000001080000000600000008000000080000AA060000FA07000010080000000700000008000000080000890700000C0800001D080000000800000008000000080000620800001D08000029080000000900000008000000080000340900002D08000034080000000A00000008000000080000000A00003B0800003E080000000B00000008000000080000C60A00004808000047080000000C00000008000000080000860B0000540800004F080000000D00000008000000080000400C00005E08000055080000000E00000008000000080000F30C0000670800005A080000000F00000008000000080000A00D00006F0800005E080000001000000008000000080000470E00007608000061080000000000000009000000080000F500000038080000B2070000000100000009000000080000FA01000053080000C6070000000200000009000000080000F90200006D080000D9070000000300000009000000080000F103000086080000EC070000000400000009000000080000E30400009D080000FD070000000500000009000000080000D0050000B30800000C080000000600000009000000080000B5060000C80800001B08000000070000000900000008000095070000DB080000280800000008000000090000000800006E080000ED0800003508000000090000000900000008000042090000FE08000040080000000A000000090000000800000F0A00000E0900004A080000000B00000009000000080000D60A00001D09000052080000000C00000009000000080000960B00002A0900005A080000000D00000009000000080000510C00003609000060080000000E00000009000000080000050D00004009000066080000000F00000009000000080000B30D00004A0900006A0800000010000000090000000800005B0E0000520900006D08000000000000000A000000080000FB000000F8080000BD07000000010000000A0000000800000002000015090000D107000000020000000A0000000800000003000030090000E507000000030000000A000000080000F90300004A090000F707000000040000000A000000080000EC040000620900000808000000050000000A000000080000D90500007A0900001708000000060000000A000000080000C0060000900900002608000000070000000A000000080000A0070000A50900003408000000080000000A0000000800007B080000B90900004008000000090000000A0000000800004F090000CB0900004B080000000A0000000A0000000800001D0A0000DC09000055080000000B0000000A000000080000E40A0000EC0900005E080000000C0000000A000000080000A60B0000FB09000065080000000D0000000A000000080000610C0000080A00006C080000000E0000000A000000080000160D0000140A000071080000000F0000000A000000080000C50D00001F0A00007508000000100000000A0000000800006E0E0000290A00007808000000000000000B00000008000000010000B3090000C807000000010000000B00000008000006020000D0090000DC07000000020000000B00000008000007030000ED090000F007000000030000000B00000008000001040000090A00000208000000040000000B000000080000F5040000230A00001308000000050000000B000000080000E20500003C0A00002308000000060000000B000000080000CA060000530A00003108000000070000000B000000080000AB0700006A0A00003F08000000080000000B000000080000860800007F0A00004B08000000090000000B0000000800005B090000930A000056080000000A0000000B0000000800002A0A0000A50A000060080000000B0000000B000000080000F20A0000B70A000069080000000C0000000B000000080000B50B0000C70A000071080000000D0000000B000000080000710C0000D60A000077080000000E0000000B000000080000270D0000E30A00007C080000000F0000000B000000080000D70D0000F00A00008008000000100000000B000000080000800E0000FB0A00008308000000000000000C00000008000004010000680A0000D307000000010000000C0000000800000B020000870A0000E807000000020000000C0000000800000C030000A50A0000FB07000000030000000C00000008000007040000C20A00000D08000000040000000C000000080000FC040000DE0A00001E08000000050000000C000000080000EB050000F80A00002E08000000060000000C000000080000D3060000110B00003D08000000070000000C000000080000B5070000290B00004A08000000080000000C00000008000091080000400B00005608000000090000000C00000008000067090000550B000061080000000A0000000C000000080000370A0000690B00006B080000000B0000000C000000080000000B00007C0B000074080000000C0000000C000000080000C30B00008E0B00007C080000000D0000000C000000080000800C00009E0B000082080000000E0000000C000000080000370D0000AD0B000088080000000F0000000C000000080000E70D0000BB0B00008C08000000100000000C000000080000920E0000C70B00008F08000000000000000D00000008000008010000180B0000DE07000000010000000D00000008000010020000390B0000F307000000020000000D00000008000012030000580B00000608000000030000000D0000000800000E040000770B00001808000000040000000D00000008000003050000940B00002908000000050000000D000000080000F3050000B00B00003908000000060000000D000000080000DC060000CA0B00004808000000070000000D000000080000BF070000E40B00005508000000080000000D0000000800009C080000FC0B00006208000000090000000D00000008000072090000120C00006D080000000A0000000D000000080000430A0000280C000077080000000B0000000D0000000800000D0B00003C0C000080080000000C0000000D000000080000D10B00004F0C000087080000000D0000000D0000000800008F0C0000610C00008E080000000E0000000D000000080000460D0000710C000093080000000F0000000D000000080000F80D0000810C00009708000000100000000D000000080000A30E00008F0C00009A08000000000000000E0000000800000B010000C30B0000E907000000010000000E00000008000014020000E50B0000FE07000000020000000E00000008000016030000060C00001108000000030000000E00000008000013040000260C00002308000000040000000E00000008000009050000450C00003408000000050000000E000000080000FA050000620C00004408000000060000000E000000080000E40600007E0C00005308000000070000000E000000080000C8070000990C00006008000000080000000E000000080000A5080000B20C00006D08000000090000000E0000000800007D090000CA0C000078080000000A0000000E0000000800004E0A0000E10C000082080000000B0000000E000000080000190B0000F70C00008B080000000C0000000E000000080000DE0B00000C0D000092080000000D0000000E0000000800009C0C00001F0D000099080000000E0000000E000000080000550D0000310D00009E080000000F0000000E000000080000070E0000410D0000A208000000100000000E000000080000B30E0000510D0000A508000000000000000F0000000800000D010000690C0000F407000000010000000F000000080000170200008D0C00000908000000020000000F0000000800001A030000AF0C00001C08000000030000000F00000008000018040000D00C00002F08000000040000000F0000000800000F050000F00C00004008000000050000000F000000080000000600000F0D00004F08000000060000000F000000080000EB0600002C0D00005E08000000070000000F000000080000D0070000490D00006C08000000080000000F000000080000AE080000640D00007808000000090000000F000000080000870900007D0D000083080000000A0000000F000000080000590A0000960D00008D080000000B0000000F000000080000240B0000AD0D000096080000000C0000000F000000080000EA0B0000C30D00009E080000000D0000000F000000080000AA0C0000D70D0000A4080000000E0000000F000000080000630D0000EB0D0000AA080000000F0000000F000000080000160E0000FD0D0000AE08000000100000000F000000080000C30E00000E0E0000B10800000000000000100000000800000F010000090D000000080000000100000010000000080000190200002F0D0000140800000002000000100000000800001E030000530D0000270800000003000000100000000800001C040000750D00003A08000000040000001000000008000014050000970D00004B08000000050000001000000008000006060000B70D00005B080000000600000010000000080000F2060000D60D000069080000000700000010000000080000D7070000F30D000077080000000800000010000000080000B7080000100E000083080000000900000010000000080000900900002B0E00008E080000000A00000010000000080000630A0000450E000098080000000B000000100000000800002F0B00005D0E0000A1080000000C00000010000000080000F60B0000750E0000A9080000000D00000010000000080000B60C00008B0E0000B0080000000E00000010000000080000700D0000A00E0000B5080000000F00000010000000080000240E0000B30E0000B9080000001000000010000000080000D20E0000C60E0000BC080000000000000000000000090000B00000009A0000001C080000000100000000000000090000AF010000A700000032080000000200000000000000090000A8020000B3000000460800000003000000000000000900009B030000BE0000005908000000040000000000000009000087040000C80000006C0800000005000000000000000900006D050000D10000007C0800000006000000000000000900004D060000D80000008C08000000070000000000000009000027070000DE0000009B080000000800000000000000090000FB070000E3000000A8080000000900000000000000090000C8080000E6000000B4080000000A000000000000000900008F090000E8000000BF080000000B00000000000000090000500A0000E9000000C9080000000C000000000000000900000B0B0000E9000000D2080000000D00000000000000090000BF0B0000E7000000D9080000000E000000000000000900006E0C0000E4000000E0080000000F00000000000000090000160D0000E0000000E5080000001000000000000000090000B80D0000DB000000E9080000000000000001000000090000BC0000008A01000029080000000100000001000000090000BB010000990100003E080000000200000001000000090000B5020000A701000053080000000300000001000000090000A8030000B30100006608000000040000000100000009000096040000BE010000780800000005000000010000000900007D050000C8010000890800000006000000010000000900005D060000D10100009808000000070000000100000009000038070000D9010000A70800000008000000010000000900000C080000DF010000B4080000000900000001000000090000DB080000E4010000C1080000000A00000001000000090000A3090000E7010000CC080000000B00000001000000090000640A0000EA010000D5080000000C00000001000000090000200B0000EB010000DE080000000D00000001000000090000D50B0000EB010000E6080000000E00000001000000090000850C0000EA010000EC080000000F000000010000000900002E0D0000E7010000F1080000001000000001000000090000D10D0000E3010000F5080000000000000002000000090000C60000007502000035080000000100000002000000090000C7010000850200004A080000000200000002000000090000C1020000950200005F080000000300000002000000090000B5030000A302000072080000000400000002000000090000A3040000AF020000840800000005000000020000000900008B050000BB020000950800000006000000020000000900006D060000C5020000A508000000070000000200000009000048070000CE020000B30800000008000000020000000900001E080000D6020000C1080000000900000002000000090000ED080000DC020000CD080000000A00000002000000090000B6090000E1020000D8080000000B00000002000000090000780A0000E5020000E2080000000C00000002000000090000350B0000E8020000EB080000000D00000002000000090000EB0B0000E9020000F2080000000E000000020000000900009B0C0000EA020000F9080000000F00000002000000090000450D0000E9020000FE080000001000000002000000090000E90D0000E602000002090000000000000003000000090000D00000005B03000041080000000100000003000000090000D10100006D03000057080000000200000003000000090000CD0200007E0300006B080000000300000003000000090000C20300008D0300007E080000000400000003000000090000B10400009B0300009008000000050000000300000009000099050000A8030000A10800000006000000030000000900007C060000B4030000B108000000070000000300000009000058070000BF030000C00800000008000000030000000900002E080000C8030000CD080000000900000003000000090000FE080000D0030000D9080000000A00000003000000090000C8090000D6030000E4080000000B000000030000000900008B0A0000DC030000EE080000000C00000003000000090000490B0000E0030000F7080000000D00000003000000090000000C0000E3030000FF080000000E00000003000000090000B10C0000E403000005090000000F000000030000000900005C0D0000E50300000A090000001000000003000000090000000E0000E40300000E090000000000000004000000090000D90000003C0400004D080000000100000004000000090000DB0100004F04000063080000000200000004000000090000D80200006104000077080000000300000004000000090000CD030000720400008B080000000400000004000000090000BD040000820400009D080000000500000004000000090000A705000091040000AE0800000006000000040000000900008A0600009E040000BD08000000070000000400000009000067070000AA040000CC0800000008000000040000000900003E080000B4040000D90800000009000000040000000900000F090000BE040000E6080000000A00000004000000090000DA090000C6040000F1080000000B000000040000000900009E0A0000CD040000FB080000000C000000040000000900005C0B0000D304000003090000000D00000004000000090000140C0000D70400000B090000000E00000004000000090000C60C0000DA04000011090000000F00000004000000090000720D0000DC04000017090000001000000004000000090000170E0000DD0400001B090000000000000005000000090000E20000001705000059080000000100000005000000090000E50100002C0500006F080000000200000005000000090000E20200004005000084080000000300000005000000090000D90300005205000097080000000400000005000000090000C904000064050000A9080000000500000005000000090000B405000074050000BA0800000006000000050000000900009806000082050000CA0800000007000000050000000900007607000090050000D80800000008000000050000000900004E0800009C050000E60800000009000000050000000900001F090000A7050000F2080000000A00000005000000090000EB090000B1050000FD080000000B00000005000000090000B00A0000B905000007090000000C000000050000000900006F0B0000C005000010090000000D00000005000000090000280C0000C605000018090000000E00000005000000090000DA0C0000CB0500001E090000000F00000005000000090000870D0000CE050000230900000010000000050000000900002D0E0000D005000027090000000000000006000000090000E9000000EE05000066080000000100000006000000090000ED010000040600007B080000000200000006000000090000EB0200001906000090080000000300000006000000090000E30300002D060000A3080000000400000006000000090000D504000040060000B5080000000500000006000000090000C005000051060000C6080000000600000006000000090000A506000062060000D60800000007000000060000000900008407000071060000E50800000008000000060000000900005C0800007E060000F20800000009000000060000000900002F0900008B060000FE080000000A00000006000000090000FB090000960600000A090000000B00000006000000090000C10A0000A006000014090000000C00000006000000090000810B0000A80600001C090000000D000000060000000900003B0C0000B006000024090000000E00000006000000090000EE0C0000B60600002A090000000F000000060000000900009C0D0000BB06000030090000001000000006000000090000430E0000BE06000034090000000000000007000000090000F1000000BF06000072080000000100000007000000090000F6010000D706000088080000000200000007000000090000F4020000ED0600009C080000000300000007000000090000ED03000003070000AF080000000400000007000000090000DF04000017070000C2080000000500000007000000090000CB0500002A070000D3080000000600000007000000090000B10600003C070000E2080000000700000007000000090000910700004C070000F10800000008000000070000000900006B0800005B070000FF0800000009000000070000000900003E090000690700000B090000000A000000070000000900000B0A00007607000016090000000B00000007000000090000D20A00008107000020090000000C00000007000000090000930B00008C07000029090000000D000000070000000900004D0C00009407000031090000000E00000007000000090000010D00009C07000037090000000F00000007000000090000B00D0000A20700003C090000001000000007000000090000580E0000A807000040090000000000000008000000090000F70000008B0700007E080000000100000008000000090000FD010000A407000094080000000200000008000000090000FD020000BC070000A8080000000300000008000000090000F6030000D3070000BC080000000400000008000000090000E9040000E9070000CE080000000500000008000000090000D6050000FE070000DF080000000600000008000000090000BD06000011080000EF0800000007000000080000000900009E07000023080000FD08000000080000000800000009000078080000330800000B0900000009000000080000000900004C0900004308000017090000000A000000080000000900001A0A00005108000022090000000B00000008000000090000E20A00005E0800002C090000000C00000008000000090000A30B00006908000035090000000D000000080000000900005F0C0000740800003D090000000E00000008000000090000140D00007D08000043090000000F00000008000000090000C30D000085080000490900000010000000080000000900006C0E00008B0800004D090000000000000009000000090000FD000000520800008A080000000100000009000000090000040200006C080000A00800000002000000090000000900000403000086080000B5080000000300000009000000090000FF0300009F080000C8080000000400000009000000090000F3040000B6080000DA080000000500000009000000090000E1050000CC080000EB080000000600000009000000090000C8060000E1080000FB080000000700000009000000090000AA070000F40800000A0900000008000000090000000900008508000006090000170900000009000000090000000900005A0900001709000024090000000A00000009000000090000290A0000270900002F090000000B00000009000000090000F10A00003509000039090000000C00000009000000090000B40B00004209000042090000000D00000009000000090000700C00004E09000049090000000E00000009000000090000260D00005909000050090000000F00000009000000090000D60D000062090000550900000010000000090000000900007F0E00006A0900005A09000000000000000A00000009000003010000130900009708000000010000000A0000000900000A02000030090000AC08000000020000000A0000000900000B0300004B090000C108000000030000000A0000000900000704000065090000D408000000040000000A000000090000FB0400007E090000E608000000050000000A000000090000EA05000095090000F808000000060000000A000000090000D3060000AB0900000709000000070000000A000000090000B5070000C00900001609000000080000000A00000009000091080000D40900002409000000090000000A00000009000067090000E609000030090000000A0000000A000000090000370A0000F70900003B090000000B0000000A000000090000000B0000070A000045090000000C0000000A000000090000C30B0000160A00004E090000000D0000000A000000090000800C0000230A000056090000000E0000000A000000090000370D00002F0A00005C090000000F0000000A000000090000E80D00003A0A00006209000000100000000A000000090000920E0000440A00006609000000000000000B00000009000007010000D0090000A308000000010000000B00000009000010020000EE090000B808000000020000000B000000090000120300000A0A0000CD08000000030000000B0000000900000E040000260A0000E108000000040000000B00000009000004050000400A0000F308000000050000000B000000090000F3050000590A00000409000000060000000B000000090000DC060000710A00001409000000070000000B000000090000C0070000870A00002309000000080000000B0000000900009D0800009C0A00003009000000090000000B00000009000073090000B00A00003C090000000A0000000B000000090000440A0000C30A000048090000000B0000000B0000000900000E0B0000D40A000052090000000C0000000B000000090000D20B0000E40A00005B090000000D0000000B000000090000900C0000F30A000062090000000E0000000B000000090000480D0000010B000069090000000F0000000B000000090000FA0D00000D0B00006E09000000100000000B000000090000A50E0000180B00007309000000000000000C0000000900000C010000870A0000AF08000000010000000C00000009000015020000A60A0000C508000000020000000C00000009000018030000C50A0000D908000000030000000C00000009000015040000E20A0000ED08000000040000000C0000000900000B050000FD0A0000FF08000000050000000C000000090000FC050000180B00001009000000060000000C000000090000E6060000310B00002009000000070000000C000000090000CA070000490B00002F09000000080000000C000000090000A70800005F0B00003C09000000090000000C0000000900007F090000750B000049090000000A0000000C000000090000500A0000890B000054090000000B0000000C0000000900001C0B00009C0B00005E090000000C0000000C000000090000E10B0000AD0B000067090000000D0000000C0000000900009F0C0000BE0B00006F090000000E0000000C000000090000580D0000CD0B000075090000000F0000000C0000000900000A0E0000DB0B00007B09000000100000000C000000090000B70E0000E70B00007F09000000000000000D0000000900000F010000390B0000BB08000000010000000D000000090000190200005A0B0000D108000000020000000D0000000900001D0300007A0B0000E608000000030000000D0000000900001B040000980B0000F908000000040000000D00000009000012050000B50B00000B09000000050000000D00000009000003060000D10B00001D09000000060000000D000000090000EE060000EC0B00002C09000000070000000D000000090000D3070000050C00003B09000000080000000D000000090000B20800001D0C00004909000000090000000D0000000900008A090000340C000055090000000A0000000D0000000900005C0A00004A0C000061090000000B0000000D000000090000290B00005E0C00006B090000000C0000000D000000090000EE0B0000720C000074090000000D0000000D000000090000AE0C0000830C00007B090000000E0000000D000000090000670D0000940C000082090000000F0000000D0000000900001B0E0000A30C00008709000000100000000D000000090000C80E0000B10C00008C09000000000000000E00000009000012010000E60B0000C708000000010000000E0000000900001D020000080C0000DD08000000020000000E000000090000210300002A0C0000F208000000030000000E000000090000200400004A0C00000509000000040000000E00000009000018050000680C00001809000000050000000E0000000900000A060000860C00002909000000060000000E000000090000F6060000A20C00003909000000070000000E000000090000DC070000BD0C00004809000000080000000E000000090000BB080000D60C00005509000000090000000E00000009000095090000EF0C000062090000000A0000000E000000090000680A0000060D00006D090000000B0000000E000000090000350B00001C0D000077090000000C0000000E000000090000FB0B0000300D000080090000000D0000000E000000090000BC0C0000440D000088090000000E0000000E000000090000760D0000560D00008F090000000F0000000E0000000900002A0E0000670D00009409000000100000000E000000090000D80E0000760D00009809000000000000000F000000090000140100008E0C0000D408000000010000000F00000009000020020000B20C0000E908000000020000000F00000009000025030000D40C0000FE08000000030000000F00000009000025040000F60C00001209000000040000000F0000000900001E050000160D00002409000000050000000F00000009000011060000350D00003509000000060000000F000000090000FE060000530D00004509000000070000000F000000090000E40700006F0D00005409000000080000000F000000090000C40800008A0D00006209000000090000000F0000000900009F090000A40D00006E090000000A0000000F000000090000730A0000BD0D000079090000000B0000000F000000090000400B0000D40D000084090000000C0000000F000000090000080C0000EA0D00008D090000000D0000000F000000090000C90C0000FF0D000094090000000E0000000F000000090000840D0000130E00009B090000000F0000000F000000090000390E0000250E0000A009000000100000000F000000090000E80E0000360E0000A509000000000000001000000009000016010000300D0000E008000000010000001000000009000022020000560D0000F6080000000200000010000000090000290300007A0D00000A090000000300000010000000090000290400009D0D00001E09000000040000001000000009000023050000BE0D00003009000000050000001000000009000017060000DF0D00004109000000060000001000000009000004070000FE0D000052090000000700000010000000090000EC0700001C0E000060090000000800000010000000090000CD080000390E00006E090000000900000010000000090000A8090000540E00007B090000000A000000100000000900007D0A00006E0E000086090000000B000000100000000900004B0B0000870E000090090000000C00000010000000090000140C00009F0E000099090000000D00000010000000090000D60C0000B50E0000A1090000000E00000010000000090000920D0000CA0E0000A8090000000F00000010000000090000480E0000DE0E0000AD090000001000000010000000090000F70E0000F00E0000B10900000000000000000000000A0000B80000009F000000E60800000001000000000000000A0000B9010000AC000000FD0800000002000000000000000A0000B3020000B8000000120900000003000000000000000A0000A7030000C3000000270900000004000000000000000A000095040000CC0000003A0900000005000000000000000A00007D050000D40000004C0900000006000000000000000A00005F060000DB0000005D0900000007000000000000000A00003A070000E00000006D0900000008000000000000000A00000F080000E40000007B0900000009000000000000000A0000DE080000E700000089090000000A000000000000000A0000A7090000E900000095090000000B000000000000000A00006A0A0000EA000000A0090000000C000000000000000A0000260B0000E9000000AA090000000D000000000000000A0000DC0B0000E7000000B3090000000E000000000000000A00008C0C0000E3000000BA090000000F000000000000000A0000360D0000DF000000C10900000010000000000000000A0000D90D0000D9000000C60900000000000000010000000A0000C300000091010000F30800000001000000010000000A0000C5010000A00100000A0900000002000000010000000A0000C0020000AD010000200900000003000000010000000A0000B5030000B9010000340900000004000000010000000A0000A4040000C4010000470900000005000000010000000A00008C050000CE0100005A0900000006000000010000000A00006F060000D60100006A0900000007000000010000000A00004B070000DD0100007A0900000008000000010000000A000021080000E3010000890900000009000000010000000A0000F1080000E801000096090000000A000000010000000A0000BB090000EB010000A2090000000B000000010000000A00007E0A0000ED010000AE090000000C000000010000000A00003B0B0000EE010000B7090000000D000000010000000A0000F20B0000ED010000C0090000000E000000010000000A0000A30C0000EB010000C8090000000F000000010000000A00004E0D0000E8010000CE0900000010000000010000000A0000F20D0000E4010000D30900000000000000020000000A0000CD0000007E020000010900000001000000020000000A0000D00100008F020000170900000002000000020000000A0000CC0200009E0200002D0900000003000000020000000A0000C2030000AB020000420900000004000000020000000A0000B1040000B7020000550900000005000000020000000A00009B050000C3020000670900000006000000020000000A00007E060000CC020000780900000007000000020000000A00005B070000D5020000880900000008000000020000000A000032080000DC020000960900000009000000020000000A000003090000E2020000A4090000000A000000020000000A0000CE090000E7020000B0090000000B000000020000000A0000920A0000EB020000BB090000000C000000020000000A0000500B0000ED020000C5090000000D000000020000000A0000080C0000EE020000CE090000000E000000020000000A0000BA0C0000EE020000D5090000000F000000020000000A0000650D0000EC020000DC0900000010000000020000000A00000A0E0000EA020000E10900000000000000030000000A0000D7000000660300000E0900000001000000030000000A0000DA01000078030000250900000002000000030000000A0000D7020000880300003A0900000003000000030000000A0000CE030000980300004F0900000004000000030000000A0000BF040000A6030000620900000005000000030000000A0000A9050000B2030000740900000006000000030000000A00008D060000BE030000850900000007000000030000000A00006B070000C8030000950900000008000000030000000A000043080000D1030000A40900000009000000030000000A000015090000D8030000B1090000000A000000030000000A0000E0090000DE030000BE090000000B000000030000000A0000A50A0000E4030000C9090000000C000000030000000A0000640B0000E7030000D3090000000D000000030000000A00001D0C0000EA030000DC090000000E000000030000000A0000CF0C0000EB030000E3090000000F000000030000000A00007C0D0000EB030000EA0900000010000000030000000A0000220E0000EA030000EF0900000000000000040000000A0000E0000000490400001B0900000001000000040000000A0000E40100005C040000320900000002000000040000000A0000E20200006E040000480900000003000000040000000A0000DA0300007F0400005C0900000004000000040000000A0000CB0400008E040000700900000005000000040000000A0000B60500009D040000820900000006000000040000000A00009B060000A9040000930900000007000000040000000A00007A070000B5040000A30900000008000000040000000A000053080000C0040000B10900000009000000040000000A000025090000C9040000BF090000000A000000040000000A0000F2090000D1040000CB090000000B000000040000000A0000B80A0000D7040000D6090000000C000000040000000A0000780B0000DD040000E0090000000D000000040000000A0000310C0000E1040000E9090000000E000000040000000A0000E50C0000E4040000F1090000000F000000040000000A0000920D0000E5040000F70900000010000000040000000A0000390E0000E5040000FD0900000000000000050000000A0000E800000027050000290900000001000000050000000A0000ED0100003B050000400900000002000000050000000A0000EC0200004F050000550900000003000000050000000A0000E5030000610500006A0900000004000000050000000A0000D7040000720500007D0900000005000000050000000A0000C3050000820500008F0900000006000000050000000A0000A906000090050000A00900000007000000050000000A0000890700009D050000B00900000008000000050000000A000062080000A9050000BF0900000009000000050000000A000036090000B4050000CC090000000A000000050000000A0000030A0000BD050000D9090000000B000000050000000A0000CA0A0000C6050000E4090000000C000000050000000A00008A0B0000CD050000EE090000000D000000050000000A0000450C0000D2050000F7090000000E000000050000000A0000F90C0000D7050000FF090000000F000000050000000A0000A70D0000DA050000050A00000010000000050000000A00004F0E0000DC0500000A0A00000000000000060000000A0000F0000000FF050000360900000001000000060000000A0000F6010000150600004D0900000002000000060000000A0000F60200002A060000630900000003000000060000000A0000EF0300003E060000770900000004000000060000000A0000E2040000500600008B0900000005000000060000000A0000CF050000620600009D0900000006000000060000000A0000B606000072060000AE0900000007000000060000000A00009707000081060000BE0900000008000000060000000A0000710800008E060000CC0900000009000000060000000A0000450900009A060000DA090000000A000000060000000A0000130A0000A5060000E6090000000B000000060000000A0000DB0A0000AF060000F2090000000C000000060000000A00009D0B0000B7060000FC090000000D000000060000000A0000580C0000BF060000050A0000000E000000060000000A00000D0D0000C40600000C0A0000000F000000060000000A0000BC0D0000C9060000130A00000010000000060000000A0000650E0000CD060000180A00000000000000070000000A0000F7000000D2060000430900000001000000070000000A0000FE010000EA0600005A0900000002000000070000000A0000FE02000000070000700900000003000000070000000A0000F903000016070000850900000004000000070000000A0000ED0400002A070000980900000005000000070000000A0000DB0500003D070000AA0900000006000000070000000A0000C20600004E070000BB0900000007000000070000000A0000A40700005E070000CB0900000008000000070000000A00007F0800006D070000DA0900000009000000070000000A0000540900007B070000E8090000000A000000070000000A0000230A000088070000F4090000000B000000070000000A0000EC0A000093070000FF090000000C000000070000000A0000AE0B00009D070000090A0000000D000000070000000A00006A0C0000A6070000120A0000000E000000070000000A0000210D0000AD0700001A0A0000000F000000070000000A0000D00D0000B3070000200A00000010000000070000000A00007A0E0000B8070000260A00000000000000080000000A0000FE000000A0070000510900000001000000080000000A000005020000B9070000680900000002000000080000000A000007030000D10700007D0900000003000000080000000A000002040000E8070000920900000004000000080000000A0000F7040000FE070000A50900000005000000080000000A0000E605000012080000B80900000006000000080000000A0000CE06000025080000C90900000007000000080000000A0000B007000037080000D90900000008000000080000000A00008D08000048080000E80900000009000000080000000A00006209000057080000F5090000000A000000080000000A0000320A000065080000020A0000000B000000080000000A0000FC0A0000720800000D0A0000000C000000080000000A0000BF0B00007D080000170A0000000D000000080000000A00007C0C000088080000200A0000000E000000080000000A0000330D000091080000280A0000000F000000080000000A0000E40D0000980800002E0A00000010000000080000000A00008E0E00009F080000340A00000000000000090000000A000004010000690800005E0900000001000000090000000A00000C02000084080000750900000002000000090000000A00000E0300009D0800008B0900000003000000090000000A00000A040000B60800009F0900000004000000090000000A000000050000CD080000B30900000005000000090000000A0000F0050000E3080000C50900000006000000090000000A0000D9060000F7080000D60900000007000000090000000A0000BC0700000B090000E60900000008000000090000000A0000990800001D090000F50900000009000000090000000A0000700900002E090000030A0000000A000000090000000A0000410A00003D0900000F0A0000000B000000090000000A00000B0B00004C0900001A0A0000000C000000090000000A0000CF0B000059090000250A0000000D000000090000000A00008D0C0000650900002E0A0000000E000000090000000A0000450D00006F090000350A0000000F000000090000000A0000F70D0000780900003C0A00000010000000090000000A0000A20E000080090000410A000000000000000A0000000A0000090100002C0900006B09000000010000000A0000000A000012020000490900008209000000020000000A0000000A000015030000640900009809000000030000000A0000000A0000120400007E090000AD09000000040000000A0000000A00000905000097090000C009000000050000000A0000000A0000F9050000AE090000D309000000060000000A0000000A0000E4060000C4090000E409000000070000000A0000000A0000C8070000D9090000F409000000080000000A0000000A0000A6080000ED090000030A000000090000000A0000000A00007D090000FF090000100A0000000A0000000A0000000A00004F0A0000100A00001D0A0000000B0000000A0000000A00001A0B0000200A0000280A0000000C0000000A0000000A0000DF0B00002F0A0000320A0000000D0000000A0000000A00009E0C00003C0A00003B0A0000000E0000000A0000000A0000570D0000480A0000430A0000000F0000000A0000000A0000090E0000530A00004A0A000000100000000A0000000A0000B50E00005D0A00004F0A000000000000000B0000000A00000D010000EB0900007909000000010000000B0000000A000018020000090A00009009000000020000000B0000000A00001C030000250A0000A609000000030000000B0000000A000019040000410A0000BA09000000040000000B0000000A0000110500005B0A0000CE09000000050000000B0000000A000002060000740A0000E009000000060000000B0000000A0000ED0600008C0A0000F109000000070000000B0000000A0000D2070000A20A0000010A000000080000000B0000000A0000B1080000B70A0000100A000000090000000B0000000A00008A090000CB0A00001E0A0000000A0000000B0000000A00005C0A0000DE0A00002A0A0000000B0000000B0000000A0000280B0000F00A0000360A0000000C0000000B0000000A0000EE0B0000000B0000400A0000000D0000000B0000000A0000AE0C00000F0B0000490A0000000E0000000B0000000A0000670D00001C0B0000510A0000000F0000000B0000000A00001B0E0000290B0000570A000000100000000B0000000A0000C80E0000340B00005D0A000000000000000C0000000A000011010000A40A00008609000000010000000C0000000A00001C020000C30A00009D09000000020000000C0000000A000021030000E20A0000B309000000030000000C0000000A000020040000FF0A0000C809000000040000000C0000000A0000180500001B0B0000DB09000000050000000C0000000A00000A060000350B0000EE09000000060000000C0000000A0000F70600004E0B0000FF09000000070000000C0000000A0000DC070000660B00000F0A000000080000000C0000000A0000BC0800007D0B00001E0A000000090000000C0000000A000095090000930B00002B0A0000000A0000000C0000000A0000690A0000A70B0000380A0000000B0000000C0000000A0000360B0000BA0B0000430A0000000C0000000C0000000A0000FC0B0000CB0B00004E0A0000000D0000000C0000000A0000BD0C0000DC0B0000570A0000000E0000000C0000000A0000780D0000EB0B00005E0A0000000F0000000C0000000A00002C0E0000F90B0000650A000000100000000C0000000A0000DA0E0000060C00006B0A000000000000000D0000000A000015010000580B00009309000000010000000D0000000A000021020000790B0000AA09000000020000000D0000000A000026030000990B0000C009000000030000000D0000000A000026040000B70B0000D509000000040000000D0000000A00001F050000D50B0000E909000000050000000D0000000A000012060000F10B0000FB09000000060000000D0000000A0000FF0600000C0C00000C0A000000070000000D0000000A0000E6070000250C00001C0A000000080000000D0000000A0000C60800003D0C00002B0A000000090000000D0000000A0000A1090000540C0000390A0000000A0000000D0000000A0000750A00006A0C0000460A0000000B0000000D0000000A0000430B00007F0C0000510A0000000C0000000D0000000A00000A0C0000920C00005B0A0000000D0000000D0000000A0000CC0C0000A40C0000640A0000000E0000000D0000000A0000870D0000B50C00006C0A0000000F0000000D0000000A00003C0E0000C40C0000730A000000100000000D0000000A0000EB0E0000D20C0000780A000000000000000E0000000A000017010000070C0000A109000000010000000E0000000A000024020000290C0000B809000000020000000E0000000A00002B0300004B0C0000CE09000000030000000E0000000A00002B0400006B0C0000E209000000040000000E0000000A0000250500008A0C0000F609000000050000000E0000000A000019060000A70C0000080A000000060000000E0000000A000007070000C40C00001A0A000000070000000E0000000A0000EF070000DF0C00002A0A000000080000000E0000000A0000D0080000F90C0000390A000000090000000E0000000A0000AB090000110D0000470A0000000A0000000E0000000A0000800A0000280D0000530A0000000B0000000E0000000A00004F0B00003F0D00005F0A0000000C0000000E0000000A0000170C0000530D0000690A0000000D0000000E0000000A0000DA0C0000670D0000720A0000000E0000000E0000000A0000960D0000790D00007A0A0000000F0000000E0000000A00004C0E00008A0D0000810A000000100000000E0000000A0000FC0E00009A0D0000860A000000000000000F0000000A000019010000B10C0000AE09000000010000000F0000000A000027020000D50C0000C509000000020000000F0000000A00002E030000F80C0000DB09000000030000000F0000000A000030040000190D0000F009000000040000000F0000000A00002B0500003A0D0000030A000000050000000F0000000A000020060000590D0000160A000000060000000F0000000A00000E070000770D0000270A000000070000000F0000000A0000F7070000930D0000370A000000080000000F0000000A0000D9080000AF0D0000460A000000090000000F0000000A0000B5090000C90D0000540A0000000A0000000F0000000A00008B0A0000E20D0000610A0000000B0000000F0000000A00005A0B0000F90D00006C0A0000000C0000000F0000000A0000240C00000F0E0000760A0000000D0000000F0000000A0000E70C0000250E0000800A0000000E0000000F0000000A0000A40D0000380E0000880A0000000F0000000F0000000A00005B0E00004B0E00008E0A000000100000000F0000000A00000C0F00005C0E0000940A00000000000000100000000A00001B010000550D0000BB0900000001000000100000000A0000290200007B0D0000D20900000002000000100000000A0000320300009F0D0000E80900000003000000100000000A000034040000C20D0000FD0900000004000000100000000A000030050000E40D0000110A00000005000000100000000A000025060000050E0000230A00000006000000100000000A000015070000240E0000350A00000007000000100000000A0000FE070000430E0000450A00000008000000100000000A0000E10800005F0E0000540A00000009000000100000000A0000BE0900007B0E0000620A0000000A000000100000000A0000950A0000950E00006E0A0000000B000000100000000A0000650B0000AF0E00007A0A0000000C000000100000000A0000300C0000C60E0000840A0000000D000000100000000A0000F40C0000DD0E00008D0A0000000E000000100000000A0000B20D0000F20E0000950A0000000F000000100000000A0000690E0000070F00009C0A00000010000000100000000A00001B0F0000190F0000A20A00000000000000000000000B0000BE000000A3000000AB0900000001000000000000000B0000C0010000AF000000C30900000002000000000000000B0000BC020000BB000000DA0900000003000000000000000B0000B2030000C5000000EF0900000004000000000000000B0000A2040000CE000000040A00000005000000000000000B00008B050000D5000000170A00000006000000000000000B00006E060000DC000000290A00000007000000000000000B00004B070000E10000003A0A00000008000000000000000B000022080000E40000004A0A00000009000000000000000B0000F3080000E7000000580A0000000A000000000000000B0000BD090000E8000000660A0000000B000000000000000B0000810A0000E8000000720A0000000C000000000000000B00003F0B0000E70000007D0A0000000D000000000000000B0000F70B0000E4000000870A0000000E000000000000000B0000A90C0000E1000000900A0000000F000000000000000B0000540D0000DC000000970A00000010000000000000000B0000F90D0000D50000009E0A00000000000000010000000B0000C900000097010000B90900000001000000010000000B0000CC010000A5010000D10900000002000000010000000B0000C9020000B2010000E80900000003000000010000000B0000C0030000BE010000FE0900000004000000010000000B0000B0040000C8010000120A00000005000000010000000B00009A050000D1010000250A00000006000000010000000B00007E060000D9010000380A00000007000000010000000B00005C070000E0010000490A00000008000000010000000B000034080000E5010000580A00000009000000010000000B000005090000E9010000670A0000000A000000010000000B0000D1090000EC010000740A0000000B000000010000000B0000960A0000EE010000810A0000000C000000010000000B0000550B0000EE0100008C0A0000000D000000010000000B00000D0C0000ED010000960A0000000E000000010000000B0000C00C0000EB0100009F0A0000000F000000010000000B00006C0D0000E8010000A60A00000010000000010000000B0000120E0000E3010000AD0A00000000000000020000000B0000D300000086020000C80900000001000000020000000B0000D701000096020000E00900000002000000020000000B0000D5020000A4020000F70900000003000000020000000B0000CC030000B20200000C0A00000004000000020000000B0000BE040000BE020000210A00000005000000020000000B0000A9050000C8020000340A00000006000000020000000B00008E060000D2020000460A00000007000000020000000B00006D070000DA020000570A00000008000000020000000B000045080000E1020000670A00000009000000020000000B000018090000E7020000760A0000000A000000020000000B0000E4090000EB020000830A0000000B000000020000000B0000AA0A0000EE020000900A0000000C000000020000000B00006A0B0000F00200009B0A0000000D000000020000000B0000230C0000F1020000A50A0000000E000000020000000B0000D60C0000F0020000AE0A0000000F000000020000000B0000840D0000EE020000B50A00000010000000020000000B00002B0E0000EB020000BC0A00000000000000030000000B0000DD00000070030000D60900000001000000030000000B0000E101000081030000EE0900000002000000030000000B0000E002000091030000050A00000003000000030000000B0000D9030000A00300001B0A00000004000000030000000B0000CB040000AE0300002F0A00000005000000030000000B0000B7050000BA030000430A00000006000000030000000B00009D060000C5030000550A00000007000000030000000B00007C070000CF030000660A00000008000000030000000B000056080000D7030000760A00000009000000030000000B000029090000DF030000840A0000000A000000030000000B0000F6090000E5030000920A0000000B000000030000000B0000BD0A0000E90300009E0A0000000C000000030000000B00007E0B0000ED030000AA0A0000000D000000030000000B0000380C0000EF030000B40A0000000E000000030000000B0000EC0C0000F0030000BC0A0000000F000000030000000B00009A0D0000F0030000C40A00000010000000030000000B0000420E0000EE030000CB0A00000000000000040000000B0000E500000054040000E40900000001000000040000000B0000EB01000067040000FD0900000002000000040000000B0000EB02000079040000130A00000003000000040000000B0000E403000089040000290A00000004000000040000000B0000D7040000990400003E0A00000005000000040000000B0000C4050000A7040000510A00000006000000040000000B0000AB060000B3040000630A00000007000000040000000B00008B070000BF040000750A00000008000000040000000B000066080000C9040000840A00000009000000040000000B00003A090000D2040000930A0000000A000000040000000B0000080A0000D9040000A10A0000000B000000040000000B0000D00A0000DF040000AD0A0000000C000000040000000B0000910B0000E5040000B80A0000000D000000040000000B00004D0C0000E8040000C20A0000000E000000040000000B0000020D0000EB040000CB0A0000000F000000040000000B0000B10D0000EC040000D30A00000010000000040000000B0000590E0000EC040000DA0A00000000000000050000000B0000EE00000034050000F30900000001000000050000000B0000F4010000480500000B0A00000002000000050000000B0000F50200005C050000220A00000003000000050000000B0000EF0300006E050000380A00000004000000050000000B0000E30400007E0500004C0A00000005000000050000000B0000D10500008E050000600A00000006000000050000000B0000B80600009C050000720A00000007000000050000000B00009A070000A9050000830A00000008000000050000000B000075080000B5050000930A00000009000000050000000B00004A090000BF050000A20A0000000A000000050000000B0000190A0000C8050000AF0A0000000B000000050000000B0000E20A0000D0050000BC0A0000000C000000050000000B0000A40B0000D7050000C70A0000000D000000050000000B0000600C0000DC050000D10A0000000E000000050000000B0000160D0000E1050000DA0A0000000F000000050000000B0000C60D0000E4050000E20A00000010000000050000000B0000700E0000E5050000E90A00000000000000060000000B0000F50000000E060000010A00000001000000060000000B0000FD010000240600001A0A00000002000000060000000B0000FE02000039060000300A00000003000000060000000B0000F90300004D060000460A00000004000000060000000B0000EE0400005F0600005B0A00000005000000060000000B0000DD050000700600006E0A00000006000000060000000B0000C506000080060000810A00000007000000060000000B0000A80700008E060000920A00000008000000060000000B0000840800009C060000A20A00000009000000060000000B00005A090000A8060000B10A0000000A000000060000000B0000290A0000B3060000BE0A0000000B000000060000000B0000F30A0000BC060000CB0A0000000C000000060000000B0000B60B0000C4060000D60A0000000D000000060000000B0000730C0000CB060000E00A0000000E000000060000000B00002A0D0000D1060000E90A0000000F000000060000000B0000DB0D0000D6060000F10A00000010000000060000000B0000860E0000D9060000F70A00000000000000070000000B0000FC000000E3060000100A00000001000000070000000B000005020000FB060000280A00000002000000070000000B000007030000110700003F0A00000003000000070000000B00000304000027070000550A00000004000000070000000B0000F90400003A0700006A0A00000005000000070000000B0000E80500004D0700007D0A00000006000000070000000B0000D20600005F0700008F0A00000007000000070000000B0000B50700006F070000A10A00000008000000070000000B0000920800007E070000B10A00000009000000070000000B0000690900008B070000BF0A0000000A000000070000000B0000390A000098070000CD0A0000000B000000070000000B0000040B0000A3070000D90A0000000C000000070000000B0000C80B0000AC070000E50A0000000D000000070000000B0000860C0000B5070000EF0A0000000E000000070000000B00003E0D0000BC070000F80A0000000F000000070000000B0000EF0D0000C2070000000B00000010000000070000000B00009B0E0000C7070000060B00000000000000080000000B000003010000B30700001E0A00000001000000080000000B00000C020000CC070000360A00000002000000080000000B00000F030000E40700004D0A00000003000000080000000B00000C040000FB070000630A00000004000000080000000B00000305000011080000780A00000005000000080000000B0000F3050000250800008C0A00000006000000080000000B0000DD060000380800009E0A00000007000000080000000B0000C10700004A080000AF0A00000008000000080000000B00009F0800005A080000BF0A00000009000000080000000B00007709000069080000CE0A0000000A000000080000000B0000490A000077080000DC0A0000000B000000080000000B0000140B000084080000E80A0000000C000000080000000B0000D90B00008F080000F40A0000000D000000080000000B0000980C00009A080000FE0A0000000E000000080000000B0000510D0000A2080000070B0000000F000000080000000B0000030E0000AA0800000F0B00000010000000080000000B0000AF0E0000B1080000150B00000000000000090000000B0000080100007E0800002D0A00000001000000090000000B00001202000099080000450A00000002000000090000000B000016030000B20800005C0A00000003000000090000000B000014040000CB080000720A00000004000000090000000B00000C050000E2080000870A00000005000000090000000B0000FD050000F80800009A0A00000006000000090000000B0000E80600000C090000AD0A00000007000000090000000B0000CD0700001F090000BE0A00000008000000090000000B0000AC08000032090000CE0A00000009000000090000000B00008509000042090000DD0A0000000A000000090000000B0000570A000052090000EB0A0000000B000000090000000B0000230B000060090000F70A0000000C000000090000000B0000E90B00006D090000020B0000000D000000090000000B0000A90C0000790900000D0B0000000E000000090000000B0000630D000083090000160B0000000F000000090000000B0000160E00008D0900001E0B00000010000000090000000B0000C30E000095090000240B000000000000000A0000000B00000D010000430900003B0A000000010000000A0000000B00001802000060090000530A000000020000000A0000000B00001D0300007B0900006A0A000000030000000A0000000B00001C04000095090000800A000000040000000A0000000B000014050000AE090000950A000000050000000A0000000B000007060000C5090000A90A000000060000000A0000000B0000F3060000DB090000BB0A000000070000000A0000000B0000D9070000F0090000CD0A000000080000000A0000000B0000B8080000040A0000DD0A000000090000000A0000000B000092090000160A0000EC0A0000000A0000000A0000000B0000650A0000270A0000F90A0000000B0000000A0000000B0000320B0000370A0000060B0000000C0000000A0000000B0000F90B0000460A0000110B0000000D0000000A0000000B0000BA0C0000530A00001C0B0000000E0000000A0000000B0000740D00005F0A0000250B0000000F0000000A0000000B0000280E00006A0A00002D0B000000100000000A0000000B0000D70E0000740A0000330B000000000000000B0000000B000012010000040A00004A0A000000010000000B0000000B00001E020000220A0000620A000000020000000B0000000B0000230300003F0A0000790A000000030000000B0000000B0000230400005A0A00008F0A000000040000000B0000000B00001C050000740A0000A40A000000050000000B0000000B0000100600008D0A0000B70A000000060000000B0000000B0000FC060000A50A0000CA0A000000070000000B0000000B0000E3070000BC0A0000DB0A000000080000000B0000000B0000C4080000D10A0000EB0A000000090000000B0000000B00009E090000E50A0000FA0A0000000A0000000B0000000B0000720A0000F70A0000080B0000000B0000000B0000000B0000400B0000090B0000150B0000000C0000000B0000000B0000080C0000190B0000200B0000000D0000000B0000000B0000CA0C0000280B00002A0B0000000E0000000B0000000B0000850D0000360B0000330B0000000F0000000B0000000B00003A0E0000420B00003B0B000000100000000B0000000B0000E90E00004D0B0000420B000000000000000C0000000B000015010000BF0A0000580A000000010000000C0000000B000022020000DF0A0000700A000000020000000C0000000B000029030000FD0A0000870A000000030000000C0000000B0000290400001A0B00009E0A000000040000000C0000000B000024050000360B0000B20A000000050000000C0000000B000018060000500B0000C60A000000060000000C0000000B0000060700006A0B0000D90A000000070000000C0000000B0000ED070000820B0000EA0A000000080000000C0000000B0000CF080000990B0000FA0A000000090000000C0000000B0000AA090000AE0B0000090B0000000A0000000C0000000B00007F0A0000C30B0000170B0000000B0000000C0000000B00004E0B0000D60B0000230B0000000C0000000C0000000B0000170C0000E70B00002F0B0000000D0000000C0000000B0000D90C0000F80B0000390B0000000E0000000C0000000B0000950D0000070C0000420B0000000F0000000C0000000B00004B0E0000150C00004A0B000000100000000C0000000B0000FB0E0000220C0000510B000000000000000D0000000B000019010000750B0000660A000000010000000D0000000B000026020000960B00007F0A000000020000000D0000000B00002E030000B60B0000960A000000030000000D0000000B00002F040000D50B0000AC0A000000040000000D0000000B00002A050000F20B0000C10A000000050000000D0000000B00001F0600000E0C0000D50A000000060000000D0000000B00000E070000290C0000E70A000000070000000D0000000B0000F7070000430C0000F80A000000080000000D0000000B0000D90800005B0C0000090B000000090000000D0000000B0000B5090000720C0000180B0000000A0000000D0000000B00008B0A0000880C0000260B0000000B0000000D0000000B00005B0B00009D0C0000320B0000000C0000000D0000000B0000240C0000B00C00003E0B0000000D0000000D0000000B0000E80C0000C20C0000480B0000000E0000000D0000000B0000A50D0000D30C0000510B0000000F0000000D0000000B00005C0E0000E30C0000590B000000100000000D0000000B00000D0F0000F10C0000600B000000000000000E0000000B00001B010000260C0000750A000000010000000E0000000B00002A020000490C00008D0A000000020000000E0000000B0000320300006A0C0000A50A000000030000000E0000000B0000340400008A0C0000BB0A000000040000000E0000000B000030050000A90C0000CF0A000000050000000E0000000B000026060000C70C0000E30A000000060000000E0000000B000016070000E40C0000F60A000000070000000E0000000B0000FF070000FF0C0000070B000000080000000E0000000B0000E3080000190D0000170B000000090000000E0000000B0000C0090000320D0000260B0000000A0000000E0000000B0000960A0000490D0000340B0000000B0000000E0000000B0000670B00005F0D0000410B0000000C0000000E0000000B0000320C0000740D00004D0B0000000D0000000E0000000B0000F60C0000880D0000570B0000000E0000000E0000000B0000B40D00009A0D0000600B0000000F0000000E0000000B00006C0E0000AB0D0000680B000000100000000E0000000B00001D0F0000BB0D00006F0B000000000000000F0000000B00001D010000D10C0000830A000000010000000F0000000B00002D020000F60C00009C0A000000020000000F0000000B000036030000190D0000B30A000000030000000F0000000B0000390400003B0D0000C90A000000040000000F0000000B0000360500005B0D0000DE0A000000050000000F0000000B00002D0600007B0D0000F20A000000060000000F0000000B00001D070000990D0000040B000000070000000F0000000B000007080000B60D0000160B000000080000000F0000000B0000EC080000D10D0000260B000000090000000F0000000B0000CA090000EC0D0000350B0000000A0000000F0000000B0000A10A0000050E0000430B0000000B0000000F0000000B0000730B00001C0E0000500B0000000C0000000F0000000B00003E0C0000330E00005B0B0000000D0000000F0000000B0000030D0000480E0000660B0000000E0000000F0000000B0000C20D00005C0E00006F0B0000000F0000000F0000000B00007B0E00006F0E0000770B000000100000000F0000000B00002D0F0000800E00007E0B00000000000000100000000B00001E010000780D0000920A00000001000000100000000B00002F0200009E0D0000AA0A00000002000000100000000B000039030000C30D0000C20A00000003000000100000000B00003D040000E60D0000D80A00000004000000100000000B00003B050000080E0000ED0A00000005000000100000000B000032060000290E0000000B00000006000000100000000B000024070000490E0000130B00000007000000100000000B00000F080000670E0000250B00000008000000100000000B0000F4080000840E0000350B00000009000000100000000B0000D3090000A00E0000440B0000000A000000100000000B0000AB0A0000BB0E0000520B0000000B000000100000000B00007E0B0000D40E00005F0B0000000C000000100000000B00004A0C0000EC0E00006A0B0000000D000000100000000B0000100D0000030F0000750B0000000E000000100000000B0000D00D0000190F00007E0B0000000F000000100000000B0000890E00002D0F0000860B00000010000000100000000B00003D0F0000400F00008D0B00000000000000000000000C0000C2000000A40000006B0A00000001000000000000000C0000C6010000B1000000840A00000002000000000000000C0000C4020000BB0000009C0A00000003000000000000000C0000BB030000C5000000B30A00000004000000000000000C0000AC040000CD000000C80A00000005000000000000000C000097050000D5000000DD0A00000006000000000000000C00007C060000DA000000F00A00000007000000000000000C00005B070000DF000000020B00000008000000000000000C000033080000E2000000130B00000009000000000000000C000005090000E4000000230B0000000A000000000000000C0000D2090000E5000000320B0000000B000000000000000C0000970A0000E50000003F0B0000000C000000000000000C0000570B0000E30000004B0B0000000D000000000000000C0000100C0000E0000000570B0000000E000000000000000C0000C40C0000DC000000610B0000000F000000000000000C0000710D0000D6000000690B00000010000000000000000C0000170E0000CF000000710B00000000000000010000000C0000CD0000009B0100007A0A00000001000000010000000C0000D2010000A8010000930A00000002000000010000000C0000D0020000B5010000AB0A00000003000000010000000C0000C9030000C0010000C20A00000004000000010000000C0000BB040000CA010000D80A00000005000000010000000C0000A7050000D3010000EC0A00000006000000010000000C00008C060000DA010000000B00000007000000010000000C00006C070000E0010000120B00000008000000010000000C000045080000E5010000230B00000009000000010000000C000018090000E9010000330B0000000A000000010000000C0000E5090000EC010000420B0000000B000000010000000C0000AC0A0000ED0100004F0B0000000C000000010000000C00006C0B0000ED0100005B0B0000000D000000010000000C0000270C0000EB010000670B0000000E000000010000000C0000DB0C0000E9010000710B0000000F000000010000000C0000890D0000E5010000790B00000010000000010000000C0000300E0000E0010000810B00000000000000020000000C0000D70000008C0200008A0A00000001000000020000000C0000DD0100009B020000A30A00000002000000020000000C0000DC020000A9020000BB0A00000003000000020000000C0000D5030000B6020000D20A00000004000000020000000C0000C8040000C2020000E80A00000005000000020000000C0000B5050000CC020000FC0A00000006000000020000000C00009C060000D5020000100B00000007000000020000000C00007C070000DD020000220B00000008000000020000000C000056080000E3020000330B00000009000000020000000C00002A090000E9020000430B0000000A000000020000000C0000F8090000ED020000510B0000000B000000020000000C0000C00A0000F00200005F0B0000000C000000020000000C0000810B0000F10200006B0B0000000D000000020000000C00003C0C0000F1020000770B0000000E000000020000000C0000F10C0000F0020000810B0000000F000000020000000C0000A00D0000EE0200008A0B00000010000000020000000C0000490E0000EB020000910B00000000000000030000000C0000E000000077030000990A00000001000000030000000C0000E701000088030000B20A00000002000000030000000C0000E702000098030000CB0A00000003000000030000000C0000E1030000A7030000E20A00000004000000030000000C0000D5040000B4030000F70A00000005000000030000000C0000C3050000C00300000C0B00000006000000030000000C0000AA060000CB0300001F0B00000007000000030000000C00008C070000D4030000320B00000008000000030000000C000067080000DC030000430B00000009000000030000000C00003C090000E3030000530B0000000A000000030000000C00000B0A0000E9030000610B0000000B000000030000000C0000D30A0000ED0300006F0B0000000C000000030000000C0000950B0000F00300007B0B0000000D000000030000000C0000520C0000F2030000870B0000000E000000030000000C0000080D0000F3030000910B0000000F000000030000000C0000B70D0000F20300009A0B00000010000000030000000C0000610E0000F1030000A10B00000000000000040000000C0000E90000005E040000A90A00000001000000040000000C0000F001000071040000C20A00000002000000040000000C0000F202000082040000DA0A00000003000000040000000C0000ED03000092040000F10A00000004000000040000000C0000E2040000A1040000070B00000005000000040000000C0000D0050000AF0400001C0B00000006000000040000000C0000B9060000BB0400002F0B00000007000000040000000C00009B070000C6040000410B00000008000000040000000C000077080000D0040000530B00000009000000040000000C00004D090000D8040000630B0000000A000000040000000C00001C0A0000E0040000710B0000000B000000040000000C0000E60A0000E60400007F0B0000000C000000040000000C0000A90B0000EB0400008B0B0000000D000000040000000C0000660C0000EE040000970B0000000E000000040000000C00001D0D0000F0040000A10B0000000F000000040000000C0000CE0D0000F1040000AA0B00000010000000040000000C0000780E0000F1040000B20B00000000000000050000000C0000F10000003F050000B80A00000001000000050000000C0000F901000054050000D20A00000002000000050000000C0000FC02000067050000EA0A00000003000000050000000C0000F803000078050000010B00000004000000050000000C0000ED04000089050000170B00000005000000050000000C0000DD050000980500002B0B00000006000000050000000C0000C6060000A60500003F0B00000007000000050000000C0000A9070000B3050000510B00000008000000050000000C000086080000BE050000620B00000009000000050000000C00005D090000C8050000720B0000000A000000050000000C00002D0A0000D1050000810B0000000B000000050000000C0000F80A0000D90500008F0B0000000C000000050000000C0000BC0B0000E00500009B0B0000000D000000050000000C00007A0C0000E5050000A70B0000000E000000050000000C0000320D0000E9050000B10B0000000F000000050000000C0000E30D0000EB050000BA0B00000010000000050000000C00008F0E0000ED050000C20B00000000000000060000000C0000F90000001C060000C80A00000001000000060000000C00000202000031060000E10A00000002000000060000000C00000503000046060000F90A00000003000000060000000C00000204000059060000100B00000004000000060000000C0000F80400006C060000260B00000005000000060000000C0000E90500007C0600003B0B00000006000000060000000C0000D30600008C0600004F0B00000007000000060000000C0000B70700009A060000610B00000008000000060000000C000095080000A8060000720B00000009000000060000000C00006D090000B3060000820B0000000A000000060000000C00003E0A0000BE060000910B0000000B000000060000000C0000090B0000C70600009F0B0000000C000000060000000C0000CE0B0000CF060000AB0B0000000D000000060000000C00008D0C0000D6060000B70B0000000E000000060000000C0000460D0000DC060000C10B0000000F000000060000000C0000F80D0000E0060000CA0B00000010000000060000000C0000A40E0000E3060000D20B00000000000000070000000C0000FF000000F3060000D70A00000001000000070000000C0000090200000A070000F10A00000002000000070000000C00000D03000020070000090B00000003000000070000000C00000B04000035070000200B00000004000000070000000C00000305000049070000360B00000005000000070000000C0000F40500005C0700004B0B00000006000000070000000C0000DF0600006D0700005E0B00000007000000070000000C0000C40700007D070000710B00000008000000070000000C0000A30800008C070000820B00000009000000070000000C00007B09000099070000920B0000000A000000070000000C00004E0A0000A5070000A10B0000000B000000070000000C00001A0B0000B0070000AF0B0000000C000000070000000C0000E00B0000BA070000BB0B0000000D000000070000000C0000A00C0000C2070000C70B0000000E000000070000000C0000590D0000CA070000D10B0000000F000000070000000C00000D0E0000CF070000DA0B00000010000000070000000C0000BA0E0000D4070000E20B00000000000000080000000C000005010000C4070000E70A00000001000000080000000C000011020000DE070000000B00000002000000080000000C000015030000F5070000190B00000003000000080000000C0000140400000C080000300B00000004000000080000000C00000D05000022080000460B00000005000000080000000C0000FF050000360800005B0B00000006000000080000000C0000EB060000490800006E0B00000007000000080000000C0000D10700005A080000810B00000008000000080000000C0000B00800006B080000920B00000009000000080000000C00008A0900007A080000A20B0000000A000000080000000C00005D0A000087080000B10B0000000B000000080000000C00002A0B000094080000BF0B0000000C000000080000000C0000F10B00009F080000CB0B0000000D000000080000000C0000B20C0000A9080000D70B0000000E000000080000000C00006C0D0000B2080000E10B0000000F000000080000000C0000200E0000BA080000EA0B00000010000000080000000C0000CE0E0000C0080000F20B00000000000000090000000C00000B01000091080000F60A00000001000000090000000C000017020000AC080000100B00000002000000090000000C00001D030000C5080000280B00000003000000090000000C00001C040000DE0800003F0B00000004000000090000000C000016050000F5080000550B00000005000000090000000C0000090600000A0900006A0B00000006000000090000000C0000F60600001F0900007E0B00000007000000090000000C0000DD07000032090000900B00000008000000090000000C0000BD08000044090000A20B00000009000000090000000C00009709000055090000B20B0000000A000000090000000C00006C0A000064090000C10B0000000B000000090000000C00003A0B000073090000CF0B0000000C000000090000000C0000010C000080090000DB0B0000000D000000090000000C0000C30C00008B090000E70B0000000E000000090000000C00007E0D000096090000F10B0000000F000000090000000C0000340E00009F090000FA0B00000010000000090000000C0000E20E0000A7090000020C000000000000000A0000000C00001001000059090000060B000000010000000A0000000C00001D02000075090000200B000000020000000A0000000C00002303000090090000380B000000030000000A0000000C000024040000AA0900004F0B000000040000000A0000000C00001E050000C3090000650B000000050000000A0000000C000012060000DA0900007A0B000000060000000A0000000C000000070000F00900008E0B000000070000000A0000000C0000E8070000050A0000A00B000000080000000A0000000C0000C9080000190A0000B20B000000090000000A0000000C0000A50900002B0A0000C20B0000000A0000000A0000000C00007A0A00003C0A0000D10B0000000B0000000A0000000C0000480B00004C0A0000DF0B0000000C0000000A0000000C0000110C00005B0A0000EB0B0000000D0000000A0000000C0000D40C0000680A0000F70B0000000E0000000A0000000C0000900D0000740A0000010C0000000F0000000A0000000C0000460E00007F0A00000A0C000000100000000A0000000C0000F60E0000880A0000120C000000000000000B0000000C0000140100001B0A0000160B000000010000000B0000000C000022020000390A00002F0B000000020000000B0000000C00002A030000560A0000480B000000030000000B0000000C00002B040000710A00005F0B000000040000000B0000000C0000260500008C0A0000750B000000050000000B0000000C00001B060000A50A00008A0B000000060000000B0000000C00000A070000BC0A00009E0B000000070000000B0000000C0000F2070000D30A0000B00B000000080000000B0000000C0000D5080000E80A0000C10B000000090000000B0000000C0000B1090000FC0A0000D20B0000000A0000000B0000000C0000870A00000F0B0000E10B0000000B0000000B0000000C0000570B0000200B0000EF0B0000000C0000000B0000000C0000200C0000310B0000FB0B0000000D0000000B0000000C0000E40C00003F0B0000070C0000000E0000000B0000000C0000A10D00004D0B0000110C0000000F0000000B0000000C0000580E00005A0B00001B0C000000100000000B0000000C0000090F0000650B0000230C000000000000000C0000000C000018010000D80A0000250B000000010000000C0000000C000026020000F80A00003F0B000000020000000C0000000C00002F030000160B0000570B000000030000000C0000000C000031040000330B00006E0B000000040000000C0000000C00002D0500004F0B0000850B000000050000000C0000000C0000230600006A0B00009A0B000000060000000C0000000C000013070000830B0000AD0B000000070000000C0000000C0000FC0700009B0B0000C00B000000080000000C0000000C0000E0080000B20B0000D10B000000090000000C0000000C0000BD090000C80B0000E20B0000000A0000000C0000000C0000940A0000DC0B0000F10B0000000B0000000C0000000C0000640B0000EF0B0000FF0B0000000C0000000C0000000C00002F0C0000010C00000B0C0000000D0000000C0000000C0000F30C0000120C0000170C0000000E0000000C0000000C0000B10D0000210C0000210C0000000F0000000C0000000C0000690E00002F0C00002B0C000000100000000C0000000C00001B0F00003C0C0000330C000000000000000D0000000C00001B010000900B0000350B000000010000000D0000000C00002A020000B10B00004E0B000000020000000D0000000C000034030000D10B0000670B000000030000000D0000000C000037040000F00B00007E0B000000040000000D0000000C0000340500000E0C0000940B000000050000000D0000000C00002B0600002A0C0000A90B000000060000000D0000000C00001B070000450C0000BD0B000000070000000D0000000C0000060800005F0C0000D00B000000080000000D0000000C0000EA080000770C0000E10B000000090000000D0000000C0000C80900008F0C0000F20B0000000A0000000D0000000C0000A00A0000A50C0000010C0000000B0000000D0000000C0000710B0000B90C00000F0C0000000C0000000D0000000C00003D0C0000CD0C00001B0C0000000D0000000D0000000C0000020D0000DF0C0000270C0000000E0000000D0000000C0000C10D0000F00C0000320C0000000F0000000D0000000C00007A0E0000000D00003B0C000000100000000D0000000C00002C0F00000E0D0000430C000000000000000E0000000C00001D010000430C0000440B000000010000000E0000000C00002E020000660C00005E0B000000020000000E0000000C000038030000870C0000760B000000030000000E0000000C00003C040000A80C00008E0B000000040000000E0000000C00003A050000C70C0000A40B000000050000000E0000000C000032060000E50C0000B90B000000060000000E0000000C000023070000020D0000CD0B000000070000000E0000000C00000E0800001D0D0000E00B000000080000000E0000000C0000F4080000370D0000F10B000000090000000E0000000C0000D2090000500D0000010C0000000A0000000E0000000C0000AB0A0000680D0000110C0000000B0000000E0000000C00007E0B00007E0D00001F0C0000000C0000000E0000000C00004A0C0000930D00002B0C0000000D0000000E0000000C0000100D0000A70D0000370C0000000E0000000E0000000C0000D00D0000BA0D0000420C0000000F0000000E0000000C00008A0E0000CB0D00004B0C000000100000000E0000000C00003D0F0000DB0D0000530C000000000000000F0000000C00001F010000F00C0000540B000000010000000F0000000C000030020000150D00006D0B000000020000000F0000000C00003B030000380D0000860B000000030000000F0000000C0000400400005A0D00009D0B000000040000000F0000000C00003F0500007B0D0000B40B000000050000000F0000000C0000380600009B0D0000C90B000000060000000F0000000C00002A070000B90D0000DD0B000000070000000F0000000C000016080000D60D0000EF0B000000080000000F0000000C0000FC080000F20D0000010C000000090000000F0000000C0000DC0900000C0E0000110C0000000A0000000F0000000C0000B60A0000260E0000210C0000000B0000000F0000000C0000890B00003E0E00002F0C0000000C0000000F0000000C0000570C0000540E00003B0C0000000D0000000F0000000C00001E0D00006A0E0000470C0000000E0000000F0000000C0000DE0D00007E0E0000520C0000000F0000000F0000000C0000990E0000910E00005B0C000000100000000F0000000C00004D0F0000A30E0000630C00000000000000100000000C000020010000990D0000630B00000001000000100000000C000032020000BF0D00007D0B00000002000000100000000C00003E030000E40D0000960B00000003000000100000000C000044040000080E0000AD0B00000004000000100000000C0000440500002A0E0000C30B00000005000000100000000C00003E0600004B0E0000D80B00000006000000100000000C0000310700006B0E0000EC0B00000007000000100000000C00001E0800008A0E0000FF0B00000008000000100000000C000005090000A70E0000110C00000009000000100000000C0000E6090000C30E0000210C0000000A000000100000000C0000C00A0000DE0E0000300C0000000B000000100000000C0000940B0000F80E00003F0C0000000C000000100000000C0000620C0000100F00004B0C0000000D000000100000000C00002A0D0000270F0000570C0000000E000000100000000C0000EC0D00003D0F0000620C0000000F000000100000000C0000A80E0000520F00006B0C00000010000000100000000C00005D0F0000650F0000730C00000000000000000000000D0000C5000000A4000000250B00000001000000000000000D0000CA010000B0000000400B00000002000000000000000D0000CA020000BA000000590B00000003000000000000000D0000C3030000C3000000710B00000004000000000000000D0000B5040000CB000000880B00000005000000000000000D0000A2050000D20000009E0B00000006000000000000000D000088060000D7000000B20B00000007000000000000000D000069070000DB000000C60B00000008000000000000000D000043080000DE000000D80B00000009000000000000000D000017090000E0000000E90B0000000A000000000000000D0000E4090000E0000000F90B0000000B000000000000000D0000AC0A0000DF000000070C0000000C000000000000000D00006D0B0000DD000000150C0000000D000000000000000D0000280C0000DA000000210C0000000E000000000000000D0000DD0C0000D50000002C0C0000000F000000000000000D00008B0D0000CF000000360C00000010000000000000000D0000340E0000C80000003F0C00000000000000010000000D0000CF0000009C010000360B00000001000000010000000D0000D6010000AA010000510B00000002000000010000000D0000D6020000B60100006A0B00000003000000010000000D0000D0030000C0010000820B00000004000000010000000D0000C4040000CA010000990B00000005000000010000000D0000B1050000D2010000AE0B00000006000000010000000D000098060000D9010000C30B00000007000000010000000D00007A070000DF010000D60B00000008000000010000000D000055080000E4010000E90B00000009000000010000000D000029090000E7010000FA0B0000000A000000010000000D0000F8090000E90100000A0C0000000B000000010000000D0000C00A0000EA010000180C0000000C000000010000000D0000820B0000E9010000260C0000000D000000010000000D00003E0C0000E7010000320C0000000E000000010000000D0000F40C0000E40100003E0C0000000F000000010000000D0000A40D0000E0010000480C00000010000000010000000D00004D0E0000DB010000500C00000000000000020000000D0000D90000008F020000470B00000001000000020000000D0000E00100009E020000610B00000002000000020000000D0000E1020000AC0200007A0B00000003000000020000000D0000DC030000B8020000930B00000004000000020000000D0000D1040000C4020000AA0B00000005000000020000000D0000C0050000CE020000BF0B00000006000000020000000D0000A8060000D6020000D40B00000007000000020000000D00008A070000DE020000E70B00000008000000020000000D000066080000E4020000FA0B00000009000000020000000D00003B090000E90200000B0C0000000A000000020000000D00000B0A0000ED0200001B0C0000000B000000020000000D0000D40A0000EF0200002A0C0000000C000000020000000D0000970B0000F0020000370C0000000D000000020000000D0000540C0000F0020000440C0000000E000000020000000D00000B0D0000EF0200004F0C0000000F000000020000000D0000BB0D0000EC020000590C00000010000000020000000D0000660E0000E8020000620C00000000000000030000000D0000E20000007D030000570B00000001000000030000000D0000EB0100008D030000720B00000002000000030000000D0000ED0200009D0300008B0B00000003000000030000000D0000E8030000AB030000A30B00000004000000030000000D0000DE040000B8030000BA0B00000005000000030000000D0000CD050000C4030000D00B00000006000000030000000D0000B7060000CE030000E50B00000007000000030000000D000099070000D7030000F80B00000008000000030000000D000076080000DF0300000B0C00000009000000030000000D00004D090000E60300001C0C0000000A000000030000000D00001D0A0000EB0300002C0C0000000B000000030000000D0000E70A0000EF0300003B0C0000000C000000030000000D0000AB0B0000F2030000480C0000000D000000030000000D0000690C0000F4030000550C0000000E000000030000000D0000210D0000F4030000600C0000000F000000030000000D0000D20D0000F30300006A0C00000010000000030000000D00007D0E0000F1030000730C00000000000000040000000D0000EB00000065040000680B00000001000000040000000D0000F401000078040000830B00000002000000040000000D0000F7020000890400009C0B00000003000000040000000D0000F403000099040000B40B00000004000000040000000D0000EA040000A7040000CB0B00000005000000040000000D0000DA050000B5040000E10B00000006000000040000000D0000C5060000C1040000F60B00000007000000040000000D0000A9070000CB040000090C00000008000000040000000D000086080000D50400001C0C00000009000000040000000D00005E090000DD0400002D0C0000000A000000040000000D00002F0A0000E40400003D0C0000000B000000040000000D0000FA0A0000EA0400004C0C0000000C000000040000000D0000BF0B0000EF040000590C0000000D000000040000000D00007E0C0000F2040000660C0000000E000000040000000D0000360D0000F4040000710C0000000F000000040000000D0000E90D0000F50400007C0C00000010000000040000000D0000950E0000F4040000850C00000000000000050000000D0000F300000049050000790B00000001000000050000000D0000FD0100005D050000930B00000002000000050000000D00000103000070050000AD0B00000003000000050000000D0000FE03000081050000C50B00000004000000050000000D0000F604000091050000DC0B00000005000000050000000D0000E7050000A0050000F20B00000006000000050000000D0000D2060000AE050000070C00000007000000050000000D0000B7070000BB0500001A0C00000008000000050000000D000096080000C60500002D0C00000009000000050000000D00006E090000D00500003E0C0000000A000000050000000D0000400A0000D80500004E0C0000000B000000050000000D00000C0B0000E00500005D0C0000000C000000050000000D0000D20B0000E60500006B0C0000000D000000050000000D0000920C0000EB050000770C0000000E000000050000000D00004B0D0000EF050000830C0000000F000000050000000D0000FE0D0000F10500008D0C00000010000000050000000D0000AB0E0000F2050000960C00000000000000060000000D0000FA00000027060000890B00000001000000060000000D0000050200003D060000A40B00000002000000060000000D00000A03000051060000BD0B00000003000000060000000D00000804000064060000D60B00000004000000060000000D00000105000076060000ED0B00000005000000060000000D0000F305000087060000030C00000006000000060000000D0000DF06000096060000180C00000007000000060000000D0000C5070000A40600002B0C00000008000000060000000D0000A4080000B10600003E0C00000009000000060000000D00007E090000BD0600004F0C0000000A000000060000000D0000510A0000C70600005F0C0000000B000000060000000D00001E0B0000D00600006E0C0000000C000000060000000D0000E40B0000D80600007C0C0000000D000000060000000D0000A50C0000DF060000880C0000000E000000060000000D00005F0D0000E4060000940C0000000F000000060000000D0000140E0000E80600009E0C00000010000000060000000D0000C20E0000EB060000A70C00000000000000070000000D000001010000000700009A0B00000001000000070000000D00000D02000017070000B50B00000002000000070000000D0000120300002D070000CE0B00000003000000070000000D00001204000042070000E70B00000004000000070000000D00000B05000056070000FE0B00000005000000070000000D0000FE05000068070000140C00000006000000070000000D0000EB06000079070000290C00000007000000070000000D0000D2070000890700003C0C00000008000000070000000D0000B2080000980700004F0C00000009000000070000000D00008D090000A5070000600C0000000A000000070000000D0000610A0000B1070000700C0000000B000000070000000D00002F0B0000BC0700007F0C0000000C000000070000000D0000F60B0000C50700008D0C0000000D000000070000000D0000B80C0000CE0700009A0C0000000E000000070000000D0000730D0000D5070000A50C0000000F000000070000000D0000280E0000DA070000AF0C00000010000000070000000D0000D70E0000DF070000B90C00000000000000080000000D000007010000D4070000AB0B00000001000000080000000D000013020000ED070000C50B00000002000000080000000D00001A03000005080000DF0B00000003000000080000000D00001B0400001B080000F70B00000004000000080000000D000015050000300800000F0C00000005000000080000000D00000906000044080000250C00000006000000080000000D0000F706000057080000390C00000007000000080000000D0000DE070000690800004D0C00000008000000080000000D0000C008000079080000600C00000009000000080000000D00009B09000088080000710C0000000A000000080000000D0000700A000096080000810C0000000B000000080000000D00003F0B0000A2080000900C0000000C000000080000000D0000070C0000AD0800009E0C0000000D000000080000000D0000CA0C0000B7080000AB0C0000000E000000080000000D0000860D0000C0080000B60C0000000F000000080000000D00003C0E0000C7080000C10C00000010000000080000000D0000EC0E0000CE080000CA0C00000000000000090000000D00000C010000A2080000BB0B00000001000000090000000D00001A020000BD080000D60B00000002000000090000000D000021030000D7080000F00B00000003000000090000000D000023040000EF080000080C00000004000000090000000D00001E050000060900001F0C00000005000000090000000D0000130600001B090000350C00000006000000090000000D000001070000300900004A0C00000007000000090000000D0000EA070000430900005E0C00000008000000090000000D0000CC08000055090000710C00000009000000090000000D0000A909000066090000820C0000000A000000090000000D00007E0A000075090000920C0000000B000000090000000D00004E0B000083090000A10C0000000C000000090000000D0000180C000090090000AF0C0000000D000000090000000D0000DB0C00009C090000BC0C0000000E000000090000000D0000980D0000A6090000C80C0000000F000000090000000D00004F0E0000AF090000D20C00000010000000090000000D0000000F0000B7090000DB0C000000000000000A0000000D0000110100006C090000CC0B000000010000000A0000000D00001F02000088090000E70B000000020000000A0000000D000028030000A3090000000C000000030000000A0000000D00002A040000BD090000190C000000040000000A0000000D000026050000D6090000300C000000050000000A0000000D00001C060000ED090000460C000000060000000A0000000D00000C070000030A00005B0C000000070000000A0000000D0000F5070000180A00006F0C000000080000000A0000000D0000D90800002C0A0000820C000000090000000A0000000D0000B60900003E0A0000930C0000000A0000000A0000000D00008C0A00004F0A0000A30C0000000B0000000A0000000D00005D0B00005F0A0000B30C0000000C0000000A0000000D0000280C00006E0A0000C10C0000000D0000000A0000000D0000EC0C00007B0A0000CD0C0000000E0000000A0000000D0000AA0D0000870A0000D90C0000000F0000000A0000000D0000620E0000920A0000E30C000000100000000A0000000D0000130F00009B0A0000ED0C000000000000000B0000000D000015010000300A0000DD0B000000010000000B0000000D0000240200004E0A0000F70B000000020000000B0000000D00002E0300006B0A0000110C000000030000000B0000000D000031040000860A00002A0C000000040000000B0000000D00002E050000A10A0000410C000000050000000B0000000D000025060000BA0A0000570C000000060000000B0000000D000015070000D20A00006C0C000000070000000B0000000D000000080000E80A0000800C000000080000000B0000000D0000E4080000FD0A0000930C000000090000000B0000000D0000C2090000110B0000A40C0000000A0000000B0000000D00009A0A0000240B0000B50C0000000B0000000B0000000D00006B0B0000360B0000C40C0000000C0000000B0000000D0000370C0000460B0000D20C0000000D0000000B0000000D0000FC0C0000550B0000DF0C0000000E0000000B0000000D0000BB0D0000630B0000EA0C0000000F0000000B0000000D0000740E00006F0B0000F50C000000100000000B0000000D0000260F00007A0B0000FE0C000000000000000C0000000D000018010000EF0A0000ED0B000000010000000C0000000D0000290200000F0B0000080C000000020000000C0000000D0000330300002D0B0000220C000000030000000C0000000D0000370400004B0B00003A0C000000040000000C0000000D000035050000670B0000520C000000050000000C0000000D00002D060000810B0000680C000000060000000C0000000D00001E0700009B0B00007D0C000000070000000C0000000D00000A080000B30B0000910C000000080000000C0000000D0000EF080000CA0B0000A40C000000090000000C0000000D0000CE090000E00B0000B50C0000000A0000000C0000000D0000A70A0000F40B0000C60C0000000B0000000C0000000D0000790B0000070C0000D50C0000000C0000000C0000000D0000450C0000190C0000E30C0000000D0000000C0000000D00000B0D00002A0C0000F00C0000000E0000000C0000000D0000CB0D0000390C0000FC0C0000000F0000000C0000000D0000850E0000470C0000060D000000100000000C0000000D0000390F0000540C00000F0D000000000000000D0000000D00001B010000A90B0000FE0B000000010000000D0000000D00002D020000CA0B0000190C000000020000000D0000000D000038030000EB0B0000330C000000030000000D0000000D00003D0400000A0C00004B0C000000040000000D0000000D00003C050000270C0000630C000000050000000D0000000D000034060000440C0000790C000000060000000D0000000D0000270700005F0C00008E0C000000070000000D0000000D000013080000790C0000A20C000000080000000D0000000D0000F9080000910C0000B50C000000090000000D0000000D0000D9090000A90C0000C60C0000000A0000000D0000000D0000B30A0000BF0C0000D70C0000000B0000000D0000000D0000860B0000D40C0000E60C0000000C0000000D0000000D0000530C0000E70C0000F40C0000000D0000000D0000000D00001A0D0000F90C0000010D0000000E0000000D0000000D0000DB0D00000B0D00000D0D0000000F0000000D0000000D0000960E00001A0D0000170D000000100000000D0000000D00004A0F0000290D0000210D000000000000000E0000000D00001D0100005E0C00000F0C000000010000000E0000000D000030020000810C00002A0C000000020000000E0000000D00003C030000A30C0000430C000000030000000E0000000D000042040000C30C00005C0C000000040000000E0000000D000042050000E30C0000740C000000050000000E0000000D00003B060000010D00008A0C000000060000000E0000000D00002F0700001E0D00009F0C000000070000000E0000000D00001C080000390D0000B30C000000080000000E0000000D000003090000530D0000C60C000000090000000E0000000D0000E30900006C0D0000D70C0000000A0000000E0000000D0000BE0A0000840D0000E80C0000000B0000000E0000000D0000920B00009B0D0000F70C0000000C0000000E0000000D0000610C0000B00D0000050D0000000D0000000E0000000D0000290D0000C40D0000120D0000000E0000000E0000000D0000EA0D0000D70D00001E0D0000000F0000000E0000000D0000A60E0000E80D0000290D000000100000000E0000000D00005B0F0000F80D0000320D000000000000000F0000000D00001F0100000D0D00001F0C000000010000000F0000000D000032020000320D00003A0C000000020000000F0000000D00003F030000560D0000540C000000030000000F0000000D000046040000780D00006D0C000000040000000F0000000D000047050000990D0000840C000000050000000F0000000D000041060000B90D00009B0C000000060000000F0000000D000036070000D70D0000B00C000000070000000F0000000D000024080000F40D0000C40C000000080000000F0000000D00000C090000100E0000D70C000000090000000F0000000D0000ED0900002B0E0000E80C0000000A0000000F0000000D0000C90A0000450E0000F90C0000000B0000000F0000000D00009E0B00005D0E0000080D0000000C0000000F0000000D00006D0C0000740E0000170D0000000D0000000F0000000D0000360D0000890E0000240D0000000E0000000F0000000D0000F90D00009E0E00002F0D0000000F0000000F0000000D0000B50E0000B10E00003A0D000000100000000F0000000D00006C0F0000C30E0000440D00000000000000100000000D000020010000B80D0000300C00000001000000100000000D000034020000DE0D00004B0C00000002000000100000000D000042030000030E0000650C00000003000000100000000D00004A040000270E00007E0C00000004000000100000000D00004C0500004A0E0000950C00000005000000100000000D0000470600006B0E0000AC0C00000006000000100000000D00003C0700008C0E0000C10C00000007000000100000000D00002B080000AA0E0000D50C00000008000000100000000D000014090000C80E0000E80C00000009000000100000000D0000F7090000E40E0000FA0C0000000A000000100000000D0000D30A0000000F00000A0D0000000B000000100000000D0000A90B0000190F0000190D0000000C000000100000000D0000790C0000320F0000280D0000000D000000100000000D0000430D0000490F0000350D0000000E000000100000000D0000070E0000600F0000410D0000000F000000100000000D0000C40E0000740F00004B0D00000010000000100000000D00007B0F0000880F0000550D00000000000000000000000E0000C6000000A2000000DB0B00000001000000000000000E0000CD010000AD000000F70B00000002000000000000000E0000CD020000B7000000110C00000003000000000000000E0000C8030000C00000002B0C00000004000000000000000E0000BD040000C7000000430C00000005000000000000000E0000AB050000CD0000005A0C00000006000000000000000E000093060000D20000006F0C00000007000000000000000E000075070000D6000000840C00000008000000000000000E000050080000D8000000970C00000009000000000000000E000026090000D9000000AA0C0000000A000000000000000E0000F5090000D9000000BB0C0000000B000000000000000E0000BE0A0000D8000000CA0C0000000C000000000000000E0000810B0000D5000000D90C0000000D000000000000000E00003E0C0000D1000000E70C0000000E000000000000000E0000F40C0000CC000000F30C0000000F000000000000000E0000A40D0000C6000000FE0C00000010000000000000000E00004E0E0000BE000000080D00000000000000010000000E0000D00000009C010000ED0B00000001000000010000000E0000D8010000A9010000090C00000002000000010000000E0000DA020000B4010000230C00000003000000010000000E0000D5030000BF0100003D0C00000004000000010000000E0000CB040000C8010000550C00000005000000010000000E0000BA050000D00100006C0C00000006000000010000000E0000A3060000D6010000810C00000007000000010000000E000086070000DC010000960C00000008000000010000000E000062080000E0010000A90C00000009000000010000000E000039090000E3010000BC0C0000000A000000010000000E0000090A0000E4010000CD0C0000000B000000010000000E0000D30A0000E5010000DD0C0000000C000000010000000E0000960B0000E4010000EC0C0000000D000000010000000E0000540C0000E2010000F90C0000000E000000010000000E00000B0D0000DE010000060D0000000F000000010000000E0000BD0D0000D9010000110D00000010000000010000000E0000680E0000D30100001B0D00000000000000020000000E0000DA00000091020000FF0B00000001000000020000000E0000E20100009F0200001B0C00000002000000020000000E0000E5020000AD020000350C00000003000000020000000E0000E2030000B90200004E0C00000004000000020000000E0000D8040000C4020000670C00000005000000020000000E0000C8050000CD0200007E0C00000006000000020000000E0000B2060000D6020000930C00000007000000020000000E000096070000DD020000A80C00000008000000020000000E000073080000E2020000BC0C00000009000000020000000E00004B090000E7020000CE0C0000000A000000020000000E00001C0A0000EA020000DF0C0000000B000000020000000E0000E70A0000EC020000EF0C0000000C000000020000000E0000AB0B0000ED020000FE0C0000000D000000020000000E00006A0C0000ED0200000C0D0000000E000000020000000E0000220D0000EB020000180D0000000F000000020000000E0000D40D0000E8020000230D00000010000000020000000E0000800E0000E40200002E0D00000000000000030000000E0000E300000080030000110C00000001000000030000000E0000EC010000910300002C0C00000002000000030000000E0000F0020000A0030000470C00000003000000030000000E0000EE030000AE030000600C00000004000000030000000E0000E5040000BA030000790C00000005000000030000000E0000D6050000C6030000900C00000006000000030000000E0000C1060000D0030000A50C00000007000000030000000E0000A5070000D8030000BA0C00000008000000030000000E000084080000E0030000CE0C00000009000000030000000E00005C090000E6030000E00C0000000A000000030000000E00002E0A0000EB030000F10C0000000B000000030000000E0000FA0A0000EF030000010D0000000C000000030000000E0000C00B0000F2030000100D0000000D000000030000000E00007F0C0000F30300001E0D0000000E000000030000000E0000380D0000F30300002A0D0000000F000000030000000E0000EC0D0000F1030000360D00000010000000030000000E0000980E0000EF030000400D00000000000000040000000E0000EB0000006B040000220C00000001000000040000000E0000F60100007D0400003E0C00000002000000040000000E0000FA0200008E040000590C00000003000000040000000E0000F90300009D040000720C00000004000000040000000E0000F1040000AC0400008A0C00000005000000040000000E0000E3050000B9040000A20C00000006000000040000000E0000CF060000C4040000B80C00000007000000040000000E0000B4070000CF040000CC0C00000008000000040000000E000094080000D8040000E00C00000009000000040000000E00006D090000E0040000F20C0000000A000000040000000E0000400A0000E7040000040D0000000B000000040000000E00000D0B0000EC040000140D0000000C000000040000000E0000D30B0000F1040000230D0000000D000000040000000E0000940C0000F4040000300D0000000E000000040000000E00004E0D0000F50400003D0D0000000F000000040000000E0000020E0000F6040000480D00000010000000040000000E0000B00E0000F5040000530D00000000000000050000000E0000F300000050050000340C00000001000000050000000E0000FE01000064050000500C00000002000000050000000E000004030000760500006B0C00000003000000050000000E00000304000088050000840C00000004000000050000000E0000FC040000980500009C0C00000005000000050000000E0000EF050000A6050000B40C00000006000000050000000E0000DC060000B4050000CA0C00000007000000050000000E0000C3070000C0050000DE0C00000008000000050000000E0000A3080000CB050000F20C00000009000000050000000E00007D090000D5050000050D0000000A000000050000000E0000510A0000DD050000160D0000000B000000050000000E00001F0B0000E5050000260D0000000C000000050000000E0000E60B0000EB050000350D0000000D000000050000000E0000A80C0000EF050000430D0000000E000000050000000E0000630D0000F30500004F0D0000000F000000050000000E0000180E0000F50500005B0D00000010000000050000000E0000C70E0000F6050000650D00000000000000060000000E0000FA00000030060000460C00000001000000060000000E00000602000046060000620C00000002000000060000000E00000D0300005A0600007C0C00000003000000060000000E00000D0400006D060000960C00000004000000060000000E0000070500007F060000AE0C00000005000000060000000E0000FB0500008F060000C60C00000006000000060000000E0000E90600009E060000DC0C00000007000000060000000E0000D0070000AC060000F10C00000008000000060000000E0000B2080000B9060000040D00000009000000060000000E00008D090000C5060000170D0000000A000000060000000E0000620A0000CF060000280D0000000B000000060000000E0000300B0000D8060000380D0000000C000000060000000E0000F90B0000DF060000470D0000000D000000060000000E0000BB0C0000E6060000550D0000000E000000060000000E0000770D0000EB060000620D0000000F000000060000000E00002D0E0000EF0600006D0D00000010000000060000000E0000DD0E0000F1060000780D00000000000000070000000E0000000100000B070000580C00000001000000070000000E00000E02000022070000740C00000002000000070000000E000015030000380700008E0C00000003000000070000000E0000170400004D070000A80C00000004000000070000000E00001205000061070000C00C00000005000000070000000E00000606000073070000D80C00000006000000070000000E0000F506000084070000EE0C00000007000000070000000E0000DE07000093070000030D00000008000000070000000E0000C0080000A2070000160D00000009000000070000000E00009C090000AF070000290D0000000A000000070000000E0000720A0000BB0700003A0D0000000B000000070000000E0000410B0000C60700004B0D0000000C000000070000000E00000B0C0000CF0700005A0D0000000D000000070000000E0000CE0C0000D7070000680D0000000E000000070000000E00008B0D0000DE070000740D0000000F000000070000000E0000420E0000E4070000800D00000010000000070000000E0000F20E0000E80700008A0D00000000000000080000000E000006010000E1070000690C00000001000000080000000E000015020000FA070000850C00000002000000080000000E00001D03000012080000A00C00000003000000080000000E00001F04000028080000BA0C00000004000000080000000E00001B0500003D080000D20C00000005000000080000000E00001106000051080000EA0C00000006000000080000000E00000107000064080000000D00000007000000080000000E0000EA07000075080000150D00000008000000080000000E0000CD08000085080000290D00000009000000080000000E0000AA090000940800003B0D0000000A000000080000000E0000810A0000A20800004D0D0000000B000000080000000E0000510B0000AE0800005D0D0000000C000000080000000E00001C0C0000B90800006C0D0000000D000000080000000E0000E00C0000C30800007A0D0000000E000000080000000E00009E0D0000CC080000870D0000000F000000080000000E0000560E0000D3080000920D00000010000000080000000E0000070F0000D90800009D0D00000000000000090000000E00000B010000B20800007B0C00000001000000090000000E00001B020000CC080000970C00000002000000090000000E000024030000E6080000B20C00000003000000090000000E000027040000FE080000CC0C00000004000000090000000E00002405000015090000E40C00000005000000090000000E00001B0600002A090000FC0C00000006000000090000000E00000B0700003F090000120D00000007000000090000000E0000F607000052090000270D00000008000000090000000E0000DA080000640900003B0D00000009000000090000000E0000B8090000740900004D0D0000000A000000090000000E0000900A0000840900005F0D0000000B000000090000000E0000610B0000920900006F0D0000000C000000090000000E00002C0C00009F0900007E0D0000000D000000090000000E0000F10C0000AA0900008C0D0000000E000000090000000E0000B00D0000B4090000990D0000000F000000090000000E0000690E0000BD090000A50D00000010000000090000000E00001C0F0000C5090000AF0D000000000000000A0000000E0000100100007D0900008D0C000000010000000A0000000E00002002000099090000A90C000000020000000A0000000E00002B030000B4090000C40C000000030000000A0000000E00002F040000CE090000DE0C000000040000000A0000000E00002D050000E7090000F60C000000050000000A0000000E000024060000FE0900000E0D000000060000000A0000000E000016070000140A0000240D000000070000000A0000000E000001080000290A0000390D000000080000000A0000000E0000E60800003D0A00004D0D000000090000000A0000000E0000C50900004F0A0000600D0000000A0000000A0000000E00009E0A0000600A0000710D0000000B0000000A0000000E0000700B0000700A0000820D0000000C0000000A0000000E00003C0C00007F0A0000910D0000000D0000000A0000000E0000020D00008C0A00009F0D0000000E0000000A0000000E0000C20D0000980A0000AC0D0000000F0000000A0000000E00007C0E0000A30A0000B70D000000100000000A0000000E00002F0F0000AC0A0000C20D000000000000000B0000000E000014010000430A00009F0C000000010000000B0000000E000025020000610A0000BB0C000000020000000B0000000E0000300300007E0A0000D60C000000030000000B0000000E0000350400009A0A0000F00C000000040000000B0000000E000034050000B40A0000080D000000050000000B0000000E00002D060000CD0A0000200D000000060000000B0000000E00001F070000E50A0000360D000000070000000B0000000E00000B080000FB0A00004B0D000000080000000B0000000E0000F1080000110B00005F0D000000090000000B0000000E0000D1090000250B0000720D0000000A0000000B0000000E0000AB0A0000380B0000830D0000000B0000000B0000000E00007E0B0000490B0000940D0000000C0000000B0000000E00004B0C0000590B0000A30D0000000D0000000B0000000E0000130D0000680B0000B10D0000000E0000000B0000000E0000D30D0000760B0000BE0D0000000F0000000B0000000E00008E0E0000830B0000CA0D000000100000000B0000000E0000420F00008E0B0000D50D000000000000000C0000000E000017010000040B0000B00C000000010000000C0000000E000029020000240B0000CD0C000000020000000C0000000E000036030000430B0000E80C000000030000000C0000000E00003C040000600B0000020D000000040000000C0000000E00003B0500007C0B00001A0D000000050000000C0000000E000035060000970B0000320D000000060000000C0000000E000028070000B00B0000480D000000070000000C0000000E000015080000C90B00005D0D000000080000000C0000000E0000FC080000E00B0000710D000000090000000C0000000E0000DD090000F50B0000840D0000000A0000000C0000000E0000B80A00000A0C0000960D0000000B0000000C0000000E00008C0B00001D0C0000A60D0000000C0000000C0000000E00005A0C00002F0C0000B60D0000000D0000000C0000000E0000220D0000400C0000C40D0000000E0000000C0000000E0000E40D00004F0C0000D10D0000000F0000000C0000000E00009F0E00005E0C0000DC0D000000100000000C0000000E0000550F00006A0C0000E70D000000000000000D0000000E00001A010000C00B0000C20C000000010000000D0000000E00002D020000E20B0000DE0C000000020000000D0000000E00003A030000020C0000FA0C000000030000000D0000000E000041040000210C0000130D000000040000000D0000000E0000420500003F0C00002C0D000000050000000D0000000E00003C0600005B0C0000440D000000060000000D0000000E000031070000760C00005A0D000000070000000D0000000E00001F080000900C00006F0D000000080000000D0000000E000007090000A90C0000830D000000090000000D0000000E0000E8090000C10C0000960D0000000A0000000D0000000E0000C40A0000D70C0000A80D0000000B0000000D0000000E0000990B0000EC0C0000B90D0000000C0000000D0000000E0000680C0000000D0000C80D0000000D0000000D0000000E0000310D0000120D0000D60D0000000E0000000D0000000E0000F40D0000230D0000E30D0000000F0000000D0000000E0000B00E0000330D0000EF0D000000100000000D0000000E0000660F0000420D0000FA0D000000000000000E0000000E00001C010000770C0000D40C000000010000000E0000000E0000300200009A0C0000F00C000000020000000E0000000E00003E030000BC0C00000B0D000000030000000E0000000E000046040000DD0C0000250D000000040000000E0000000E000048050000FC0C00003E0D000000050000000E0000000E0000430600001A0D0000560D000000060000000E0000000E000038070000370D00006C0D000000070000000E0000000E000027080000530D0000810D000000080000000E0000000E0000100900006E0D0000960D000000090000000E0000000E0000F3090000870D0000A80D0000000A0000000E0000000E0000CF0A00009F0D0000BA0D0000000B0000000E0000000E0000A50B0000B50D0000CB0D0000000C0000000E0000000E0000750C0000CB0D0000DA0D0000000D0000000E0000000E00003F0D0000DF0D0000E90D0000000E0000000E0000000E0000030E0000F20D0000F60D0000000F0000000E0000000E0000C00E0000040E0000020E000000100000000E0000000E0000780F0000140E00000C0E000000000000000F0000000E00001D010000280D0000E60C000000010000000F0000000E0000320200004D0D0000020D000000020000000F0000000E000041030000710D00001D0D000000030000000F0000000E00004A040000930D0000370D000000040000000F0000000E00004D050000B50D0000500D000000050000000F0000000E000049060000D50D0000680D000000060000000F0000000E00003F070000F30D00007E0D000000070000000F0000000E00002F080000110E0000940D000000080000000F0000000E0000190900002D0E0000A80D000000090000000F0000000E0000FD090000480E0000BB0D0000000A0000000F0000000E0000DA0A0000620E0000CD0D0000000B0000000F0000000E0000B10B00007A0E0000DD0D0000000C0000000F0000000E0000820C0000910E0000ED0D0000000D0000000F0000000E00004D0D0000A70E0000FB0D0000000E0000000F0000000E0000120E0000BC0E0000080E0000000F0000000F0000000E0000D00E0000CF0E0000140E000000100000000F0000000E0000880F0000E10E00001F0E00000000000000100000000E00001E010000D50D0000F80C00000001000000100000000E000034020000FB0D0000140D00000002000000100000000E000044030000210E00002F0D00000003000000100000000E00004E040000450E0000490D00000004000000100000000E000051050000680E0000620D00000005000000100000000E00004F0600008A0E00007A0D00000006000000100000000E000046070000AA0E0000900D00000007000000100000000E000037080000C90E0000A60D00000008000000100000000E000021090000E70E0000BA0D00000009000000100000000E0000060A0000040F0000CD0D0000000A000000100000000E0000E40A00001F0F0000DF0D0000000B000000100000000E0000BC0B0000390F0000EF0D0000000C000000100000000E00008E0C0000520F0000FF0D0000000D000000100000000E00005A0D00006A0F00000D0E0000000E000000100000000E00001F0E0000800F00001B0E0000000F000000100000000E0000DF0E0000950F0000270E00000010000000100000000E0000980F0000A90F0000310E00000000000000000000000F0000C50000009D0000008C0C00000001000000000000000F0000CD010000A8000000A90C00000002000000000000000F0000D0020000B2000000C50C00000003000000000000000F0000CC030000BA000000DF0C00000004000000000000000F0000C2040000C1000000F90C00000005000000000000000F0000B2050000C7000000110D00000006000000000000000F00009B060000CB000000280D00000007000000000000000F00007F070000CE0000003D0D00000008000000000000000F00005C080000D0000000520D00000009000000000000000F000033090000D1000000650D0000000A000000000000000F0000040A0000D0000000780D0000000B000000000000000F0000CF0A0000CE000000890D0000000C000000000000000F0000930B0000CB000000990D0000000D000000000000000F0000510C0000C7000000A70D0000000E000000000000000F00000A0D0000C1000000B50D0000000F000000000000000F0000BB0D0000BA000000C10D00000010000000000000000F0000670E0000B2000000CD0D00000000000000010000000F0000CF000000990100009F0C00000001000000010000000F0000D8010000A6010000BC0C00000002000000010000000F0000DC020000B1010000D80C00000003000000010000000F0000D9030000BB010000F20C00000004000000010000000F0000D0040000C40100000C0D00000005000000010000000F0000C1050000CB010000240D00000006000000010000000F0000AB060000D20100003B0D00000007000000010000000F000090070000D6010000510D00000008000000010000000F00006E080000DA010000650D00000009000000010000000F000046090000DD010000790D0000000A000000010000000F0000180A0000DE0100008B0D0000000B000000010000000F0000E30A0000DE0100009C0D0000000C000000010000000F0000A90B0000DC010000AC0D0000000D000000010000000F0000680C0000DA010000BB0D0000000E000000010000000F0000210D0000D6010000C90D0000000F000000010000000F0000D40D0000D1010000D50D00000010000000010000000F0000810E0000CA010000E00D00000000000000020000000F0000D800000090020000B20C00000001000000020000000F0000E30100009E020000CF0C00000002000000020000000F0000E7020000AB020000EB0C00000003000000020000000F0000E5030000B7020000050D00000004000000020000000F0000DD040000C20200001F0D00000005000000020000000F0000CF050000CB020000370D00000006000000020000000F0000BB060000D30200004E0D00000007000000020000000F0000A0070000DA020000640D00000008000000020000000F00007F080000DF020000790D00000009000000020000000F000058090000E30200008C0D0000000A000000020000000F00002B0A0000E60200009E0D0000000B000000020000000F0000F70A0000E8020000B00D0000000C000000020000000F0000BE0B0000E8020000C00D0000000D000000020000000F00007E0C0000E7020000CF0D0000000E000000020000000F0000380D0000E5020000DC0D0000000F000000020000000F0000EC0D0000E2020000E90D00000010000000020000000F0000990E0000DD020000F40D00000000000000030000000F0000E100000082030000C50C00000001000000030000000F0000ED01000092030000E20C00000002000000030000000F0000F2020000A1030000FE0C00000003000000030000000F0000F1030000AE030000180D00000004000000030000000F0000EA040000BA030000320D00000005000000030000000F0000DD050000C50300004A0D00000006000000030000000F0000C9060000CF030000610D00000007000000030000000F0000B0070000D8030000770D00000008000000030000000F000090080000DF0300008C0D00000009000000030000000F00006A090000E50300009F0D0000000A000000030000000F00003D0A0000E9030000B20D0000000B000000030000000F00000B0B0000ED030000C30D0000000C000000030000000F0000D20B0000EF030000D30D0000000D000000030000000F0000930C0000F0030000E20D0000000E000000030000000F00004E0D0000F0030000F00D0000000F000000030000000F0000030E0000EE030000FD0D00000010000000030000000F0000B20E0000EB030000080E00000000000000040000000F0000E90000006E040000D80C00000001000000040000000F0000F601000080040000F50C00000002000000040000000F0000FC02000091040000110D00000003000000040000000F0000FC030000A00400002B0D00000004000000040000000F0000F6040000AE040000450D00000005000000040000000F0000EA050000BB0400005D0D00000006000000040000000F0000D7060000C6040000740D00000007000000040000000F0000BF070000D00400008A0D00000008000000040000000F0000A0080000D90400009F0D00000009000000040000000F00007B090000E1040000B30D0000000A000000040000000F00004F0A0000E8040000C50D0000000B000000040000000F00001E0B0000ED040000D70D0000000C000000040000000F0000E60B0000F1040000E70D0000000D000000040000000F0000A80C0000F3040000F60D0000000E000000040000000F0000640D0000F5040000040E0000000F000000040000000F00001A0E0000F5040000100E00000010000000040000000F0000C90E0000F40400001C0E00000000000000050000000F0000F100000056050000EB0C00000001000000050000000F0000FE01000069050000080D00000002000000050000000F0000060300007B050000240D00000003000000050000000F0000070400008C0500003E0D00000004000000050000000F0000010500009C050000580D00000005000000050000000F0000F6050000AB050000700D00000006000000050000000F0000E5060000B8050000880D00000007000000050000000F0000CD070000C40500009E0D00000008000000050000000F0000AF080000CF050000B30D00000009000000050000000F00008B090000D8050000C60D0000000A000000050000000F0000600A0000E0050000D90D0000000B000000050000000F0000300B0000E7050000EA0D0000000C000000050000000F0000F90B0000ED050000FA0D0000000D000000050000000F0000BC0C0000F2050000090E0000000E000000050000000F0000790D0000F5050000170E0000000F000000050000000F0000300E0000F7050000240E00000010000000050000000F0000E00E0000F7050000300E00000000000000060000000F0000F800000038060000FE0C00000001000000060000000F0000060200004D0600001B0D00000002000000060000000F00000E03000061060000370D00000003000000060000000F00001004000074060000510D00000004000000060000000F00000C050000850600006B0D00000005000000060000000F00000206000096060000830D00000006000000060000000F0000F1060000A50600009B0D00000007000000060000000F0000DA070000B2060000B10D00000008000000060000000F0000BE080000BF060000C60D00000009000000060000000F00009A090000CA060000DA0D0000000A000000060000000F0000710A0000D4060000EC0D0000000B000000060000000F0000410B0000DD060000FE0D0000000C000000060000000F00000C0C0000E40600000E0E0000000D000000060000000F0000D00C0000EB0600001D0E0000000E000000060000000F00008D0D0000F00600002B0E0000000F000000060000000F0000450E0000F3060000380E00000010000000060000000F0000F60E0000F6060000430E00000000000000070000000F0000FE00000014070000100D00000001000000070000000F00000D0200002C0700002E0D00000002000000070000000F000017030000410700004A0D00000003000000070000000F00001A04000056070000640D00000004000000070000000F000016050000690700007E0D00000005000000070000000F00000D0600007B070000970D00000006000000070000000F0000FD0600008C070000AE0D00000007000000070000000F0000E80700009C070000C40D00000008000000070000000F0000CC080000AA070000D90D00000009000000070000000F0000A9090000B7070000ED0D0000000A000000070000000F0000810A0000C3070000000E0000000B000000070000000F0000520B0000CD070000110E0000000C000000070000000F00001D0C0000D6070000210E0000000D000000070000000F0000E20C0000DE070000310E0000000E000000070000000F0000A10D0000E50700003F0E0000000F000000070000000F00005A0E0000EB0700004B0E00000010000000070000000F00000C0F0000EF070000570E00000000000000080000000F000004010000EC070000230D00000001000000080000000F00001402000005080000400D00000002000000080000000F00001E0300001D0800005D0D00000003000000080000000F00002204000033080000770D00000004000000080000000F00002005000048080000910D00000005000000080000000F0000170600005C080000AA0D00000006000000080000000F0000090700006E080000C10D00000007000000080000000F0000F407000080080000D70D00000008000000080000000F0000D908000090080000EC0D00000009000000080000000F0000B80900009F080000000E0000000A000000080000000F0000900A0000AC080000130E0000000B000000080000000F0000620B0000B8080000250E0000000C000000080000000F00002F0C0000C3080000350E0000000D000000080000000F0000F50C0000CD080000440E0000000E000000080000000F0000B40D0000D6080000520E0000000F000000080000000F00006E0E0000DD0800005F0E00000010000000080000000F0000210F0000E30800006B0E00000000000000090000000F000009010000BF080000360D00000001000000090000000F00001A020000D9080000530D00000002000000090000000F000025030000F3080000700D00000003000000090000000F00002A0400000B0900008B0D00000004000000090000000F00002905000022090000A40D00000005000000090000000F00002106000037090000BD0D00000006000000090000000F0000140700004C090000D40D00000007000000090000000F0000000800005F090000EB0D00000008000000090000000F0000E608000070090000000E00000009000000090000000F0000C509000081090000140E0000000A000000090000000F00009F0A000090090000260E0000000B000000090000000F0000720B00009E090000380E0000000C000000090000000F00003F0C0000AB090000490E0000000D000000090000000F0000060D0000B7090000580E0000000E000000090000000F0000C70D0000C1090000660E0000000F000000090000000F0000810E0000CA090000730E00000010000000090000000F0000360F0000D10900007F0E000000000000000A0000000F00000D0100008C090000490D000000010000000A0000000F00001F020000A8090000660D000000020000000A0000000F00002C030000C4090000830D000000030000000A0000000F000031040000DD0900009E0D000000040000000A0000000F000031050000F6090000B70D000000050000000A0000000F00002B0600000D0A0000D00D000000060000000A0000000F00001E070000230A0000E80D000000070000000A0000000F00000B080000380A0000FE0D000000080000000A0000000F0000F20800004C0A0000130E000000090000000A0000000F0000D20900005E0A0000270E0000000A0000000A0000000F0000AD0A00006F0A00003A0E0000000B0000000A0000000F0000810B00007F0A00004C0E0000000C0000000A0000000F00004F0C00008E0A00005C0E0000000D0000000A0000000F0000170D00009B0A00006B0E0000000E0000000A0000000F0000D90D0000A70A00007A0E0000000F0000000A0000000F0000940E0000B20A0000870E000000100000000A0000000F0000490F0000BB0A0000920E000000000000000B0000000F000011010000540A00005C0D000000010000000B0000000F000024020000720A0000790D000000020000000B0000000F0000310300008F0A0000960D000000030000000B0000000F000038040000AB0A0000B10D000000040000000B0000000F000039050000C50A0000CB0D000000050000000B0000000F000033060000DE0A0000E30D000000060000000B0000000F000027070000F60A0000FB0D000000070000000B0000000F0000150800000D0B0000110E000000080000000B0000000F0000FD080000220B0000260E000000090000000B0000000F0000DF090000360B00003A0E0000000A0000000B0000000F0000BA0A0000490B00004D0E0000000B0000000B0000000F00008F0B00005B0B00005F0E0000000C0000000B0000000F00005E0C00006B0B0000700E0000000D0000000B0000000F0000270D00007A0B00007F0E0000000E0000000B0000000F0000EA0D0000880B00008D0E0000000F0000000B0000000F0000A60E0000940B00009A0E000000100000000B0000000F00005D0F00009F0B0000A60E000000000000000C0000000F000014010000170B00006F0D000000010000000C0000000F000028020000370B00008C0D000000020000000C0000000F000036030000560B0000A90D000000030000000C0000000F00003E040000730B0000C40D000000040000000C0000000F0000400500008F0B0000DE0D000000050000000C0000000F00003B060000AA0B0000F60D000000060000000C0000000F000030070000C40B00000E0E000000070000000C0000000F00001F080000DC0B0000240E000000080000000C0000000F000008090000F30B00003A0E000000090000000C0000000F0000EB090000090C00004E0E0000000A0000000C0000000F0000C70A00001E0C0000610E0000000B0000000C0000000F00009D0B0000310C0000730E0000000C0000000C0000000F00006D0C0000430C0000830E0000000D0000000C0000000F0000370D0000540C0000930E0000000E0000000C0000000F0000FA0D0000630C0000A10E0000000F0000000C0000000F0000B80E0000720C0000AE0E000000100000000C0000000F00006F0F00007F0C0000BA0E000000000000000D0000000F000017010000D50B0000820D000000010000000D0000000F00002C020000F70B00009F0D000000020000000D0000000F00003B030000170C0000BB0D000000030000000D0000000F000043040000360C0000D70D000000040000000D0000000F000046050000540C0000F10D000000050000000D0000000F000042060000710C00000A0E000000060000000D0000000F0000390700008C0C0000210E000000070000000D0000000F000028080000A60C0000380E000000080000000D0000000F000012090000BF0C00004D0E000000090000000D0000000F0000F6090000D70C0000610E0000000A0000000D0000000F0000D30A0000ED0C0000740E0000000B0000000D0000000F0000AA0B0000020D0000860E0000000C0000000D0000000F00007B0C0000160D0000970E0000000D0000000D0000000F0000460D0000290D0000A60E0000000E0000000D0000000F00000A0E00003A0D0000B50E0000000F0000000D0000000F0000C90E00004A0D0000C20E000000100000000D0000000F0000810F0000590D0000CE0E000000000000000E0000000F0000190100008E0C0000940D000000010000000E0000000F00002F020000B10C0000B20D000000020000000E0000000F00003F030000D30C0000CE0D000000030000000E0000000F000048040000F40C0000EA0D000000040000000E0000000F00004C050000140D0000040E000000050000000E0000000F000049060000320D00001D0E000000060000000E0000000F0000400700004F0D0000340E000000070000000E0000000F0000310800006B0D00004B0E000000080000000E0000000F00001C090000860D0000600E000000090000000E0000000F0000000A00009F0D0000750E0000000A0000000E0000000F0000DF0A0000B70D0000880E0000000B0000000E0000000F0000B70B0000CE0D00009A0E0000000C0000000E0000000F0000890C0000E40D0000AA0E0000000D0000000E0000000F0000540D0000F80D0000BA0E0000000E0000000E0000000F00001A0E00000B0E0000C80E0000000F0000000E0000000F0000D90E00001D0E0000D50E000000100000000E0000000F0000920F00002E0E0000E10E000000000000000F0000000F00001A010000410D0000A70D000000010000000F0000000F000031020000660D0000C50D000000020000000F0000000F0000420300008A0D0000E10D000000030000000F0000000F00004C040000AD0D0000FD0D000000040000000F0000000F000051050000CE0D0000170E000000050000000F0000000F00004F060000EF0D0000300E000000060000000F0000000F0000470700000D0E0000480E000000070000000F0000000F0000390800002B0E00005E0E000000080000000F0000000F000025090000480E0000740E000000090000000F0000000F00000A0A0000630E0000880E0000000A0000000F0000000F0000E90A00007D0E00009B0E0000000B0000000F0000000F0000C20B0000950E0000AD0E0000000C0000000F0000000F0000950C0000AC0E0000BE0E0000000D0000000F0000000F0000620D0000C30E0000CD0E0000000E0000000F0000000F0000280E0000D70E0000DC0E0000000F0000000F0000000F0000E90E0000EB0E0000E90E000000100000000F0000000F0000A30F0000FD0E0000F50E00000000000000100000000F00001A010000EF0D0000BA0D00000001000000100000000F000032020000160E0000D80D00000002000000100000000F0000440300003C0E0000F40D00000003000000100000000F000050040000610E0000100E00000004000000100000000F000055050000840E00002A0E00000005000000100000000F000055060000A60E0000430E00000006000000100000000F00004E070000C60E00005B0E00000007000000100000000F000040080000E60E0000720E00000008000000100000000F00002D090000040F0000870E00000009000000100000000F0000130A0000210F00009B0E0000000A000000100000000F0000F40A00003C0F0000AF0E0000000B000000100000000F0000CE0B0000570F0000C10E0000000C000000100000000F0000A10C0000700F0000D10E0000000D000000100000000F00006F0D0000880F0000E10E0000000E000000100000000F0000370E00009E0F0000F00E0000000F000000100000000F0000F80E0000B40F0000FD0E00000010000000100000000F0000B30F0000C80F0000090F0000000000000000000000100000C200000097000000380D0000000100000000000000100000CC010000A1000000560D0000000200000000000000100000D0020000AA000000730D0000000300000000000000100000CE030000B20000008F0D0000000400000000000000100000C6040000B9000000A90D0000000500000000000000100000B7050000BE000000C30D0000000600000000000000100000A2060000C2000000DB0D000000070000000000000010000087070000C5000000F20D000000080000000000000010000066080000C6000000080E00000009000000000000001000003F090000C60000001C0E0000000A00000000000000100000110A0000C5000000300E0000000B00000000000000100000DE0A0000C3000000420E0000000C00000000000000100000A40B0000BF000000530E0000000D00000000000000100000640C0000BA000000630E0000000E000000000000001000001D0D0000B4000000720E0000000F00000000000000100000D10D0000AD000000800E00000010000000000000001000007E0E0000A40000008C0E0000000000000001000000100000CC000000950100004C0D0000000100000001000000100000D7010000A10100006A0D0000000200000001000000100000DC020000AC010000870D0000000300000001000000100000DB030000B5010000A30D0000000400000001000000100000D3040000BE010000BE0D0000000500000001000000100000C6050000C5010000D70D0000000600000001000000100000B2060000CB010000EF0D000000070000000100000010000098070000CF010000060E000000080000000100000010000078080000D20100001C0E000000090000000100000010000052090000D4010000310E0000000A00000001000000100000250A0000D5010000440E0000000B00000001000000100000F20A0000D5010000570E0000000C00000001000000100000B90B0000D3010000680E0000000D000000010000001000007A0C0000D0010000780E0000000E00000001000000100000350D0000CC010000870E0000000F00000001000000100000E90D0000C6010000950E0000001000000001000000100000980E0000BF010000A10E0000000000000002000000100000D50000008E020000600D0000000100000002000000100000E10100009C0200007E0D0000000200000002000000100000E7020000A80200009B0D0000000300000002000000100000E7030000B4020000B70D0000000400000002000000100000E1040000BE020000D20D0000000500000002000000100000D4050000C7020000EB0D0000000600000002000000100000C1060000CE020000040E0000000700000002000000100000A8070000D50200001B0E000000080000000200000010000089080000DA020000310E000000090000000200000010000064090000DD020000450E0000000A00000002000000100000380A0000E0020000590E0000000B00000002000000100000070B0000E10200006B0E0000000C00000002000000100000CF0B0000E10200007D0E0000000D00000002000000100000900C0000E00200008D0E0000000E000000020000001000004C0D0000DE0200009C0E0000000F00000002000000100000010E0000DA020000A90E0000001000000002000000100000B10E0000D5020000B60E0000000000000003000000100000DE00000081030000740D0000000100000003000000100000EB01000091030000920D0000000200000003000000100000F20200009F030000B00D0000000300000003000000100000F3030000AD030000CB0D0000000400000003000000100000ED040000B9030000E60D0000000500000003000000100000E2050000C3030000000E0000000600000003000000100000D0060000CD030000180E0000000700000003000000100000B8070000D50300002F0E00000008000000030000001000009A080000DC030000450E000000090000000300000010000075090000E10300005A0E0000000A000000030000001000004B0A0000E60300006E0E0000000B000000030000001000001A0B0000E9030000800E0000000C00000003000000100000E30B0000EB030000910E0000000D00000003000000100000A60C0000EB030000A20E0000000E00000003000000100000620D0000EB030000B10E0000000F00000003000000100000190E0000E9030000BE0E0000001000000003000000100000C90E0000E5030000CB0E0000000000000004000000100000E600000070040000880D0000000100000004000000100000F401000081040000A70D0000000200000004000000100000FC02000091040000C40D0000000300000004000000100000FE030000A0040000E00D0000000400000004000000100000F9040000AE040000FA0D0000000500000004000000100000EF050000BB040000140E0000000600000004000000100000DE060000C60400002C0E0000000700000004000000100000C7070000D0040000430E0000000800000004000000100000AA080000D90400005A0E000000090000000400000010000086090000E00400006E0E0000000A000000040000001000005D0A0000E6040000820E0000000B000000040000001000002D0B0000EB040000950E0000000C00000004000000100000F70B0000EF040000A60E0000000D00000004000000100000BB0C0000F1040000B60E0000000E00000004000000100000780D0000F2040000C50E0000000F00000004000000100000300E0000F2040000D30E0000001000000004000000100000E10E0000F1040000E00E0000000000000005000000100000ED000000590500009C0D0000000100000005000000100000FC0100006C050000BB0D0000000200000005000000100000050300007E050000D80D0000000300000005000000100000080400008F050000F40D0000000400000005000000100000050500009F0500000E0E0000000500000005000000100000FB050000AD050000280E0000000600000005000000100000EB060000BA050000410E0000000700000005000000100000D5070000C6050000580E0000000800000005000000100000B9080000D00500006E0E000000090000000500000010000096090000D9050000830E0000000A000000050000001000006E0A0000E1050000970E0000000B000000050000001000003F0B0000E8050000A90E0000000C000000050000001000000A0C0000EE050000BB0E0000000D00000005000000100000CF0C0000F2050000CB0E0000000E000000050000001000008D0D0000F5050000DA0E0000000F00000005000000100000460E0000F6050000E80E0000001000000005000000100000F80E0000F7050000F50E0000000000000006000000100000F40000003D060000B00D00000001000000060000001000000402000052060000CF0D00000002000000060000001000000E03000066060000EC0D00000003000000060000001000001204000079060000080E00000004000000060000001000000F0500008A060000230E0000000500000006000000100000070600009A0600003C0E0000000600000006000000100000F8060000A9060000550E0000000700000006000000100000E3070000B60600006C0E0000000800000006000000100000C8080000C3060000820E0000000900000006000000100000A6090000CE060000970E0000000A000000060000001000007E0A0000D8060000AB0E0000000B00000006000000100000510B0000E0060000BE0E0000000C000000060000001000001C0C0000E7060000D00E0000000D00000006000000100000E20C0000ED060000E00E0000000E00000006000000100000A20D0000F2060000EF0E0000000F000000060000001000005B0E0000F6060000FD0E00000010000000060000001000000E0F0000F80600000A0F0000000000000007000000100000FA0000001C070000C40D00000001000000070000001000000B02000033070000E30D00000002000000070000001000001603000048070000000E00000003000000070000001000001B0400005D0700001C0E00000004000000070000001000001905000070070000370E00000005000000070000001000001206000082070000510E00000006000000070000001000000407000093070000690E0000000700000007000000100000F0070000A2070000810E0000000800000007000000100000D6080000B0070000970E0000000900000007000000100000B5090000BD070000AC0E0000000A000000070000001000008E0A0000C8070000C00E0000000B00000007000000100000610B0000D3070000D30E0000000C000000070000001000002E0C0000DC070000E40E0000000D00000007000000100000F50C0000E4070000F50E0000000E00000007000000100000B60D0000EA070000040F0000000F00000007000000100000700E0000F0070000120F0000001000000007000000100000240F0000F40700001F0F000000000000000800000010000000010000F5070000D80D0000000100000008000000100000120200000E080000F70D00000002000000080000001000001E03000026080000140E0000000300000008000000100000230400003C080000300E000000040000000800000010000023050000510800004B0E00000005000000080000001000001C06000065080000650E00000006000000080000001000000F070000770800007E0E0000000700000008000000100000FC07000088080000950E0000000800000008000000100000E308000098080000AB0E0000000900000008000000100000C3090000A7080000C10E0000000A000000080000001000009E0A0000B4080000D50E0000000B00000008000000100000720B0000C0080000E70E0000000C00000008000000100000400C0000CB080000F90E0000000D00000008000000100000070D0000D5080000090F0000000E00000008000000100000C90D0000DD080000190F0000000F00000008000000100000840E0000E4080000270F0000001000000008000000100000390F0000EA080000340F000000000000000900000010000005010000CA080000EC0D000000010000000900000010000018020000E50800000B0E000000020000000900000010000025030000FE080000280E00000003000000090000001000002B04000016090000440E00000004000000090000001000002C0500002D0900005F0E00000005000000090000001000002606000042090000790E00000006000000090000001000001A07000056090000920E00000007000000090000001000000808000069090000AA0E0000000800000009000000100000F00800007B090000C00E0000000900000009000000100000D10900008C090000D50E0000000A00000009000000100000AC0A00009B090000E90E0000000B00000009000000100000810B0000A9090000FC0E0000000C00000009000000100000500C0000B50900000E0F0000000D00000009000000100000190D0000C10900001E0F0000000E00000009000000100000DB0D0000CB0900002E0F0000000F00000009000000100000980E0000D40900003C0F00000010000000090000001000004E0F0000DC090000490F000000000000000A0000001000000901000099090000000E000000010000000A0000001000001D020000B60900001F0E000000020000000A0000001000002B030000D10900003C0E000000030000000A00000010000032040000EB090000580E000000040000000A00000010000034050000030A0000740E000000050000000A0000001000002F0600001A0A00008E0E000000060000000A00000010000024070000310A0000A60E000000070000000A00000010000013080000450A0000BE0E000000080000000A000000100000FC080000590A0000D40E000000090000000A000000100000DE0900006B0A0000EA0E0000000A0000000A000000100000BA0A00007C0A0000FE0E0000000B0000000A000000100000900B00008C0A0000110F0000000C0000000A000000100000600C00009B0A0000220F0000000D0000000A0000001000002A0D0000A80A0000330F0000000E0000000A000000100000ED0D0000B40A0000420F0000000F0000000A000000100000AB0E0000BE0A0000510F000000100000000A000000100000620F0000C80A00005E0F000000000000000B0000001000000C010000630A0000140E000000010000000B00000010000021020000820A0000330E000000020000000B000000100000300300009E0A0000500E000000030000000B00000010000039040000BA0A00006D0E000000040000000B0000001000003B050000D50A0000880E000000050000000B00000010000038060000EE0A0000A20E000000060000000B0000001000002E070000060B0000BB0E000000070000000B0000001000001D0800001C0B0000D20E000000080000000B00000010000007090000320B0000E90E000000090000000B000000100000EB090000460B0000FE0E0000000A0000000B000000100000C80A0000580B0000120F0000000B0000000B0000001000009F0B00006A0B0000250F0000000C0000000B000000100000700C00007A0B0000370F0000000D0000000B0000001000003A0D0000890B0000480F0000000E0000000B000000100000FF0D0000970B0000570F0000000F0000000B000000100000BD0E0000A40B0000660F000000100000000B000000100000750F0000AF0B0000730F000000000000000C0000001000000F010000280B0000280E000000010000000C00000010000025020000480B0000470E000000020000000C00000010000035030000670B0000640E000000030000000C0000001000003F040000840B0000810E000000040000000C00000010000042050000A10B00009C0E000000050000000C0000001000003F060000BC0B0000B60E000000060000000C00000010000036070000D50B0000CF0E000000070000000C00000010000027080000EE0B0000E70E000000080000000C00000010000012090000050C0000FD0E000000090000000C000000100000F60900001B0C0000130F0000000A0000000C000000100000D50A00002F0C0000270F0000000B0000000C000000100000AD0B0000430C00003A0F0000000C0000000C0000001000007E0C0000550C00004C0F0000000D0000000C0000001000004A0D0000660C00005D0F0000000E0000000C0000001000000F0E0000750C00006C0F0000000F0000000C000000100000CF0E0000840C00007B0F000000100000000C000000100000880F0000910C0000880F000000000000000D00000010000012010000E80B00003C0E000000010000000D000000100000290200000A0C00005B0E000000020000000D0000001000003A0300002A0C0000790E000000030000000D000000100000440400004A0C0000950E000000040000000D00000010000049050000680C0000B00E000000050000000D00000010000047060000840C0000CA0E000000060000000D0000001000003F070000A00C0000E30E000000070000000D00000010000031080000BA0C0000FB0E000000080000000D0000001000001C090000D30C0000120F000000090000000D000000100000010A0000EB0C0000270F0000000A0000000D000000100000E10A0000010D00003C0F0000000B0000000D000000100000BA0B0000170D00004F0F0000000C0000000D0000001000008C0C00002A0D0000610F0000000D0000000D000000100000590D00003D0D0000710F0000000E0000000D0000001000001F0E00004F0D0000810F0000000F0000000D000000100000E00E00005F0D00008F0F000000100000000D0000001000009A0F00006E0D00009D0F000000000000000E00000010000014010000A30C0000500E000000010000000E0000001000002B020000C60C00006F0E000000020000000E0000001000003D030000E90C00008D0E000000030000000E000000100000490400000A0D0000A90E000000040000000E0000001000004E0500002A0D0000C50E000000050000000E0000001000004D060000480D0000DF0E000000060000000E00000010000046070000650D0000F80E000000070000000E00000010000039080000810D0000100F000000080000000E000000100000260900009C0D0000260F000000090000000E0000001000000C0A0000B60D00003C0F0000000A0000000E000000100000EC0A0000CE0D0000500F0000000B0000000E000000100000C60B0000E50D0000630F0000000C0000000E0000001000009A0C0000FB0D0000750F0000000D0000000E000000100000670D00000F0E0000860F0000000E0000000E0000001000002F0E0000220E0000960F0000000F0000000E000000100000F00E0000340E0000A40F000000100000000E000000100000AB0F0000450E0000B20F000000000000000F00000010000015010000580D0000640E000000010000000F0000001000002E0200007E0D0000830E000000020000000F00000010000040030000A20D0000A10E000000030000000F0000001000004D040000C50D0000BD0E000000040000000F00000010000053050000E60D0000D90E000000050000000F00000010000053060000070E0000F30E000000060000000F0000001000004D070000260E00000C0F000000070000000F00000010000041080000440E0000240F000000080000000F0000001000002F090000600E00003B0F000000090000000F000000100000160A00007B0E0000500F0000000A0000000F000000100000F70A0000960E0000650F0000000B0000000F000000100000D20B0000AE0E0000780F0000000C0000000F000000100000A70C0000C60E00008A0F0000000D0000000F000000100000750D0000DC0E00009B0F0000000E0000000F0000001000003E0E0000F10E0000AB0F0000000F0000000F000000100000000F0000050F0000B90F000000100000000F000000100000BC0F0000180F0000C70F000000000000001000000010000015010000080E0000780E00000001000000100000001000002F020000300E0000970E000000020000001000000010000043030000550E0000B50E0000000300000010000000100000500400007A0E0000D20E0000000400000010000000100000580500009E0E0000ED0E000000050000001000000010000059060000C00E0000070F000000060000001000000010000054070000E10E0000200F000000070000001000000010000048080000000F0000380F0000000800000010000000100000370900001F0F00004F0F00000009000000100000001000001F0A00003C0F0000650F0000000A00000010000000100000010B0000580F0000790F0000000B00000010000000100000DD0B0000720F00008D0F0000000C00000010000000100000B30C00008C0F00009F0F0000000D00000010000000100000820D0000A40F0000B00F0000000E000000100000001000004C0E0000BB0F0000C00F0000000F000000100000001000000F0F0000D00F0000CE0F0000001000000010000000100000CC0F0000E50F0000DC0F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000B80300004D0000004B000000000800000000000000000000F1060000780000005C000000000C00000000000000000000C70900008F0000005A0000000010000000000000000000003A0C000092000000450000000000000000040000000000004A0000006903000030000000000400000004000000000000F1030000BA0300005300000000080000000400000000000035070000F703000063000000000C00000004000000000000170A00001F04000061000000001000000004000000000000940C0000330400004C0000000000000000080000000000006E000000720600003900000000040000000800000000000020040000D40600005B00000000080000000800000000000070070000220700006B000000000C000000080000000000005C0A00005C07000068000000001000000008000000000000E50C0000820700005300000000000000000C00000000000088000000280900004200000000040000000C000000000000450400009C0900006400000000080000000C000000000000A0070000FB09000073000000000C0000000C000000000000970A0000470A00007000000000100000000C0000000000002B0D00007E0A00005A000000000000000010000000000000970000008B0B00004B00000000040000001000000000000060040000100C00006C000000000800000010000000000000C6070000810C00007B000000000C00000010000000000000C80A0000DE0C000077000000001000000010000000000000670D0000270D0000600000000000000000000000000400006F00000060000000E203000000040000000000000004000026040000980000001904000000080000000000000004000079070000BB0000003D040000000C00000000000000040000690A0000CB0000004F040000001000000000000000040000F50C0000C60000004E0400000000000000040000000400009B000000DB030000FD0300000004000000040000000400005D0400002704000033040000000800000004000000040000BD0700005F04000057040000000C00000004000000040000B90A00008304000069040000001000000004000000040000520D00009304000068040000000000000008000000040000BD00000003070000170400000004000000080000000400008B040000630700004E040000000800000008000000040000F7070000B007000072040000000C00000008000000040000FF0A0000E807000083040000001000000008000000040000A40D00000C0800008204000000000000000C000000040000D4000000D80900003204000000040000000C000000040000AF0400004D0A00006804000000080000000C00000004000027080000AD0A00008C040000000C0000000C0000000400003B0B0000FA0A00009D04000000100000000C000000040000EC0D0000330B00009C040000000000000010000000040000E10000005A0C00004D040000000400000010000000040000C8040000E30C0000830400000008000000100000000400004C080000580D0000A7040000000C000000100000000400006D0B0000B90D0000B80400000010000000100000000400002B0E0000060E0000B6040000000000000000000000080000A7000000920000004E07000000040000000000000008000077040000C200000098070000000800000000000000080000E4070000DF000000D0070000000C00000000000000080000EE0A0000E7000000F5070000001000000000000000080000940D0000DB00000007080000000000000004000000080000D00000002C0400007A070000000400000004000000080000AE04000074040000C507000000080000000400000008000028080000A7040000FD070000000C000000040000000800003F0B0000C704000022080000001000000004000000080000F30D0000D204000034080000000000000008000000080000EF00000073070000A7070000000400000008000000080000DA040000D2070000F1070000000800000008000000080000620800001D08000029080000000C00000008000000080000860B0000540800004F080000001000000008000000080000470E0000760800006108000000000000000C00000008000004010000680A0000D307000000040000000C000000080000FC040000DE0A00001E08000000080000000C00000008000091080000400B000056080000000C0000000C000000080000C30B00008E0B00007C08000000100000000C000000080000920E0000C70B00008F0800000000000000100000000800000F010000090D00000008000000040000001000000008000014050000970D00004B080000000800000010000000080000B7080000100E000083080000000C00000010000000080000F60B0000750E0000A9080000001000000010000000080000D20E0000C60E0000BC0800000000000000000000000C0000C2000000A40000006B0A00000004000000000000000C0000AC040000CD000000C80A00000008000000000000000C000033080000E2000000130B0000000C000000000000000C0000570B0000E30000004B0B00000010000000000000000C0000170E0000CF000000710B00000000000000040000000C0000E90000005E040000A90A00000004000000040000000C0000E2040000A1040000070B00000008000000040000000C000077080000D0040000530B0000000C000000040000000C0000A90B0000EB0400008B0B00000010000000040000000C0000780E0000F1040000B20B00000000000000080000000C000005010000C4070000E70A00000004000000080000000C00000D05000022080000460B00000008000000080000000C0000B00800006B080000920B0000000C000000080000000C0000F10B00009F080000CB0B00000010000000080000000C0000CE0E0000C0080000F20B000000000000000C0000000C000018010000D80A0000250B000000040000000C0000000C00002D0500004F0B0000850B000000080000000C0000000C0000E0080000B20B0000D10B0000000C0000000C0000000C00002F0C0000010C00000B0C000000100000000C0000000C00001B0F00003C0C0000330C00000000000000100000000C000020010000990D0000630B00000004000000100000000C0000440500002A0E0000C30B00000008000000100000000C000005090000A70E0000110C0000000C000000100000000C0000620C0000100F00004B0C00000010000000100000000C00005D0F0000650F0000730C0000000000000000000000100000C200000097000000380D0000000400000000000000100000C6040000B9000000A90D000000080000000000000010000066080000C6000000080E0000000C00000000000000100000A40B0000BF000000530E00000010000000000000001000007E0E0000A40000008C0E0000000000000004000000100000E600000070040000880D0000000400000004000000100000F9040000AE040000FA0D0000000800000004000000100000AA080000D90400005A0E0000000C00000004000000100000F70B0000EF040000A60E0000001000000004000000100000E10E0000F1040000E00E000000000000000800000010000000010000F5070000D80D000000040000000800000010000023050000510800004B0E0000000800000008000000100000E308000098080000AB0E0000000C00000008000000100000400C0000CB080000F90E0000001000000008000000100000390F0000EA080000340F000000000000000C0000001000000F010000280B0000280E000000040000000C00000010000042050000A10B00009C0E000000080000000C00000010000012090000050C0000FD0E0000000C0000000C0000001000007E0C0000550C00004C0F000000100000000C000000100000880F0000910C0000880F000000000000001000000010000015010000080E0000780E0000000400000010000000100000580500009E0E0000ED0E0000000800000010000000100000370900001F0F00004F0F0000000C00000010000000100000B30C00008C0F00009F0F0000001000000010000000100000CC0F0000E50F0000DC0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000400000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000002B0000003C00000048000000520000005A000000620000006900000070000000760000007C00000081000000860000008B0000009000000095000000990000009E000000A2000000A6000000AA000000AD000000B1000000B5000000B8000000BC000000BF000000C2000000C6000000C9000000CC000000CF000000D2000000D5000000D8000000DB000000DE000000E0000000E3000000E6000000E8000000EB000000EE000000F0000000F3000000F5000000F8000000FA000000FC000000FF000000010100000401000006010000080100000A0100000D0100000F010000110100001301000015010000170100001A0100001C0100001E01000020010000220100002401000026010000280100002A0100002C0100002E0100003001000032010000330100003501000037010000390100003B0100003D0100003E0100004001000042010000440100004601000047010000490100004B0100004D0100004E0100005001000052010000530100005501000057010000580100005A0100005C0100005D0100005F0100006001000062010000640100006501000067010000680100006A0100006B0100006D0100006F010000700100007201000073010000750100007601000078010000790100007B0100007C0100007D0100007F010000800100008201000083010000850100008601000088010000890100008A0100008C0100008D0100008F01000090010000910100009301000094010000950100009701000098010000990100009B0100009C0100009D0100009F010000A0010000A1010000A3010000A4010000A5010000A7010000A8010000A9010000AA010000AC010000AD010000AE010000AF010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BB010000BC010000BD010000BE010000BF010000C1010000C2010000C3010000C4010000C5010000C7010000C8010000C9010000CA010000CB010000CC010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F02000010020000110200001202000013020000140200001502000016020000170200001802000019020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002B0200002C0200002D0200002E0200002F02000030020000310200003202000033020000340200003502000036020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F0200003F02000040020000410200004202000043020000440200004502000046020000470200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004E0200004F0200005002000051020000520200005302000054020000540200005502000056020000570200005802000059020000590200005A0200005B0200005C0200005D0200005E0200005E0200005F0200006002000061020000620200006302000063020000640200006502000066020000670200006802000068020000690200006A0200006B0200006C0200006D0200006D0200006E0200006F020000700200007102000071020000720200007302000074020000750200007502000076020000770200007802000079020000790200007A0200007B0200007C0200007D0200007D0200007E0200007F020000800200008002000081020000820200008302000084020000840200008502000086020000870200008702000088020000890200008A0200008B0200008B0200008C0200008D0200008E0200008E0200008F020000900200009102000091020000920200009302000094020000940200009502000096020000970200009702000098020000990200009A0200009A0200009B0200009C0200009D0200009D0200009E0200009F020000A0020000A0020000A1020000A2020000A3020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AD020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B5020000B5020000B6020000B7020000B7020000B8020000B9020000BA020000BA020000BB020000BC020000BC020000BD020000BE020000BF020000BF020000C0020000C1020000C1020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C7020000C8020000C8020000C9020000CA020000CA020000CB020000CC020000CC020000CD020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D3020000D3020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E5020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000EA020000EA020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000F0020000F0020000F1020000F2020000F2020000F3020000F3020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FB020000FC020000FC020000FD020000FE020000FE020000FF020000000300000003000001030000010300000203000003030000030300000403000005030000050300000603000006030000070300000803000008030000090300000A0300000A0300000B0300000B0300000C0300000D0300000D0300000E0300000E0300000F03000010030000100300001103000012030000120300001303000013030000140300001503000015030000160300001603000017030000180300001803000019030000190300001A0300001B0300001B0300001C0300001C0300001D0300001E0300001E0300001F0300001F030000200300002103000021030000220300002203000023030000240300002403000025030000250300002603000027030000270300002803000028030000290300002A0300002A0300002B0300002B0300002C0300002D0300002D0300002E0300002E0300002F0300002F03000030030000310300003103000032030000320300003303000034030000340300003503000035030000360300003603000037030000380300003803000039030000390300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003F0300003F0300004003000040030000410300004103000042030000430300004303000044030000440300004503000045030000460300004703000047030000480300004803000049030000490300004A0300004A0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300005003000050030000510300005103000052030000520300005303000053030000540300005503000055030000560300005603000057030000570300005803000058030000590300005A0300005A0300005B0300005B0300005C0300005C0300005D0300005D0300005E0300005E0300005F030000600300006003000061030000610300006203000062030000630300006303000064030000640300006503000066030000660300006703000067030000680300006803000069030000690300006A0300006A0300006B0300006B0300006C0300006D0300006D0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000072030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007C0300007D0300007E0300007E0300007F0300007F030000800300008003000081030000810300008203000082030000830300008303000084030000840300008503000085030000860300008603000087030000870300008803000088030000890300008A0300008A0300008B0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F03000090030000900300009103000091030000920300009203000093030000930300009403000094030000950300009503000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000BA030000BA030000BB030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D6030000D6030000D7030000D7030000D8030000D8030000D8030000D9030000D9030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000DF030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E5030000E6030000E6030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EB030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EF030000EF030000F0030000F0030000F0030000F1030000F1030000F2030000F2030000F3030000F3030000F4030000F4030000F5030000F5030000F5030000F6030000F6030000000000002C0000003C00000048000000520000005B000000630000006A00000071000000770000007D00000082000000880000008D00000091000000960000009B0000009F000000A3000000A7000000AB000000AF000000B3000000B6000000BA000000BD000000C1000000C4000000C7000000CB000000CE000000D1000000D4000000D7000000DA000000DD000000DF000000E2000000E5000000E8000000EA000000ED000000F0000000F2000000F5000000F7000000FA000000FC000000FF000000010100000301000006010000080100000A0100000D0100000F010000110100001301000016010000180100001A0100001C0100001E01000020010000220100002401000026010000280100002A0100002C0100002E01000030010000320100003401000036010000380100003A0100003C0100003E0100003F01000041010000430100004501000047010000480100004A0100004C0100004E0100004F01000051010000530100005501000056010000580100005A0100005B0100005D0100005F0100006001000062010000640100006501000067010000680100006A0100006B0100006D0100006F010000700100007201000073010000750100007601000078010000790100007B0100007C0100007E0100007F010000810100008201000084010000850100008701000088010000890100008B0100008C0100008E0100008F010000910100009201000093010000950100009601000097010000990100009A0100009C0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A6010000A8010000A9010000AA010000AB010000AD010000AE010000AF010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BB010000BC010000BD010000BE010000C0010000C1010000C2010000C3010000C4010000C6010000C7010000C8010000C9010000CA010000CC010000CD010000CE010000CF010000D0010000D2010000D3010000D4010000D5010000D6010000D7010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003F02000040020000410200004202000043020000440200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004C0200004D0200004E0200004F0200005002000051020000520200005302000053020000540200005502000056020000570200005802000059020000590200005A0200005B0200005C0200005D0200005E0200005F0200005F02000060020000610200006202000063020000640200006502000065020000660200006702000068020000690200006A0200006A0200006B0200006C0200006D0200006E0200006F0200006F0200007002000071020000720200007302000073020000740200007502000076020000770200007802000078020000790200007A0200007B0200007C0200007C0200007D0200007E0200007F020000800200008002000081020000820200008302000084020000840200008502000086020000870200008702000088020000890200008A0200008B0200008B0200008C0200008D0200008E0200008F0200008F020000900200009102000092020000920200009302000094020000950200009502000096020000970200009802000099020000990200009A0200009B0200009C0200009C0200009D0200009E0200009F0200009F020000A0020000A1020000A2020000A2020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B5020000B6020000B6020000B7020000B8020000B8020000B9020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C4020000C5020000C5020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CC020000CC020000CD020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D3020000D3020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E1020000E2020000E2020000E3020000E4020000E4020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000EA020000EA020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000EF020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FB020000FB020000FC020000FD020000FD020000FE020000FE020000FF020000000300000003000001030000020300000203000003030000040300000403000005030000050300000603000007030000070300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F030000100300001003000011030000110300001203000013030000130300001403000015030000150300001603000016030000170300001803000018030000190300001A0300001A0300001B0300001B0300001C0300001D0300001D0300001E0300001E0300001F03000020030000200300002103000021030000220300002303000023030000240300002503000025030000260300002603000027030000280300002803000029030000290300002A0300002B0300002B0300002C0300002C0300002D0300002E0300002E0300002F0300002F03000030030000310300003103000032030000320300003303000034030000340300003503000035030000360300003603000037030000380300003803000039030000390300003A0300003B0300003B0300003C0300003C0300003D0300003E0300003E0300003F0300003F03000040030000400300004103000042030000420300004303000043030000440300004403000045030000460300004603000047030000470300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004D0300004D0300004E0300004E0300004F0300004F03000050030000510300005103000052030000520300005303000053030000540300005503000055030000560300005603000057030000570300005803000058030000590300005A0300005A0300005B0300005B0300005C0300005C0300005D0300005E0300005E0300005F0300005F0300006003000060030000610300006103000062030000630300006303000064030000640300006503000065030000660300006603000067030000670300006803000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000072030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F030000800300008003000081030000810300008203000083030000830300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F030000900300009003000091030000910300009203000092030000930300009303000094030000940300009503000095030000960300009603000097030000970300009803000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D6030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E6030000E7030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EE030000EF030000EF030000F0030000F0030000F1030000F1030000F2030000F2030000F3030000F3030000F4030000F4030000F4030000F5030000F5030000F6030000F6030000F7030000F7030000F8030000F8030000F9030000F9030000FA030000FA030000FA030000FB030000FB030000FC030000FC030000FD030000FD030000FE030000FE030000FF030000FF030000000000002B0000003B00000047000000510000005A00000061000000690000006F000000750000007B00000080000000860000008B0000008F00000094000000980000009D000000A1000000A5000000A9000000AC000000B0000000B4000000B7000000BB000000BE000000C1000000C4000000C8000000CB000000CE000000D1000000D4000000D6000000D9000000DC000000DF000000E2000000E4000000E7000000EA000000EC000000EF000000F1000000F4000000F6000000F8000000FB000000FD00000000010000020100000401000006010000090100000B0100000D0100000F010000110100001401000016010000180100001A0100001C0100001E01000020010000220100002401000026010000280100002A0100002C0100002E0100003001000031010000330100003501000037010000390100003B0100003C0100003E0100004001000042010000440100004501000047010000490100004A0100004C0100004E010000500100005101000053010000550100005601000058010000590100005B0100005D0100005E010000600100006101000063010000650100006601000068010000690100006B0100006C0100006E0100006F0100007101000072010000740100007501000077010000780100007A0100007B0100007D0100007E0100007F010000810100008201000084010000850100008601000088010000890100008B0100008C0100008D0100008F01000090010000910100009301000094010000950100009701000098010000990100009B0100009C0100009D0100009F010000A0010000A1010000A3010000A4010000A5010000A6010000A8010000A9010000AA010000AB010000AD010000AE010000AF010000B0010000B2010000B3010000B4010000B5010000B7010000B8010000B9010000BA010000BB010000BD010000BE010000BF010000C0010000C1010000C3010000C4010000C5010000C6010000C7010000C8010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F02000020020000210200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002D0200002E0200002F02000030020000310200003202000033020000340200003502000036020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003E0200003F02000040020000410200004202000043020000440200004502000045020000460200004702000048020000490200004A0200004B0200004B0200004C0200004D0200004E0200004F0200005002000051020000510200005202000053020000540200005502000056020000560200005702000058020000590200005A0200005B0200005B0200005C0200005D0200005E0200005F020000600200006002000061020000620200006302000064020000650200006502000066020000670200006802000069020000690200006A0200006B0200006C0200006D0200006D0200006E0200006F020000700200007102000071020000720200007302000074020000750200007502000076020000770200007802000078020000790200007A0200007B0200007C0200007C0200007D0200007E0200007F0200007F020000800200008102000082020000830200008302000084020000850200008602000086020000870200008802000089020000890200008A0200008B0200008C0200008C0200008D0200008E0200008F0200008F020000900200009102000092020000920200009302000094020000950200009502000096020000970200009802000098020000990200009A0200009B0200009B0200009C0200009D0200009E0200009E0200009F020000A0020000A0020000A1020000A2020000A3020000A3020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AD020000AE020000AF020000B0020000B0020000B1020000B2020000B2020000B3020000B4020000B4020000B5020000B6020000B7020000B7020000B8020000B9020000B9020000BA020000BB020000BB020000BC020000BD020000BE020000BE020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C4020000C4020000C5020000C6020000C6020000C7020000C8020000C9020000C9020000CA020000CB020000CB020000CC020000CD020000CD020000CE020000CF020000CF020000D0020000D1020000D1020000D2020000D3020000D3020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DD020000DD020000DE020000DE020000DF020000E0020000E0020000E1020000E2020000E2020000E3020000E4020000E4020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000EA020000EA020000EB020000EB020000EC020000ED020000ED020000EE020000EF020000EF020000F0020000F1020000F1020000F2020000F2020000F3020000F4020000F4020000F5020000F6020000F6020000F7020000F8020000F8020000F9020000F9020000FA020000FB020000FB020000FC020000FD020000FD020000FE020000FE020000FF02000000030000000300000103000001030000020300000303000003030000040300000503000005030000060300000603000007030000080300000803000009030000090300000A0300000B0300000B0300000C0300000D0300000D0300000E0300000E0300000F03000010030000100300001103000011030000120300001303000013030000140300001403000015030000160300001603000017030000170300001803000019030000190300001A0300001A0300001B0300001C0300001C0300001D0300001D0300001E0300001F0300001F03000020030000200300002103000022030000220300002303000023030000240300002403000025030000260300002603000027030000270300002803000029030000290300002A0300002A0300002B0300002B0300002C0300002D0300002D0300002E0300002E0300002F0300003003000030030000310300003103000032030000320300003303000034030000340300003503000035030000360300003603000037030000380300003803000039030000390300003A0300003A0300003B0300003C0300003C0300003D0300003D0300003E0300003E0300003F0300003F03000040030000410300004103000042030000420300004303000043030000440300004503000045030000460300004603000047030000470300004803000048030000490300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004F0300004F0300005003000050030000510300005103000052030000520300005303000054030000540300005503000055030000560300005603000057030000570300005803000058030000590300005A0300005A0300005B0300005B0300005C0300005C0300005D0300005D0300005E0300005E0300005F0300005F0300006003000061030000610300006203000062030000630300006303000064030000640300006503000065030000660300006603000067030000680300006803000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006F0300006F030000700300007103000071030000720300007203000073030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007D0300007D0300007E0300007E0300007F0300007F03000080030000800300008103000081030000820300008203000083030000830300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F03000090030000900300009103000091030000920300009203000093030000930300009403000094030000950300009603000096030000970300009703000098030000980300009903000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D5030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DB030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E6030000E6030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EA030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EF030000EF030000EF030000F0030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="3" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="sRGB" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="srgb" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000BF0000001C000000060000000002000000000000000000007B0100002C00000012000000000300000000000000000000330200003D0000001E000000000400000000000000000000E80200004C000000280000000005000000000000000000009A0300005B00000033000000000600000000000000000000480400006A0000003C000000000700000000000000000000F304000078000000450000000008000000000000000000009A050000850000004E0000000009000000000000000000003E0600009200000056000000000A00000000000000000000DF0600009E0000005D000000000B000000000000000000007C070000A900000064000000000C0000000000000000000015080000B40000006A000000000D00000000000000000000AB080000BE0000006F000000000E000000000000000000003E090000C800000074000000000F00000000000000000000CE090000D100000078000000001000000000000000000000590A0000D90000007B00000000000000000100000000000031000000CB00000012000000000100000001000000000000F0000000DD0000001F000000000200000001000000000000AC010000EF0000002B0000000003000000010000000000006502000001010000360000000004000000010000000000001A0300001201000041000000000500000001000000000000CB030000220100004B00000000060000000100000000000079040000310100005500000000070000000100000000000024050000400100005E000000000800000001000000000000CB0500004F010000660000000009000000010000000000006F0600005D0100006E000000000A00000001000000000000100700006A01000075000000000B00000001000000000000AD070000760100007B000000000C00000001000000000000460800008201000081000000000D00000001000000000000DD0800008E01000086000000000E000000010000000000006F090000990100008B000000000F00000001000000000000FF090000A30100008F0000000010000000010000000000008A0A0000AD01000093000000000000000002000000000000620000008A0100002B000000000100000002000000000000220100009D01000038000000000200000002000000000000DE010000B00100004400000000030000000200000000000096020000C30100004F0000000004000000020000000000004B030000D50100005A000000000500000002000000000000FC030000E601000064000000000600000002000000000000AB040000F70100006D000000000700000002000000000000550500000702000076000000000800000002000000000000FD050000170200007E000000000900000002000000000000A00600002602000086000000000A0000000200000000000041070000340200008D000000000B00000002000000000000DE0700004202000093000000000C00000002000000000000770800004F02000099000000000D000000020000000000000E0900005C0200009E000000000E00000002000000000000A009000068020000A2000000000F000000020000000000002F0A000073020000A6000000001000000002000000000000BB0A00007E020000AA000000000000000003000000000000940000004702000044000000000100000003000000000000530100005C020000500000000002000000030000000000000F020000700200005C000000000300000003000000000000C702000084020000670000000004000000030000000000007C03000097020000720000000005000000030000000000002E040000A90200007C000000000600000003000000000000DC040000BB0200008500000000070000000300000000000086050000CD0200008E0000000008000000030000000000002E060000DD02000096000000000900000003000000000000D1060000ED0200009D000000000A0000000300000000000072070000FD020000A4000000000B000000030000000000000F0800000C030000AA000000000C00000003000000000000A80800001A030000B0000000000D000000030000000000003E09000028030000B5000000000E00000003000000000000D109000035030000B9000000000F00000003000000000000600A000042030000BD000000001000000003000000000000EC0A00004E030000C0000000000000000004000000000000C5000000020300005D000000000100000004000000000000840100001803000069000000000200000004000000000000400200002E03000075000000000300000004000000000000F80200004203000080000000000400000004000000000000AD030000570300008A0000000005000000040000000000005F0400006A030000940000000006000000040000000000000D0500007E0300009D000000000700000004000000000000B705000090030000A60000000008000000040000000000005F060000A2030000AE00000000090000000400000000000002070000B3030000B5000000000A00000004000000000000A3070000C4030000BC000000000B0000000400000000000040080000D4030000C2000000000C00000004000000000000D9080000E4030000C7000000000D000000040000000000006F090000F3030000CC000000000E00000004000000000000020A000001040000D0000000000F00000004000000000000910A00000F040000D40000000010000000040000000000001D0B00001C040000D7000000000000000005000000000000F6000000BC03000076000000000100000005000000000000B5010000D30300008200000000020000000500000000000071020000EA0300008D000000000300000005000000000000290300000004000098000000000400000005000000000000DE03000015040000A2000000000500000005000000000000900400002A040000AC0000000006000000050000000000003E0500003E040000B5000000000700000005000000000000E805000052040000BD0000000008000000050000000000008F06000065040000C50000000009000000050000000000003307000077040000CD000000000A00000005000000000000D407000089040000D3000000000B00000005000000000000700800009B040000D9000000000C000000050000000000000A090000AB040000DE000000000D00000005000000000000A0090000BB040000E3000000000E00000005000000000000330A0000CB040000E7000000000F00000005000000000000C20A0000DA040000EB0000000010000000050000000000004D0B0000E8040000EE00000000000000000600000000000027010000740400008E000000000100000006000000000000E60100008C0400009A000000000200000006000000000000A2020000A4040000A50000000003000000060000000000005A030000BB040000B00000000004000000060000000000000F040000D2040000BA000000000500000006000000000000C1040000E8040000C40000000006000000060000000000006F050000FD040000CD0000000007000000060000000000001906000012050000D5000000000800000006000000000000C006000026050000DD000000000900000006000000000000640700003A050000E4000000000A00000006000000000000040800004D050000EA000000000B00000006000000000000A10800005F050000F0000000000C000000060000000000003A09000071050000F6000000000D00000006000000000000D109000083050000FA000000000E00000006000000000000630A000093050000FE000000000F00000006000000000000F20A0000A3050000020100000010000000060000000000007E0B0000B305000004010000000000000007000000000000580100002A050000A60000000001000000070000000000001702000043050000B2000000000200000007000000000000D30200005C050000BE0000000003000000070000000000008B03000075050000C8000000000400000007000000000000400400008D050000D2000000000500000007000000000000F1040000A4050000DC0000000006000000070000000000009F050000BA050000E50000000007000000070000000000004A060000D0050000ED000000000800000007000000000000F1060000E6050000F400000000090000000700000000000095070000FB050000FB000000000A00000007000000000000350800000F06000002010000000B00000007000000000000D20800002206000007010000000C000000070000000000006B090000350600000D010000000D00000007000000000000010A00004806000011010000000E00000007000000000000940A00005A06000015010000000F00000007000000000000230B00006B06000018010000001000000007000000000000AE0B00007C0600001B01000000000000000800000000000089010000DE050000BF00000000010000000800000000000048020000F9050000CB0000000002000000080000000000000403000013060000D6000000000300000008000000000000BC0300002D060000E00000000004000000080000000000007104000046060000EA000000000500000008000000000000220500005E060000F3000000000600000008000000000000D005000076060000FC0000000007000000080000000000007A0600008D0600000401000000080000000800000000000021070000A40600000C010000000900000008000000000000C5070000BA06000012010000000A0000000800000000000065080000CF06000019010000000B0000000800000000000002090000E40600001E010000000C000000080000000000009B090000F806000023010000000D00000008000000000000310A00000C07000028010000000E00000008000000000000C40A00001F0700002C010000000F00000008000000000000530B0000310700002F010000001000000008000000000000DF0B00004307000031010000000000000009000000000000BA01000091060000D700000000010000000900000000000079020000AD060000E300000000020000000900000000000034030000C8060000EE000000000300000009000000000000EC030000E3060000F8000000000400000009000000000000A1040000FD0600000201000000050000000900000000000053050000170700000B010000000600000009000000000000000600003007000014010000000700000009000000000000AB060000480700001C010000000800000009000000000000520700006007000023010000000900000009000000000000F6070000770700002A010000000A00000009000000000000960800008D07000030010000000B0000000900000000000032090000A307000035010000000C00000009000000000000CC090000B90700003A010000000D00000009000000000000620A0000CE0700003E010000000E00000009000000000000F40A0000E207000042010000000F00000009000000000000830B0000F5070000450100000010000000090000000000000F0C0000080800004801000000000000000A000000000000EA01000042070000EF00000000010000000A000000000000A90200005F070000FB00000000020000000A000000000000650300007C0700000601000000030000000A0000000000001D040000980700001001000000040000000A000000000000D2040000B30700001901000000050000000A00000000000083050000CE0700002301000000060000000A00000000000031060000E80700002B01000000070000000A000000000000DB060000010800003301000000080000000A000000000000820700001A0800003A01000000090000000A000000000000260800003208000041010000000A0000000A000000000000C60800004A08000047010000000B0000000A00000000000063090000610800004C010000000C0000000A000000000000FC0900007808000051010000000D0000000A000000000000920A00008E08000055010000000E0000000A000000000000240B0000A308000058010000000F0000000A000000000000B30B0000B80800005B01000000100000000A0000000000003F0C0000CC0800005E01000000000000000B0000000000001B020000F20700000701000000010000000B000000000000DA020000100800001301000000020000000B000000000000950300002E0800001D01000000030000000B0000000000004D0400004B0800002701000000040000000B00000000000002050000670800003101000000050000000B000000000000B3050000830800003A01000000060000000B000000000000610600009E0800004201000000070000000B0000000000000C070000B90800004A01000000080000000B000000000000B3070000D30800005101000000090000000B00000000000056080000EC08000058010000000A0000000B000000000000F6080000050900005D010000000B0000000B000000000000930900001D09000063010000000C0000000B0000000000002C0A00003509000067010000000D0000000B000000000000C20A00004C0900006B010000000E0000000B000000000000550B0000630900006F010000000F0000000B000000000000E30B0000790900007101000000100000000B0000000000006F0C00008E0900007401000000000000000C0000000000004B0200009F0800001F01000000010000000C0000000000000A030000BF0800002A01000000020000000C000000000000C6030000DD0800003501000000030000000C0000000000007E040000FC0800003F01000000040000000C00000000000032050000190900004801000000050000000C000000000000E4050000360900005101000000060000000C00000000000091060000530900005901000000070000000C0000000000003C0700006F0900006101000000080000000C000000000000E30700008A0900006801000000090000000C00000000000086080000A40900006E010000000A0000000C00000000000026090000BE09000074010000000B0000000C000000000000C3090000D809000079010000000C0000000C0000000000005C0A0000F10900007E010000000D0000000C000000000000F20A0000090A000082010000000E0000000C000000000000850B0000210A000085010000000F0000000C000000000000130C0000380A00008801000000100000000C0000000000009F0C00004E0A00008A01000000000000000D0000000000007C0200004B0900003701000000010000000D0000000000003B0300006C0900004201000000020000000D000000000000F60300008C0900004D01000000030000000D000000000000AE040000AB0900005601000000040000000D00000000000063050000CA0900006001000000050000000D00000000000014060000E80900006801000000060000000D000000000000C2060000060A00007001000000070000000D0000000000006C070000230A00007801000000080000000D000000000000130800003F0A00007F01000000090000000D000000000000B60800005B0A000085010000000A0000000D00000000000056090000760A00008B010000000B0000000D000000000000F3090000910A000090010000000C0000000D0000000000008C0A0000AB0A000094010000000D0000000D000000000000220B0000C40A000098010000000E0000000D000000000000B40B0000DD0A00009B010000000F0000000D000000000000430C0000F50A00009D01000000100000000D000000000000CF0C00000D0B00009F01000000000000000E000000000000AC020000F50900004F01000000010000000E0000000000006B030000170A00005A01000000020000000E00000000000026040000380A00006401000000030000000E000000000000DE040000590A00006E01000000040000000E00000000000093050000790A00007701000000050000000E00000000000044060000980A00007F01000000060000000E000000000000F2060000B70A00008701000000070000000E0000000000009C070000D50A00008F01000000080000000E00000000000043080000F30A00009501000000090000000E000000000000E6080000100B00009C010000000A0000000E000000000000860900002C0B0000A1010000000B0000000E000000000000230A0000480B0000A6010000000C0000000E000000000000BC0A0000630B0000AA010000000D0000000E000000000000520B00007E0B0000AE010000000E0000000E000000000000E40B0000980B0000B1010000000F0000000E000000000000730C0000B10B0000B301000000100000000E000000000000FF0C0000CA0B0000B501000000000000000F000000000000DC0200009E0A00006601000000010000000F0000000000009B030000C10A00007101000000020000000F00000000000056040000E30A00007B01000000030000000F0000000000000E050000050B00008501000000040000000F000000000000C3050000260B00008E01000000050000000F00000000000074060000460B00009601000000060000000F00000000000022070000660B00009E01000000070000000F000000000000CC070000860B0000A501000000080000000F00000000000073080000A40B0000AC01000000090000000F00000000000016090000C30B0000B2010000000A0000000F000000000000B6090000E00B0000B7010000000B0000000F000000000000530A0000FD0B0000BC010000000C0000000F000000000000EC0A0000190C0000C0010000000D0000000F000000000000820B0000350C0000C4010000000E0000000F000000000000140C0000500C0000C7010000000F0000000F000000000000A30C00006B0C0000C901000000100000000F0000000000002E0D0000850C0000CB0100000000000000100000000000000C030000450B00007E010000000100000010000000000000CB030000690B000088010000000200000010000000000000860400008C0B0000930100000003000000100000000000003E050000AF0B00009C010000000400000010000000000000F3050000D10B0000A5010000000500000010000000000000A4060000F30B0000AD01000000060000001000000000000052070000140C0000B5010000000700000010000000000000FC070000350C0000BC010000000800000010000000000000A3080000550C0000C301000000090000001000000000000046090000740C0000C8010000000A00000010000000000000E6090000930C0000CE010000000B00000010000000000000830A0000B10C0000D2010000000C000000100000000000001C0B0000CE0C0000D6010000000D00000010000000000000B10B0000EB0C0000DA010000000E00000010000000000000440C0000070D0000DD010000000F00000010000000000000D20C0000230D0000DF0100000010000000100000000000005E0D00003E0D0000E00100000000000000000000000100001500000018000000CB000000000100000000000000010000D600000029000000D8000000000200000000000000010000930100003A000000E50000000003000000000000000100004C0200004A000000F20000000004000000000000000100000203000059000000FE000000000500000000000000010000B5030000680000000901000000060000000000000001000065040000760000001401000000070000000000000001000010050000840000001E010000000800000000000000010000B905000091000000270100000009000000000000000100005E0600009D00000030010000000A0000000000000001000000070000A900000038010000000B000000000000000100009E070000B400000040010000000C0000000000000001000039080000BF00000047010000000D00000000000000010000D0080000C90000004D010000000E0000000000000001000064090000D200000053010000000F00000000000000010000F4090000DB00000058010000001000000000000000010000810A0000E40000005D01000000000000000100000001000047000000DA000000E500000000010000000100000001000007010000ED000000F2000000000200000001000000010000C4010000FE000000FF0000000003000000010000000100007E020000100100000C010000000400000001000000010000340300002001000017010000000500000001000000010000E7030000300100002301000000060000000100000001000096040000400100002D010000000700000001000000010000420500004E01000037010000000800000001000000010000EA0500005D010000400100000009000000010000000100008F0600006A01000049010000000A00000001000000010000310700007701000051010000000B00000001000000010000CF0700008401000059010000000C000000010000000100006A080000900100005F010000000D00000001000000010000010900009B01000066010000000E0000000100000001000095090000A60100006B010000000F00000001000000010000250A0000B001000070010000001000000001000000010000B20A0000B901000075010000000000000002000000010000780000009B010000FF00000000010000000200000001000039010000AF0100000C010000000200000002000000010000F6010000C201000019010000000300000002000000010000AF020000D40100002501000000040000000200000001000065030000E60100003101000000050000000200000001000018040000F70100003C010000000600000002000000010000C704000008020000460100000007000000020000000100007305000018020000500100000008000000020000000100001C0600002702000059010000000900000002000000010000C10600003602000062010000000A0000000200000001000062070000440200006A010000000B00000002000000010000000800005202000071010000000C000000020000000100009B0800005F02000078010000000D00000002000000010000320900006B0200007E010000000E00000002000000010000C60900007702000084010000000F00000002000000010000570A00008202000088010000001000000002000000010000E40A00008D0200008D010000000000000003000000010000AA0000005A020000180100000001000000030000000100006A0100006F02000026010000000200000003000000010000270200008302000032010000000300000003000000010000E1020000970200003F01000000040000000300000001000097030000AA0200004A01000000050000000300000001000049040000BC02000055010000000600000003000000010000F9040000CE0200005F010000000700000003000000010000A4050000DF020000690100000008000000030000000100004D060000F002000072010000000900000003000000010000F2060000000300007B010000000A00000003000000010000930700000F03000082010000000B00000003000000010000310800001E0300008A010000000C00000003000000010000CC0800002C03000090010000000D00000003000000010000630900003A03000096010000000E00000003000000010000F7090000470300009C010000000F00000003000000010000880A000053030000A0010000001000000003000000010000150B00005F030000A5010000000000000004000000010000DB00000018030000320100000001000000040000000100009B0100002E0300003F01000000020000000400000001000058020000430300004C010000000300000004000000010000120300005803000058010000000400000004000000010000C80300006C030000630100000005000000040000000100007B0400007F0300006E0100000006000000040000000100002A0500009203000078010000000700000004000000010000D6050000A5030000820100000008000000040000000100007E060000B70300008B01000000090000000400000001000023070000C803000093010000000A00000004000000010000C4070000D80300009B010000000B0000000400000001000062080000E8030000A2010000000C00000004000000010000FD080000F8030000A8010000000D000000040000000100009409000007040000AE010000000E00000004000000010000280A000015040000B4010000000F00000004000000010000B90A000023040000B8010000001000000004000000010000450B000030040000BC0100000000000000050000000100000C010000D30300004C010000000100000005000000010000CD010000EB03000059010000000200000005000000010000890200000104000065010000000300000005000000010000430300001704000071010000000400000005000000010000F90300002C0400007C010000000500000005000000010000AC04000041040000870100000006000000050000000100005B050000550400009101000000070000000500000001000007060000690400009B010000000800000005000000010000AF0600007C040000A3010000000900000005000000010000540700008E040000AC010000000A00000005000000010000F5070000A0040000B3010000000B0000000500000001000093080000B1040000BA010000000C000000050000000100002E090000C2040000C1010000000D00000005000000010000C5090000D2040000C6010000000E00000005000000010000590A0000E1040000CC010000000F00000005000000010000E90A0000F0040000D0010000001000000005000000010000760B0000FE040000D40100000000000000060000000100003D0100008D04000065010000000100000006000000010000FE010000A604000072010000000200000006000000010000BB020000BD0400007F01000000030000000600000001000074030000D50400008A0100000004000000060000000100002A040000EB04000095010000000500000006000000010000DD04000001050000A00100000006000000060000000100008C05000016050000AA010000000700000006000000010000380600002B050000B3010000000800000006000000010000E00600003F050000BC0100000009000000060000000100008507000053050000C4010000000A000000060000000100002608000066050000CC010000000B00000006000000010000C408000078050000D2010000000C000000060000000100005F0900008A050000D9010000000D00000006000000010000F60900009B050000DE010000000E000000060000000100008A0A0000AC050000E3010000000F000000060000000100001A0B0000BC050000E8010000001000000006000000010000A70B0000CB050000EC0100000000000000070000000100006E010000460500007F0100000001000000070000000100002F0200005F0500008B010000000200000007000000010000EB0200007805000098010000000300000007000000010000A503000090050000A30100000004000000070000000100005B040000A8050000AE0100000005000000070000000100000D050000BF050000B9010000000600000007000000010000BD050000D6050000C301000000070000000700000001000068060000EC050000CC0100000008000000070000000100001107000001060000D4010000000900000007000000010000B607000016060000DC010000000A00000007000000010000570800002A060000E4010000000B00000007000000010000F50800003E060000EA010000000C000000070000000100009009000051060000F1010000000D00000007000000010000270A000063060000F6010000000E00000007000000010000BA0A000075060000FB010000000F000000070000000100004B0B000086060000FF010000001000000007000000010000D80B000097060000030200000000000000080000000100009F010000FC050000980100000001000000080000000100006002000017060000A50100000002000000080000000100001C03000031060000B1010000000300000008000000010000D60300004A060000BC0100000004000000080000000100008C04000063060000C70100000005000000080000000100003E0500007C060000D1010000000600000008000000010000ED05000093060000DB01000000070000000800000001000099060000AB060000E401000000080000000800000001000041070000C1060000ED010000000900000008000000010000E6070000D7060000F5010000000A0000000800000001000088080000ED060000FC010000000B00000008000000010000260900000107000002020000000C00000008000000010000C00900001507000008020000000D00000008000000010000570A0000290700000E020000000E00000008000000010000EB0A00003C07000013020000000F000000080000000100007B0B00004E07000017020000001000000008000000010000080C0000600700001A020000000000000009000000010000D0010000B1060000B101000000010000000900000001000090020000CD060000BE0100000002000000090000000100004D030000E8060000CA0100000003000000090000000100000704000003070000D5010000000400000009000000010000BC0400001D070000E00100000005000000090000000100006F05000037070000EA0100000006000000090000000100001E0600004F070000F4010000000700000009000000010000CA06000068070000FD01000000080000000900000001000072070000800700000502000000090000000900000001000017080000970700000D020000000A00000009000000010000B8080000AD07000014020000000B0000000900000001000056090000C30700001A020000000C00000009000000010000F1090000D907000020020000000D00000009000000010000880A0000ED07000025020000000E000000090000000100001B0B0000020800002A020000000F00000009000000010000AC0B0000150800002E020000001000000009000000010000390C0000280800003202000000000000000A0000000100000102000064070000CA01000000010000000A000000010000C102000081070000D701000000020000000A0000000100007E0300009E070000E201000000030000000A00000001000037040000BA070000EE01000000040000000A000000010000ED040000D5070000F801000000050000000A000000010000A0050000F00700000202000000060000000A0000000100004F0600000A0800000C02000000070000000A000000010000FA060000230800001502000000080000000A000000010000A30700003C0800001D02000000090000000A000000010000470800005408000025020000000A0000000A000000010000E90800006C0800002C020000000B0000000A000000010000870900008308000032020000000C0000000A000000010000210A00009A08000038020000000D0000000A000000010000B80A0000B00800003D020000000E0000000A0000000100004C0B0000C508000041020000000F0000000A000000010000DC0B0000DA0800004502000000100000000A000000010000690C0000EE0800004902000000000000000B0000000100003102000015080000E301000000010000000B000000010000F202000034080000EF01000000020000000B000000010000AE03000051080000FB01000000030000000B000000010000680400006F0800000602000000040000000B0000000100001E0500008B0800001102000000050000000B000000010000D0050000A70800001B02000000060000000B0000000100007F060000C20800002402000000070000000B0000000100002B070000DD0800002D02000000080000000B000000010000D3070000F70800003502000000090000000B00000001000078080000110900003C020000000A0000000B000000010000190900002A09000043020000000B0000000B000000010000B7090000420900004A020000000C0000000B000000010000510A00005A0900004F020000000D0000000B000000010000E90A00007109000054020000000E0000000B0000000100007C0B00008709000059020000000F0000000B0000000100000C0C00009D0900005D02000000100000000B000000010000990C0000B30900006002000000000000000C00000001000062020000C5080000FC01000000010000000C00000001000022030000E50800000802000000020000000C000000010000DF030000040900001402000000030000000C00000001000098040000220900001F02000000040000000C0000000100004E0500003F0900002902000000050000000C000000010000010600005D0900003302000000060000000C000000010000B0060000790900003C02000000070000000C0000000100005B070000950900004502000000080000000C00000001000003080000B00900004D02000000090000000C000000010000A8080000CB09000054020000000A0000000C00000001000049090000E50900005B020000000B0000000C000000010000E7090000FF09000061020000000C0000000C000000010000820A0000180A000067020000000D0000000C000000010000190B0000300A00006C020000000E0000000C000000010000AC0B0000480A000070020000000F0000000C0000000100003C0C00005F0A00007402000000100000000C000000010000C90C0000750A00007702000000000000000D00000001000092020000730900001502000000010000000D00000001000053030000940900002102000000020000000D0000000100000F040000B40900002C02000000030000000D000000010000C9040000D30900003702000000040000000D0000000100007E050000F20900004102000000050000000D00000001000031060000100A00004B02000000060000000D000000010000E00600002E0A00005402000000070000000D0000000100008B0700004B0A00005D02000000080000000D00000001000034080000680A00006502000000090000000D000000010000D8080000840A00006C020000000A0000000D0000000100007A0900009F0A000072020000000B0000000D000000010000170A0000BA0A000079020000000C0000000D000000010000B20A0000D40A00007E020000000D0000000D000000010000490B0000ED0A000083020000000E0000000D000000010000DC0B0000060B000087020000000F0000000D0000000100006D0C00001F0B00008A02000000100000000D000000010000F90C0000360B00008D02000000000000000E000000010000C30200001F0A00002D02000000010000000E00000001000083030000410A00003902000000020000000E00000001000040040000620A00004502000000030000000E000000010000F9040000830A00004F02000000040000000E000000010000AF050000A30A00005A02000000050000000E00000001000061060000C30A00006302000000060000000E00000001000010070000E20A00006C02000000070000000E000000010000BC070000000B00007502000000080000000E000000010000640800001D0B00007C02000000090000000E000000010000080900003B0B000083020000000A0000000E000000010000AA090000570B00008A020000000B0000000E000000010000470A0000730B000090020000000C0000000E000000010000E20A00008E0B000095020000000D0000000E000000010000790B0000A90B00009A020000000E0000000E0000000100000C0C0000C30B00009E020000000F0000000E0000000100009D0C0000DD0B0000A102000000100000000E000000010000290D0000F60B0000A402000000000000000F000000010000F3020000CA0A00004602000000010000000F000000010000B3030000ED0A00005202000000020000000F000000010000700400000F0B00005D02000000030000000F00000001000029050000310B00006802000000040000000F000000010000DF050000520B00007202000000050000000F00000001000091060000730B00007B02000000060000000F00000001000040070000930B00008402000000070000000F000000010000EC070000B30B00008C02000000080000000F00000001000094080000D20B00009402000000090000000F00000001000038090000F00B00009B020000000A0000000F000000010000DA0900000E0C0000A1020000000B0000000F000000010000770A00002B0C0000A7020000000C0000000F000000010000120B0000470C0000AC020000000D0000000F000000010000A90B0000630C0000B1020000000E0000000F0000000100003C0C00007E0C0000B5020000000F0000000F000000010000CC0C0000990C0000B802000000100000000F000000010000590D0000B30C0000BB02000000000000001000000001000023030000730B00005E020000000100000010000000010000E3030000970B00006A020000000200000010000000010000A0040000BB0B00007502000000030000001000000001000059050000DE0B0000800200000004000000100000000100000F060000000C00008A020000000500000010000000010000C1060000220C00009302000000060000001000000001000070070000430C00009C0200000007000000100000000100001C080000640C0000A4020000000800000010000000010000C4080000840C0000AB02000000090000001000000001000068090000A30C0000B2020000000A000000100000000100000A0A0000C20C0000B8020000000B00000010000000010000A70A0000E00C0000BE020000000C00000010000000010000420B0000FE0C0000C3020000000D00000010000000010000D90B00001B0D0000C8020000000E000000100000000100006C0C0000380D0000CB020000000F00000010000000010000FC0C0000540D0000CF020000001000000010000000010000890D00006F0D0000D10200000000000000000000000200002A0000002400000099010000000100000000000000020000EB00000035000000A8010000000200000000000000020000A901000046000000B60100000003000000000000000200006402000055000000C40100000004000000000000000200001B03000065000000D1010000000500000000000000020000CF03000073000000DD0100000006000000000000000200008004000081000000E80100000007000000000000000200002D0500008F000000F3010000000800000000000000020000D60500009B000000FE0100000009000000000000000200007D060000A800000008020000000A000000000000000200001F070000B300000011020000000B00000000000000020000BF070000BE00000019020000000C000000000000000200005B080000C900000021020000000D00000000000000020000F3080000D300000029020000000E0000000000000002000088090000DC00000030020000000F000000000000000200001A0A0000E500000036020000001000000000000000020000A80A0000ED0000003B0200000000000000010000000200005B000000E9000000B40100000001000000010000000200001D010000FB000000C3010000000200000001000000020000DB0100000D010000D1010000000300000001000000020000960200001E010000DE0100000004000000010000000200004D0300002E010000EB010000000500000001000000020000010400003E010000F7010000000600000001000000020000B10400004D010000030200000007000000010000000200005E0500005C0100000E020000000800000001000000020000080600006A01000018020000000900000001000000020000AE0600007701000022020000000A0000000100000002000051070000840100002B020000000B00000001000000020000F00700009001000033020000000C000000010000000200008C0800009C0100003B020000000D0000000100000002000025090000A701000042020000000E00000001000000020000BA090000B201000049020000000F000000010000000200004B0A0000BB0100004F020000001000000001000000020000D90A0000C5010000540200000000000000020000000200008D000000AC010000CF0100000001000000020000000200004E010000BF010000DE0100000002000000020000000200000D020000D2010000EC010000000300000002000000020000C7020000E4010000F90100000004000000020000000200007F030000F601000005020000000500000002000000020000320400000702000011020000000600000002000000020000E3040000170200001D020000000700000002000000020000900500002702000028020000000800000002000000020000390600003602000032020000000900000002000000020000E0060000450200003B020000000A00000002000000020000820700005302000044020000000B0000000200000002000022080000610200004D020000000C00000002000000020000BD0800006D02000054020000000D00000002000000020000560900007A0200005C020000000E00000002000000020000EB0900008502000062020000000F000000020000000200007D0A000090020000680200000010000000020000000200000B0B00009B0200006D020000000000000003000000020000BE0000006D020000EA0100000001000000030000000200008001000081020000F80100000002000000030000000200003E0200009602000006020000000300000003000000020000F9020000A902000013020000000400000003000000020000B0030000BC0200002002000000050000000300000002000064040000CE0200002C02000000060000000300000002000014050000E002000037020000000700000003000000020000C1050000F1020000420200000008000000030000000200006B060000010300004C020000000900000003000000020000110700001103000055020000000A00000003000000020000B4070000200300005E020000000B00000003000000020000530800002F03000066020000000C00000003000000020000EF0800003D0300006E020000000D00000003000000020000870900004B03000075020000000E000000030000000200001C0A0000580300007B020000000F00000003000000020000AE0A000064030000810200000010000000030000000200003C0B00007003000086020000000000000004000000020000F00000002C03000005020000000100000004000000020000B101000042030000130200000002000000040000000200006F02000057030000200200000003000000040000000200002A0300006C0300002D020000000400000004000000020000E1030000800300003A02000000050000000400000002000095040000940300004602000000060000000400000002000046050000A603000051020000000700000004000000020000F3050000B90300005B0200000008000000040000000200009C060000CA0300006502000000090000000400000002000042070000DB0300006F020000000A00000004000000020000E5070000EC03000077020000000B0000000400000002000084080000FC0300007F020000000C00000004000000020000200900000B04000087020000000D00000004000000020000B80900001A0400008E020000000E000000040000000200004D0A00002804000094020000000F00000004000000020000DF0A0000350400009A0200000010000000040000000200006D0B0000420400009F02000000000000000500000002000021010000EA0300001F020000000100000005000000020000E3010000010400002D020000000200000005000000020000A1020000180400003B0200000003000000050000000200005B0300002D04000048020000000400000005000000020000130400004304000054020000000500000005000000020000C60400005704000060020000000600000005000000020000770500006B0400006B020000000700000005000000020000240600007F04000075020000000800000005000000020000CD060000920400007F02000000090000000500000002000073070000A404000088020000000A0000000500000002000016080000B604000091020000000B00000005000000020000B5080000C704000099020000000C0000000500000002000051090000D7040000A0020000000D00000005000000020000E9090000E7040000A7020000000E000000050000000200007E0A0000F7040000AD020000000F00000005000000020000100B000005050000B30200000010000000050000000200009E0B000014050000B702000000000000000600000002000052010000A60400003A02000000010000000600000002000014020000BE04000048020000000200000006000000020000D2020000D6040000550200000003000000060000000200008D030000ED0400006202000000040000000600000002000044040000040500006E020000000500000006000000020000F80400001905000079020000000600000006000000020000A80500002F0500008402000000070000000600000002000055060000430500008F020000000800000006000000020000FE0600005805000098020000000900000006000000020000A40700006B050000A1020000000A00000006000000020000470800007E050000AA020000000B00000006000000020000E608000090050000B2020000000C0000000600000002000082090000A2050000B9020000000D000000060000000200001A0A0000B3050000C0020000000E00000006000000020000AF0A0000C4050000C6020000000F00000006000000020000410B0000D4050000CB020000001000000006000000020000CF0B0000E3050000D0020000000000000007000000020000830100006005000054020000000100000007000000020000450200007A0500006202000000020000000700000002000003030000930500006F020000000300000007000000020000BE030000AB0500007C02000000040000000700000002000075040000C30500008802000000050000000700000002000029050000DA05000093020000000600000007000000020000D9050000F00500009E0200000007000000070000000200008606000006060000A80200000008000000070000000200002F0700001C060000B2020000000900000007000000020000D507000030060000BB020000000A000000070000000200007808000044060000C3020000000B000000070000000200001709000058060000CB020000000C00000007000000020000B30900006B060000D2020000000D000000070000000200004B0A00007D060000D9020000000E00000007000000020000E00A00008F060000DE020000000F00000007000000020000720B0000A0060000E4020000001000000007000000020000000C0000B1060000E8020000000000000008000000020000B5010000190600006E02000000010000000800000002000076020000340600007C020000000200000008000000020000340300004E06000089020000000300000008000000020000EF0300006706000096020000000400000008000000020000A604000080060000A10200000005000000080000000200005905000098060000AD0200000006000000080000000200000A060000B0060000B7020000000700000008000000020000B7060000C7060000C202000000080000000800000002000060070000DE060000CB02000000090000000800000002000006080000F4060000D4020000000A00000008000000020000A908000009070000DC020000000B00000008000000020000480900001E070000E4020000000C00000008000000020000E409000032070000EB020000000D000000080000000200007C0A000046070000F1020000000E00000008000000020000110B000059070000F7020000000F00000008000000020000A20B00006B070000FC020000001000000008000000020000300C00007D07000001030000000000000009000000020000E5010000D006000088020000000100000009000000020000A7020000EC060000960200000002000000090000000200006503000007070000A30200000003000000090000000200001F04000022070000AF020000000400000009000000020000D70400003C070000BB0200000005000000090000000200008A05000055070000C60200000006000000090000000200003B0600006E070000D1020000000700000009000000020000E706000087070000DB020000000800000009000000020000910700009E070000E402000000090000000900000002000037080000B6070000ED020000000A00000009000000020000DA080000CC070000F5020000000B0000000900000002000079090000E2070000FD020000000C00000009000000020000140A0000F707000003030000000D00000009000000020000AD0A00000C0800000A030000000E00000009000000020000420B0000200800000F030000000F00000009000000020000D30B00003408000015030000001000000009000000020000610C0000470800001903000000000000000A0000000200001602000085070000A202000000010000000A000000020000D8020000A2070000B002000000020000000A00000002000096030000BF070000BD02000000030000000A00000002000050040000DA070000C902000000040000000A00000002000007050000F6070000D502000000050000000A000000020000BB05000011080000E002000000060000000A0000000200006B0600002B080000EA02000000070000000A0000000200001807000044080000F402000000080000000A000000020000C20700005D080000FD02000000090000000A000000020000680800007608000006030000000A0000000A0000000200000A0900008D0800000E030000000B0000000A000000020000A9090000A508000015030000000C0000000A000000020000450A0000BB0800001C030000000D0000000A000000020000DD0A0000D108000022030000000E0000000A000000020000720B0000E608000028030000000F0000000A000000020000040C0000FB0800002D03000000100000000A000000020000920C00000F0900003103000000000000000B0000000200004702000038080000BC02000000010000000B0000000200000803000057080000CA02000000020000000B000000020000C603000074080000D602000000030000000B0000000200008104000092080000E302000000040000000B00000002000038050000AE080000EE02000000050000000B000000020000EC050000CA080000F902000000060000000B0000000200009C060000E50800000303000000070000000B00000002000049070000000900000D03000000080000000B000000020000F20700001A0900001603000000090000000B00000002000098080000340900001F030000000A0000000B0000000200003B0900004D09000027030000000B0000000B000000020000DA090000650900002E030000000C0000000B000000020000760A00007D09000035030000000D0000000B0000000200000E0B0000940900003B030000000E0000000B000000020000A30B0000AB09000040030000000F0000000B000000020000340C0000C10900004503000000100000000B000000020000C20C0000D60900004903000000000000000C00000002000078020000EA080000D602000000010000000C000000020000390300000A090000E302000000020000000C000000020000F703000029090000F002000000030000000C000000020000B204000047090000FC02000000040000000C00000002000069050000650900000703000000050000000C0000000200001C060000820900001203000000060000000C000000020000CC0600009E0900001C03000000070000000C00000002000079070000BA0900002603000000080000000C00000002000023080000D60900002F03000000090000000C000000020000C9080000F109000037030000000A0000000C0000000200006B0900000B0A00003F030000000B0000000C0000000200000A0A0000240A000046030000000C0000000C000000020000A60A00003D0A00004D030000000D0000000C0000000200003E0B0000560A000053030000000E0000000C000000020000D30B00006E0A000058030000000F0000000C000000020000640C0000850A00005D03000000100000000C000000020000F20C00009B0A00006103000000000000000D000000020000A80200009A090000F002000000010000000D0000000200006A030000BB090000FD02000000020000000D00000002000027040000DB0900000903000000030000000D000000020000E2040000FB0900001503000000040000000D000000020000990500001A0A00002103000000050000000D0000000200004D060000380A00002B03000000060000000D000000020000FD060000560A00003503000000070000000D000000020000AA070000730A00003F03000000080000000D000000020000530800008F0A00004803000000090000000D000000020000F9080000AB0A000050030000000A0000000D0000000200009C090000C70A000058030000000B0000000D0000000200003B0A0000E20A00005F030000000C0000000D000000020000D60A0000FC0A000065030000000D0000000D0000000200006E0B0000160B00006B030000000E0000000D000000020000030C00002F0B000070030000000F0000000D000000020000950C0000470B00007503000000100000000D000000020000230D00005F0B00007903000000000000000E000000020000D9020000480A00000903000000010000000E0000000200009A0300006A0A00001603000000020000000E000000020000580400008C0A00002303000000030000000E00000002000012050000AC0A00002F03000000040000000E000000020000C9050000CD0A00003A03000000050000000E0000000200007D060000EC0A00004403000000060000000E0000000200002D0700000B0B00004E03000000070000000E000000020000DA0700002A0B00005803000000080000000E00000002000083080000470B00006003000000090000000E00000002000029090000650B000069030000000A0000000E000000020000CC090000810B000070030000000B0000000E0000000200006B0A00009D0B000077030000000C0000000E000000020000060B0000B90B00007D030000000D0000000E0000000200009F0B0000D40B000083030000000E0000000E000000020000330C0000EE0B000088030000000F0000000E000000020000C50C0000070C00008D03000000100000000E000000020000530D0000210C00009003000000000000000F00000002000009030000F50A00002303000000010000000F000000020000CA030000180B00003003000000020000000F000000020000880400003B0B00003C03000000030000000F000000020000430500005D0B00004803000000040000000F000000020000FA0500007E0B00005303000000050000000F000000020000AD0600009F0B00005D03000000060000000F0000000200005E070000BF0B00006703000000070000000F0000000200000A080000DF0B00007003000000080000000F000000020000B4080000FE0B00007903000000090000000F000000020000590900001C0C000081030000000A0000000F000000020000FC0900003A0C000088030000000B0000000F0000000200009B0A0000570C00008F030000000C0000000F000000020000370B0000740C000095030000000D0000000F000000020000CF0B0000900C00009B030000000E0000000F000000020000640C0000AB0C0000A0030000000F0000000F000000020000F50C0000C60C0000A403000000100000000F000000020000830D0000E00C0000A803000000000000001000000002000039030000A00B00003C030000000100000010000000020000FB030000C40B000049030000000200000010000000020000B8040000E80B000055030000000300000010000000020000730500000B0C0000610300000004000000100000000200002A0600002E0C00006C030000000500000010000000020000DD060000500C0000760300000006000000100000000200008E070000710C0000800300000007000000100000000200003A080000920C000089030000000800000010000000020000E4080000B20C0000910300000009000000100000000200008A090000D20C000099030000000A000000100000000200002C0A0000F10C0000A1030000000B00000010000000020000CB0A00000F0D0000A7030000000C00000010000000020000670B00002D0D0000AD030000000D00000010000000020000FF0B00004B0D0000B3030000000E00000010000000020000940C0000670D0000B8030000000F00000010000000020000250D0000830D0000BC030000001000000010000000020000B30D00009F0D0000C00300000000000000000000000300003D0000003000000066020000000100000000000000030000000100004100000075020000000200000000000000030000BF01000051000000840200000003000000000000000300007B0200006000000093020000000400000000000000030000330300006F000000A1020000000500000000000000030000E80300007E000000AE0200000006000000000000000300009A0400008B000000BA0200000007000000000000000300004805000099000000C6020000000800000000000000030000F3050000A5000000D20200000009000000000000000300009A060000B1000000DD020000000A000000000000000300003E070000BD000000E7020000000B00000000000000030000DF070000C8000000F0020000000C000000000000000300007C080000D2000000F9020000000D0000000000000003000015090000DB00000002030000000E00000000000000030000AB090000E500000009030000000F000000000000000300003E0A0000ED00000011030000001000000000000000030000CE0A0000F5000000170300000000000000010000000300006F000000F600000081020000000100000001000000030000310100000801000091020000000200000001000000030000F10100001A010000A0020000000300000001000000030000AD0200002B010000AE020000000400000001000000030000650300003B010000BC0200000005000000010000000300001A0400004A010000C9020000000600000001000000030000CC0400005A010000D60200000007000000010000000300007A05000068010000E20200000008000000010000000300002506000076010000ED020000000900000001000000030000CC06000083010000F8020000000A00000001000000030000700700009001000002030000000B00000001000000030000100800009C0100000B030000000C00000001000000030000AD080000A701000014030000000D0000000100000003000047090000B20100001C030000000E00000001000000030000DD090000BC01000024030000000F00000001000000030000700A0000C60100002B030000001000000001000000030000FF0A0000CF01000031030000000000000002000000030000A0000000BB0100009D02000000010000000200000003000063010000CF010000AD02000000020000000200000003000022020000E1010000BC020000000300000002000000030000DE020000F3010000CA0200000004000000020000000300009703000005020000D70200000005000000020000000300004C04000016020000E4020000000600000002000000030000FD04000026020000F1020000000700000002000000030000AB05000036020000FD020000000800000002000000030000560600004502000008030000000900000002000000030000FD0600005302000012030000000A00000002000000030000A1070000610200001C030000000B00000002000000030000420800006E02000026030000000C00000002000000030000DF0800007B0200002E030000000D00000002000000030000780900008702000036030000000E000000020000000300000F0A0000930200003E030000000F00000002000000030000A10A00009E02000045030000001000000002000000030000310B0000A80200004B030000000000000003000000030000D20000007E020000B90200000001000000030000000300009501000093020000C802000000020000000300000003000054020000A7020000D702000000030000000300000003000010030000BA020000E5020000000400000003000000030000C8030000CD020000F30200000005000000030000000300007D040000DF020000FF0200000006000000030000000300002F050000F00200000C030000000700000003000000030000DD05000001030000170300000008000000030000000300008806000012030000230300000009000000030000000300002F070000210300002D030000000A00000003000000030000D30700003103000037030000000B00000003000000030000730800003F03000040030000000C00000003000000030000100900004D03000049030000000D00000003000000030000AA0900005A03000051030000000E00000003000000030000400A00006703000058030000000F00000003000000030000D30A0000730300005F030000001000000003000000030000620B00007F030000650300000000000000040000000300000401000040030000D4020000000100000004000000030000C601000056030000E4020000000200000004000000030000850200006B030000F2020000000300000004000000030000410300007F03000000030000000400000004000000030000FA030000930300000E030000000500000004000000030000AF040000A70300001B03000000060000000400000003000060050000B9030000270300000007000000040000000300000E060000CC03000032030000000800000004000000030000B9060000DD0300003D03000000090000000400000003000060070000EE03000047030000000A0000000400000003000004080000FE03000051030000000B00000004000000030000A50800000E0400005A030000000C00000004000000030000420900001D04000063030000000D00000004000000030000DB0900002C0400006B030000000E00000004000000030000710A00003A04000072030000000F00000004000000030000040B00004704000079030000001000000004000000030000930B0000540400007F0300000000000000050000000300003501000000040000F0020000000100000005000000030000F801000017040000FF020000000200000005000000030000B70200002D0400000E03000000030000000500000003000073030000430400001B0300000004000000050000000300002B0400005804000029030000000500000005000000030000E00400006D0400003503000000060000000500000003000092050000810400004103000000070000000500000003000040060000940400004D030000000800000005000000030000EA060000A70400005803000000090000000500000003000092070000B904000062030000000A0000000500000003000035080000CB0400006C030000000B00000005000000030000D6080000DC04000075030000000C0000000500000003000073090000EC0400007D030000000D000000050000000300000C0A0000FC04000085030000000E00000005000000030000A30A00000B0500008C030000000F00000005000000030000350B00001A05000092030000001000000005000000030000C50B0000280500009803000000000000000600000003000066010000BE0400000B03000000010000000600000003000029020000D60400001A030000000200000006000000030000E8020000EE04000029030000000300000006000000030000A403000005050000360300000004000000060000000300005C0400001B05000044030000000500000006000000030000110500003105000050030000000600000006000000030000C3050000460500005C030000000700000006000000030000710600005B050000670300000008000000060000000300001C0700006F05000072030000000900000006000000030000C3070000820500007C030000000A00000006000000030000670800009505000086030000000B0000000600000003000007090000A70500008F030000000C00000006000000030000A4090000B905000097030000000D000000060000000300003E0A0000CA0500009F030000000E00000006000000030000D40A0000DA050000A6030000000F00000006000000030000660B0000EA050000AC030000001000000006000000030000F60B0000FA050000B2030000000000000007000000030000970100007A050000270300000001000000070000000300005A020000940500003503000000020000000700000003000019030000AC05000044030000000300000007000000030000D5030000C5050000510300000004000000070000000300008E040000DC0500005E03000000050000000700000003000042050000F30500006B030000000600000007000000030000F40500000A06000077030000000700000007000000030000A206000020060000820300000008000000070000000300004D070000350600008D030000000900000007000000030000F40700004A06000096030000000A00000007000000030000980800005E060000A0030000000B000000070000000300003809000071060000A9030000000C00000007000000030000D509000084060000B1030000000D000000070000000300006F0A000096060000B8030000000E00000007000000030000050B0000A8060000BF030000000F00000007000000030000970B0000B9060000C6030000001000000007000000030000270C0000CA060000CB030000000000000008000000030000C901000035060000420300000001000000080000000300008B0200004F060000510300000002000000080000000300004A030000690600005F03000000030000000800000003000006040000830600006C030000000400000008000000030000BF0400009C0600007903000000050000000800000003000074050000B40600008503000000060000000800000003000025060000CC06000091030000000700000008000000030000D3060000E30600009C0300000008000000080000000300007E070000F9060000A7030000000900000008000000030000250800000F070000B1030000000A00000008000000030000C908000025070000BA030000000B000000080000000300006909000039070000C3030000000C00000008000000030000060A00004E070000CB030000000D00000008000000030000A00A000061070000D2030000000E00000008000000030000360B000074070000D9030000000F00000008000000030000C80B000086070000DF030000001000000008000000030000580C000098070000E5030000000000000009000000030000FA010000EE0600005D030000000100000009000000030000BC0200000A0700006B0300000002000000090000000300007B030000250700007A030000000300000009000000030000370400004007000087030000000400000009000000030000F00400005A07000094030000000500000009000000030000A405000073070000A0030000000600000009000000030000560600008C070000AC03000000070000000900000003000004070000A4070000B7030000000800000009000000030000AF070000BC070000C103000000090000000900000003000056080000D3070000CB030000000A00000009000000030000FA080000EA070000D4030000000B000000090000000300009A09000000080000DC030000000C00000009000000030000370A000015080000E4030000000D00000009000000030000D00A00002A080000EB030000000E00000009000000030000670B00003E080000F2030000000F00000009000000030000F90B000052080000F8030000001000000009000000030000880C000065080000FE03000000000000000A0000000300002B020000A50700007803000000010000000A000000030000ED020000C20700008603000000020000000A000000030000AC030000DF0700009403000000030000000A00000003000068040000FA070000A203000000040000000A0000000300002005000016080000AE03000000050000000A000000030000D505000031080000BA03000000060000000A000000030000870600004B080000C603000000070000000A0000000300003507000064080000D103000000080000000A000000030000E00700007D080000DB03000000090000000A0000000300008708000096080000E5030000000A0000000A0000000300002A090000AD080000EE030000000B0000000A000000030000CB090000C5080000F6030000000C0000000A000000030000680A0000DB080000FE030000000D0000000A000000030000010B0000F108000005040000000E0000000A000000030000970B0000070900000C040000000F0000000A0000000300002A0C00001C0900001104000000100000000A000000030000B90C0000300900001704000000000000000B0000000300005B0200005A0800009303000000010000000B0000000300001E03000079080000A103000000020000000B000000030000DD03000096080000AF03000000030000000B00000003000099040000B4080000BC03000000040000000B00000003000051050000D0080000C903000000050000000B00000003000006060000EC080000D503000000060000000B000000030000B806000008090000E003000000070000000B0000000300006607000022090000EB03000000080000000B000000030000100800003D090000F503000000090000000B000000030000B708000056090000FE030000000A0000000B0000000300005B0900006F09000007040000000B0000000B000000030000FC0900008809000010040000000C0000000B000000030000980A0000A009000017040000000D0000000B000000030000320B0000B70900001E040000000E0000000B000000030000C80B0000CE09000025040000000F0000000B0000000300005B0C0000E40900002B04000000100000000B000000030000EA0C0000F90900003004000000000000000C0000000300008C0200000E090000AD03000000010000000C0000000300004F0300002E090000BC03000000020000000C0000000300000E0400004D090000C903000000030000000C000000030000CA0400006B090000D603000000040000000C0000000300008205000089090000E303000000050000000C00000003000037060000A6090000EF03000000060000000C000000030000E8060000C3090000FA03000000070000000C00000003000096070000DF0900000504000000080000000C00000003000041080000FA0900000F04000000090000000C000000030000E8080000150A000018040000000A0000000C0000000300008C0900002F0A000021040000000B0000000C0000000300002C0A0000490A000029040000000C0000000C000000030000C90A0000620A000031040000000D0000000C000000030000620B00007B0A000038040000000E0000000C000000030000F90B0000930A00003E040000000F0000000C0000000300008B0C0000AA0A00004404000000100000000C0000000300001A0D0000C10A00004904000000000000000D000000030000BD020000C0090000C803000000010000000D0000000300007F030000E1090000D603000000020000000D0000000300003F040000010A0000E403000000030000000D000000030000FA040000210A0000F103000000040000000D000000030000B3050000400A0000FD03000000050000000D000000030000670600005E0A00000904000000060000000D000000030000190700007C0A00001404000000070000000D000000030000C70700009A0A00001E04000000080000000D00000003000071080000B60A00002804000000090000000D00000003000019090000D20A000032040000000A0000000D000000030000BC090000EE0A00003A040000000B0000000D0000000300005D0A0000090B000042040000000C0000000D000000030000FA0A0000230B00004A040000000D0000000D000000030000930B00003D0B000051040000000E0000000D000000030000290C0000560B000057040000000F0000000D000000030000BC0C00006E0B00005C04000000100000000D0000000300004B0D0000860B00006104000000000000000E000000030000ED020000700A0000E303000000010000000E000000030000B0030000920A0000F103000000020000000E0000000300006F040000B40A0000FE03000000030000000E0000000300002B050000D50A00000B04000000040000000E000000030000E3050000F50A00001704000000050000000E00000003000098060000150B00002304000000060000000E00000003000049070000340B00002E04000000070000000E000000030000F7070000530B00003804000000080000000E000000030000A2080000700B00004204000000090000000E000000030000490900008E0B00004B040000000A0000000E000000030000ED090000AB0B000054040000000B0000000E0000000300008D0A0000C70B00005C040000000C0000000E0000000300002A0B0000E20B000063040000000D0000000E000000030000C30B0000FD0B00006A040000000E0000000E000000030000590C0000180C000070040000000F0000000E000000030000EC0C0000310C00007504000000100000000E0000000300007B0D00004A0C00007A04000000000000000F0000000300001E0300001F0B0000FD03000000010000000F000000030000E0030000420B00000B04000000020000000F0000000300009F040000650B00001804000000030000000F0000000300005B050000870B00002504000000040000000F00000003000013060000A90B00003104000000050000000F000000030000C8060000CA0B00003D04000000060000000F0000000300007A070000EA0B00004704000000070000000F000000030000280800000A0C00005204000000080000000F000000030000D2080000290C00005B04000000090000000F00000003000079090000480C000064040000000A0000000F0000000300001D0A0000650C00006D040000000B0000000F000000030000BD0A0000830C000075040000000C0000000F0000000300005A0B0000A00C00007C040000000D0000000F000000030000F40B0000BC0C000083040000000E0000000F0000000300008A0C0000D70C000089040000000F0000000F0000000300001C0D0000F20C00008E04000000100000000F000000030000AB0D00000D0D0000930400000000000000100000000300004E030000CC0B00001704000000010000001000000003000011040000F00B000025040000000200000010000000030000D0040000140C0000320400000003000000100000000300008C050000380C00003F040000000400000010000000030000440600005B0C00004B040000000500000010000000030000F90600007D0C000056040000000600000010000000030000AA0700009E0C00006104000000070000001000000003000058080000BF0C00006B04000000080000001000000003000003090000E00C000075040000000900000010000000030000AA090000000D00007E040000000A000000100000000300004D0A00001F0D000086040000000B00000010000000030000EE0A00003D0D00008E040000000C000000100000000300008A0B00005B0D000095040000000D00000010000000030000240C0000790D00009B040000000E00000010000000030000BA0C0000960D0000A1040000000F000000100000000300004C0D0000B20D0000A7040000001000000010000000030000DB0D0000CE0D0000AB0400000000000000000000000400004F0000003A0000002F030000000100000000000000040000130100004B00000040030000000200000000000000040000D30100005B00000050030000000300000000000000040000900200006A0000005F0300000004000000000000000400004A030000790000006E03000000050000000000000004000000040000870000007C030000000600000000000000040000B3040000950000008A03000000070000000000000004000062050000A2000000970300000008000000000000000400000E060000AE000000A3030000000900000000000000040000B7060000BA000000AF030000000A000000000000000400005C070000C5000000BA030000000B00000000000000040000FD070000D0000000C5030000000C000000000000000400009B080000DA000000CF030000000D0000000000000004000036090000E3000000D8030000000E00000000000000040000CE090000EC000000E1030000000F00000000000000040000610A0000F4000000E9030000001000000000000000040000F20A0000FC000000F003000000000000000100000004000081000000030100004C03000000010000000100000004000045010000150100005C03000000020000000100000004000005020000260100006C030000000300000001000000040000C2020000370100007C0300000004000000010000000400007C030000470100008A030000000500000001000000040000320400005601000099030000000600000001000000040000E504000065010000A60300000007000000010000000400009405000073010000B30300000008000000010000000400004006000081010000BF030000000900000001000000040000E80600008E010000CB030000000A000000010000000400008D0700009B010000D6030000000B000000010000000400002F080000A6010000E0030000000C00000001000000040000CD080000B2010000EA030000000D0000000100000004000068090000BC010000F3030000000E00000001000000040000FF090000C6010000FC030000000F00000001000000040000930A0000D001000004040000001000000001000000040000240B0000D90100000B040000000000000002000000040000B3000000CA0100006903000000010000000200000004000077010000DD0100007903000000020000000200000004000037020000F001000089030000000300000002000000040000F40200000102000098030000000400000002000000040000AE03000013020000A70300000005000000020000000400006404000023020000B50300000006000000020000000400001705000034020000C2030000000700000002000000040000C605000043020000CF0300000008000000020000000400007206000052020000DB0300000009000000020000000400001A07000060020000E7030000000A00000002000000040000BF0700006E020000F1030000000B00000002000000040000610800007B020000FC030000000C00000002000000040000FF0800008802000006040000000D000000020000000400009A090000940200000F040000000E00000002000000040000310A00009F02000017040000000F00000002000000040000C50A0000AA0200001F040000001000000002000000040000550B0000B402000026040000000000000003000000040000E40000008F02000085030000000100000003000000040000A8010000A40200009603000000020000000300000004000069020000B7020000A503000000030000000300000004000026030000CA020000B4030000000400000003000000040000DF030000DD020000C303000000050000000300000004000096040000EF020000D10300000006000000030000000400004805000000030000DE030000000700000003000000040000F805000011030000EB030000000800000003000000040000A306000021030000F70300000009000000030000000400004C0700003103000002040000000A00000003000000040000F1070000400300000D040000000B00000003000000040000920800004E03000017040000000C00000003000000040000310900005C03000021040000000D00000003000000040000CB090000690300002A040000000E00000003000000040000630A00007603000032040000000F00000003000000040000F70A0000820300003A040000001000000003000000040000870B00008D030000410400000000000000040000000400001601000053030000A2030000000100000004000000040000DA01000068030000B20300000002000000040000000400009A0200007D030000C20300000003000000040000000400005703000092030000D103000000040000000400000004000011040000A6030000DF030000000500000004000000040000C7040000B9030000ED0300000006000000040000000400007A050000CB030000FA03000000070000000400000004000029060000DD03000006040000000800000004000000040000D5060000EF030000120400000009000000040000000400007D070000000400001E040000000A00000004000000040000220800001004000028040000000B00000004000000040000C40800002004000032040000000C00000004000000040000620900002F0400003C040000000D00000004000000040000FD0900003D04000045040000000E00000004000000040000940A00004B0400004D040000000F00000004000000040000280B00005804000055040000001000000004000000040000B80B0000650400005C0400000000000000050000000400004801000015040000BE0300000001000000050000000400000B0200002B040000CE030000000200000005000000040000CC02000042040000DE0300000003000000050000000400008903000057040000ED030000000400000005000000040000420400006C040000FB030000000500000005000000040000F90400008104000009040000000600000005000000040000AB05000095040000160400000007000000050000000400005B060000A80400002204000000080000000500000004000006070000BB0400002E040000000900000005000000040000AF070000CD04000039040000000A0000000500000004000054080000DE04000044040000000B00000005000000040000F5080000EF0400004E040000000C00000005000000040000940900000005000057040000000D000000050000000400002E0A00000F05000060040000000E00000005000000040000C60A00001F05000068040000000F00000005000000040000590B00002D0500006F040000001000000005000000040000EA0B00003B0500007604000000000000000600000004000079010000D5040000DA0300000001000000060000000400003D020000ED040000EA030000000200000006000000040000FD02000004050000FA030000000300000006000000040000BA0300001B050000090400000004000000060000000400007404000032050000170400000005000000060000000400002A0500004705000024040000000600000006000000040000DD0500005C050000310400000007000000060000000400008C060000710500003E040000000800000006000000040000380700008505000049040000000900000006000000040000E00700009805000054040000000A0000000600000004000085080000AB0500005F040000000B0000000600000004000027090000BD05000069040000000C00000006000000040000C5090000CF05000072040000000D00000006000000040000600A0000E00500007B040000000E00000006000000040000F70A0000F005000083040000000F000000060000000400008B0B0000000600008A0400000010000000060000000400001B0C00000F06000091040000000000000007000000040000AA01000093050000F70300000001000000070000000400006E020000AC050000070400000002000000070000000400002F030000C505000016040000000300000007000000040000EC030000DD05000025040000000400000007000000040000A5040000F5050000330400000005000000070000000400005B0500000C060000400400000006000000070000000400000E060000220600004D040000000700000007000000040000BD0600003806000059040000000800000007000000040000690700004D06000065040000000900000007000000040000110800006206000070040000000A00000007000000040000B6080000760600007A040000000B00000007000000040000580900008A06000084040000000C00000007000000040000F60900009C0600008D040000000D00000007000000040000910A0000AF06000095040000000E00000007000000040000280B0000C00600009D040000000F00000007000000040000BC0B0000D1060000A50400000010000000070000000400004C0C0000E2060000AB040000000000000008000000040000DC01000050060000130400000001000000080000000400009F0200006A060000230400000002000000080000000400006003000084060000320400000003000000080000000400001D0400009E06000040040000000400000008000000040000D6040000B70600004E0400000005000000080000000400008C050000CF0600005C0400000006000000080000000400003F060000E706000068040000000700000008000000040000EE060000FE060000740400000008000000080000000400009A0700001407000080040000000900000008000000040000430800002A0700008B040000000A00000008000000040000E80800003F07000095040000000B0000000800000004000089090000540700009F040000000C00000008000000040000270A000068070000A8040000000D00000008000000040000C20A00007C070000B0040000000E00000008000000040000590B00008F070000B8040000000F00000008000000040000ED0B0000A1070000BF0400000010000000080000000400007E0C0000B3070000C60400000000000000090000000400000D0200000B0700002F040000000100000009000000040000D1020000260700003E04000000020000000900000004000091030000420700004D0400000003000000090000000400004E0400005C0700005C04000000040000000900000004000007050000770700006A040000000500000009000000040000BE050000900700007704000000060000000900000004000070060000A9070000840400000007000000090000000400001F070000C107000090040000000800000009000000040000CB070000D90700009B04000000090000000900000004000074080000F0070000A6040000000A000000090000000400001909000007080000B0040000000B00000009000000040000BA0900001D080000B9040000000C00000009000000040000580A000032080000C2040000000D00000009000000040000F30A000047080000CB040000000E000000090000000400008A0B00005B080000D2040000000F000000090000000400001E0C00006F080000D9040000001000000009000000040000AF0C000082080000E004000000000000000A0000000400003E020000C40700004B04000000010000000A00000004000002030000E10700005A04000000020000000A000000040000C2030000FE0700006904000000030000000A0000000400007F040000190800007704000000040000000A00000004000038050000350800008504000000050000000A000000040000EF050000500800009204000000060000000A000000040000A10600006A0800009F04000000070000000A0000000400005007000083080000AB04000000080000000A000000040000FC0700009C080000B604000000090000000A000000040000A5080000B5080000C1040000000A0000000A0000000400004A090000CD080000CB040000000B0000000A000000040000EB090000E4080000D4040000000C0000000A000000040000890A0000FB080000DD040000000D0000000A000000040000240B000011090000E5040000000E0000000A000000040000BB0B000026090000ED040000000F0000000A0000000400004F0C00003B090000F404000000100000000A000000040000E00C00004F090000FA04000000000000000B0000000400006F0200007B0800006604000000010000000B000000040000320300009A0800007604000000020000000B000000040000F3030000B80800008504000000030000000B000000040000B0040000D50800009304000000040000000B00000004000069050000F1080000A104000000050000000B0000000400001F0600000D090000AE04000000060000000B000000040000D206000029090000BA04000000070000000B0000000400008107000044090000C604000000080000000B0000000400002D0800005E090000D104000000090000000B000000040000D608000078090000DB040000000A0000000B0000000400007B09000091090000E5040000000B0000000B0000000400001C0A0000A9090000EF040000000C0000000B000000040000BA0A0000C1090000F7040000000D0000000B000000040000550B0000D8090000FF040000000E0000000B000000040000EC0B0000EF09000007050000000F0000000B000000040000800C0000050A00000E05000000100000000B000000040000100D00001B0A00001405000000000000000C000000040000A0020000310900008204000000010000000C00000004000063030000510900009104000000020000000C0000000400002404000070090000A004000000030000000C000000040000E10400008E090000AE04000000040000000C0000000400009A050000AC090000BC04000000050000000C00000004000050060000CA090000C904000000060000000C00000004000003070000E6090000D504000000070000000C000000040000B2070000020A0000E104000000080000000C0000000400005E0800001E0A0000EC04000000090000000C00000004000006090000390A0000F6040000000A0000000C000000040000AB090000530A000000050000000B0000000C0000000400004D0A00006D0A000009050000000C0000000C000000040000EB0A0000860A000012050000000D0000000C000000040000860B00009F0A00001A050000000E0000000C0000000400001D0C0000B70A000021050000000F0000000C000000040000B10C0000CE0A00002805000000100000000C000000040000410D0000E50A00002E05000000000000000D000000040000D0020000E50900009E04000000010000000D00000004000094030000060A0000AD04000000020000000D00000004000054040000260A0000BC04000000030000000D00000004000011050000460A0000CA04000000040000000D000000040000CB050000650A0000D704000000050000000D00000004000081060000840A0000E404000000060000000D00000004000034070000A20A0000F004000000070000000D000000040000E3070000BF0A0000FB04000000080000000D0000000400008F080000DC0A00000605000000090000000D00000004000037090000F80A000011050000000A0000000D000000040000DC090000140B00001A050000000B0000000D0000000400007E0A00002F0B000023050000000C0000000D0000000400001C0B0000490B00002C050000000D0000000D000000040000B60B0000630B000034050000000E0000000D0000000400004E0C00007C0B00003B050000000F0000000D000000040000E10C0000950B00004205000000100000000D000000040000720D0000AD0B00004805000000000000000E00000004000001030000970A0000B904000000010000000E000000040000C5030000BA0A0000C804000000020000000E00000004000085040000DB0A0000D704000000030000000E00000004000042050000FC0A0000E504000000040000000E000000040000FB0500001D0B0000F204000000050000000E000000040000B20600003D0B0000FF04000000060000000E000000040000640700005C0B00000B05000000070000000E000000040000130800007A0B00001605000000080000000E000000040000BF080000980B00002105000000090000000E00000004000068090000B60B00002B050000000A0000000E0000000400000D0A0000D30B000035050000000B0000000E000000040000AE0A0000EF0B00003E050000000C0000000E0000000400004C0B00000B0C000046050000000D0000000E000000040000E70B0000260C00004E050000000E0000000E0000000400007E0C0000400C000055050000000F0000000E000000040000120D00005A0C00005B05000000100000000E000000040000A20D0000730C00006105000000000000000F00000004000031030000480B0000D504000000010000000F000000040000F50300006C0B0000E404000000020000000F000000040000B60400008E0B0000F204000000030000000F00000004000073050000B10B00000005000000040000000F0000000400002C060000D20B00000D05000000050000000F000000040000E2060000F40B00001905000000060000000F00000004000095070000140C00002505000000070000000F00000004000044080000340C00003105000000080000000F000000040000F0080000530C00003B05000000090000000F00000004000098090000720C000045050000000A0000000F0000000400003D0A0000900C00004F050000000B0000000F000000040000DF0A0000AE0C000058050000000C0000000F0000000400007D0B0000CA0C000060050000000D0000000F000000040000170C0000E70C000068050000000E0000000F000000040000AF0C0000030D00006F050000000F0000000F000000040000420D00001E0D00007505000000100000000F000000040000D30D0000380D00007B05000000000000001000000004000062030000F70B0000F0040000000100000010000000040000260400001C0C0000FF040000000200000010000000040000E6040000400C00000D050000000300000010000000040000A3050000630C00001B0500000004000000100000000400005C060000860C00002805000000050000001000000004000013070000A90C000034050000000600000010000000040000C5070000CA0C00004005000000070000001000000004000074080000EC0C00004B050000000800000010000000040000200900000C0D000056050000000900000010000000040000C90900002C0D000060050000000A000000100000000400006D0A00004C0D000069050000000B000000100000000400000F0B00006A0D000072050000000C00000010000000040000AD0B0000890D00007A050000000D00000010000000040000480C0000A60D000081050000000E00000010000000040000DF0C0000C30D000088050000000F00000010000000040000730D0000E00D00008F050000001000000010000000040000030E0000FB0D0000940500000000000000000000000500006000000044000000F6030000000100000000000000050000250100005400000007040000000200000000000000050000E70100006400000019040000000300000000000000050000A50200007300000029040000000400000000000000050000600300008200000039040000000500000000000000050000170400009000000048040000000600000000000000050000CB0400009D000000570400000007000000000000000500007B050000AA0000006504000000080000000000000005000028060000B600000072040000000900000000000000050000D2060000C20000007F040000000A0000000000000005000078070000CD0000008B040000000B000000000000000500001B080000D700000096040000000C00000000000000050000BA080000E1000000A1040000000D0000000000000005000056090000EA000000AC040000000E00000000000000050000EE090000F3000000B5040000000F00000000000000050000840A0000FB000000BE040000001000000000000000050000150B000002010000C7040000000000000001000000050000920000000F01000014040000000100000001000000050000570100002001000025040000000200000001000000050000190200003101000036040000000300000001000000050000D70200004201000046040000000400000001000000050000920300005201000056040000000500000001000000050000490400006101000065040000000600000001000000050000FD0400007001000074040000000700000001000000050000AD0500007E010000820400000008000000010000000500005A0600008B0100008F04000000090000000100000005000004070000980100009B040000000A00000001000000050000AA070000A4010000A8040000000B000000010000000500004D080000B0010000B3040000000C00000001000000050000EC080000BB010000BE040000000D0000000100000005000088090000C6010000C8040000000E00000001000000050000200A0000D0010000D2040000000F00000001000000050000B60A0000D9010000DA040000001000000001000000050000470B0000E2010000E3040000000000000002000000050000C4000000D80100003104000000010000000200000005000089010000EB010000430400000002000000020000000500004B020000FD01000054040000000300000002000000050000090300000F02000064040000000400000002000000050000C403000020020000730400000005000000020000000500007B04000030020000820400000006000000020000000500002F0500004002000091040000000700000002000000050000DF050000500200009E0400000008000000020000000500008C0600005E020000AC040000000900000002000000050000360700006D020000B8040000000A00000002000000050000DC0700007A020000C4040000000B000000020000000500007F08000087020000CF040000000C000000020000000500001E09000093020000DA040000000D00000002000000050000BA0900009F020000E4040000000E00000002000000050000520A0000AA020000EE040000000F00000002000000050000E70A0000B5020000F7040000001000000002000000050000790B0000BF020000FF040000000000000003000000050000F60000009F0200004F040000000100000003000000050000BB010000B3020000600400000002000000030000000500007C020000C7020000710400000003000000030000000500003B030000DA02000081040000000400000003000000050000F5030000EC02000090040000000500000003000000050000AD040000FE0200009F040000000600000003000000050000610500000F030000AE0400000007000000030000000500001106000020030000BB040000000800000003000000050000BE06000030030000C8040000000900000003000000050000680700003F030000D5040000000A000000030000000500000E0800004E030000E1040000000B00000003000000050000B10800005C030000EC040000000C00000003000000050000500900006A030000F6040000000D00000003000000050000EC0900007703000000050000000E00000003000000050000840A0000840300000A050000000F00000003000000050000190B00009003000012050000001000000003000000050000AB0B00009B0300001B05000000000000000400000005000028010000640300006C040000000100000004000000050000ED0100007A0300007E040000000200000004000000050000AE0200008F0300008E0400000003000000040000000500006C030000A30300009E04000000040000000400000005000027040000B7030000AE040000000500000004000000050000DE040000CA030000BC04000000060000000400000005000092050000DC030000CA04000000070000000400000005000043060000EE030000D8040000000800000004000000050000F006000000040000E50400000009000000040000000500009907000010040000F1040000000A000000040000000500003F08000021040000FD040000000B00000004000000050000E20800003004000008050000000C00000004000000050000820900003F04000013050000000D000000040000000500001D0A00004D0400001C050000000E00000004000000050000B60A00005B04000026050000000F000000040000000500004B0B0000680400002E050000001000000004000000050000DD0B0000750400003605000000000000000500000005000059010000280400008A0400000001000000050000000500001E0200003F0400009B040000000200000005000000050000E002000055040000AB0400000003000000050000000500009E0300006B040000BB0400000004000000050000000500005904000080040000CA0400000005000000050000000500001005000094040000D9040000000600000005000000050000C4050000A8040000E704000000070000000500000005000074060000BB040000F504000000080000000500000005000021070000CE04000001050000000900000005000000050000CB070000E00400000E050000000A0000000500000005000071080000F104000019050000000B00000005000000050000140900000205000024050000000C00000005000000050000B3090000120500002F050000000D000000050000000500004F0A00002205000038050000000E00000005000000050000E70A00003105000041050000000F000000050000000500007D0B0000400500004A0500000010000000050000000500000E0C00004D050000520500000000000000060000000500008B010000EA040000A70400000001000000060000000500005002000002050000B8040000000200000006000000050000110300001A050000C8040000000300000006000000050000CF03000031050000D80400000004000000060000000500008A04000047050000E7040000000500000006000000050000410500005D050000F6040000000600000006000000050000F50500007205000004050000000700000006000000050000A60600008605000011050000000800000006000000050000530700009A0500001E050000000900000006000000050000FC070000AE0500002A050000000A00000006000000050000A3080000C005000035050000000B0000000600000005000045090000D205000040050000000C00000006000000050000E5090000E40500004A050000000D00000006000000050000810A0000F505000054050000000E00000006000000050000190B0000050600005D050000000F00000006000000050000AE0B00001506000066050000001000000006000000050000400C0000240600006D050000000000000007000000050000BC010000AB050000C404000000010000000700000005000081020000C4050000D504000000020000000700000005000043030000DD050000E504000000030000000700000005000001040000F5050000F5040000000400000007000000050000BC0400000D06000004050000000500000007000000050000730500002406000012050000000600000007000000050000270600003A06000020050000000700000007000000050000D7060000500600002D05000000080000000700000005000084070000650600003A0500000009000000070000000500002E0800007A06000046050000000A00000007000000050000D40800008D06000051050000000B0000000700000005000077090000A10600005C050000000C00000007000000050000160A0000B406000066050000000D00000007000000050000B20A0000C606000070050000000E000000070000000500004A0B0000D806000079050000000F00000007000000050000DF0B0000E906000081050000001000000007000000050000710C0000F906000089050000000000000008000000050000ED0100006A060000E1040000000100000008000000050000B202000084060000F2040000000200000008000000050000740300009E0600000205000000030000000800000005000032040000B806000012050000000400000008000000050000ED040000D006000021050000000500000008000000050000A4050000E90600002F05000000060000000800000005000058060000000700003D05000000070000000800000005000009070000170700004A050000000800000008000000050000B60700002E070000560500000009000000080000000500005F0800004407000062050000000A0000000800000005000005090000590700006D050000000B00000008000000050000A80900006E07000078050000000C00000008000000050000470A00008207000082050000000D00000008000000050000E30A0000950700008B050000000E000000080000000500007C0B0000A807000094050000000F00000008000000050000110C0000BB0700009C050000001000000008000000050000A20C0000CC070000A40500000000000000090000000500001F02000026070000FE040000000100000009000000050000E4020000420700000F050000000200000009000000050000A50300005E0700001F05000000030000000900000005000063040000780700002E0500000004000000090000000500001E050000930700003D050000000500000009000000050000D5050000AC0700004B05000000060000000900000005000089060000C5070000590500000007000000090000000500003A070000DD07000066050000000800000009000000050000E7070000F507000072050000000900000009000000050000900800000C0800007E050000000A00000009000000050000370900002308000089050000000B00000009000000050000D90900003908000094050000000C00000009000000050000790A00004E0800009E050000000D00000009000000050000150B000063080000A7050000000E00000009000000050000AD0B000077080000B0050000000F00000009000000050000420C00008B080000B8050000001000000009000000050000D40C00009E080000BF05000000000000000A00000005000050020000E20700001B05000000010000000A00000005000015030000FF0700002B05000000020000000A000000050000D60300001C0800003B05000000030000000A00000005000094040000380800004B05000000040000000A0000000500004F050000530800005905000000050000000A000000050000070600006E0800006805000000060000000A000000050000BA060000880800007505000000070000000A0000000500006B070000A20800008205000000080000000A00000005000018080000BB0800008E05000000090000000A000000050000C2080000D30800009A050000000A0000000A00000005000068090000EB080000A5050000000B0000000A0000000500000A0A000002090000AF050000000C0000000A000000050000AA0A000019090000B9050000000D0000000A000000050000460B00002F090000C2050000000E0000000A000000050000DE0B000044090000CB050000000F0000000A000000050000730C000059090000D305000000100000000A000000050000050D00006E090000DA05000000000000000B000000050000810200009B0800003805000000010000000B00000005000046030000BA0800004805000000020000000B00000005000007040000D80800005805000000030000000B000000050000C6040000F50800006705000000040000000B00000005000080050000120900007605000000050000000B000000050000380600002E0900008405000000060000000B000000050000EB060000490900009105000000070000000B0000000500009C070000640900009E05000000080000000B000000050000490800007E090000AA05000000090000000B000000050000F308000098090000B6050000000A0000000B00000005000099090000B1090000C1050000000B0000000B0000000500003B0A0000CA090000CB050000000C0000000B000000050000DB0A0000E2090000D5050000000D0000000B000000050000770B0000F9090000DE050000000E0000000B0000000500000F0C0000100A0000E6050000000F0000000B000000050000A40C0000260A0000EE05000000100000000B000000050000360D00003C0A0000F505000000000000000C000000050000B2020000530900005405000000010000000C00000005000077030000730900006505000000020000000C00000005000038040000920900007405000000030000000C000000050000F6040000B10900008305000000040000000C000000050000B1050000CF0900009205000000050000000C00000005000069060000EC090000A005000000060000000C0000000500001C070000090A0000AD05000000070000000C000000050000CD070000250A0000BA05000000080000000C0000000500007A080000410A0000C605000000090000000C000000050000230900005C0A0000D1050000000A0000000C000000050000CA090000760A0000DC050000000B0000000C0000000500006C0A0000900A0000E6050000000C0000000C0000000500000C0B0000A90A0000F0050000000D0000000C000000050000A80B0000C20A0000F9050000000E0000000C000000050000400C0000DA0A000001060000000F0000000C000000050000D50C0000F10A00000906000000100000000C000000050000670D0000080B00001006000000000000000D000000050000E3020000090A00007105000000010000000D000000050000A80300002A0A00008105000000020000000D000000050000690400004B0A00009105000000030000000D000000050000270500006B0A0000A005000000040000000D000000050000E20500008A0A0000AE05000000050000000D00000005000099060000A80A0000BC05000000060000000D0000000500004D070000C70A0000C905000000070000000D000000050000FE070000E40A0000D605000000080000000D000000050000AB080000010B0000E105000000090000000D000000050000540900001D0B0000ED050000000A0000000D000000050000FB090000390B0000F8050000000B0000000D0000000500009D0A0000540B000002060000000C0000000D0000000500003D0B00006F0B00000B060000000D0000000D000000050000D80B0000880B000014060000000E0000000D000000050000710C0000A20B00001C060000000F0000000D000000050000060D0000BA0B00002406000000100000000D000000050000980D0000D30B00002B06000000000000000E00000005000013030000BE0A00008D05000000010000000E000000050000D8030000E00A00009D05000000020000000E0000000500009A040000020B0000AD05000000030000000E00000005000058050000230B0000BC05000000040000000E00000005000013060000430B0000CA05000000050000000E000000050000CA060000630B0000D805000000060000000E0000000500007E070000830B0000E505000000070000000E0000000500002E080000A10B0000F105000000080000000E000000050000DB080000C00B0000FD05000000090000000E00000005000085090000DD0B000008060000000A0000000E0000000500002B0A0000FA0B000013060000000B0000000E000000050000CE0A0000170C00001D060000000C0000000E0000000500006D0B0000320C000026060000000D0000000E000000050000090C00004D0C00002F060000000E0000000E000000050000A20C0000680C000037060000000F0000000E000000050000370D0000820C00003F06000000100000000E000000050000C80D00009C0C00004606000000000000000F00000005000044030000700B0000AA05000000010000000F00000005000009040000940B0000BA05000000020000000F000000050000CB040000B70B0000C905000000030000000F00000005000089050000D90B0000D805000000040000000F00000005000043060000FB0B0000E605000000050000000F000000050000FB0600001C0C0000F305000000060000000F000000050000AF0700003D0C00000006000000070000000F0000000500005F0800005D0C00000D06000000080000000F0000000500000C0900007D0C00001806000000090000000F000000050000B60900009B0C000024060000000A0000000F0000000500005C0A0000BA0C00002E060000000B0000000F000000050000FF0A0000D70C000038060000000C0000000F0000000500009E0B0000F40C000041060000000D0000000F0000000500003A0C0000110D00004A060000000E0000000F000000050000D20C00002D0D000052060000000F0000000F000000050000670D0000480D00005906000000100000000F000000050000F90D0000630D00006006000000000000001000000005000074030000210C0000C60500000001000000100000000500003A040000460C0000D6050000000200000010000000050000FB0400006A0C0000E5050000000300000010000000050000B90500008E0C0000F405000000040000001000000005000074060000B10C0000020600000005000000100000000500002B070000D40C00000F060000000600000010000000050000DF070000F60C00001C06000000070000001000000005000090080000170D0000280600000008000000100000000500003D090000380D000034060000000900000010000000050000E6090000580D00003F060000000A000000100000000500008C0A0000770D000049060000000B000000100000000500002F0B0000960D000053060000000C00000010000000050000CF0B0000B50D00005C060000000D000000100000000500006A0C0000D20D000065060000000E00000010000000050000030D0000F00D00006D060000000F00000010000000050000980D00000C0E0000740600000010000000100000000500002A0E0000280E00007B060000000000000000000000060000700000004D000000BA040000000100000000000000060000360100005D000000CD040000000200000000000000060000F90100006C000000DF040000000300000000000000060000B80200007B000000F0040000000400000000000000060000740300008A000000010500000005000000000000000600002D0400009700000011050000000600000000000000060000E2040000A50000002105000000070000000000000006000093050000B10000003005000000080000000000000006000041060000BD0000003E050000000900000000000000060000EC060000C90000004C050000000A0000000000000006000093070000D300000059050000000B0000000000000006000037080000DE00000065050000000C00000000000000060000D8080000E700000071050000000D0000000000000006000075090000F00000007D050000000E000000000000000600000E0A0000F900000087050000000F00000000000000060000A40A00000001000091050000001000000000000000060000370B0000080100009B050000000000000001000000060000A200000019010000D9040000000100000001000000060000680100002B010000EB0400000002000000010000000600002B0200003C010000FD040000000300000001000000060000EA0200004C0100000E050000000400000001000000060000A60300005C0100001F0500000005000000010000000600005F0400006B0100002F05000000060000000100000006000014050000790100003F050000000700000001000000060000C5050000870100004E05000000080000000100000006000073060000940100005C0500000009000000010000000600001E070000A101000069050000000A00000001000000060000C5070000AD01000076050000000B0000000100000006000069080000B901000083050000000C000000010000000600000A090000C40100008F050000000D00000001000000060000A7090000CE0100009A050000000E00000001000000060000400A0000D8010000A4050000000F00000001000000060000D70A0000E1010000AE050000001000000001000000060000690B0000E9010000B8050000000000000002000000060000D4000000E4010000F70400000001000000020000000600009A010000F70100000A0500000002000000020000000600005D020000090200001C0500000003000000020000000600001C0300001B0200002D050000000400000002000000060000D80300002C0200003D050000000500000002000000060000910400003C0200004D050000000600000002000000060000460500004C0200005D050000000700000002000000060000F70500005B0200006B050000000800000002000000060000A50600006A0200007A050000000900000002000000060000500700007802000087050000000A00000002000000060000F80700008502000094050000000B000000020000000600009B08000092020000A0050000000C000000020000000600003C0900009E020000AC050000000D00000002000000060000D9090000AA020000B7050000000E00000002000000060000730A0000B5020000C2050000000F00000002000000060000090B0000BF020000CB0500000010000000020000000600009C0B0000C9020000D505000000000000000300000006000006010000AE02000016050000000100000003000000060000CC010000C2020000280500000002000000030000000600008F020000D50200003A0500000003000000030000000600004E030000E80200004B0500000004000000030000000600000A040000FA0200005B050000000500000003000000060000C30400000C0300006B050000000600000003000000060000780500001D0300007B050000000700000003000000060000290600002E03000089050000000800000003000000060000D70600003E03000097050000000900000003000000060000820700004D030000A5050000000A000000030000000600002A0800005C030000B1050000000B00000003000000060000CD0800006A030000BE050000000C000000030000000600006E09000077030000C9050000000D000000030000000600000B0A000084030000D4050000000E00000003000000060000A50A000091030000DF050000000F000000030000000600003B0B00009C030000E8050000001000000003000000060000CE0B0000A7030000F1050000000000000004000000060000380100007503000034050000000100000004000000060000FE0100008B03000046050000000200000004000000060000C10200009F0300005805000000030000000400000006000080030000B4030000690500000004000000040000000600003C040000C703000079050000000500000004000000060000F4040000DA03000089050000000600000004000000060000A9050000ED030000980500000007000000040000000600005B060000FE030000A70500000008000000040000000600000907000010040000B5050000000900000004000000060000B407000020040000C2050000000A000000040000000600005B08000030040000CF050000000B00000004000000060000FF08000040040000DB050000000C00000004000000060000A00900004F040000E6050000000D000000040000000600003D0A00005D040000F1050000000E00000004000000060000D60A00006A040000FB050000000F000000040000000600006D0B00007804000005060000001000000004000000060000FF0B0000840400000E060000000000000005000000060000690100003B04000053050000000100000005000000060000300200005204000065050000000200000005000000060000F20200006804000076050000000300000005000000060000B20300007D040000870500000004000000050000000600006E040000920400009705000000050000000500000006000026050000A7040000A7050000000600000005000000060000DB050000BA040000B60500000007000000050000000600008D060000CD040000C40500000008000000050000000600003B070000E0040000D2050000000900000005000000060000E6070000F2040000DF050000000A000000050000000600008D08000003050000EC050000000B000000050000000600003109000014050000F8050000000C00000005000000060000D20900002405000003060000000D000000050000000600006F0A0000340500000E060000000E00000005000000060000080B00004305000018060000000F000000050000000600009E0B00005105000022060000001000000005000000060000310C00005F0500002B0600000000000000060000000600009B010000FF04000071050000000100000006000000060000610200001705000083050000000200000006000000060000240300002F05000094050000000300000006000000060000E303000045050000A50500000004000000060000000600009F0400005C050000B50500000005000000060000000600005805000071050000C50500000006000000060000000600000D06000086050000D4050000000700000006000000060000BE0600009B050000E20500000008000000060000000600006D070000AF050000F005000000090000000600000006000017080000C2050000FD050000000A00000006000000060000BF080000D405000009060000000B0000000600000006000063090000E605000015060000000C00000006000000060000030A0000F805000020060000000D00000006000000060000A00A0000090600002B060000000E000000060000000600003A0B00001906000035060000000F00000006000000060000D00B0000290600003E060000001000000006000000060000630C00003806000047060000000000000007000000060000CD010000C20500008F05000000010000000700000006000093020000DB050000A105000000020000000700000006000056030000F4050000B2050000000300000007000000060000150400000C060000C3050000000400000007000000060000D104000023060000D3050000000500000007000000060000890500003A060000E20500000006000000070000000600003E06000051060000F1050000000700000007000000060000F006000066060000FF0500000008000000070000000600009E0700007B0600000D06000000090000000700000006000049080000900600001A060000000A00000007000000060000F0080000A406000026060000000B0000000700000006000094090000B706000032060000000C00000007000000060000350A0000CA0600003D060000000D00000007000000060000D20A0000DC06000048060000000E000000070000000600006C0B0000EE06000052060000000F00000007000000060000020C0000FF0600005B060000001000000007000000060000950C00000F07000064060000000000000008000000060000FE01000082060000AD050000000100000008000000060000C40200009D060000BF05000000020000000800000006000087030000B7060000D005000000030000000800000006000046040000D0060000E005000000040000000800000006000002050000E9060000F0050000000500000008000000060000BB050000020700000006000000060000000800000006000070060000190700000E06000000070000000800000006000022070000300700001C060000000800000008000000060000D0070000470700002A0600000009000000080000000600007B0800005C07000037060000000A00000008000000060000220900007207000043060000000B00000008000000060000C6090000860700004F060000000C00000008000000060000660A00009A0700005A060000000D00000008000000060000030B0000AE07000064060000000E000000080000000600009D0B0000C10700006E060000000F00000008000000060000330C0000D307000077060000001000000008000000060000C60C0000E5070000800600000000000000090000000600002F02000041070000CB050000000100000009000000060000F60200005D070000DC050000000200000009000000060000B803000079070000ED0500000003000000090000000600007804000093070000FE05000000040000000900000006000034050000AE0700000E060000000500000009000000060000EC050000C70700001D060000000600000009000000060000A1060000E00700002C06000000070000000900000006000053070000F80700003A060000000800000009000000060000010800001008000047060000000900000009000000060000AC0800002708000054060000000A00000009000000060000530900003E08000060060000000B00000009000000060000F7090000540800006B060000000C00000009000000060000980A00006908000076060000000D00000009000000060000350B00007E08000081060000000E00000009000000060000CF0B0000920800008A060000000F00000009000000060000650C0000A608000094060000001000000009000000060000F80C0000B90800009C06000000000000000A00000006000061020000FF070000E905000000010000000A000000060000270300001C080000FA05000000020000000A000000060000EA030000390800000B06000000030000000A000000060000A9040000550800001B06000000040000000A00000006000065050000700800002B06000000050000000A0000000600001D0600008B0800003A06000000060000000A000000060000D3060000A50800004906000000070000000A00000006000084070000BF0800005706000000080000000A00000006000032080000D80800006406000000090000000A000000060000DD080000F008000071060000000A0000000A00000006000085090000080900007D060000000B0000000A000000060000290A00001F09000088060000000C0000000A000000060000C90A00003609000093060000000D0000000A000000060000660B00004C0900009D060000000E0000000A000000060000000C000062090000A7060000000F0000000A000000060000960C000077090000B006000000100000000A000000060000290D00008B090000B806000000000000000B00000006000092020000BA0800000606000000010000000B00000006000058030000D90800001806000000020000000B0000000600001B040000F70800002906000000030000000B000000060000DA040000140900003906000000040000000B00000006000096050000310900004806000000050000000B0000000600004F0600004D0900005706000000060000000B00000006000004070000690900006606000000070000000B000000060000B5070000840900007406000000080000000B000000060000640800009E0900008106000000090000000B0000000600000E090000B80900008D060000000A0000000B000000060000B6090000D109000099060000000B0000000B0000000600005A0A0000E9090000A5060000000C0000000B000000060000FA0A0000010A0000AF060000000D0000000B000000060000970B0000190A0000B9060000000E0000000B000000060000310C0000300A0000C3060000000F0000000B000000060000C70C0000460A0000CC06000000100000000B0000000600005A0D00005B0A0000D406000000000000000C000000060000C3020000740900002406000000010000000C00000006000089030000940900003506000000020000000C0000000600004C040000B30900004606000000030000000C0000000600000B050000D20900005606000000040000000C000000060000C7050000F00900006606000000050000000C000000060000800600000D0A00007406000000060000000C000000060000350700002A0A00008306000000070000000C000000060000E6070000470A00009006000000080000000C00000006000095080000620A00009D06000000090000000C0000000600003F0900007D0A0000AA060000000A0000000C000000060000E7090000980A0000B6060000000B0000000C0000000600008B0A0000B20A0000C1060000000C0000000C0000000600002B0B0000CB0A0000CC060000000D0000000C000000060000C90B0000E40A0000D6060000000E0000000C000000060000620C0000FC0A0000DF060000000F0000000C000000060000F80C0000130B0000E806000000100000000C0000000600008B0D00002A0B0000F006000000000000000D000000060000F40200002C0A00004106000000010000000D000000060000BA0300004D0A00005206000000020000000D0000000600007D0400006E0A00006306000000030000000D0000000600003C0500008E0A00007306000000040000000D000000060000F8050000AD0A00008306000000050000000D000000060000B1060000CC0A00009106000000060000000D00000006000066070000EA0A0000A006000000070000000D00000006000017080000080B0000AD06000000080000000D000000060000C6080000250B0000BA06000000090000000D00000006000070090000410B0000C6060000000A0000000D000000060000180A00005D0B0000D2060000000B0000000D000000060000BC0A0000780B0000DD060000000C0000000D0000000600005C0B0000930B0000E8060000000D0000000D000000060000FA0B0000AD0B0000F2060000000E0000000D000000060000930C0000C60B0000FB060000000F0000000D000000060000290D0000DF0B00000407000000100000000D000000060000BC0D0000F70B00000C07000000000000000E00000006000025030000E30A00005F06000000010000000E000000060000EB030000050B00007006000000020000000E000000060000AE040000270B00008006000000030000000E0000000600006D050000480B00009006000000040000000E00000006000029060000690B00009F06000000050000000E000000060000E2060000890B0000AE06000000060000000E00000006000097070000A90B0000BC06000000070000000E00000006000048080000C70B0000CA06000000080000000E000000060000F7080000E60B0000D706000000090000000E000000060000A1090000030C0000E3060000000A0000000E000000060000490A0000200C0000EE060000000B0000000E000000060000ED0A00003D0C0000F9060000000C0000000E0000000600008D0B0000590C000004070000000D0000000E0000000600002A0C0000740C00000E070000000E0000000E000000060000C40C00008F0C000017070000000F0000000E0000000600005A0D0000A90C00001F07000000100000000E000000060000ED0D0000C30C00002707000000000000000F00000006000055030000970B00007C06000000010000000F0000000600001C040000BB0B00008D06000000020000000F000000060000DE040000DE0B00009D06000000030000000F0000000600009E050000010C0000AD06000000040000000F0000000600005A060000230C0000BC06000000050000000F00000006000012070000440C0000CB06000000060000000F000000060000C7070000650C0000D906000000070000000F00000006000079080000850C0000E606000000080000000F00000006000027090000A50C0000F306000000090000000F000000060000D2090000C40C0000FF060000000A0000000F0000000600007A0A0000E20C00000B070000000B0000000F0000000600001E0B0000000D000015070000000C0000000F000000060000BE0B00001D0D000020070000000D0000000F0000000600005B0C00003A0D000029070000000E0000000F000000060000F50C0000560D000033070000000F0000000F0000000600008B0D0000710D00003B07000000100000000F0000000600001E0E00008C0D000043070000000000000010000000060000860300004A0C0000990600000001000000100000000600004C040000700C0000AA0600000002000000100000000600000F050000940C0000BA060000000300000010000000060000CE050000B80C0000CA0600000004000000100000000600008A060000DB0C0000D906000000050000001000000006000043070000FE0C0000E7060000000600000010000000060000F8070000200D0000F5060000000700000010000000060000AA080000410D00000307000000080000001000000006000058090000620D00000F070000000900000010000000060000030A0000830D00001B070000000A00000010000000060000AA0A0000A20D000027070000000B000000100000000600004E0B0000C10D000031070000000C00000010000000060000EF0B0000E00D00003C070000000D000000100000000600008C0C0000FE0D000045070000000E00000010000000060000260D00001B0E00004E070000000F00000010000000060000BC0D0000380E0000570700000010000000100000000600004F0E0000540E00005E0700000000000000000000000700007F000000540000007B05000000010000000000000007000046010000640000008F0500000002000000000000000700000A02000074000000A2050000000300000000000000070000CA02000082000000B50500000004000000000000000700008703000090000000C6050000000500000000000000070000410400009E000000D7050000000600000000000000070000F7040000AB000000E8050000000700000000000000070000AA050000B7000000F805000000080000000000000007000059060000C30000000706000000090000000000000007000005070000CE00000016060000000A00000000000000070000AD070000D900000024060000000B0000000000000007000052080000E300000032060000000C00000000000000070000F4080000EC0000003F060000000D0000000000000007000092090000F50000004B060000000E000000000000000700002D0A0000FD00000056060000000F00000000000000070000C40A00000501000062060000001000000000000000070000580B00000C0100006C060000000000000001000000070000B1000000230100009B0500000001000000010000000700007801000034010000AF0500000002000000010000000700003C02000045010000C2050000000300000001000000070000FD02000055010000D4050000000400000001000000070000BA03000065010000E60500000005000000010000000700007304000073010000F7050000000600000001000000070000290500008201000007060000000700000001000000070000DC0500008F010000170600000008000000010000000700008B0600009D0100002606000000090000000100000007000037070000A901000035060000000A00000001000000070000E0070000B501000043060000000B0000000100000007000085080000C001000050060000000C0000000100000007000026090000CB0100005D060000000D00000001000000070000C5090000D501000069060000000E000000010000000700005F0A0000DF01000075060000000F00000001000000070000F70A0000E8010000800600000010000000010000000700008B0B0000F00100008A060000000000000002000000070000E3000000F0010000BB050000000100000002000000070000AA01000003020000CE0500000002000000020000000700006E02000015020000E10500000003000000020000000700002F03000026020000F3050000000400000002000000070000EC0300003702000005060000000500000002000000070000A504000047020000160600000006000000020000000700005C05000057020000260600000007000000020000000700000E0600006602000036060000000800000002000000070000BE06000074020000450600000009000000020000000700006A0700008202000053060000000A00000002000000070000120800008F02000061060000000B00000002000000070000B70800009C0200006F060000000C0000000200000007000059090000A80200007B060000000D00000002000000070000F7090000B402000087060000000E00000002000000070000920A0000BE02000093060000000F00000002000000070000290B0000C90200009E060000001000000002000000070000BD0B0000D2020000A806000000000000000300000007000015010000BB020000DA050000000100000003000000070000DC010000CF020000EE050000000200000003000000070000A0020000E30200000006000000030000000300000007000061030000F5020000120600000004000000030000000700001E0400000803000024060000000500000003000000070000D704000019030000350600000006000000030000000700008E0500002A03000045060000000700000003000000070000400600003A03000055060000000800000003000000070000F00600004A030000640600000009000000030000000700009C0700005903000072060000000A00000003000000070000440800006803000080060000000B00000003000000070000E9080000760300008D060000000C000000030000000700008B090000830300009A060000000D00000003000000070000290A000090030000A5060000000E00000003000000070000C40A00009C030000B1060000000F000000030000000700005B0B0000A8030000BC060000001000000003000000070000EF0B0000B3030000C60600000000000000040000000700004701000085030000FA0500000001000000040000000700000E0200009A0300000D060000000200000004000000070000D2020000AF0300001F06000000030000000400000007000093030000C30300003106000000040000000400000007000050040000D70300004306000000050000000400000007000009050000E903000053060000000600000004000000070000C0050000FC03000064060000000700000004000000070000720600000D04000073060000000800000004000000070000220700001F04000082060000000900000004000000070000CE0700002F04000090060000000A00000004000000070000760800003F0400009E060000000B000000040000000700001B0900004E040000AB060000000C00000004000000070000BD0900005D040000B8060000000D000000040000000700005B0A00006B040000C3060000000E00000004000000070000F60A000079040000CF060000000F000000040000000700008D0B000086040000D9060000001000000004000000070000210C000092040000E3060000000000000005000000070000790100004D0400001906000000010000000500000007000040020000640400002C060000000200000005000000070000040300007A0400003E060000000300000005000000070000C40300008F0400005006000000040000000500000007000082040000A4040000620600000005000000050000000700003B050000B804000072060000000600000005000000070000F1050000CC04000082060000000700000005000000070000A4060000DF0400009206000000080000000500000007000054070000F1040000A00600000009000000050000000700000008000003050000AF060000000A00000005000000070000A808000014050000BC060000000B000000050000000700004D09000025050000C9060000000C00000005000000070000EF09000035050000D6060000000D000000050000000700008D0A000044050000E1060000000E00000005000000070000280B000053050000EC060000000F00000005000000070000BF0B000061050000F7060000001000000005000000070000530C00006F05000001070000000000000006000000070000AA0100001305000038060000000100000006000000070000720200002B0500004B06000000020000000600000007000036030000420500005D060000000300000006000000070000F6030000590500006F060000000400000006000000070000B30400006F050000800600000005000000060000000700006D0500008505000091060000000600000006000000070000230600009A050000A1060000000700000006000000070000D6060000AE050000B006000000080000000600000007000085070000C2050000BF06000000090000000600000007000031080000D5050000CD060000000A00000006000000070000DA080000E8050000DA060000000B000000060000000700007F090000FA050000E7060000000C00000006000000070000210A00000B060000F3060000000D00000006000000070000BF0A00001C060000FF060000000E000000060000000700005A0B00002C0600000A070000000F00000006000000070000F10B00003C06000015070000001000000006000000070000850C00004B0600001E070000000000000007000000070000DC010000D805000057060000000100000007000000070000A3020000F10500006A060000000200000007000000070000670300000A0600007C06000000030000000700000007000028040000220600008E060000000400000007000000070000E5040000390600009F0600000005000000070000000700009F05000050060000AF0600000006000000070000000700005506000066060000BF060000000700000007000000070000080700007C060000CE060000000800000007000000070000B707000091060000DD06000000090000000700000007000063080000A6060000EB060000000A000000070000000700000C090000B9060000F8060000000B00000007000000070000B1090000CD06000005070000000C00000007000000070000520A0000DF06000011070000000D00000007000000070000F10A0000F20600001D070000000E000000070000000700008C0B00000307000028070000000F00000007000000070000230C00001407000032070000001000000007000000070000B70C0000240700003C0700000000000000080000000700000E0200009A06000076060000000100000008000000070000D5020000B50600008906000000020000000800000007000099030000CF0600009B06000000030000000800000007000059040000E8060000AC0600000004000000080000000700001705000001070000BD060000000500000008000000070000D005000019070000CE0600000006000000080000000700008706000031070000DD0600000007000000080000000700003907000048070000ED060000000800000008000000070000E90700005E070000FB060000000900000008000000070000950800007407000009070000000A000000080000000700003D0900008A07000016070000000B00000008000000070000E20900009E07000023070000000C00000008000000070000840A0000B20700002F070000000D00000008000000070000220B0000C60700003A070000000E00000008000000070000BD0B0000D907000045070000000F00000008000000070000550C0000EB0700004F070000001000000008000000070000E90C0000FC070000590700000000000000090000000700003F0200005C070000950600000001000000090000000700000603000077070000A7060000000200000009000000070000CA03000093070000BA0600000003000000090000000700008B040000AD070000CB06000000040000000900000007000048050000C8070000DC06000000050000000900000007000002060000E1070000EC060000000600000009000000070000B8060000FA070000FC0600000007000000090000000700006B070000120800000B0700000008000000090000000700001A0800002A08000019070000000900000009000000070000C60800004108000027070000000A000000090000000700006F0900005808000034070000000B00000009000000070000140A00006E08000041070000000C00000009000000070000B60A0000830800004D070000000D00000009000000070000540B00009808000058070000000E00000009000000070000EF0B0000AC08000063070000000F00000009000000070000860C0000C00800006D0700000010000000090000000700001A0D0000D30800007607000000000000000A000000070000700200001B080000B306000000010000000A0000000700003803000038080000C606000000020000000A000000070000FC03000055080000D806000000030000000A000000070000BC04000071080000E906000000040000000A000000070000790500008C080000FA06000000050000000A00000007000033060000A70800000A07000000060000000A000000070000E9060000C10800001A07000000070000000A0000000700009C070000DB0800002907000000080000000A0000000700004C080000F40800003707000000090000000A000000070000F80800000D09000045070000000A0000000A000000070000A00900002509000052070000000B0000000A000000070000450A00003C0900005E070000000C0000000A000000070000E70A0000530900006A070000000D0000000A000000070000860B00006909000075070000000E0000000A000000070000200C00007E09000080070000000F0000000A000000070000B80C0000930900008A07000000100000000A0000000700004C0D0000A70900009307000000000000000B000000070000A2020000D8080000D206000000010000000B00000007000069030000F7080000E506000000020000000B0000000700002D04000015090000F606000000030000000B000000070000EE040000320900000807000000040000000B000000070000AB0500004F0900001807000000050000000B000000070000640600006B0900002807000000060000000B0000000700001B070000870900003807000000070000000B000000070000CE070000A20900004707000000080000000B0000000700007D080000BC0900005507000000090000000B00000007000029090000D609000062070000000A0000000B000000070000D2090000EF0900006F070000000B0000000B000000070000770A0000080A00007C070000000C0000000B000000070000190B0000200A000087070000000D0000000B000000070000B70B0000380A000092070000000E0000000B000000070000520C00004E0A00009D070000000F0000000B000000070000E90C0000650A0000A707000000100000000B0000000700007D0D00007A0A0000B007000000000000000C000000070000D302000094090000F106000000010000000C0000000700009A030000B40900000307000000020000000C0000000700005E040000D40900001507000000030000000C0000000700001F050000F20900002607000000040000000C000000070000DC050000100A00003607000000050000000C000000070000960600002E0A00004607000000060000000C0000000700004C0700004B0A00005607000000070000000C000000070000FF070000670A00006407000000080000000C000000070000AE080000830A00007207000000090000000C0000000700005A0900009E0A000080070000000A0000000C000000070000030A0000B90A00008D070000000B0000000C000000070000A80A0000D30A000099070000000C0000000C0000000700004A0B0000EC0A0000A5070000000D0000000C000000070000E80B0000050B0000B0070000000E0000000C000000070000830C00001D0B0000BA070000000F0000000C0000000700001B0D0000350B0000C407000000100000000C000000070000AF0D00004C0B0000CD07000000000000000D000000070000040300004F0A00000F07000000010000000D000000070000CB030000700A00002107000000020000000D0000000700008F040000900A00003307000000030000000D00000007000050050000B00A00004407000000040000000D0000000700000D060000D00A00005407000000050000000D000000070000C7060000EF0A00006407000000060000000D0000000700007D0700000D0B00007307000000070000000D000000070000300800002B0B00008207000000080000000D000000070000DF080000480B00009007000000090000000D0000000700008C090000640B00009D070000000A0000000D000000070000340A0000800B0000AA070000000B0000000D000000070000D90A00009B0B0000B6070000000C0000000D0000000700007B0B0000B60B0000C2070000000D0000000D000000070000190C0000D00B0000CD070000000E0000000D000000070000B40C0000EA0B0000D7070000000F0000000D0000000700004C0D0000030C0000E107000000100000000D000000070000E00D00001B0C0000EA07000000000000000E00000007000035030000070B00002D07000000010000000E000000070000FC0300002A0B00003F07000000020000000E000000070000C00400004C0B00005107000000030000000E000000070000810500006D0B00006207000000040000000E0000000700003E0600008E0B00007207000000050000000E000000070000F8060000AE0B00008207000000060000000E000000070000AE070000CD0B00009107000000070000000E00000007000061080000EC0B0000A007000000080000000E000000070000110900000B0C0000AD07000000090000000E000000070000BD090000290C0000BB070000000A0000000E000000070000650A0000460C0000C7070000000B0000000E0000000700000A0B0000630C0000D3070000000C0000000E000000070000AC0B00007F0C0000DF070000000D0000000E0000000700004B0C00009A0C0000EA070000000E0000000E000000070000E50C0000B50C0000F4070000000F0000000E0000000700007D0D0000CF0C0000FD07000000100000000E000000070000110E0000E90C00000608000000000000000F00000007000065030000BE0B00004B07000000010000000F0000000700002D040000E20B00005E07000000020000000F000000070000F1040000050C00006F07000000030000000F000000070000B2050000280C00008007000000040000000F0000000700006F0600004A0C00009007000000050000000F000000070000290700006B0C0000A007000000060000000F000000070000DF0700008C0C0000AF07000000070000000F00000007000092080000AD0C0000BD07000000080000000F00000007000041090000CC0C0000CB07000000090000000F000000070000EE090000EB0C0000D8070000000A0000000F000000070000960A00000A0D0000E4070000000B0000000F0000000700003B0B0000280D0000F0070000000C0000000F000000070000DD0B0000450D0000FC070000000D0000000F0000000700007C0C0000620D000006080000000E0000000F000000070000170D00007E0D000011080000000F0000000F000000070000AE0D00009A0D00001A08000000100000000F000000070000420E0000B50D00002308000000000000001000000007000096030000730C00006A0700000001000000100000000700005E040000980C00007C07000000020000001000000007000022050000BD0C00008D070000000300000010000000070000E2050000E10C00009E070000000400000010000000070000A0060000040D0000AE07000000050000001000000007000059070000270D0000BD07000000060000001000000007000010080000490D0000CC070000000700000010000000070000C30800006B0D0000DA070000000800000010000000070000720900008C0D0000E80700000009000000100000000700001E0A0000AC0D0000F5070000000A00000010000000070000C70A0000CC0D000002080000000B000000100000000700006C0B0000EC0D00000D080000000C000000100000000700000E0C00000A0E000019080000000D00000010000000070000AC0C0000280E000023080000000E00000010000000070000470D0000460E00002D080000000F00000010000000070000DF0D0000630E000037080000001000000010000000070000730E00007F0E00003F0800000000000000000000000800008C0000005B0000003A060000000100000000000000080000550100006B0000004F0600000002000000000000000800001A0200007A00000063060000000300000000000000080000DB020000880000007606000000040000000000000008000099030000960000008906000000050000000000000008000054040000A40000009B0600000006000000000000000800000B050000B0000000AD060000000700000000000000080000BF050000BD000000BE06000000080000000000000008000070060000C8000000CE0600000009000000000000000800001D070000D3000000DE060000000A00000000000000080000C6070000DE000000ED060000000B000000000000000800006D080000E7000000FB060000000C000000000000000800000F090000F100000009070000000D00000000000000080000AF090000F900000016070000000E000000000000000800004A0A00000101000023070000000F00000000000000080000E30A0000090100002F070000001000000000000000080000780B00000F0100003B070000000000000001000000080000BF0000002C0100005B060000000100000001000000080000870100003D0100006F0600000002000000010000000800004C0200004D010000830600000003000000010000000800000E0300005D01000097060000000400000001000000080000CC0300006D010000A9060000000500000001000000080000870400007B010000BB0600000006000000010000000800003E05000089010000CD060000000700000001000000080000F205000097010000DE060000000800000001000000080000A2060000A4010000EE0600000009000000010000000800004F070000B0010000FD060000000A00000001000000080000F9070000BC0100000C070000000B000000010000000800009F080000C70100001B070000000C0000000100000008000042090000D201000029070000000D00000001000000080000E1090000DC01000036070000000E000000010000000800007D0A0000E501000042070000000F00000001000000080000160B0000EE0100004E070000001000000001000000080000AB0B0000F60100005A070000000000000002000000080000F1000000FB0100007B060000000100000002000000080000B90100000D020000900600000002000000020000000800007E0200001F020000A40600000003000000020000000800004003000030020000B7060000000400000002000000080000FE03000041020000C9060000000500000002000000080000B904000051020000DB0600000006000000020000000800007005000061020000ED0600000007000000020000000800002406000070020000FD060000000800000002000000080000D50600007E0200000E070000000900000002000000080000820700008B0200001D070000000A000000020000000800002B080000990200002C070000000B00000002000000080000D1080000A50200003A070000000C0000000200000008000074090000B102000048070000000D00000002000000080000140A0000BC02000055070000000E00000002000000080000B00A0000C702000061070000000F00000002000000080000480B0000D10200006D070000001000000002000000080000DD0B0000DB0200007807000000000000000300000008000023010000C80200009C060000000100000003000000080000EB010000DC020000B0060000000200000003000000080000B0020000EF020000C40600000003000000030000000800007203000002030000D70600000004000000030000000800003004000014030000E9060000000500000003000000080000EB04000025030000FB060000000600000003000000080000A2050000360300000D07000000070000000300000008000056060000460300001D07000000080000000300000008000007070000560300002D070000000900000003000000080000B4070000650300003D070000000A000000030000000800005E080000730300004B070000000B0000000300000008000004090000810300005A070000000C00000003000000080000A70900008F03000067070000000D00000003000000080000460A00009B03000074070000000E00000003000000080000E20A0000A703000080070000000F000000030000000800007A0B0000B30300008C0700000010000000030000000800000F0C0000BE030000970700000000000000040000000800005501000094030000BC0600000001000000040000000800001D020000A9030000D0060000000200000004000000080000E2020000BE030000E4060000000300000004000000080000A4030000D2030000F706000000040000000400000008000062040000E5030000090700000005000000040000000800001D050000F80300001B070000000600000004000000080000D50500000A0400002C070000000700000004000000080000880600001C0400003D070000000800000004000000080000390700002D0400004D070000000900000004000000080000E60700003D0400005C070000000A00000004000000080000900800004D0400006B070000000B00000004000000080000360900005C04000079070000000C00000004000000080000D90900006B04000086070000000D00000004000000080000780A00007904000093070000000E00000004000000080000140B0000860400009F070000000F00000004000000080000AD0B000093040000AB070000001000000004000000080000420C00009F040000B6070000000000000005000000080000870100005E040000DC0600000001000000050000000800004F02000074040000F0060000000200000005000000080000140300008A04000004070000000300000005000000080000D6030000A00400001707000000040000000500000008000094040000B4040000290700000005000000050000000800004F050000C80400003B07000000060000000500000008000007060000DC0400004C070000000700000005000000080000BB060000EF0400005C0700000008000000050000000800006B070000010500006C07000000090000000500000008000018080000130500007B070000000A00000005000000080000C2080000240500008A070000000B00000005000000080000680900003505000098070000000C000000050000000800000B0A000045050000A5070000000D00000005000000080000AA0A000054050000B2070000000E00000005000000080000460B000063050000BE070000000F00000005000000080000DF0B000071050000CA070000001000000005000000080000740C00007F050000D4070000000000000006000000080000B901000026050000FC060000000100000006000000080000810200003E05000010070000000200000006000000080000460300005505000024070000000300000006000000080000080400006C05000037070000000400000006000000080000C6040000820500004907000000050000000600000008000081050000970500005A07000000060000000600000008000038060000AC0500006B070000000700000006000000080000EC060000C10500007C0700000008000000060000000800009D070000D40500008B0700000009000000060000000800004A080000E70500009A070000000A00000006000000080000F4080000FA050000A9070000000B000000060000000800009A0900000C060000B7070000000C000000060000000800003D0A00001D060000C4070000000D00000006000000080000DC0A00002E060000D1070000000E00000006000000080000780B00003E060000DD070000000F00000006000000080000110C00004E060000E8070000001000000006000000080000A60C00005D060000F3070000000000000007000000080000EA010000ED0500001C070000000100000007000000080000B30200000606000030070000000200000007000000080000780300001F060000440700000003000000070000000800003A0400003706000056070000000400000007000000080000F80400004E06000068070000000500000007000000080000B3050000650600007A0700000006000000070000000800006A0600007B0600008B0700000007000000070000000800001E070000910600009B070000000800000007000000080000CF070000A6060000AA0700000009000000070000000800007C080000BA060000B9070000000A0000000700000008000026090000CE060000C8070000000B00000007000000080000CC090000E1060000D6070000000C000000070000000800006F0A0000F4060000E3070000000D000000070000000800000E0B000006070000EF070000000E00000007000000080000AA0B000018070000FB070000000F00000007000000080000430C00002807000007080000001000000007000000080000D80C000039070000110800000000000000080000000800001C020000B10600003C070000000100000008000000080000E4020000CC06000050070000000200000008000000080000AA030000E6060000630700000003000000080000000800006B040000FF060000760700000004000000080000000800002A0500001807000088070000000500000008000000080000E505000030070000990700000006000000080000000800009C06000048070000AA070000000700000008000000080000500700005F070000BA0700000008000000080000000800000108000075070000CA070000000900000008000000080000AE0800008B070000D8070000000A0000000800000008000058090000A0070000E7070000000B00000008000000080000FE090000B5070000F4070000000C00000008000000080000A10A0000C907000001080000000D00000008000000080000400B0000DC0700000E080000000E00000008000000080000DC0B0000EF0700001A080000000F00000008000000080000750C000002080000250800000010000000080000000800000A0D000013080000300800000000000000090000000800004D020000750700005C070000000100000009000000080000160300009007000070070000000200000009000000080000DB030000AC070000830700000003000000090000000800009D040000C7070000950700000004000000090000000800005B050000E1070000A707000000050000000900000008000016060000FA070000B8070000000600000009000000080000CE06000013080000C9070000000700000009000000080000820700002B080000D90700000008000000090000000800003208000043080000E8070000000900000009000000080000E00800005A080000F7070000000A00000009000000080000890900007108000005080000000B00000009000000080000300A00008708000013080000000C00000009000000080000D30A00009C08000020080000000D00000009000000080000720B0000B10800002C080000000E000000090000000800000E0C0000C508000038080000000F00000009000000080000A70C0000D9080000430800000010000000090000000800003C0D0000EC0800004E08000000000000000A0000000800007F020000360800007C07000000010000000A00000008000047030000530800008F07000000020000000A0000000800000D04000070080000A207000000030000000A000000080000CE0400008C080000B507000000040000000A0000000800008D050000A7080000C607000000050000000A00000008000048060000C2080000D807000000060000000A000000080000FF060000DD080000E807000000070000000A000000080000B3070000F6080000F807000000080000000A000000080000640800000F0900000708000000090000000A000000080000110900002809000016080000000A0000000A000000080000BB0900004009000024080000000B0000000A000000080000610A00005709000032080000000C0000000A000000080000040B00006E0900003E080000000D0000000A000000080000A40B0000840900004B080000000E0000000A000000080000400C00009A09000056080000000F0000000A000000080000D80C0000AF0900006108000000100000000A0000000800006E0D0000C30900006C08000000000000000B000000080000B0020000F60800009B07000000010000000B0000000800007903000014090000AF07000000020000000B0000000800003E04000032090000C207000000030000000B0000000800000005000050090000D407000000040000000B000000080000BE0500006D090000E607000000050000000B0000000800007906000089090000F707000000060000000B00000008000031070000A40900000708000000070000000B000000080000E5070000BF0900001708000000080000000B00000008000095080000DA0900002608000000090000000B00000008000043090000F409000035080000000A0000000B000000080000EC0900000D0A000043080000000B0000000B000000080000930A0000260A000050080000000C0000000B000000080000360B00003E0A00005D080000000D0000000B000000080000D50B0000550A000069080000000E0000000B000000080000710C00006C0A000074080000000F0000000B0000000800000A0D0000830A00007F08000000100000000B0000000800009F0D0000980A00008A08000000000000000C000000080000E1020000B4090000BB07000000010000000C000000080000AA030000D3090000CE07000000020000000C0000000800006F040000F3090000E107000000030000000C00000008000031050000120A0000F307000000040000000C000000080000F0050000300A00000508000000050000000C000000080000AA0600004D0A00001608000000060000000C000000080000620700006A0A00002608000000070000000C00000008000016080000870A00003608000000080000000C000000080000C7080000A30A00004508000000090000000C00000008000074090000BE0A000053080000000A0000000C0000000800001E0A0000D90A000061080000000B0000000C000000080000C40A0000F30A00006E080000000C0000000C000000080000670B00000C0B00007B080000000D0000000C000000080000070C0000250B000087080000000E0000000C000000080000A30C00003D0B000092080000000F0000000C0000000800003C0D0000550B00009D08000000100000000C000000080000D10D00006C0B0000A708000000000000000D00000008000013030000700A0000DA07000000010000000D000000080000DB030000910A0000ED07000000020000000D000000080000A0040000B20A00000008000000030000000D00000008000062050000D20A00001208000000040000000D00000008000021060000F10A00002408000000050000000D000000080000DC060000100B00003408000000060000000D000000080000930700002F0B00004508000000070000000D000000080000470800004D0B00005408000000080000000D000000080000F80800006A0B00006308000000090000000D000000080000A5090000860B000072080000000A0000000D0000000800004F0A0000A20B00007F080000000B0000000D000000080000F60A0000BE0B00008D080000000C0000000D000000080000990B0000D90B000099080000000D0000000D000000080000380C0000F30B0000A5080000000E0000000D000000080000D40C00000C0C0000B0080000000F0000000D0000000800006D0D0000250C0000BB08000000100000000D000000080000020E00003E0C0000C508000000000000000E000000080000440300002A0B0000F907000000010000000E0000000800000C0400004D0B00000D08000000020000000E000000080000D20400006F0B00001F08000000030000000E00000008000093050000910B00003108000000040000000E00000008000052060000B10B00004208000000050000000E0000000800000D070000D20B00005308000000060000000E000000080000C4070000F10B00006308000000070000000E00000008000079080000110C00007308000000080000000E000000080000290900002F0C00008208000000090000000E000000080000D70900004D0C000090080000000A0000000E000000080000800A00006A0C00009E080000000B0000000E000000080000270B0000870C0000AB080000000C0000000E000000080000CA0B0000A30C0000B7080000000D0000000E000000080000690C0000BF0C0000C3080000000E0000000E000000080000060D0000DA0C0000CE080000000F0000000E0000000800009E0D0000F40C0000D908000000100000000E000000080000340E00000E0D0000E308000000000000000F00000008000075030000E30B00001808000000010000000F0000000800003D040000070C00002C08000000020000000F000000080000030500002A0C00003E08000000030000000F000000080000C40500004D0C00005008000000040000000F00000008000083060000700C00006108000000050000000F0000000800003E070000910C00007208000000060000000F000000080000F5070000B20C00008208000000070000000F000000080000AA080000D30C00009108000000080000000F0000000800005A090000F30C0000A008000000090000000F000000080000080A0000120D0000AE080000000A0000000F000000080000B20A0000310D0000BC080000000B0000000F000000080000580B00004F0D0000C9080000000C0000000F000000080000FB0B00006C0D0000D5080000000D0000000F0000000800009B0C0000890D0000E1080000000E0000000F000000080000370D0000A60D0000EC080000000F0000000F000000080000D00D0000C10D0000F608000000100000000F000000080000650E0000DC0D000000090000000000000010000000080000A50300009A0C0000380800000001000000100000000800006E040000BF0C00004B08000000020000001000000008000033050000E40C00005D080000000300000010000000080000F5050000080D00006F080000000400000010000000080000B40600002C0D0000800800000005000000100000000800006F0700004F0D00009008000000060000001000000008000026080000720D0000A0080000000700000010000000080000DB080000930D0000B00800000008000000100000000800008B090000B50D0000BE080000000900000010000000080000390A0000D50D0000CC080000000A00000010000000080000E30A0000F50D0000DA080000000B00000010000000080000890B0000150E0000E7080000000C000000100000000800002C0C0000340E0000F3080000000D00000010000000080000CC0C0000520E0000FE080000000E00000010000000080000680D0000700E000009090000000F00000010000000080000010E00008D0E000014090000001000000010000000080000960E0000A90E00001E0900000000000000000000000900009900000061000000F706000000010000000000000009000062010000700000000C070000000200000000000000090000280200007F00000021070000000300000000000000090000EB0200008E00000036070000000400000000000000090000AA0300009B0000004907000000050000000000000009000066040000A80000005C0700000006000000000000000900001F050000B50000006F070000000700000000000000090000D4050000C10000008107000000080000000000000009000085060000CC0000009207000000090000000000000009000034070000D7000000A3070000000A00000000000000090000DE070000E1000000B3070000000B0000000000000009000086080000EB000000C2070000000C0000000000000009000029090000F4000000D1070000000D00000000000000090000CA090000FC000000DF070000000E00000000000000090000670A000004010000ED070000000F00000000000000090000000B00000B010000FA070000001000000000000000090000970B00001201000007080000000000000001000000090000CB000000340100001807000000010000000100000009000095010000450100002E0700000002000000010000000900005B02000055010000420700000003000000010000000900001E0300006501000057070000000400000001000000090000DD030000740100006A07000000050000000100000009000099040000820100007D070000000600000001000000090000510500009001000090070000000700000001000000090000060600009D010000A2070000000800000001000000090000B8060000AA010000B307000000090000000100000009000066070000B6010000C4070000000A0000000100000009000011080000C2010000D4070000000B00000001000000090000B8080000CD010000E3070000000C000000010000000900005C090000D7010000F2070000000D00000001000000090000FD090000E101000000080000000E000000010000000900009A0A0000EA0100000D080000000F00000001000000090000330B0000F30100001A080000001000000001000000090000C90B0000FB01000027080000000000000002000000090000FD000000050200003A070000000100000002000000090000C7010000170200004F0700000002000000020000000900008D0200002902000064070000000300000002000000090000500300003A020000780700000004000000020000000900000F0400004A0200008B070000000500000002000000090000CB0400005A0200009E070000000600000002000000090000840500006A020000B10700000007000000020000000900003906000078020000C2070000000800000002000000090000EA06000086020000D40700000009000000020000000900009907000094020000E4070000000A0000000200000009000043080000A1020000F4070000000B00000002000000090000EB080000AD02000003080000000C000000020000000900008F090000B902000012080000000D000000020000000900002F0A0000C402000020080000000E00000002000000090000CC0A0000CF0200002D080000000F00000002000000090000660B0000D90200003A080000001000000002000000090000FC0B0000E20200004608000000000000000300000009000030010000D40200005B070000000100000003000000090000F9010000E802000070070000000200000003000000090000BF020000FB02000085070000000300000003000000090000820300000D03000099070000000400000003000000090000420400001F030000AC070000000500000003000000090000FE04000031030000BF070000000600000003000000090000B605000041030000D20700000007000000030000000900006B06000051030000E30700000008000000030000000900001D07000061030000F4070000000900000003000000090000CB0700007003000005080000000A00000003000000090000760800007E03000014080000000B000000030000000900001D0900008C03000023080000000C00000003000000090000C10900009903000032080000000D00000003000000090000620A0000A503000040080000000E00000003000000090000FF0A0000B10300004D080000000F00000003000000090000980B0000BD0300005A0800000010000000030000000900002F0C0000C70300006608000000000000000400000009000062010000A20300007C0700000001000000040000000900002B020000B703000091070000000200000004000000090000F2020000CB030000A6070000000300000004000000090000B4030000DF030000BA07000000040000000400000009000074040000F2030000CD0700000005000000040000000900003005000005040000E0070000000600000004000000090000E805000017040000F20700000007000000040000000900009D06000029040000040800000008000000040000000900004F0700003A04000015080000000900000004000000090000FD0700004A04000025080000000A00000004000000090000A80800005904000035080000000B00000004000000090000500900006904000044080000000C00000004000000090000F40900007704000052080000000D00000004000000090000940A00008504000060080000000E00000004000000090000310B0000920400006D080000000F00000004000000090000CB0B00009F0400007A080000001000000004000000090000610C0000AB04000086080000000000000005000000090000940100006E0400009D0700000001000000050000000900005D02000084040000B2070000000200000005000000090000240300009A040000C7070000000300000005000000090000E7030000AF040000DB070000000400000005000000090000A6040000C4040000EE07000000050000000500000009000062050000D8040000010800000006000000050000000900001A060000EB04000013080000000700000005000000090000D0060000FE04000024080000000800000005000000090000810700001105000035080000000900000005000000090000300800002205000045080000000A00000005000000090000DA0800003305000055080000000B00000005000000090000820900004405000064080000000C00000005000000090000260A00005405000072080000000D00000005000000090000C70A00006305000080080000000E00000005000000090000640B0000720500008D080000000F00000005000000090000FD0B00008005000099080000001000000005000000090000940C00008D050000A5080000000000000006000000090000C601000038050000BE0700000001000000060000000900008F02000050050000D30700000002000000060000000900005603000067050000E8070000000300000006000000090000180400007E050000FB070000000400000006000000090000D8040000940500000F08000000050000000600000009000094050000A9050000210800000006000000060000000900004D060000BE0500003308000000070000000600000009000002070000D205000044080000000800000006000000090000B3070000E60500005508000000090000000600000009000062080000F905000065080000000A000000060000000900000D0900000B06000075080000000B00000006000000090000B40900001D06000084080000000C00000006000000090000580A00002E06000092080000000D00000006000000090000F90A00003F060000A0080000000E00000006000000090000960B00004F060000AD080000000F00000006000000090000300C00005F060000B9080000001000000006000000090000C60C00006D060000C5080000000000000007000000090000F701000001060000DF070000000100000007000000090000C10200001A060000F40700000002000000070000000900008703000032060000080800000003000000070000000900004A0400004A0600001C0800000004000000070000000900000A050000620600002F080000000500000007000000090000C605000079060000420800000006000000070000000900007F0600008F0600005308000000070000000700000009000034070000A406000065080000000800000007000000090000E5070000B90600007508000000090000000700000009000094080000CE06000085080000000A000000070000000900003F090000E206000095080000000B00000007000000090000E6090000F5060000A3080000000C000000070000000900008A0A000007070000B2080000000D000000070000000900002B0B000019070000BF080000000E00000007000000090000C80B00002B070000CC080000000F00000007000000090000620C00003C070000D8080000001000000007000000090000F80C00004C070000E408000000000000000800000009000029020000C806000000080000000100000008000000090000F3020000E206000015080000000200000008000000090000B9030000FC060000290800000003000000080000000900007C040000150700003D0800000004000000080000000900003C0500002E07000050080000000500000008000000090000F80500004607000062080000000600000008000000090000B00600005E07000074080000000700000008000000090000660700007507000085080000000800000008000000090000170800008B07000095080000000900000008000000090000C6080000A1070000A5080000000A0000000800000009000071090000B6070000B5080000000B00000008000000090000180A0000CB070000C3080000000C00000008000000090000BC0A0000DF070000D1080000000D000000080000000900005D0B0000F2070000DF080000000E00000008000000090000FA0B000005080000EC080000000F00000008000000090000940C000017080000F80800000010000000080000000900002A0D000029080000030900000000000000090000000900005B0200008D0700002108000000010000000900000009000025030000A907000035080000000200000009000000090000EB030000C40700004A080000000300000009000000090000AE040000DF0700005D0800000004000000090000000900006D050000F907000070080000000500000009000000090000290600001208000082080000000600000009000000090000E20600002B080000940800000007000000090000000900009707000044080000A5080000000800000009000000090000490800005B080000B5080000000900000009000000090000F808000073080000C5080000000A00000009000000090000A309000089080000D4080000000B000000090000000900004A0A00009F080000E3080000000C00000009000000090000EE0A0000B4080000F1080000000D000000090000000900008F0B0000C9080000FE080000000E000000090000000900002C0C0000DD0800000B090000000F00000009000000090000C60C0000F1080000170900000010000000090000000900005C0D0000040900002309000000000000000A0000000900008C020000500800004108000000010000000A000000090000560300006D0800005608000000020000000A0000000900001C0400008A0800006A08000000030000000A000000090000DF040000A60800007D08000000040000000A0000000900009F050000C20800009008000000050000000A0000000900005B060000DD080000A208000000060000000A00000009000014070000F7080000B408000000070000000A000000090000C907000011090000C508000000080000000A0000000900007B0800002A090000D508000000090000000A0000000900002909000042090000E5080000000A0000000A000000090000D40900005A090000F4080000000B0000000A0000000900007C0A00007209000002090000000C0000000A000000090000200B00008809000010090000000D0000000A000000090000C10B00009F0900001D090000000E0000000A0000000900005E0C0000B40900002A090000000F0000000A000000090000F80C0000C90900003609000000100000000A0000000900008E0D0000DE0900004209000000000000000B000000090000BE020000120900006208000000010000000B00000009000088030000300900007608000000020000000B0000000900004E0400004F0900008A08000000030000000B000000090000110500006C0900009E08000000040000000B000000090000D105000089090000B008000000050000000B0000000900008D060000A5090000C208000000060000000B00000009000045070000C1090000D408000000070000000B000000090000FB070000DC090000E508000000080000000B000000090000AD080000F7090000F508000000090000000B0000000900005B090000100A000004090000000A0000000B000000090000060A00002A0A000013090000000B0000000B000000090000AE0A0000420A000022090000000C0000000B000000090000520B00005B0A000030090000000D0000000B000000090000F30B0000720A00003D090000000E0000000B000000090000900C0000890A000049090000000F0000000B0000000900002A0D00009F0A00005509000000100000000B000000090000C00D0000B50A00006009000000000000000C000000090000EF020000D20900008208000000010000000C000000090000B9030000F20900009708000000020000000C0000000900007F040000110A0000AA08000000030000000C00000009000042050000300A0000BE08000000040000000C000000090000020600004E0A0000D008000000050000000C000000090000BE0600006C0A0000E208000000060000000C00000009000077070000890A0000F408000000070000000C0000000900002C080000A60A00000409000000080000000C000000090000DE080000C20A00001409000000090000000C0000000900008D090000DD0A000024090000000A0000000C000000090000380A0000F80A000033090000000B0000000C000000090000DF0A0000120B000041090000000C0000000C000000090000830B00002B0B00004F090000000D0000000C000000090000240C0000440B00005C090000000E0000000C000000090000C20C00005C0B000068090000000F0000000C0000000900005B0D0000740B00007409000000100000000C000000090000F20D00008B0B00007F09000000000000000D00000009000020030000900A0000A308000000010000000D000000090000EA030000B10A0000B708000000020000000D000000090000B1040000D20A0000CB08000000030000000D00000009000074050000F20A0000DE08000000040000000D00000009000033060000120B0000F008000000050000000D000000090000F0060000310B00000209000000060000000D000000090000A8070000500B00001309000000070000000D0000000900005E0800006E0B00002409000000080000000D000000090000100900008B0B00003409000000090000000D000000090000BE090000A70B000043090000000A0000000D000000090000690A0000C40B000052090000000B0000000D000000090000110B0000DF0B000060090000000C0000000D000000090000B50B0000FA0B00006E090000000D0000000D000000090000560C0000140C00007B090000000E0000000D000000090000F30C00002E0C000087090000000F0000000D0000000900008D0D0000470C00009309000000100000000D000000090000240E0000600C00009E09000000000000000E000000090000510300004D0B0000C308000000010000000E0000000900001B0400006F0B0000D708000000020000000E000000090000E2040000920B0000EB08000000030000000E000000090000A5050000B30B0000FE08000000040000000E00000009000065060000D40B00001009000000050000000E00000009000021070000F50B00002209000000060000000E000000090000DA070000140C00003309000000070000000E0000000900008F080000340C00004309000000080000000E00000009000041090000520C00005309000000090000000E000000090000EF090000700C000063090000000A0000000E0000000900009B0A00008E0C000071090000000B0000000E000000090000420B0000AB0C00007F090000000C0000000E000000090000E60B0000C70C00008D090000000D0000000E000000090000870C0000E30C00009A090000000E0000000E000000090000250D0000FE0C0000A6090000000F0000000E000000090000BF0D0000180D0000B209000000100000000E000000090000550E0000320D0000BD09000000000000000F00000009000082030000070C0000E308000000010000000F0000000900004C0400002C0C0000F708000000020000000F000000090000130500004F0C00000A09000000030000000F000000090000D6050000720C00001D09000000040000000F00000009000096060000950C00003009000000050000000F00000009000052070000B60C00004109000000060000000F0000000900000B080000D80C00005209000000070000000F000000090000C0080000F80C00006309000000080000000F00000009000072090000180D00007309000000090000000F000000090000210A0000380D000082090000000A0000000F000000090000CC0A0000560D000090090000000B0000000F000000090000740B0000750D00009E090000000C0000000F000000090000180C0000920D0000AC090000000D0000000F000000090000B90C0000AF0D0000B8090000000E0000000F000000090000560D0000CC0D0000C5090000000F0000000F000000090000F00D0000E80D0000D009000000100000000F000000090000870E0000030E0000DB090000000000000010000000090000B3030000C00C0000030900000001000000100000000900007D040000E60C000017090000000200000010000000090000440500000B0D00002A090000000300000010000000090000070600002F0D00003D090000000400000010000000090000C7060000530D00004F09000000050000001000000009000083070000760D0000610900000006000000100000000900003C080000990D000072090000000700000010000000090000F1080000BB0D000082090000000800000010000000090000A3090000DC0D000092090000000900000010000000090000520A0000FD0D0000A1090000000A00000010000000090000FD0A00001D0E0000AF090000000B00000010000000090000A50B00003D0E0000BD090000000C00000010000000090000490C00005C0E0000CA090000000D00000010000000090000EA0C00007A0E0000D7090000000E00000010000000090000870D0000980E0000E3090000000F00000010000000090000210E0000B50E0000EF090000001000000010000000090000B80E0000D20E0000F90900000000000000000000000A0000A400000066000000B00700000001000000000000000A00006F01000075000000C70700000002000000000000000A00003602000084000000DD0700000003000000000000000A0000FA02000092000000F20700000004000000000000000A0000BA0300009F000000070800000005000000000000000A000077040000AC0000001B0800000006000000000000000A000031050000B90000002E0800000007000000000000000A0000E7050000C4000000410800000008000000000000000A00009A060000CF000000540800000009000000000000000A000049070000DA00000065080000000A000000000000000A0000F5070000E400000076080000000B000000000000000A00009D080000ED00000087080000000C000000000000000A000042090000F600000097080000000D000000000000000A0000E4090000FE000000A6080000000E000000000000000A0000820A000006010000B4080000000F000000000000000A00001D0B00000D010000C20800000010000000000000000A0000B40B000013010000D00800000000000000010000000A0000D70000003B010000D30700000001000000010000000A0000A10100004B010000E90700000002000000010000000A0000690200005B010000FF0700000003000000010000000A00002C0300006B010000140800000004000000010000000A0000ED0300007A010000290800000005000000010000000A0000AA040000880100003D0800000006000000010000000A00006405000096010000500800000007000000010000000A00001A060000A3010000630800000008000000010000000A0000CC060000B0010000750800000009000000010000000A00007C070000BC01000087080000000A000000010000000A000028080000C701000098080000000B000000010000000A0000D0080000D2010000A8080000000C000000010000000A000075090000DC010000B8080000000D000000010000000A0000170A0000E5010000C7080000000E000000010000000A0000B50A0000EE010000D6080000000F000000010000000A0000500B0000F7010000E40800000010000000010000000A0000E70B0000FF010000F10800000000000000020000000A0000090100000E020000F50700000001000000020000000A0000D4010000200200000B0800000002000000020000000A00009B02000031020000210800000003000000020000000A00005F03000042020000360800000004000000020000000A00001F040000530200004B0800000005000000020000000A0000DC040000620200005F0800000006000000020000000A00009605000071020000720800000007000000020000000A00004C06000080020000850800000008000000020000000A0000FF0600008E020000970800000009000000020000000A0000AE0700009B020000A8080000000A000000020000000A00005A080000A8020000B9080000000B000000020000000A000003090000B4020000CA080000000C000000020000000A0000A8090000C0020000D9080000000D000000020000000A00004A0A0000CB020000E8080000000E000000020000000A0000E80A0000D5020000F7080000000F000000020000000A0000830B0000DF020000040900000010000000020000000A00001A0C0000E8020000120900000000000000030000000A00003B010000DF020000170800000001000000030000000A000006020000F30200002E0800000002000000030000000A0000CD02000006030000430800000003000000030000000A00009103000018030000580800000004000000030000000A0000520400002A0300006D0800000005000000030000000A00000F0500003B030000810800000006000000030000000A0000C90500004B030000940800000007000000030000000A00007F0600005B030000A60800000008000000030000000A0000320700006B030000B80800000009000000030000000A0000E107000079030000CA080000000A000000030000000A00008D08000088030000DB080000000B000000030000000A00003609000095030000EB080000000C000000030000000A0000DB090000A2030000FA080000000D000000030000000A00007C0A0000AE03000009090000000E000000030000000A00001B0B0000BA03000018090000000F000000030000000A0000B50B0000C5030000250900000010000000030000000A00004D0C0000D0030000320900000000000000040000000A00006D010000AF030000390800000001000000040000000A000038020000C4030000500800000002000000040000000A000000030000D8030000650800000003000000040000000A0000C4030000EC0300007A0800000004000000040000000A000084040000FF0300008F0800000005000000040000000A00004105000012040000A20800000006000000040000000A0000FB05000023040000B50800000007000000040000000A0000B106000035040000C80800000008000000040000000A00006407000046040000DA0800000009000000040000000A00001408000056040000EB080000000A000000040000000A0000C008000065040000FC080000000B000000040000000A000068090000740400000C090000000C000000040000000A00000D0A0000830400001B090000000D000000040000000A0000AF0A0000900400002A090000000E000000040000000A00004D0B00009E04000038090000000F000000040000000A0000E80B0000AA040000460900000010000000040000000A0000800C0000B6040000530900000000000000050000000A00009F0100007D0400005C0800000001000000050000000A00006A02000093040000720800000002000000050000000A000032030000A9040000870800000003000000050000000A0000F6030000BE0400009C0800000004000000050000000A0000B6040000D3040000B00800000005000000050000000A000074050000E7040000C40800000006000000050000000A00002D060000FA040000D70800000007000000050000000A0000E40600000D050000E90800000008000000050000000A0000960700001F050000FB0800000009000000050000000A000046080000300500000C090000000A000000050000000A0000F2080000410500001D090000000B000000050000000A00009B090000520500002D090000000C000000050000000A0000400A0000610500003C090000000D000000050000000A0000E20A0000710500004B090000000E000000050000000A0000800B00007F05000059090000000F000000050000000A00001B0C00008D050000670900000010000000050000000A0000B20C00009B050000740900000000000000060000000A0000D1010000490500007E0800000001000000060000000A00009C02000061050000940800000002000000060000000A00006403000078050000A90800000003000000060000000A0000280400008F050000BE0800000004000000060000000A0000E9040000A5050000D20800000005000000060000000A0000A6050000BA050000E50800000006000000060000000A000060060000CF050000F80800000007000000060000000A000016070000E30500000B0900000008000000060000000A0000C9070000F60500001C0900000009000000060000000A000078080000090600002E090000000A000000060000000A0000240900001C0600003E090000000B000000060000000A0000CD0900002D0600004E090000000C000000060000000A0000720A00003F0600005D090000000D000000060000000A0000140B00004F0600006C090000000E000000060000000A0000B20B00005F0600007A090000000F000000060000000A00004D0C00006F060000870900000010000000060000000A0000E50C00007D060000940900000000000000070000000A000003020000140600009F0800000001000000070000000A0000CE0200002D060000B50800000002000000070000000A00009603000045060000CB0800000003000000070000000A00005A0400005D060000DF0800000004000000070000000A00001B05000075060000F30800000005000000070000000A0000D80500008B060000070900000006000000070000000A000092060000A20600001A0900000007000000070000000A000048070000B70600002C0900000008000000070000000A0000FB070000CC0600003D0900000009000000070000000A0000AA080000E00600004F090000000A000000070000000A000057090000F40600005F090000000B000000070000000A0000FF090000070700006F090000000C000000070000000A0000A40A00001A0700007E090000000D000000070000000A0000460B00002C0700008C090000000E000000070000000A0000E50B00003D0700009A090000000F000000070000000A0000800C00004E070000A80900000010000000070000000A0000170D00005E070000B40900000000000000080000000A000035020000DD060000C10800000001000000080000000A000000030000F7060000D70800000002000000080000000A0000C803000011070000EC0800000003000000080000000A00008C0400002A070000010900000004000000080000000A00004D05000043070000150900000005000000080000000A00000A0600005B070000280900000006000000080000000A0000C4060000730700003B0900000007000000080000000A00007A0700008A0700004D0900000008000000080000000A00002D080000A00700005E0900000009000000080000000A0000DD080000B60700006F090000000A000000080000000A000089090000CB07000080090000000B000000080000000A0000310A0000E00700008F090000000C000000080000000A0000D70A0000F40700009E090000000D000000080000000A0000790B000007080000AD090000000E000000080000000A0000170C00001A080000BB090000000F000000080000000A0000B20C00002C080000C80900000010000000080000000A0000490D00003E080000D50900000000000000090000000A000067020000A4070000E30800000001000000090000000A000032030000C0070000F90800000002000000090000000A0000F9030000DB0700000E0900000003000000090000000A0000BE040000F6070000220900000004000000090000000A00007E05000010080000360900000005000000090000000A00003C06000029080000490900000006000000090000000A0000F6060000420800005C0900000007000000090000000A0000AC0700005B0800006E0900000008000000090000000A00005F080000730800007F0900000009000000090000000A00000F0900008A08000090090000000A000000090000000A0000BB090000A0080000A0090000000B000000090000000A0000630A0000B6080000B0090000000C000000090000000A0000090B0000CC080000BF090000000D000000090000000A0000AB0B0000E0080000CD090000000E000000090000000A0000490C0000F5080000DB090000000F000000090000000A0000E40C000008090000E80900000010000000090000000A00007C0D00001B090000F509000000000000000A0000000A000099020000690800000409000000010000000A0000000A000064030000870800001A09000000020000000A0000000A00002B040000A30800002F09000000030000000A0000000A0000EF040000BF0800004309000000040000000A0000000A0000B0050000DB0800005709000000050000000A0000000A00006D060000F60800006A09000000060000000A0000000A000027070000100900007D09000000070000000A0000000A0000DE0700002A0900008F09000000080000000A0000000A00009108000043090000A009000000090000000A0000000A0000400900005C090000B1090000000A0000000A0000000A0000ED09000074090000C1090000000B0000000A0000000A0000950A00008B090000D0090000000C0000000A0000000A00003B0B0000A2090000DF090000000D0000000A0000000A0000DD0B0000B8090000EE090000000E0000000A0000000A00007B0C0000CE090000FB090000000F0000000A0000000A0000160D0000E3090000080A000000100000000A0000000A0000AE0D0000F7090000150A000000000000000B0000000A0000CA0200002D0900002609000000010000000B0000000A0000950300004C0900003B09000000020000000B0000000A00005D0400006A0900005009000000030000000B0000000A000021050000870900006509000000040000000B0000000A0000E2050000A40900007809000000050000000B0000000A00009F060000C10900008B09000000060000000B0000000A000059070000DC0900009E09000000070000000B0000000A000010080000F8090000B009000000080000000B0000000A0000C3080000120A0000C109000000090000000B0000000A0000720900002C0A0000D1090000000A0000000B0000000A00001F0A0000450A0000E1090000000B0000000B0000000A0000C70A00005E0A0000F1090000000C0000000B0000000A00006D0B0000760A0000000A0000000D0000000B0000000A00000F0C00008E0A00000E0A0000000E0000000B0000000A0000AD0C0000A50A00001B0A0000000F0000000B0000000A0000480D0000BB0A0000280A000000100000000B0000000A0000E00D0000D10A0000350A000000000000000C0000000A0000FB020000EF0900004709000000010000000C0000000A0000C70300000F0A00005D09000000020000000C0000000A00008E0400002F0A00007109000000030000000C0000000A0000530500004E0A00008609000000040000000C0000000A0000130600006C0A00009909000000050000000C0000000A0000D10600008A0A0000AC09000000060000000C0000000A00008B070000A70A0000BF09000000070000000C0000000A000041080000C30A0000D009000000080000000C0000000A0000F4080000DF0A0000E109000000090000000C0000000A0000A4090000FB0A0000F2090000000A0000000C0000000A0000500A0000150B0000020A0000000B0000000C0000000A0000F90A0000300B0000110A0000000C0000000C0000000A00009F0B0000490B0000200A0000000D0000000C0000000A0000400C0000620B00002E0A0000000E0000000C0000000A0000DF0C00007B0B00003B0A0000000F0000000C0000000A00007A0D0000920B0000480A000000100000000C0000000A0000120E0000AA0B0000540A000000000000000D0000000A00002D030000AF0A00006809000000010000000D0000000A0000F8030000D10A00007E09000000020000000D0000000A0000C0040000F20A00009209000000030000000D0000000A000084050000120B0000A709000000040000000D0000000A000045060000320B0000BA09000000050000000D0000000A000002070000510B0000CD09000000060000000D0000000A0000BC070000700B0000DF09000000070000000D0000000A0000730800008D0B0000F109000000080000000D0000000A000026090000AB0B0000020A000000090000000D0000000A0000D6090000C80B0000120A0000000A0000000D0000000A0000820A0000E40B0000220A0000000B0000000D0000000A00002B0B0000FF0B0000310A0000000C0000000D0000000A0000D00B00001A0C0000400A0000000D0000000D0000000A0000720C0000350C00004E0A0000000E0000000D0000000A0000110D00004F0C00005B0A0000000F0000000D0000000A0000AC0D0000680C0000680A000000100000000D0000000A0000440E0000800C0000740A000000000000000E0000000A00005E0300006E0B00008A09000000010000000E0000000A000029040000910B00009F09000000020000000E0000000A0000F1040000B30B0000B309000000030000000E0000000A0000B5050000D50B0000C709000000040000000E0000000A000076060000F60B0000DB09000000050000000E0000000A000034070000170C0000EE09000000060000000E0000000A0000EE070000360C0000000A000000070000000E0000000A0000A4080000560C0000110A000000080000000E0000000A000057090000750C0000220A000000090000000E0000000A0000070A0000930C0000330A0000000A0000000E0000000A0000B40A0000B00C0000420A0000000B0000000E0000000A00005C0B0000CD0C0000510A0000000C0000000E0000000A0000020C0000EA0C0000600A0000000D0000000E0000000A0000A40C0000060D00006E0A0000000E0000000E0000000A0000430D0000210D00007B0A0000000F0000000E0000000A0000DE0D00003B0D0000880A000000100000000E0000000A0000750E0000550D0000940A000000000000000F0000000A00008F0300002B0C0000AB09000000010000000F0000000A00005A0400004F0C0000C009000000020000000F0000000A000022050000730C0000D409000000030000000F0000000A0000E7050000960C0000E809000000040000000F0000000A0000A7060000B80C0000FB09000000050000000F0000000A000065070000DA0C00000E0A000000060000000F0000000A00001F080000FC0C0000200A000000070000000F0000000A0000D60800001D0D0000320A000000080000000F0000000A0000890900003D0D0000420A000000090000000F0000000A0000390A00005C0D0000530A0000000A0000000F0000000A0000E50A00007B0D0000620A0000000B0000000F0000000A00008E0B00009A0D0000710A0000000C0000000F0000000A0000330C0000B70D0000800A0000000D0000000F0000000A0000D50C0000D50D00008D0A0000000E0000000F0000000A0000740D0000F10D00009B0A0000000F0000000F0000000A00000F0E00000D0E0000A70A000000100000000F0000000A0000A70E0000290E0000B30A00000000000000100000000A0000C0030000E60C0000CB0900000001000000100000000A00008B0400000C0D0000E10900000002000000100000000A000053050000310D0000F50900000003000000100000000A000018060000550D0000090A00000004000000100000000A0000D9060000790D00001C0A00000005000000100000000A0000960700009D0D00002F0A00000006000000100000000A000050080000BF0D0000400A00000007000000100000000A000007090000E10D0000520A00000008000000100000000A0000BA090000030E0000630A00000009000000100000000A00006A0A0000240E0000730A0000000A000000100000000A0000160B0000440E0000820A0000000B000000100000000A0000BF0B0000640E0000910A0000000C000000100000000A0000650C0000830E00009F0A0000000D000000100000000A0000070D0000A20E0000AD0A0000000E000000100000000A0000A60D0000C00E0000BA0A0000000F000000100000000A0000410E0000DD0E0000C70A00000010000000100000000A0000D90E0000FA0E0000D30A00000000000000000000000B0000AE0000006A000000670800000001000000000000000B00007A010000790000007F0800000002000000000000000B00004202000087000000960800000003000000000000000B00000703000095000000AC0800000004000000000000000B0000C9030000A2000000C20800000005000000000000000B000087040000AF000000D70800000006000000000000000B000042050000BB000000EB0800000007000000000000000B0000F9050000C7000000FF0800000008000000000000000B0000AD060000D2000000120900000009000000000000000B00005D070000DC00000025090000000A000000000000000B00000A080000E600000037090000000B000000000000000B0000B4080000EF00000049090000000C000000000000000B00005A090000F700000059090000000D000000000000000B0000FD090000FF0000006A090000000E000000000000000B00009C0A00000701000079090000000F000000000000000B0000380B00000E010000880900000010000000000000000B0000D00B000014010000970900000000000000010000000B0000E1000000400100008A0800000001000000010000000B0000AD01000051010000A20800000002000000010000000B00007502000061010000B90800000003000000010000000B00003A03000070010000CF0800000004000000010000000B0000FC0300007F010000E50800000005000000010000000B0000BA0400008D010000FA0800000006000000010000000B0000750500009B0100000E0900000007000000010000000B00002C060000A8010000220900000008000000010000000B0000E0060000B4010000350900000009000000010000000B000090070000C001000048090000000A000000010000000B00003D080000CB0100005A090000000B000000010000000B0000E7080000D60100006B090000000C000000010000000B00008D090000E00100007C090000000D000000010000000B0000300A0000E90100008C090000000E000000010000000B0000CF0A0000F20100009B090000000F000000010000000B00006B0B0000FA010000AA0900000010000000010000000B0000040C000002020000B80900000000000000020000000B00001301000016020000AE0800000001000000020000000B0000DF01000028020000C50800000002000000020000000B0000A802000039020000DC0800000003000000020000000B00006D0300004A020000F20800000004000000020000000B00002E0400005A020000080900000005000000020000000B0000ED040000690200001D0900000006000000020000000B0000A705000078020000310900000007000000020000000B00005F06000087020000450900000008000000020000000B00001307000095020000580900000009000000020000000B0000C3070000A20200006A090000000A000000020000000B000070080000AE0200007C090000000B000000020000000B00001A090000BA0200008D090000000C000000020000000B0000C0090000C60200009E090000000D000000020000000B0000630A0000D1020000AE090000000E000000020000000B0000020B0000DB020000BD090000000F000000020000000B00009E0B0000E4020000CC0900000010000000020000000B0000370C0000EE020000DA0900000000000000030000000B000046010000E9020000D10800000001000000030000000B000012020000FD020000E80800000002000000030000000B0000DA0200000F030000FF0800000003000000030000000B00009F03000021030000150900000004000000030000000B000061040000330300002B0900000005000000030000000B00001F050000440300003F0900000006000000030000000B0000DA05000054030000540900000007000000030000000B00009106000064030000670900000008000000030000000B000045070000730300007A0900000009000000030000000B0000F6070000820300008D090000000A000000030000000B0000A3080000900300009E090000000B000000030000000B00004D0900009E030000AF090000000C000000030000000B0000F3090000AA030000C0090000000D000000030000000B0000960A0000B7030000D0090000000E000000030000000B0000350B0000C2030000DF090000000F000000030000000B0000D10B0000CD030000EE0900000010000000030000000B00006A0C0000D8030000FC0900000000000000040000000B000078010000BB030000F40800000001000000040000000B000044020000D00300000B0900000002000000040000000B00000C030000E4030000220900000003000000040000000B0000D2030000F8030000380900000004000000040000000B0000930400000B0400004D0900000005000000040000000B0000520500001D040000620900000006000000040000000B00000D0600002F040000760900000007000000040000000B0000C4060000400400008A0900000008000000040000000B000078070000510400009D0900000009000000040000000B00002908000061040000AF090000000A000000040000000B0000D608000070040000C0090000000B000000040000000B00007F0900007F040000D2090000000C000000040000000B0000260A00008D040000E2090000000D000000040000000B0000C90A00009B040000F2090000000E000000040000000B0000680B0000A8040000010A0000000F000000040000000B0000040C0000B5040000100A00000010000000040000000B00009D0C0000C00400001E0A00000000000000050000000B0000AA0100008B040000170900000001000000050000000B000076020000A10400002E0900000002000000050000000B00003F030000B7040000450900000003000000050000000B000004040000CC0400005B0900000004000000050000000B0000C6040000E0040000700900000005000000050000000B000084050000F4040000850900000006000000050000000B00003F06000007050000990900000007000000050000000B0000F60600001A050000AC0900000008000000050000000B0000AA0700002C050000BF0900000009000000050000000B00005B0800003E050000D1090000000A000000050000000B0000080900004E050000E3090000000B000000050000000B0000B20900005F050000F4090000000C000000050000000B0000580A00006E050000040A0000000D000000050000000B0000FB0A00007E050000140A0000000E000000050000000B00009B0B00008C050000230A0000000F000000050000000B0000370C00009A050000310A00000010000000050000000B0000D00C0000A70500003F0A00000000000000060000000B0000DC010000590500003A0900000001000000060000000B0000A802000071050000510900000002000000060000000B00007103000088050000680900000003000000060000000B0000360400009E0500007D0900000004000000060000000B0000F8040000B4050000920900000005000000060000000B0000B6050000CA050000A70900000006000000060000000B000071060000DE050000BB0900000007000000060000000B000029070000F2050000CE0900000008000000060000000B0000DD07000006060000E10900000009000000060000000B00008E08000019060000F3090000000A000000060000000B00003B0900002B060000050A0000000B000000060000000B0000E50900003D060000150A0000000C000000060000000B00008B0A00004E060000260A0000000D000000060000000B00002E0B00005E060000350A0000000E000000060000000B0000CE0B00006E060000440A0000000F000000060000000B00006A0C00007E060000530A00000010000000060000000B0000020D00008C060000610A00000000000000070000000B00000E020000260600005D0900000001000000070000000B0000DA0200003F060000740900000002000000070000000B0000A3030000570600008A0900000003000000070000000B0000680400006F060000A00900000004000000070000000B00002A05000087060000B50900000005000000070000000B0000E90500009D060000C90900000006000000070000000B0000A4060000B3060000DD0900000007000000070000000B00005B070000C9060000F00900000008000000070000000B00000F080000DE060000030A00000009000000070000000B0000C0080000F2060000150A0000000A000000070000000B00006D09000006070000260A0000000B000000070000000B0000170A000019070000370A0000000C000000070000000B0000BD0A00002C070000470A0000000D000000070000000B0000600B00003E070000570A0000000E000000070000000B0000000C00004F070000660A0000000F000000070000000B00009C0C000060070000740A00000010000000070000000B0000350D000070070000820A00000000000000080000000B000040020000F1060000800900000001000000080000000B00000C0300000B070000960900000002000000080000000B0000D503000025070000AD0900000003000000080000000B00009A0400003F070000C20900000004000000080000000B00005C05000057070000D70900000005000000080000000B00001B0600006F070000EC0900000006000000080000000B0000D606000087070000FF0900000007000000080000000B00008D0700009E070000120A00000008000000080000000B000041080000B4070000250A00000009000000080000000B0000F2080000CA070000370A0000000A000000080000000B0000A0090000DF070000480A0000000B000000080000000B0000490A0000F4070000590A0000000C000000080000000B0000F00A000008080000690A0000000D000000080000000B0000930B00001B080000780A0000000E000000080000000B0000330C00002E080000870A0000000F000000080000000B0000CF0C000040080000960A00000010000000080000000B0000670D000052080000A30A00000000000000090000000B000072020000BA070000A20900000001000000090000000B00003E030000D6070000B90900000002000000090000000B000007040000F1070000CF0900000003000000090000000B0000CC0400000C080000E50900000004000000090000000B00008E05000026080000F90900000005000000090000000B00004D060000400800000E0A00000006000000090000000B00000807000059080000210A00000007000000090000000B0000BF07000071080000340A00000008000000090000000B00007408000089080000470A00000009000000090000000B000024090000A0080000590A0000000A000000090000000B0000D2090000B70800006A0A0000000B000000090000000B00007C0A0000CD0800007A0A0000000C000000090000000B0000220B0000E20800008A0A0000000D000000090000000B0000C50B0000F70800009A0A0000000E000000090000000B0000650C00000B090000A90A0000000F000000090000000B0000010D00001E090000B70A00000010000000090000000B00009A0D000032090000C40A000000000000000A0000000B0000A402000082080000C509000000010000000A0000000B0000700300009F080000DB09000000020000000A0000000B000039040000BC080000F109000000030000000A0000000B0000FE040000D8080000070A000000040000000A0000000B0000C0050000F30800001C0A000000050000000A0000000B00007F0600000E090000300A000000060000000A0000000B00003A07000029090000430A000000070000000A0000000B0000F107000042090000560A000000080000000A0000000B0000A60800005C090000690A000000090000000A0000000B000056090000740900007A0A0000000A0000000A0000000B0000040A00008C0900008B0A0000000B0000000A0000000B0000AE0A0000A40900009C0A0000000C0000000A0000000B0000540B0000BA090000AC0A0000000D0000000A0000000B0000F70B0000D1090000BB0A0000000E0000000A0000000B0000970C0000E6090000CA0A0000000F0000000A0000000B0000330D0000FB090000D80A000000100000000A0000000B0000CC0D0000100A0000E50A000000000000000B0000000B0000D502000047090000E709000000010000000B0000000B0000A203000066090000FE09000000020000000B0000000B00006A04000084090000140A000000030000000B0000000B000030050000A2090000290A000000040000000B0000000B0000F2050000BF0900003E0A000000050000000B0000000B0000B0060000DB090000520A000000060000000B0000000B00006C070000F7090000650A000000070000000B0000000B000023080000120A0000780A000000080000000B0000000B0000D80800002D0A00008A0A000000090000000B0000000B000088090000470A00009C0A0000000A0000000B0000000B0000360A0000600A0000AD0A0000000B0000000B0000000B0000E00A0000790A0000BD0A0000000C0000000B0000000B0000860B0000910A0000CD0A0000000D0000000B0000000B00002A0C0000A90A0000DC0A0000000E0000000B0000000B0000C90C0000C00A0000EB0A0000000F0000000B0000000B0000660D0000D60A0000F90A000000100000000B0000000B0000FE0D0000EC0A0000060B000000000000000C0000000B0000070300000B0A0000090A000000010000000C0000000B0000D30300002C0A0000200A000000020000000C0000000B00009C0400004B0A0000360A000000030000000C0000000B0000610500006A0A00004B0A000000040000000C0000000B000024060000890A00005F0A000000050000000C0000000B0000E2060000A60A0000730A000000060000000C0000000B00009D070000C40A0000870A000000070000000C0000000B000055080000E00A00009A0A000000080000000C0000000B000009090000FC0A0000AC0A000000090000000C0000000B0000BA090000180B0000BD0A0000000A0000000C0000000B0000680A0000330B0000CE0A0000000B0000000C0000000B0000120B00004D0B0000DF0A0000000C0000000C0000000B0000B80B0000660B0000EE0A0000000D0000000C0000000B00005C0C0000800B0000FD0A0000000E0000000C0000000B0000FB0C0000980B00000C0B0000000F0000000C0000000B0000980D0000B00B00001A0B000000100000000C0000000B0000310E0000C70B0000270B000000000000000D0000000B000038030000CE0A00002C0A000000010000000D0000000B000005040000EF0A0000420A000000020000000D0000000B0000CE040000100B0000580A000000030000000D0000000B000093050000310B00006D0A000000040000000D0000000B000055060000510B0000810A000000050000000D0000000B000014070000700B0000950A000000060000000D0000000B0000CF0700008E0B0000A80A000000070000000D0000000B000087080000AD0B0000BB0A000000080000000D0000000B00003B090000CA0B0000CD0A000000090000000D0000000B0000EC090000E70B0000DF0A0000000A0000000D0000000B00009A0A0000030C0000EF0A0000000B0000000D0000000B0000440B00001F0C0000000B0000000C0000000D0000000B0000EA0B00003A0C00000F0B0000000D0000000D0000000B00008E0C0000540C00001E0B0000000E0000000D0000000B00002D0D00006E0C00002D0B0000000F0000000D0000000B0000CA0D0000880C00003A0B000000100000000D0000000B0000630E0000A00C0000480B000000000000000E0000000B00006A0300008E0B00004E0A000000010000000E0000000B000036040000B10B0000640A000000020000000E0000000B0000FF040000D40B00007A0A000000030000000E0000000B0000C4050000F60B00008F0A000000040000000E0000000B000087060000170C0000A30A000000050000000E0000000B000045070000380C0000B70A000000060000000E0000000B000001080000580C0000CA0A000000070000000E0000000B0000B8080000770C0000DD0A000000080000000E0000000B00006D090000960C0000EE0A000000090000000E0000000B00001E0A0000B40C0000000B0000000A0000000E0000000B0000CB0A0000D20C0000110B0000000B0000000E0000000B0000750B0000EF0C0000210B0000000C0000000E0000000B00001C0C00000C0D0000300B0000000D0000000E0000000B0000BF0C0000280D00003F0B0000000E0000000E0000000B00005F0D0000430D00004D0B0000000F0000000E0000000B0000FC0D00005E0D00005B0B000000100000000E0000000B0000950E0000780D0000680B000000000000000F0000000B00009B0300004D0C0000700A000000010000000F0000000B000067040000720C0000860A000000020000000F0000000B000030050000950C00009B0A000000030000000F0000000B0000F6050000B90C0000B00A000000040000000F0000000B0000B8060000DB0C0000C50A000000050000000F0000000B000077070000FE0C0000D80A000000060000000F0000000B0000320800001F0D0000EB0A000000070000000F0000000B0000EA080000400D0000FE0A000000080000000F0000000B00009E090000600D0000100B000000090000000F0000000B00004F0A0000800D0000210B0000000A0000000F0000000B0000FD0A00009F0D0000320B0000000B0000000F0000000B0000A70B0000BE0D0000420B0000000C0000000F0000000B00004E0C0000DC0D0000510B0000000D0000000F0000000B0000F10C0000F90D0000600B0000000E0000000F0000000B0000910D0000160E00006E0B0000000F0000000F0000000B00002E0E0000320E00007C0B000000100000000F0000000B0000C70E00004D0E0000890B00000000000000100000000B0000CC0300000A0D0000910A00000001000000100000000B000098040000300D0000A80A00000002000000100000000B000061050000560D0000BD0A00000003000000100000000B0000270600007A0D0000D20A00000004000000100000000B0000E90600009E0D0000E60A00000005000000100000000B0000A8070000C20D0000FA0A00000006000000100000000B000063080000E50D00000D0B00000007000000100000000B00001B090000070E00001F0B00000008000000100000000B0000D0090000290E0000310B00000009000000100000000B0000810A00004A0E0000420B0000000A000000100000000B00002E0B00006B0E0000530B0000000B000000100000000B0000D90B00008A0E0000620B0000000C000000100000000B00007F0C0000AA0E0000720B0000000D000000100000000B0000230D0000C90E0000810B0000000E000000100000000B0000C30D0000E70E00008F0B0000000F000000100000000B00005F0E0000040F00009C0B00000010000000100000000B0000F80E0000210F0000A90B00000000000000000000000C0000B70000006C0000001B0900000001000000000000000C0000840100007B000000340900000002000000000000000C00004E0200008A0000004C0900000003000000000000000C00001403000097000000630900000004000000000000000C0000D7030000A40000007A0900000005000000000000000C000096040000B1000000900900000006000000000000000C000052050000BD000000A50900000007000000000000000C00000A060000C8000000BA0900000008000000000000000C0000BF060000D3000000CE0900000009000000000000000C000071070000DD000000E2090000000A000000000000000C00001F080000E7000000F5090000000B000000000000000C0000CA080000F0000000080A0000000C000000000000000C000071090000F8000000190A0000000D000000000000000C0000150A0000000100002B0A0000000E000000000000000C0000B50A0000070100003B0A0000000F000000000000000C0000520B00000D0100004B0A00000010000000000000000C0000EC0B0000130100005B0A00000000000000010000000C0000EA00000045010000400900000001000000010000000C0000B701000056010000580900000002000000010000000C00008002000065010000700900000003000000010000000C00004703000075010000870900000004000000010000000C000009040000830100009E0900000005000000010000000C0000C904000091010000B40900000006000000010000000C0000850500009E010000C90900000007000000010000000C00003D060000AB010000DE0900000008000000010000000C0000F2060000B7010000F20900000009000000010000000C0000A4070000C3010000060A0000000A000000010000000C000052080000CE010000190A0000000B000000010000000C0000FD080000D80100002B0A0000000C000000010000000C0000A4090000E20100003D0A0000000D000000010000000C0000480A0000EB0100004E0A0000000E000000010000000C0000E80A0000F40100005E0A0000000F000000010000000C0000850B0000FC0100006E0A00000010000000010000000C00001F0C0000040200007D0A00000000000000020000000C00001C0100001D020000640900000001000000020000000C0000E90100002E0200007C0900000002000000020000000C0000B302000040020000940900000003000000020000000C00007903000050020000AB0900000004000000020000000C00003C04000060020000C20900000005000000020000000C0000FC04000070020000D80900000006000000020000000C0000B70500007E020000ED0900000007000000020000000C0000700600008D020000020A00000008000000020000000C0000250700009A020000160A00000009000000020000000C0000D7070000A7020000290A0000000A000000020000000C000085080000B40200003C0A0000000B000000020000000C000030090000C00200004E0A0000000C000000020000000C0000D7090000CB020000600A0000000D000000020000000C00007B0A0000D6020000710A0000000E000000020000000C00001C0B0000E0020000810A0000000F000000020000000C0000B90B0000E9020000910A00000010000000020000000C0000520C0000F2020000A00A00000000000000030000000C00004F010000F2020000880900000001000000030000000C00001C02000005030000A00900000002000000030000000C0000E602000018030000B80900000003000000030000000C0000AC0300002A030000CF0900000004000000030000000C00006F0400003C030000E60900000005000000030000000C00002E0500004C030000FB0900000006000000030000000C0000EA0500005D030000110A00000007000000030000000C0000A30600006C030000250A00000008000000030000000C0000580700007B030000390A00000009000000030000000C00000A0800008A0300004D0A0000000A000000030000000C0000B8080000980300005F0A0000000B000000030000000C000063090000A5030000710A0000000C000000030000000C00000A0A0000B2030000830A0000000D000000030000000C0000AE0A0000BE030000940A0000000E000000030000000C00004F0B0000C9030000A40A0000000F000000030000000C0000EC0B0000D4030000B40A00000010000000030000000C0000860C0000DF030000C30A00000000000000040000000C000081010000C6030000AC0900000001000000040000000C00004E020000DB030000C40900000002000000040000000C000018030000EF030000DC0900000003000000040000000C0000DF03000002040000F30900000004000000040000000C0000A104000015040000090A00000005000000040000000C000061050000270400001F0A00000006000000040000000C00001D06000039040000340A00000007000000040000000C0000D60600004A040000490A00000008000000040000000C00008B0700005B0400005D0A00000009000000040000000C00003C0800006B040000700A0000000A000000040000000C0000EB0800007A040000820A0000000B000000040000000C00009609000089040000950A0000000C000000040000000C00003D0A000097040000A60A0000000D000000040000000C0000E10A0000A5040000B70A0000000E000000040000000C0000820B0000B1040000C70A0000000F000000040000000C00001F0C0000BE040000D70A00000010000000040000000C0000B90C0000CA040000E60A00000000000000050000000C0000B401000098040000D00900000001000000050000000C000081020000AE040000E80900000002000000050000000C00004B030000C4040000000A00000003000000050000000C000011040000D9040000170A00000004000000050000000C0000D4040000ED0400002D0A00000005000000050000000C00009305000001050000430A00000006000000050000000C00004F06000014050000580A00000007000000050000000C000008070000270500006C0A00000008000000050000000C0000BD07000038050000800A00000009000000050000000C00006F0800004A050000930A0000000A000000050000000C00001E0900005B050000A60A0000000B000000050000000C0000C80900006B050000B70A0000000C000000050000000C0000700A00007A050000C90A0000000D000000050000000C0000140B000089050000DA0A0000000E000000050000000C0000B50B000098050000EA0A0000000F000000050000000C0000520C0000A6050000F90A00000010000000050000000C0000EC0C0000B3050000080B00000000000000060000000C0000E601000068050000F40900000001000000060000000C0000B3020000800500000C0A00000002000000060000000C00007D03000097050000230A00000003000000060000000C000043040000AD0500003A0A00000004000000060000000C000006050000C3050000500A00000005000000060000000C0000C6050000D8050000660A00000006000000060000000C000082060000ED0500007B0A00000007000000060000000C00003B070000010600008F0A00000008000000060000000C0000F007000014060000A30A00000009000000060000000C0000A208000027060000B60A0000000A000000060000000C00005009000039060000C80A0000000B000000060000000C0000FB0900004B060000DA0A0000000C000000060000000C0000A30A00005C060000EC0A0000000D000000060000000C0000470B00006D060000FC0A0000000E000000060000000C0000E80B00007C0600000C0B0000000F000000060000000C0000850C00008C0600001C0B00000010000000060000000C00001F0D00009A0600002B0B00000000000000070000000C00001802000037060000180A00000001000000070000000C0000E502000050060000300A00000002000000070000000C0000AF03000069060000470A00000003000000070000000C000076040000800600005E0A00000004000000070000000C00003905000098060000740A00000005000000070000000C0000F8050000AE060000890A00000006000000070000000C0000B4060000C40600009E0A00000007000000070000000C00006D070000DA060000B20A00000008000000070000000C000022080000EF060000C60A00000009000000070000000C0000D408000003070000D90A0000000A000000070000000C00008309000017070000EB0A0000000B000000070000000C00002E0A00002A070000FD0A0000000C000000070000000C0000D50A00003C0700000E0B0000000D000000070000000C00007A0B00004E0700001F0B0000000E000000070000000C00001A0C00005F0700002F0B0000000F000000070000000C0000B80C0000700700003E0B00000010000000070000000C0000520D0000800700004D0B00000000000000080000000C00004A020000040700003B0A00000001000000080000000C0000170300001F070000530A00000002000000080000000C0000E1030000380700006A0A00000003000000080000000C0000A804000052070000810A00000004000000080000000C00006B0500006A070000970A00000005000000080000000C00002A06000082070000AC0A00000006000000080000000C0000E70600009A070000C10A00000007000000080000000C00009F070000B1070000D50A00000008000000080000000C000055080000C7070000E90A00000009000000080000000C000007090000DD070000FC0A0000000A000000080000000C0000B5090000F20700000E0B0000000B000000080000000C0000600A000007080000200B0000000C000000080000000C0000080B00001B080000310B0000000D000000080000000C0000AC0B00002E080000410B0000000E000000080000000C00004D0C000041080000510B0000000F000000080000000C0000EA0C000053080000600B00000010000000080000000C0000840D0000640800006F0B00000000000000090000000C00007C020000CF0700005F0A00000001000000090000000C000049030000EB070000770A00000002000000090000000C000013040000070800008E0A00000003000000090000000C0000DA04000021080000A40A00000004000000090000000C00009D0500003B080000BA0A00000005000000090000000C00005D06000055080000CF0A00000006000000090000000C0000190700006E080000E40A00000007000000090000000C0000D207000086080000F80A00000008000000090000000C0000870800009E0800000C0B00000009000000090000000C000039090000B50800001E0B0000000A000000090000000C0000E8090000CC080000310B0000000B000000090000000C0000930A0000E2080000420B0000000C000000090000000C00003A0B0000F7080000530B0000000D000000090000000C0000DF0B00000C090000640B0000000E000000090000000C0000800C000020090000730B0000000F000000090000000C00001D0D000034090000830B00000010000000090000000C0000B70D000047090000910B000000000000000A0000000C0000AE02000099080000820A000000010000000A0000000C00007B030000B60800009A0A000000020000000A0000000C000045040000D3080000B10A000000030000000A0000000C00000C050000EF080000C70A000000040000000A0000000C0000CF0500000B090000DD0A000000050000000A0000000C00008F06000026090000F20A000000060000000A0000000C00004B07000040090000070B000000070000000A0000000C0000040800005A0900001B0B000000080000000A0000000C0000B9080000730900002E0B000000090000000A0000000C00006B0900008C090000410B0000000A0000000A0000000C00001A0A0000A4090000530B0000000B0000000A0000000C0000C50A0000BB090000650B0000000C0000000A0000000C00006D0B0000D2090000760B0000000D0000000A0000000C0000110C0000E8090000860B0000000E0000000A0000000C0000B20C0000FE090000960B0000000F0000000A0000000C00004F0D0000130A0000A50B000000100000000A0000000C0000E90D0000270A0000B30B000000000000000B0000000C0000DF02000061090000A60A000000010000000B0000000C0000AD0300007F090000BD0A000000020000000B0000000C0000770400009E090000D40A000000030000000B0000000C00003E050000BB090000EB0A000000040000000B0000000C000001060000D8090000000B000000050000000B0000000C0000C1060000F5090000150B000000060000000B0000000C00007D070000110A00002A0B000000070000000B0000000C0000360800002C0A00003E0B000000080000000B0000000C0000EB080000470A0000510B000000090000000B0000000C00009D090000610A0000640B0000000A0000000B0000000C00004C0A00007A0A0000760B0000000B0000000B0000000C0000F70A0000930A0000870B0000000C0000000B0000000C00009F0B0000AB0A0000980B0000000D0000000B0000000C0000430C0000C30A0000A80B0000000E0000000B0000000C0000E40C0000DA0A0000B80B0000000F0000000B0000000C0000820D0000F10A0000C70B000000100000000B0000000C00001C0E0000060B0000D50B000000000000000C0000000C000011030000270A0000C90A000000010000000C0000000C0000DE030000470A0000E00A000000020000000C0000000C0000A9040000670A0000F70A000000030000000C0000000C00006F050000860A00000D0B000000040000000C0000000C000033060000A40A0000230B000000050000000C0000000C0000F2060000C20A0000380B000000060000000C0000000C0000AF070000DF0A00004D0B000000070000000C0000000C000068080000FC0A0000600B000000080000000C0000000C00001D090000180B0000730B000000090000000C0000000C0000CF090000340B0000860B0000000A0000000C0000000C00007E0A00004F0B0000980B0000000B0000000C0000000C0000290B0000690B0000A90B0000000C0000000C0000000C0000D10B0000830B0000BA0B0000000D0000000C0000000C0000760C00009C0B0000CA0B0000000E0000000C0000000C0000170D0000B40B0000DA0B0000000F0000000C0000000C0000B40D0000CC0B0000E80B000000100000000C0000000C00004E0E0000E40B0000F70B000000000000000D0000000C000042030000EB0A0000EC0A000000010000000D0000000C0000100400000D0B0000030B000000020000000D0000000C0000DA0400002E0B00001A0B000000030000000D0000000C0000A10500004E0B0000300B000000040000000D0000000C0000640600006E0B0000460B000000050000000D0000000C0000240700008E0B00005B0B000000060000000D0000000C0000E1070000AC0B00006F0B000000070000000D0000000C00009A080000CB0B0000830B000000080000000D0000000C00004F090000E80B0000960B000000090000000D0000000C0000010A0000050C0000A80B0000000A0000000D0000000C0000B00A0000210C0000BA0B0000000B0000000D0000000C00005B0B00003D0C0000CB0B0000000C0000000D0000000C0000030C0000580C0000DC0B0000000D0000000D0000000C0000A80C0000730C0000EC0B0000000E0000000D0000000C0000490D00008D0C0000FB0B0000000F0000000D0000000C0000E60D0000A60C00000A0C000000100000000D0000000C0000810E0000BF0C0000180C000000000000000E0000000C000074030000AE0B00000F0B000000010000000E0000000C000042040000D10B0000260B000000020000000E0000000C00000C050000F30B00003D0B000000030000000E0000000C0000D3050000150C0000530B000000040000000E0000000C000096060000370C0000690B000000050000000E0000000C000056070000580C00007D0B000000060000000E0000000C000012080000780C0000920B000000070000000E0000000C0000CB080000970C0000A50B000000080000000E0000000C000081090000B60C0000B80B000000090000000E0000000C0000330A0000D50C0000CB0B0000000A0000000E0000000C0000E20A0000F30C0000DC0B0000000B0000000E0000000C00008D0B0000100D0000ED0B0000000C0000000E0000000C0000350C00002C0D0000FE0B0000000D0000000E0000000C0000DA0C0000480D00000E0C0000000E0000000E0000000C00007B0D0000640D00001D0C0000000F0000000E0000000C0000180E00007F0D00002C0C000000100000000E0000000C0000B30E0000990D00003A0C000000000000000F0000000C0000A50300006F0C0000320B000000010000000F0000000C000073040000930C0000490B000000020000000F0000000C00003D050000B70C0000600B000000030000000F0000000C000004060000DB0C0000760B000000040000000F0000000C0000C7060000FD0C00008B0B000000050000000F0000000C000087070000200D0000A00B000000060000000F0000000C000044080000410D0000B40B000000070000000F0000000C0000FD080000620D0000C70B000000080000000F0000000C0000B3090000830D0000DA0B000000090000000F0000000C0000650A0000A30D0000ED0B0000000A0000000F0000000C0000140B0000C20D0000FE0B0000000B0000000F0000000C0000BF0B0000E10D00000F0C0000000C0000000F0000000C0000670C0000FF0D0000200C0000000D0000000F0000000C00000C0D00001C0E0000300C0000000E0000000F0000000C0000AD0D0000390E00003F0C0000000F0000000F0000000C00004B0E0000550E00004D0C000000100000000F0000000C0000E50E0000710E00005B0C00000000000000100000000C0000D70300002E0D0000550B00000001000000100000000C0000A4040000540D00006C0B00000002000000100000000C00006F050000790D0000820B00000003000000100000000C0000350600009E0D0000980B00000004000000100000000C0000F9060000C20D0000AD0B00000005000000100000000C0000B9070000E60D0000C20B00000006000000100000000C000075080000090E0000D60B00000007000000100000000C00002F0900002C0E0000EA0B00000008000000100000000C0000E40900004E0E0000FC0B00000009000000100000000C0000970A00006F0E00000F0C0000000A000000100000000C0000450B0000900E0000200C0000000B000000100000000C0000F10B0000B00E0000310C0000000C000000100000000C0000990C0000CF0E0000410C0000000D000000100000000C00003E0D0000EE0E0000510C0000000E000000100000000C0000DF0D00000D0F0000600C0000000F000000100000000C00007C0E00002A0F00006F0C00000010000000100000000C0000170F0000480F00007D0C00000000000000000000000D0000BF0000006E000000CD0900000001000000000000000D00008D0100007D000000E60900000002000000000000000D0000580200008B000000FF0900000003000000000000000D00001F03000099000000180A00000004000000000000000D0000E3030000A60000002F0A00000005000000000000000D0000A3040000B2000000460A00000006000000000000000D000060050000BE0000005D0A00000007000000000000000D00001A060000C9000000730A00000008000000000000000D0000D0060000D3000000880A00000009000000000000000D000083070000DD0000009D0A0000000A000000000000000D000032080000E6000000B10A0000000B000000000000000D0000DE080000EF000000C40A0000000C000000000000000D000086090000F7000000D70A0000000D000000000000000D00002B0A0000FF000000E90A0000000E000000000000000D0000CD0A000006010000FB0A0000000F000000000000000D00006B0B00000C0100000C0B00000010000000000000000D0000060C0000120100001C0B00000000000000010000000D0000F200000049010000F20900000001000000010000000D0000C00100005A0100000C0A00000002000000010000000D00008B02000069010000240A00000003000000010000000D000052030000780100003D0A00000004000000010000000D00001604000086010000540A00000005000000010000000D0000D6040000940100006B0A00000006000000010000000D000093050000A1010000820A00000007000000010000000D00004D060000AE010000970A00000008000000010000000D000003070000BA010000AD0A00000009000000010000000D0000B6070000C5010000C10A0000000A000000010000000D000065080000D0010000D50A0000000B000000010000000D000011090000DA010000E80A0000000C000000010000000D0000BA090000E4010000FB0A0000000D000000010000000D00005F0A0000ED0100000D0B0000000E000000010000000D0000000B0000F50100001F0B0000000F000000010000000D00009F0B0000FD010000300B00000010000000010000000D0000390C000005020000400B00000000000000020000000D00002401000023020000170A00000001000000020000000D0000F301000034020000310A00000002000000020000000D0000BD020000450200004A0A00000003000000020000000D00008503000056020000620A00000004000000020000000D00004904000066020000790A00000005000000020000000D00000905000075020000900A00000006000000020000000D0000C605000083020000A60A00000007000000020000000D00008006000092020000BC0A00000008000000020000000D0000360700009F020000D10A00000009000000020000000D0000E9070000AC020000E60A0000000A000000020000000D000099080000B8020000F90A0000000B000000020000000D000045090000C40200000D0B0000000C000000020000000D0000ED090000CF0200001F0B0000000D000000020000000D0000920A0000D9020000310B0000000E000000020000000D0000340B0000E3020000430B0000000F000000020000000D0000D20B0000ED020000530B00000010000000020000000D00006D0C0000F5020000640B00000000000000030000000D000057010000FA0200003D0A00000001000000030000000D0000250200000D030000560A00000002000000030000000D0000F0020000200300006E0A00000003000000030000000D0000B803000032030000870A00000004000000030000000D00007C040000430300009E0A00000005000000030000000D00003C05000054030000B50A00000006000000030000000D0000F905000064030000CB0A00000007000000030000000D0000B306000073030000E10A00000008000000030000000D00006907000082030000F60A00000009000000030000000D00001C080000910300000A0B0000000A000000030000000D0000CC0800009E0300001E0B0000000B000000030000000D000078090000AC030000310B0000000C000000030000000D0000200A0000B8030000430B0000000D000000030000000D0000C50A0000C4030000550B0000000E000000030000000D0000670B0000CF030000670B0000000F000000030000000D0000050C0000DA030000770B00000010000000030000000D0000A00C0000E4030000870B00000000000000040000000D00008A010000D0030000620A00000001000000040000000D000058020000E50300007B0A00000002000000040000000D000023030000F9030000930A00000003000000040000000D0000EA0300000C040000AB0A00000004000000040000000D0000AE0400001F040000C30A00000005000000040000000D00006F05000031040000D90A00000006000000040000000D00002C06000043040000EF0A00000007000000040000000D0000E606000054040000050B00000008000000040000000D00009C070000640400001A0B00000009000000040000000D00004F080000740400002E0B0000000A000000040000000D0000FF08000083040000420B0000000B000000040000000D0000AB09000092040000550B0000000C000000040000000D0000530A0000A0040000670B0000000D000000040000000D0000F90A0000AD040000790B0000000E000000040000000D00009A0B0000BA0400008A0B0000000F000000040000000D0000390C0000C60400009B0B00000010000000040000000D0000D40C0000D2040000AB0B00000000000000050000000D0000BC010000A4040000860A00000001000000050000000D00008A020000BA040000A00A00000002000000050000000D000055030000D0040000B80A00000003000000050000000D00001D040000E5040000D00A00000004000000050000000D0000E1040000F9040000E70A00000005000000050000000D0000A20500000C050000FE0A00000006000000050000000D00005F06000020050000140B00000007000000050000000D00001907000032050000290B00000008000000050000000D0000CF070000440500003E0B00000009000000050000000D00008208000055050000520B0000000A000000050000000D00003209000066050000660B0000000B000000050000000D0000DE09000076050000790B0000000C000000050000000D0000860A0000850500008B0B0000000D000000050000000D00002C0B0000940500009D0B0000000E000000050000000D0000CD0B0000A3050000AE0B0000000F000000050000000D00006C0C0000B0050000BF0B00000010000000050000000D0000070D0000BE050000CE0B00000000000000060000000D0000EE01000077050000AB0A00000001000000060000000D0000BD0200008E050000C40A00000002000000060000000D000088030000A5050000DD0A00000003000000060000000D00004F040000BB050000F40A00000004000000060000000D000013050000D10500000C0B00000005000000060000000D0000D4050000E6050000220B00000006000000060000000D000091060000FB050000380B00000007000000060000000D00004B0700000F0600004D0B00000008000000060000000D00000208000022060000620B00000009000000060000000D0000B508000035060000760B0000000A000000060000000D000064090000470600008A0B0000000B000000060000000D0000110A0000590600009D0B0000000C000000060000000D0000B90A00006A060000AF0B0000000D000000060000000D00005F0B00007A060000C10B0000000E000000060000000D0000010C00008A060000D20B0000000F000000060000000D00009F0C000099060000E20B00000010000000060000000D00003A0D0000A8060000F20B00000000000000070000000D00002002000047060000D00A00000001000000070000000D0000EF02000060060000E90A00000002000000070000000D0000BA03000079060000010B00000003000000070000000D00008204000090060000190B00000004000000070000000D000046050000A8060000300B00000005000000070000000D000007060000BE060000460B00000006000000070000000D0000C4060000D40600005C0B00000007000000070000000D00007E070000EA060000720B00000008000000070000000D000034080000FF060000860B00000009000000070000000D0000E7080000130700009A0B0000000A000000070000000D00009709000026070000AE0B0000000B000000070000000D0000430A000039070000C00B0000000C000000070000000D0000EC0A00004C070000D30B0000000D000000070000000D0000910B00005E070000E40B0000000E000000070000000D0000330C00006F070000F50B0000000F000000070000000D0000D20C000080070000050C00000010000000070000000D00006D0D000090070000150C00000000000000080000000D00005302000016070000F50A00000001000000080000000D000021030000310700000D0B00000002000000080000000D0000EC0300004B070000260B00000003000000080000000D0000B4040000640700003D0B00000004000000080000000D0000780500007D070000540B00000005000000080000000D000039060000950700006B0B00000006000000080000000D0000F6060000AC070000800B00000007000000080000000D0000B0070000C3070000950B00000008000000080000000D000067080000D9070000AA0B00000009000000080000000D00001A090000EF070000BE0B0000000A000000080000000D0000CA09000004080000D10B0000000B000000080000000D0000760A000019080000E40B0000000C000000080000000D00001F0B00002D080000F60B0000000D000000080000000D0000C40B000040080000080C0000000E000000080000000D0000660C000053080000180C0000000F000000080000000D0000050D000065080000290C00000010000000080000000D0000A00D000076080000380C00000000000000090000000D000085020000E4070000190B00000001000000090000000D000053030000FF070000320B00000002000000090000000D00001E0400001B0800004A0B00000003000000090000000D0000E604000036080000610B00000004000000090000000D0000AA05000050080000780B00000005000000090000000D00006B060000690800008F0B00000006000000090000000D00002907000082080000A40B00000007000000090000000D0000E30700009B080000B90B00000008000000090000000D000099080000B2080000CE0B00000009000000090000000D00004D090000CA080000E20B0000000A000000090000000D0000FC090000E0080000F50B0000000B000000090000000D0000A90A0000F6080000070C0000000C000000090000000D0000510B00000B090000190C0000000D000000090000000D0000F70B0000200900002B0C0000000E000000090000000D0000990C0000340900003C0C0000000F000000090000000D0000380D0000480900004C0C00000010000000090000000D0000D30D00005B0900005B0C000000000000000A0000000D0000B6020000AF0800003D0B000000010000000A0000000D000085030000CD080000560B000000020000000A0000000D000050040000E90800006E0B000000030000000A0000000D00001805000006090000860B000000040000000A0000000D0000DC050000210900009C0B000000050000000A0000000D00009D0600003C090000B30B000000060000000A0000000D00005B07000057090000C80B000000070000000A0000000D00001508000070090000DD0B000000080000000A0000000D0000CC0800008A090000F10B000000090000000A0000000D00007F090000A2090000050C0000000A0000000A0000000D00002F0A0000BA090000180C0000000B0000000A0000000D0000DB0A0000D20900002B0C0000000C0000000A0000000D0000840B0000E90900003D0C0000000D0000000A0000000D00002A0C0000FF0900004E0C0000000E0000000A0000000D0000CC0C0000150A00005F0C0000000F0000000A0000000D00006A0D00002A0A00006F0C000000100000000A0000000D0000060E00003E0A00007E0C000000000000000B0000000D0000E802000079090000620B000000010000000B0000000D0000B7030000980900007A0B000000020000000B0000000D000082040000B6090000920B000000030000000B0000000D00004A050000D4090000AA0B000000040000000B0000000D00000F060000F1090000C00B000000050000000B0000000D0000CF0600000D0A0000D60B000000060000000B0000000D00008D070000290A0000EC0B000000070000000B0000000D000047080000450A0000010C000000080000000B0000000D0000FE0800005F0A0000150C000000090000000B0000000D0000B1090000790A0000290C0000000A0000000B0000000D0000610A0000930A00003C0C0000000B0000000B0000000D00000D0B0000AC0A00004E0C0000000C0000000B0000000D0000B60B0000C40A0000600C0000000D0000000B0000000D00005C0C0000DC0A0000710C0000000E0000000B0000000D0000FE0C0000F30A0000820C0000000F0000000B0000000D00009D0D00000A0B0000920C000000100000000B0000000D0000380E0000200B0000A10C000000000000000C0000000D00001A030000410A0000860B000000010000000C0000000D0000E9030000610A00009E0B000000020000000C0000000D0000B4040000810A0000B60B000000030000000C0000000D00007C050000A00A0000CD0B000000040000000C0000000D000040060000BF0A0000E40B000000050000000C0000000D000001070000DD0A0000FA0B000000060000000C0000000D0000BF070000FA0A0000100C000000070000000C0000000D000079080000170B0000240C000000080000000C0000000D000030090000330B0000390C000000090000000C0000000D0000E30900004F0B00004C0C0000000A0000000C0000000D0000930A00006A0B00005F0C0000000B0000000C0000000D0000400B0000840B0000710C0000000C0000000C0000000D0000E90B00009E0B0000830C0000000D0000000C0000000D00008E0C0000B70B0000940C0000000E0000000C0000000D0000310D0000D00B0000A50C0000000F0000000C0000000D0000CF0D0000E80B0000B50C000000100000000C0000000D00006B0E0000FF0B0000C40C000000000000000D0000000D00004C030000070B0000AA0B000000010000000D0000000D00001A040000290B0000C20B000000020000000D0000000D0000E60400004A0B0000DA0B000000030000000D0000000D0000AE0500006B0B0000F10B000000040000000D0000000D0000720600008B0B0000080C000000050000000D0000000D000033070000AB0B00001E0C000000060000000D0000000D0000F1070000C90B0000330C000000070000000D0000000D0000AB080000E80B0000480C000000080000000D0000000D000062090000050C00005C0C000000090000000D0000000D0000150A0000220C00006F0C0000000A0000000D0000000D0000C50A00003F0C0000820C0000000B0000000D0000000D0000720B00005B0C0000940C0000000C0000000D0000000D00001B0C0000760C0000A60C0000000D0000000D0000000D0000C10C0000910C0000B70C0000000E0000000D0000000D0000630D0000AB0C0000C80C0000000F0000000D0000000D0000020E0000C40C0000D70C000000100000000D0000000D00009D0E0000DD0C0000E70C000000000000000E0000000D00007D030000CC0B0000CE0B000000010000000E0000000D00004C040000EF0B0000E60B000000020000000E0000000D000017050000120C0000FE0B000000030000000E0000000D0000DF050000340C0000150C000000040000000E0000000D0000A4060000560C00002B0C000000050000000E0000000D000065070000770C0000410C000000060000000E0000000D000023080000970C0000560C000000070000000E0000000D0000DD080000B70C00006B0C000000080000000E0000000D000094090000D60C00007F0C000000090000000E0000000D0000470A0000F40C0000930C0000000A0000000E0000000D0000F70A0000120D0000A50C0000000B0000000E0000000D0000A40B0000300D0000B70C0000000C0000000E0000000D00004D0C00004C0D0000C90C0000000D0000000E0000000D0000F30C0000690D0000DA0C0000000E0000000E0000000D0000950D0000840D0000EA0C0000000F0000000E0000000D0000340E00009F0D0000FA0C000000100000000E0000000D0000D00E0000B90D0000090D000000000000000F0000000D0000AF0300008F0C0000F20B000000010000000F0000000D00007D040000B40C00000A0C000000020000000F0000000D000049050000D80C0000220C000000030000000F0000000D000011060000FC0C0000390C000000040000000F0000000D0000D60600001F0D00004F0C000000050000000F0000000D000097070000410D0000650C000000060000000F0000000D000055080000630D00007A0C000000070000000F0000000D00000F090000840D00008E0C000000080000000F0000000D0000C6090000A50D0000A20C000000090000000F0000000D0000790A0000C50D0000B60C0000000A0000000F0000000D0000290B0000E40D0000C80C0000000B0000000F0000000D0000D60B0000030E0000DA0C0000000C0000000F0000000D00007F0C0000210E0000EC0C0000000D0000000F0000000D0000250D00003F0E0000FD0C0000000E0000000F0000000D0000C70D00005C0E00000D0D0000000F0000000F0000000D0000660E0000780E00001D0D000000100000000F0000000D0000020F0000940E00002C0D00000000000000100000000D0000E0030000500D0000150C00000001000000100000000D0000AF040000770D00002E0C00000002000000100000000D00007A0500009C0D0000450C00000003000000100000000D000043060000C10D00005C0C00000004000000100000000D000007070000E60D0000720C00000005000000100000000D0000C80700000A0E0000880C00000006000000100000000D0000860800002D0E00009D0C00000007000000100000000D0000410900004F0E0000B10C00000008000000100000000D0000F8090000720E0000C50C00000009000000100000000D0000AB0A0000930E0000D90C0000000A000000100000000D00005B0B0000B40E0000EB0C0000000B000000100000000D0000080C0000D40E0000FD0C0000000C000000100000000D0000B10C0000F40E00000E0D0000000D000000100000000D0000570D0000130F00001F0D0000000E000000100000000D0000FA0D0000320F00002F0D0000000F000000100000000D0000990E00004F0F00003F0D00000010000000100000000D0000340F00006D0F00004E0D00000000000000000000000E0000C60000006F0000007C0A00000001000000000000000E0000950100007E000000960A00000002000000000000000E0000610200008C000000B00A00000003000000000000000E00002903000099000000CA0A00000004000000000000000E0000EE030000A6000000E20A00000005000000000000000E0000B0040000B2000000FA0A00000006000000000000000E00006E050000BD000000120B00000007000000000000000E000029060000C8000000290B00000008000000000000000E0000E0060000D30000003F0B00000009000000000000000E000094070000DC000000540B0000000A000000000000000E000044080000E5000000690B0000000B000000000000000E0000F1080000EE0000007E0B0000000C000000000000000E00009B090000F6000000920B0000000D000000000000000E0000410A0000FD000000A50B0000000E000000000000000E0000E40A000004010000B70B0000000F000000000000000E0000830B00000A010000C90B00000010000000000000000E00001F0C000010010000DB0B00000000000000010000000E0000F90000004C010000A20A00000001000000010000000E0000C80100005C010000BD0A00000002000000010000000E0000940200006C010000D60A00000003000000010000000E00005C0300007B010000F00A00000004000000010000000E00002104000089010000080B00000005000000010000000E0000E304000096010000200B00000006000000010000000E0000A1050000A3010000370B00000007000000010000000E00005C060000B00100004E0B00000008000000010000000E000013070000BC010000640B00000009000000010000000E0000C7070000C70100007A0B0000000A000000010000000E000078080000D10100008F0B0000000B000000010000000E000025090000DB010000A30B0000000C000000010000000E0000CE090000E5010000B70B0000000D000000010000000E0000740A0000EE010000CA0B0000000E000000010000000E0000170B0000F6010000DC0B0000000F000000010000000E0000B70B0000FE010000EE0B00000010000000010000000E0000530C000005020000FF0B00000000000000020000000E00002B01000028020000C80A00000001000000020000000E0000FB01000039020000E30A00000002000000020000000E0000C70200004A020000FC0A00000003000000020000000E00008F0300005A020000150B00000004000000020000000E0000540400006A0200002E0B00000005000000020000000E00001605000079020000460B00000006000000020000000E0000D4050000880200005D0B00000007000000020000000E00008F06000095020000740B00000008000000020000000E000046070000A30200008A0B00000009000000020000000E0000FA070000AF0200009F0B0000000A000000020000000E0000AB080000BC020000B40B0000000B000000020000000E000058090000C7020000C80B0000000C000000020000000E0000020A0000D2020000DC0B0000000D000000020000000E0000A80A0000DC020000EF0B0000000E000000020000000E00004B0B0000E6020000010C0000000F000000020000000E0000EA0B0000EF020000130C00000010000000020000000E0000860C0000F8020000240C00000000000000030000000E00005E01000001030000EE0A00000001000000030000000E00002D02000014030000090B00000002000000030000000E0000F902000027030000220B00000003000000030000000E0000C2030000380300003B0B00000004000000030000000E0000870400004A030000540B00000005000000030000000E0000490500005A0300006C0B00000006000000030000000E0000070600006A030000830B00000007000000030000000E0000C20600007A030000990B00000008000000030000000E00007A07000088030000AF0B00000009000000030000000E00002E08000097030000C50B0000000A000000030000000E0000DE080000A4030000D90B0000000B000000030000000E00008B090000B1030000ED0B0000000C000000030000000E0000350A0000BE030000010C0000000D000000030000000E0000DB0A0000C9030000140C0000000E000000030000000E00007E0B0000D5030000260C0000000F000000030000000E00001E0C0000DF030000380C00000010000000030000000E0000BA0C0000E9030000490C00000000000000040000000E000091010000D9030000140B00000001000000040000000E000060020000EE0300002E0B00000002000000040000000E00002C03000002040000480B00000003000000040000000E0000F503000015040000610B00000004000000040000000E0000BA04000027040000790B00000005000000040000000E00007C0500003A040000910B00000006000000040000000E00003A0600004B040000A80B00000007000000040000000E0000F50600005C040000BF0B00000008000000040000000E0000AD0700006C040000D50B00000009000000040000000E0000610800007C040000EA0B0000000A000000040000000E0000110900008B040000FE0B0000000B000000040000000E0000BF0900009A040000130C0000000C000000040000000E0000680A0000A7040000260C0000000D000000040000000E00000F0B0000B5040000390C0000000E000000040000000E0000B20B0000C10400004B0C0000000F000000040000000E0000510C0000CE0400005D0C00000010000000040000000E0000ED0C0000D90400006E0C00000000000000050000000E0000C3010000AF0400003A0B00000001000000050000000E000093020000C5040000540B00000002000000050000000E00005F030000DB0400006E0B00000003000000050000000E000028040000EF040000870B00000004000000050000000E0000ED040000040500009F0B00000005000000050000000E0000AF05000017050000B60B00000006000000050000000E00006D0600002A050000CD0B00000007000000050000000E0000280700003D050000E40B00000008000000050000000E0000E00700004E050000FA0B00000009000000050000000E000094080000600500000F0C0000000A000000050000000E00004409000070050000230C0000000B000000050000000E0000F209000080050000370C0000000C000000050000000E00009C0A0000900500004B0C0000000D000000050000000E0000420B00009E0500005E0C0000000E000000050000000E0000E50B0000AD050000700C0000000F000000050000000E0000850C0000BA050000810C00000010000000050000000E0000210D0000C7050000920C00000000000000060000000E0000F601000084050000600B00000001000000060000000E0000C50200009B0500007A0B00000002000000060000000E000091030000B2050000930B00000003000000060000000E00005A040000C8050000AC0B00000004000000060000000E00001F050000DE050000C40B00000005000000060000000E0000E1050000F3050000DC0B00000006000000060000000E0000A006000008060000F30B00000007000000060000000E00005B0700001B060000090C00000008000000060000000E0000120800002F0600001F0C00000009000000060000000E0000C708000041060000340C0000000A000000060000000E00007709000054060000480C0000000B000000060000000E0000250A0000650600005C0C0000000C000000060000000E0000CF0A0000760600006F0C0000000D000000060000000E0000750B000086060000820C0000000E000000060000000E0000180C000096060000940C0000000F000000060000000E0000B80C0000A5060000A60C00000010000000060000000E0000540D0000B4060000B60C00000000000000070000000E00002802000057060000860B00000001000000070000000E0000F7020000700600009F0B00000002000000070000000E0000C403000088060000B90B00000003000000070000000E00008D040000A0060000D10B00000004000000070000000E000052050000B7060000EA0B00000005000000070000000E000014060000CD060000010C00000006000000070000000E0000D2060000E3060000180C00000007000000070000000E00008E070000F90600002E0C00000008000000070000000E0000450800000D070000440C00000009000000070000000E0000FA08000022070000590C0000000A000000070000000E0000AA090000350700006D0C0000000B000000070000000E0000580A000048070000810C0000000C000000070000000E0000020B00005B070000940C0000000D000000070000000E0000A80B00006C070000A70C0000000E000000070000000E00004B0C00007E070000B90C0000000F000000070000000E0000EB0C00008E070000CA0C00000010000000070000000E0000870D00009E070000DB0C00000000000000080000000E00005A02000028070000AB0B00000001000000080000000E00002A03000042070000C50B00000002000000080000000E0000F60300005C070000DE0B00000003000000080000000E0000BF04000075070000F70B00000004000000080000000E0000840500008E0700000F0C00000005000000080000000E000046060000A6070000260C00000006000000080000000E000005070000BD0700003D0C00000007000000080000000E0000C0070000D4070000530C00000008000000080000000E000078080000EA070000690C00000009000000080000000E00002C090000000800007E0C0000000A000000080000000E0000DD09000015080000920C0000000B000000080000000E00008B0A00002A080000A60C0000000C000000080000000E0000350B00003E080000B90C0000000D000000080000000E0000DB0B000051080000CB0C0000000E000000080000000E00007E0C000064080000DD0C0000000F000000080000000E00001E0D000076080000EE0C00000010000000080000000E0000BB0D000087080000FF0C00000000000000090000000E00008C020000F7070000D10B00000001000000090000000E00005C03000013080000EA0B00000002000000090000000E0000280400002E080000030C00000003000000090000000E0000F1040000490800001C0C00000004000000090000000E0000B705000063080000340C00000005000000090000000E0000790600007D0800004B0C00000006000000090000000E00003707000096080000620C00000007000000090000000E0000F3070000AE080000780C00000008000000090000000E0000AB080000C60800008D0C00000009000000090000000E00005F090000DD080000A20C0000000A000000090000000E0000100A0000F3080000B60C0000000B000000090000000E0000BD0A000009090000CA0C0000000C000000090000000E0000670B00001F090000DD0C0000000D000000090000000E00000E0C000034090000EF0C0000000E000000090000000E0000B10C000048090000010D0000000F000000090000000E0000510D00005B090000120D00000010000000090000000E0000EE0D00006E090000230D000000000000000A0000000E0000BE020000C4080000F60B000000010000000A0000000E00008E030000E20800000F0C000000020000000A0000000E00005A040000FF080000290C000000030000000A0000000E0000230500001B090000410C000000040000000A0000000E0000E905000037090000590C000000050000000A0000000E0000AB06000052090000700C000000060000000A0000000E00006A0700006C090000870C000000070000000A0000000E000025080000860900009D0C000000080000000A0000000E0000DD0800009F090000B20C000000090000000A0000000E000091090000B8090000C70C0000000A0000000A0000000E0000420A0000D0090000DB0C0000000B0000000A0000000E0000F00A0000E7090000EE0C0000000C0000000A0000000E00009A0B0000FE090000010D0000000D0000000A0000000E0000410C0000150A0000140D0000000E0000000A0000000E0000E40C00002A0A0000250D0000000F0000000A0000000E0000840D00003F0A0000360D000000100000000A0000000E0000210E0000540A0000470D000000000000000B0000000E0000F0020000900900001B0C000000010000000B0000000E0000C0030000AF090000350C000000020000000B0000000E00008C040000CE0900004E0C000000030000000B0000000E000055050000EB090000660C000000040000000B0000000E00001B060000080A00007E0C000000050000000B0000000E0000DD060000250A0000950C000000060000000B0000000E00009C070000410A0000AB0C000000070000000B0000000E0000570800005C0A0000C10C000000080000000B0000000E00000F090000770A0000D60C000000090000000B0000000E0000C4090000910A0000EB0C0000000A0000000B0000000E0000750A0000AB0A0000FF0C0000000B0000000B0000000E0000230B0000C40A0000130D0000000C0000000B0000000E0000CD0B0000DC0A0000260D0000000D0000000B0000000E0000740C0000F40A0000380D0000000E0000000B0000000E0000170D00000B0B0000490D0000000F0000000B0000000E0000B70D0000220B00005A0D000000100000000B0000000E0000530E0000380B00006B0D000000000000000C0000000E0000220300005A0A0000400C000000010000000C0000000E0000F20300007B0A00005A0C000000020000000C0000000E0000BE0400009B0A0000730C000000030000000C0000000E000087050000BA0A00008B0C000000040000000C0000000E00004D060000D90A0000A20C000000050000000C0000000E00000F070000F70A0000B90C000000060000000C0000000E0000CE070000140B0000D00C000000070000000C0000000E00008A080000310B0000E60C000000080000000C0000000E0000420900004D0B0000FB0C000000090000000C0000000E0000F6090000690B0000100D0000000A0000000C0000000E0000A70A0000840B0000230D0000000B0000000C0000000E0000550B00009E0B0000370D0000000C0000000C0000000E0000FF0B0000B80B00004A0D0000000D0000000C0000000E0000A60C0000D20B00005C0D0000000E0000000C0000000E00004A0D0000EA0B00006D0D0000000F0000000C0000000E0000EA0D0000020C00007E0D000000100000000C0000000E0000860E00001A0C00008E0D000000000000000D0000000E000054030000230B0000650C000000010000000D0000000E000024040000450B00007F0C000000020000000D0000000E0000F0040000660B0000970C000000030000000D0000000E0000B9050000870B0000B00C000000040000000D0000000E00007F060000A70B0000C70C000000050000000D0000000E000041070000C70B0000DE0C000000060000000D0000000E000000080000E50B0000F40C000000070000000D0000000E0000BC080000040C00000A0D000000080000000D0000000E000074090000220C00001F0D000000090000000D0000000E0000280A00003F0C0000340D0000000A0000000D0000000E0000DA0A00005B0C0000480D0000000B0000000D0000000E0000870B0000770C00005B0D0000000C0000000D0000000E0000320C0000930C00006E0D0000000D0000000D0000000E0000D90C0000AD0C0000800D0000000E0000000D0000000E00007C0D0000C80C0000910D0000000F0000000D0000000E00001C0E0000E10C0000A20D000000100000000D0000000E0000B90E0000FA0C0000B20D000000000000000E0000000E000085030000EA0B00008A0C000000010000000E0000000E0000550400000D0C0000A30C000000020000000E0000000E000022050000300C0000BC0C000000030000000E0000000E0000EB050000520C0000D40C000000040000000E0000000E0000B1060000740C0000EC0C000000050000000E0000000E000073070000950C0000030D000000060000000E0000000E000032080000B50C0000190D000000070000000E0000000E0000EE080000D50C00002E0D000000080000000E0000000E0000A6090000F40C0000430D000000090000000E0000000E00005B0A0000130D0000580D0000000A0000000E0000000E00000C0B0000310D00006C0D0000000B0000000E0000000E0000BA0B00004E0D00007F0D0000000C0000000E0000000E0000640C00006B0D0000910D0000000D0000000E0000000E00000B0D0000880D0000A30D0000000E0000000E0000000E0000AF0D0000A30D0000B50D0000000F0000000E0000000E00004F0E0000BE0D0000C60D000000100000000E0000000E0000EB0E0000D90D0000D60D000000000000000F0000000E0000B7030000AF0C0000AF0C000000010000000F0000000E000087040000D40C0000C80C000000020000000F0000000E000054050000F80C0000E10C000000030000000F0000000E00001D0600001C0D0000F90C000000040000000F0000000E0000E30600003F0D0000100D000000050000000F0000000E0000A5070000610D0000270D000000060000000F0000000E000064080000830D00003D0D000000070000000F0000000E000020090000A40D0000530D000000080000000F0000000E0000D8090000C50D0000680D000000090000000F0000000E00008D0A0000E50D00007C0D0000000A0000000F0000000E00003E0B0000050E0000900D0000000B0000000F0000000E0000EC0B0000240E0000A30D0000000C0000000F0000000E0000960C0000420E0000B50D0000000D0000000F0000000E00003D0D0000600E0000C70D0000000E0000000F0000000E0000E10D00007D0E0000D80D0000000F0000000F0000000E0000810E00009A0E0000E90D000000100000000F0000000E00001E0F0000B60E0000F90D00000000000000100000000E0000E8030000720D0000D40C00000001000000100000000E0000B8040000980D0000ED0C00000002000000100000000E000085050000BE0D0000050D00000003000000100000000E00004F060000E30D00001D0D00000004000000100000000E000014070000080E0000340D00000005000000100000000E0000D70700002C0E00004B0D00000006000000100000000E0000960800004F0E0000610D00000007000000100000000E000052090000720E0000770D00000008000000100000000E00000A0A0000940E00008C0D00000009000000100000000E0000BF0A0000B60E0000A00D0000000A000000100000000E0000700B0000D70E0000B30D0000000B000000100000000E00001E0C0000F80E0000C60D0000000C000000100000000E0000C80C0000170F0000D90D0000000D000000100000000E0000700D0000370F0000EB0D0000000E000000100000000E0000130E0000550F0000FC0D0000000F000000100000000E0000B30E0000740F00000C0E00000010000000100000000E0000500F0000910F00001C0E00000000000000000000000F0000CB0000006F000000280B00000001000000000000000F00009C0100007E000000440B00000002000000000000000F0000690200008B0000005F0B00000003000000000000000F00003203000098000000790B00000004000000000000000F0000F8030000A5000000920B00000005000000000000000F0000BB040000B1000000AC0B00000006000000000000000F00007A050000BC000000C40B00000007000000000000000F000036060000C7000000DC0B00000008000000000000000F0000EF060000D1000000F30B00000009000000000000000F0000A4070000DA0000000A0C0000000A000000000000000F000055080000E3000000200C0000000B000000000000000F000003090000EC000000350C0000000C000000000000000F0000AE090000F30000004A0C0000000D000000000000000F0000550A0000FA0000005E0C0000000E000000000000000F0000F90A000001010000710C0000000F000000000000000F0000990B000007010000840C00000010000000000000000F0000360C00000C010000970C00000000000000010000000F0000FE0000004F0100004F0B00000001000000010000000F0000CF0100005E0100006B0B00000002000000010000000F00009C0200006D010000860B00000003000000010000000F0000650300007C010000A00B00000004000000010000000F00002C0400008A010000B90B00000005000000010000000F0000EE04000097010000D20B00000006000000010000000F0000AE050000A4010000EB0B00000007000000010000000F00006A060000B0010000020C00000008000000010000000F000022070000BC0100001A0C00000009000000010000000F0000D7070000C7010000300C0000000A000000010000000F000089080000D2010000460C0000000B000000010000000F000037090000DB0100005B0C0000000C000000010000000F0000E2090000E5010000700C0000000D000000010000000F0000890A0000ED010000840C0000000E000000010000000F00002D0B0000F5010000970C0000000F000000010000000F0000CD0B0000FD010000AA0C00000010000000010000000F00006A0C000004020000BC0C00000000000000020000000F0000310100002C020000760B00000001000000020000000F0000020200003D020000920B00000002000000020000000F0000CF0200004E020000AD0B00000003000000020000000F0000980300005E020000C70B00000004000000020000000F00005F0400006D020000E00B00000005000000020000000F0000220500007C020000F90B00000006000000020000000F0000E10500008B020000110C00000007000000020000000F00009D06000098020000290C00000008000000020000000F000055070000A6020000400C00000009000000020000000F00000B080000B2020000560C0000000A000000020000000F0000BC080000BE0200006C0C0000000B000000020000000F00006B090000C9020000810C0000000C000000020000000F0000150A0000D4020000960C0000000D000000020000000F0000BD0A0000DE020000AA0C0000000E000000020000000F0000610B0000E8020000BD0C0000000F000000020000000F0000010C0000F1020000D00C00000010000000020000000F00009E0C0000F9020000E20C00000000000000030000000F000064010000070300009D0B00000001000000030000000F0000340200001A030000B90B00000002000000030000000F0000020300002D030000D30B00000003000000030000000F0000CB0300003E030000ED0B00000004000000030000000F0000920400004F030000070C00000005000000030000000F00005505000060030000200C00000006000000030000000F0000140600006F030000380C00000007000000030000000F0000D00600007F0300004F0C00000008000000030000000F0000890700008D030000660C00000009000000030000000F00003E0800009B0300007D0C0000000A000000030000000F0000F0080000A9030000920C0000000B000000030000000F00009E090000B6030000A80C0000000C000000030000000F0000490A0000C2030000BC0C0000000D000000030000000F0000F00A0000CE030000D00C0000000E000000030000000F0000940B0000D9030000E30C0000000F000000030000000F0000350C0000E3030000F60C00000010000000030000000F0000D20C0000ED030000080D00000000000000040000000F000097010000E1030000C40B00000001000000040000000F000067020000F6030000E00B00000002000000040000000F00003403000009040000FA0B00000003000000040000000F0000FE0300001D040000140C00000004000000040000000F0000C50400002F0400002D0C00000005000000040000000F00008805000041040000460C00000006000000040000000F000047060000530400005E0C00000007000000040000000F00000307000063040000760C00000008000000040000000F0000BC070000730400008D0C00000009000000040000000F00007108000083040000A30C0000000A000000040000000F00002309000092040000B80C0000000B000000040000000F0000D1090000A0040000CE0C0000000C000000040000000F00007C0A0000AE040000E20C0000000D000000040000000F0000240B0000BB040000F60C0000000E000000040000000F0000C80B0000C8040000090D0000000F000000040000000F0000690C0000D40400001C0D00000010000000040000000F0000060D0000E00400002E0D00000000000000050000000F0000C9010000BA040000EB0B00000001000000050000000F00009A020000CF040000060C00000002000000050000000F000067030000E5040000210C00000003000000050000000F000031040000F90400003B0C00000004000000050000000F0000F80400000D050000540C00000005000000050000000F0000BB050000210500006C0C00000006000000050000000F00007A06000034050000840C00000007000000050000000F000036070000460500009C0C00000008000000050000000F0000EF07000058050000B30C00000009000000050000000F0000A408000069050000C90C0000000A000000050000000F00005609000079050000DE0C0000000B000000050000000F0000050A000089050000F30C0000000C000000050000000F0000B00A000099050000080D0000000D000000050000000F0000570B0000A70500001B0D0000000E000000050000000F0000FC0B0000B60500002F0D0000000F000000050000000F00009C0C0000C3050000410D00000010000000050000000F00003A0D0000D0050000530D00000000000000060000000F0000FC01000090050000120C00000001000000060000000F0000CC020000A70500002D0C00000002000000060000000F00009A030000BE050000470C00000003000000060000000F000064040000D4050000610C00000004000000060000000F00002A050000EA0500007A0C00000005000000060000000F0000ED050000FF050000930C00000006000000060000000F0000AD06000013060000AB0C00000007000000060000000F00006907000027060000C20C00000008000000060000000F0000220800003A060000D90C00000009000000060000000F0000D70800004D060000EF0C0000000A000000060000000F0000890900005F060000040D0000000B000000060000000F0000380A000071060000190D0000000C000000060000000F0000E30A0000810600002D0D0000000D000000060000000F00008B0B000092060000410D0000000E000000060000000F00002F0C0000A1060000540D0000000F000000060000000F0000D00C0000B0060000670D00000010000000060000000F00006D0D0000BF060000780D00000000000000070000000F00002E02000065060000380C00000001000000070000000F0000FF0200007E060000530C00000002000000070000000F0000CC030000960600006E0C00000003000000070000000F000096040000AE060000870C00000004000000070000000F00005D050000C5060000A00C00000005000000070000000F000020060000DB060000B90C00000006000000070000000F0000E0060000F1060000D10C00000007000000070000000F00009C07000007070000E80C00000008000000070000000F0000550800001B070000FF0C00000009000000070000000F00000A09000030070000150D0000000A000000070000000F0000BC090000430700002A0D0000000B000000070000000F00006B0A0000560700003F0D0000000C000000070000000F0000160B000068070000530D0000000D000000070000000F0000BE0B00007A070000670D0000000E000000070000000F0000620C00008B0700007A0D0000000F000000070000000F0000030D00009C0700008C0D00000010000000070000000F0000A10D0000AC0700009E0D00000000000000080000000F000060020000380700005F0C00000001000000080000000F000031030000520700007A0C00000002000000080000000F0000FF0300006C070000940C00000003000000080000000F0000C904000085070000AE0C00000004000000080000000F00008F0500009E070000C70C00000005000000080000000F000053060000B6070000DF0C00000006000000080000000F000012070000CD070000F70C00000007000000080000000F0000CF070000E40700000E0D00000008000000080000000F000088080000FB070000240D00000009000000080000000F00003D090000100800003A0D0000000A000000080000000F0000EF09000025080000500D0000000B000000080000000F00009E0A00003A080000640D0000000C000000080000000F0000490B00004E080000790D0000000D000000080000000F0000F10B0000610800008C0D0000000E000000080000000F0000950C0000740800009F0D0000000F000000080000000F0000360D000086080000B10D00000010000000080000000F0000D40D000097080000C30D00000000000000090000000F00009302000009080000850C00000001000000090000000F00006403000025080000A00C00000002000000090000000F00003104000041080000BA0C00000003000000090000000F0000FB0400005B080000D40C00000004000000090000000F0000C205000075080000ED0C00000005000000090000000F0000850600008F080000050D00000006000000090000000F000045070000A80800001D0D00000007000000090000000F000002080000C0080000340D00000008000000090000000F0000BB080000D80800004A0D00000009000000090000000F000070090000EF080000600D0000000A000000090000000F0000220A000006090000750D0000000B000000090000000F0000D10A00001C0900008A0D0000000C000000090000000F00007C0B0000310900009E0D0000000D000000090000000F0000240C000046090000B10D0000000E000000090000000F0000C90C00005A090000C40D0000000F000000090000000F00006A0D00006E090000D60D00000010000000090000000F0000070E000081090000E80D000000000000000A0000000F0000C5020000D9080000AC0C000000010000000A0000000F000096030000F6080000C60C000000020000000A0000000F00006304000013090000E00C000000030000000A0000000F00002E0500002F090000FA0C000000040000000A0000000F0000F40500004B090000130D000000050000000A0000000F0000B8060000660900002B0D000000060000000A0000000F00007807000081090000420D000000070000000A0000000F0000340800009B090000590D000000080000000A0000000F0000ED080000B4090000700D000000090000000A0000000F0000A3090000CD090000860D0000000A0000000A0000000F0000550A0000E50900009B0D0000000B0000000A0000000F0000040B0000FC090000AF0D0000000C0000000A0000000F0000AF0B0000130A0000C30D0000000D0000000A0000000F0000570C0000290A0000D70D0000000E0000000A0000000F0000FC0C00003F0A0000E90D0000000F0000000A0000000F00009D0D0000540A0000FB0D000000100000000A0000000F00003A0E0000690A00000D0E000000000000000B0000000F0000F7020000A7090000D20C000000010000000B0000000F0000C8030000C6090000EC0C000000020000000B0000000F000095040000E4090000060D000000030000000B0000000F000060050000020A0000200D000000040000000B0000000F0000270600001F0A0000380D000000050000000B0000000F0000EA0600003C0A0000510D000000060000000B0000000F0000AA070000580A0000680D000000070000000B0000000F000067080000730A00007F0D000000080000000B0000000F0000200900008E0A0000950D000000090000000B0000000F0000D5090000A80A0000AB0D0000000A0000000B0000000F0000880A0000C20A0000C00D0000000B0000000B0000000F0000370B0000DB0A0000D40D0000000C0000000B0000000F0000E20B0000F30A0000E80D0000000D0000000B0000000F00008A0C00000B0B0000FC0D0000000E0000000B0000000F00002F0D0000220B00000E0E0000000F0000000B0000000F0000D00D0000390B0000200E000000100000000B0000000F00006D0E00004F0B0000320E000000000000000C0000000F000029030000730A0000F80C000000010000000C0000000F0000FA030000930A0000120D000000020000000C0000000F0000C8040000B30A00002C0D000000030000000C0000000F000092050000D30A0000450D000000040000000C0000000F000059060000F10A00005E0D000000050000000C0000000F00001C0700000F0B0000760D000000060000000C0000000F0000DC0700002D0B00008E0D000000070000000C0000000F0000990800004A0B0000A40D000000080000000C0000000F000052090000660B0000BB0D000000090000000C0000000F0000080A0000820B0000D00D0000000A0000000C0000000F0000BA0A00009D0B0000E50D0000000B0000000C0000000F0000690B0000B80B0000FA0D0000000C0000000C0000000F0000150C0000D20B00000D0E0000000D0000000C0000000F0000BD0C0000EB0B0000210E0000000E0000000C0000000F0000610D0000040C0000330E0000000F0000000C0000000F0000030E00001C0C0000450E000000100000000C0000000F0000A00E0000340C0000560E000000000000000D0000000F00005A0300003D0B00001E0D000000010000000D0000000F00002C0400005F0B0000380D000000020000000D0000000F0000F9040000810B0000520D000000030000000D0000000F0000C4050000A20B00006B0D000000040000000D0000000F00008B060000C20B0000840D000000050000000D0000000F00004E070000E20B00009C0D000000060000000D0000000F00000F080000010C0000B30D000000070000000D0000000F0000CB0800001F0C0000CA0D000000080000000D0000000F0000840900003D0C0000E00D000000090000000D0000000F00003A0A00005A0C0000F50D0000000A0000000D0000000F0000ED0A0000770C00000A0E0000000B0000000D0000000F00009C0B0000930C00001F0E0000000C0000000D0000000F0000470C0000AE0C0000320E0000000D0000000D0000000F0000EF0C0000C90C0000450E0000000E0000000D0000000F0000940D0000E30C0000580E0000000F0000000D0000000F0000350E0000FD0C00006A0E000000100000000D0000000F0000D30E0000160D00007B0E000000000000000E0000000F00008C030000060C0000440D000000010000000E0000000F00005D0400002A0C00005E0D000000020000000E0000000F00002B0500004D0C0000780D000000030000000E0000000F0000F60500006F0C0000910D000000040000000E0000000F0000BD060000910C0000A90D000000050000000E0000000F000080070000B20C0000C10D000000060000000E0000000F000041080000D20C0000D80D000000070000000E0000000F0000FD080000F20C0000EF0D000000080000000E0000000F0000B7090000120D0000050E000000090000000E0000000F00006D0A0000310D00001B0E0000000A0000000E0000000F00001F0B00004F0D00002F0E0000000B0000000E0000000F0000CE0B00006C0D0000440E0000000C0000000E0000000F00007A0C0000890D0000570E0000000D0000000E0000000F0000220D0000A60D00006A0E0000000E0000000E0000000F0000C70D0000C20D00007D0E0000000F0000000E0000000F0000680E0000DD0D00008E0E000000100000000E0000000F0000060F0000F70D00009F0E000000000000000F0000000F0000BE030000CD0C0000690D000000010000000F0000000F00008F040000F20C0000840D000000020000000F0000000F00005D050000170D00009D0D000000030000000F0000000F0000280600003B0D0000B60D000000040000000F0000000F0000EF0600005E0D0000CF0D000000050000000F0000000F0000B2070000810D0000E60D000000060000000F0000000F000073080000A30D0000FE0D000000070000000F0000000F00002F090000C40D0000140E000000080000000F0000000F0000E9090000E50D00002A0E000000090000000F0000000F00009F0A0000050E0000400E0000000A0000000F0000000F0000510B0000250E0000540E0000000B0000000F0000000F0000000C0000440E0000680E0000000C0000000F0000000F0000AC0C0000630E00007C0E0000000D0000000F0000000F0000540D0000800E00008F0E0000000E0000000F0000000F0000F90D00009E0E0000A10E0000000F0000000F0000000F00009B0E0000BB0E0000B30E000000100000000F0000000F0000390F0000D70E0000C40E00000000000000100000000F0000EF030000930D00008F0D00000001000000100000000F0000C1040000B90D0000A90D00000002000000100000000F00008F050000DF0D0000C30D00000003000000100000000F000059060000040E0000DC0D00000004000000100000000F000021070000290E0000F40D00000005000000100000000F0000E40700004D0E00000C0E00000006000000100000000F0000A5080000710E0000230E00000007000000100000000F000061090000940E0000390E00000008000000100000000F00001B0A0000B60E00004F0E00000009000000100000000F0000D10A0000D80E0000640E0000000A000000100000000F0000840B0000F90E0000790E0000000B000000100000000F0000330C00001A0F00008D0E0000000C000000100000000F0000DE0C00003A0F0000A10E0000000D000000100000000F0000870D00005A0F0000B30E0000000E000000100000000F00002C0E0000780F0000C60E0000000F000000100000000F0000CD0E0000970F0000D70E00000010000000100000000F00006B0F0000B40F0000E80E0000000000000000000000100000D00000006F000000D20B0000000100000000000000100000A10100007D000000EE0B00000002000000000000001000006F0200008A0000000A0C00000003000000000000001000003A03000097000000250C000000040000000000000010000001040000A3000000400C0000000500000000000000100000C5040000AF0000005A0C000000060000000000000010000086050000BA000000730C000000070000000000000010000043060000C40000008C0C0000000800000000000000100000FC060000CE000000A40C0000000900000000000000100000B2070000D8000000BC0C0000000A0000000000000010000065080000E0000000D30C0000000B0000000000000010000014090000E8000000E90C0000000C00000000000000100000C0090000F0000000FF0C0000000D00000000000000100000680A0000F7000000140D0000000E000000000000001000000D0B0000FD000000290D0000000F00000000000000100000AF0B0000030100003D0D00000010000000000000001000004D0C000008010000500D00000000000000010000001000000301000050010000FA0B0000000100000001000000100000D40100005F010000160C0000000200000001000000100000A30200006E010000320C00000003000000010000001000006D0300007D0100004D0C0000000400000001000000100000350400008A010000680C0000000500000001000000100000F904000098010000820C0000000600000001000000100000B9050000A40100009B0C000000070000000100000010000076060000B0010000B40C000000080000000100000010000030070000BC010000CC0C0000000900000001000000100000E6070000C7010000E40C0000000A0000000100000010000099080000D1010000FA0C0000000B0000000100000010000048090000DA010000110D0000000C00000001000000100000F4090000E4010000260D0000000D000000010000001000009C0A0000EC0100003B0D0000000E00000001000000100000410B0000F4010000500D0000000F00000001000000100000E30B0000FB010000640D0000001000000001000000100000810C000002020000770D0000000000000002000000100000360100002F020000220C000000010000000200000010000007020000400200003E0C0000000200000002000000100000D6020000510200005A0C0000000300000002000000100000A103000061020000750C00000004000000020000001000006804000070020000900C00000005000000020000001000002C0500007F020000A90C0000000600000002000000100000EC0500008D020000C30C0000000700000002000000100000AA0600009A020000DB0C000000080000000200000010000063070000A7020000F30C00000009000000020000001000001A080000B40200000B0D0000000A00000002000000100000CC080000C0020000220D0000000B000000020000001000007C090000CB020000380D0000000C00000002000000100000280A0000D50200004D0D0000000D00000002000000100000D00A0000DF020000620D0000000E00000002000000100000750B0000E9020000770D0000000F00000002000000100000170C0000F20200008B0D0000001000000002000000100000B50C0000FA0200009E0D0000000000000003000000100000690100000D0300004A0C00000001000000030000001000003A0200001F030000660C00000002000000030000001000000903000031030000820C0000000300000003000000100000D4030000430300009D0C00000004000000030000001000009B04000054030000B70C00000005000000030000001000005F05000064030000D10C00000006000000030000001000002006000074030000EA0C0000000700000003000000100000DD06000083030000030D000000080000000300000010000097070000910300001B0D00000009000000030000001000004D0800009F030000320D0000000A0000000300000010000000090000AD030000490D0000000B00000003000000100000AF090000B90300005F0D0000000C000000030000001000005C0A0000C6030000740D0000000D00000003000000100000040B0000D1030000890D0000000E00000003000000100000A90B0000DC0300009E0D0000000F000000030000001000004B0C0000E6030000B10D0000001000000003000000100000E90C0000F0030000C40D00000000000000040000001000009B010000E9030000720C00000001000000040000001000006D020000FD0300008E0C00000002000000040000001000003C03000010040000AA0C00000003000000040000001000000704000024040000C40C0000000400000004000000100000CE04000036040000DF0C00000005000000040000001000009205000048040000F80C00000006000000040000001000005306000059040000120D0000000700000004000000100000100700006A0400002A0D0000000800000004000000100000CA0700007A040000420D00000009000000040000001000008008000089040000590D0000000A000000040000001000003309000098040000700D0000000B00000004000000100000E3090000A6040000860D0000000C000000040000001000008F0A0000B40400009B0D0000000D00000004000000100000380B0000C1040000B00D0000000E00000004000000100000DD0B0000CE040000C40D0000000F000000040000001000007F0C0000DA040000D80D00000010000000040000001000001D0D0000E5040000EB0D0000000000000005000000100000CE010000C30400009A0C0000000100000005000000100000A0020000D9040000B60C00000002000000050000001000006E030000EE040000D10C00000003000000050000001000003904000002050000EC0C00000004000000050000001000000105000016050000060D0000000500000005000000100000C50500002A050000200D0000000600000005000000100000860600003D050000390D0000000700000005000000100000430700004F050000510D0000000800000005000000100000FD07000060050000690D0000000900000005000000100000B408000071050000800D0000000A000000050000001000006709000082050000970D0000000B00000005000000100000160A000092050000AD0D0000000C00000005000000100000C30A0000A1050000C20D0000000D000000050000001000006B0B0000AF050000D70D0000000E00000005000000100000110C0000BE050000EB0D0000000F00000005000000100000B30C0000CB050000FE0D0000001000000005000000100000510D0000D8050000110E0000000000000006000000100000010200009B050000C10C0000000100000006000000100000D3020000B3050000DD0C0000000200000006000000100000A1030000C9050000F90C00000003000000060000001000006C040000E0050000130D000000040000000600000010000034050000F50500002E0D0000000500000006000000100000F80500000A060000470D0000000600000006000000100000B90600001E060000600D00000007000000060000001000007607000032060000780D00000008000000060000001000003008000045060000900D0000000900000006000000100000E708000058060000A70D0000000A000000060000001000009A0900006A060000BE0D0000000B000000060000001000004A0A00007B060000D40D0000000C00000006000000100000F60A00008C060000E90D0000000D000000060000001000009F0B00009C060000FD0D0000000E00000006000000100000440C0000AC060000110E0000000F00000006000000100000E60C0000BB060000250E0000001000000006000000100000850D0000C9060000380E00000000000000070000001000003302000072060000E90C0000000100000007000000100000050300008B060000050D0000000200000007000000100000D4030000A3060000200D00000003000000070000001000009F040000BB0600003B0D000000040000000700000010000067050000D2060000550D00000005000000070000001000002B060000E90600006E0D0000000600000007000000100000EC060000FE060000870D0000000700000007000000100000A9070000140700009F0D00000008000000070000001000006408000028070000B70D00000009000000070000001000001A0900003C070000CE0D0000000A00000007000000100000CD09000050070000E40D0000000B000000070000001000007D0A000063070000FA0D0000000C00000007000000100000290B0000750700000F0E0000000D00000007000000100000D20B000087070000240E0000000E00000007000000100000780C000098070000380E0000000F000000070000001000001A0D0000A90700004B0E0000001000000007000000100000B90D0000B90700005E0E00000000000000080000001000006602000047070000100D000000010000000800000010000038030000620700002C0D0000000200000008000000100000060400007B070000470D0000000300000008000000100000D204000095070000620D000000040000000800000010000099050000AD0700007C0D00000005000000080000001000005E060000C5070000950D00000006000000080000001000001F070000DD070000AE0D0000000700000008000000100000DC070000F4070000C60D0000000800000008000000100000970800000A080000DE0D00000009000000080000001000004D0900001F080000F50D0000000A00000008000000100000000A0000340800000B0E0000000B00000008000000100000B00A000049080000210E0000000C000000080000001000005D0B00005D080000360E0000000D00000008000000100000060C0000700800004A0E0000000E00000008000000100000AB0C0000830800005E0E0000000F000000080000001000004D0D000095080000710E0000001000000008000000100000EC0D0000A6080000840E0000000000000009000000100000980200001B080000370D00000001000000090000001000006A03000037080000530D000000020000000900000010000039040000520800006E0D0000000300000009000000100000040500006D080000890D0000000400000009000000100000CC05000087080000A30D000000050000000900000010000091060000A0080000BC0D000000060000000900000010000052070000B9080000D50D00000007000000090000001000000F080000D2080000ED0D0000000800000009000000100000C9080000EA080000040E000000090000000900000010000080090000010900001B0E0000000A00000009000000100000340A000017090000310E0000000B00000009000000100000E30A00002D090000470E0000000C00000009000000100000900B0000430900005C0E0000000D00000009000000100000390C000057090000710E0000000E00000009000000100000DF0C00006C090000840E0000000F00000009000000100000810D00007F090000980E0000001000000009000000100000200E000092090000AA0E000000000000000A000000100000CA020000EC0800005F0D000000010000000A0000001000009C0300000A0900007A0D000000020000000A0000001000006B04000027090000950D000000030000000A0000001000003705000043090000B00D000000040000000A000000100000FF0500005F090000CA0D000000050000000A000000100000C30600007A090000E30D000000060000000A0000001000008407000094090000FC0D000000070000000A00000010000042080000AE090000140E000000080000000A000000100000FC080000C70900002B0E000000090000000A000000100000B3090000E0090000420E0000000A0000000A000000100000660A0000F8090000580E0000000B0000000A000000100000160B0000100A00006D0E0000000C0000000A000000100000C30B0000270A0000820E0000000D0000000A0000001000006C0C00003D0A0000970E0000000E0000000A000000100000120D0000530A0000AA0E0000000F0000000A000000100000B40D0000680A0000BE0E000000100000000A000000100000530E00007D0A0000D00E000000000000000B000000100000FC020000BC090000860D000000010000000B000000100000CE030000DB090000A10D000000020000000B0000001000009D040000FA090000BC0D000000030000000B00000010000069050000180A0000D70D000000040000000B00000010000031060000350A0000F00D000000050000000B000000100000F6060000510A00000A0E000000060000000B000000100000B70700006D0A0000220E000000070000000B00000010000075080000890A00003A0E000000080000000B0000001000002F090000A40A0000510E000000090000000B000000100000E6090000BE0A0000680E0000000A0000000B000000100000990A0000D80A00007E0E0000000B0000000B000000100000490B0000F10A0000940E0000000C0000000B000000100000F60B0000090B0000A90E0000000D0000000B0000001000009F0C0000210B0000BD0E0000000E0000000B000000100000450D0000380B0000D00E0000000F0000000B000000100000E70D00004F0B0000E30E000000100000000B000000100000860E0000650B0000F60E000000000000000C0000001000002E0300008A0A0000AD0D000000010000000C00000010000001040000AB0A0000C80D000000020000000C000000100000D0040000CB0A0000E30D000000030000000C0000001000009B050000EA0A0000FD0D000000040000000C00000010000063060000090B0000170E000000050000000C00000010000028070000270B0000300E000000060000000C000000100000E9070000450B0000490E000000070000000C000000100000A7080000620B0000610E000000080000000C000000100000610900007E0B0000780E000000090000000C000000100000180A00009A0B00008E0E0000000A0000000C000000100000CC0A0000B50B0000A40E0000000B0000000C0000001000007C0B0000D00B0000BA0E0000000C0000000C000000100000290C0000EA0B0000CF0E0000000D0000000C000000100000D20C0000030C0000E30E0000000E0000000C000000100000780D00001C0C0000F60E0000000F0000000C0000001000001A0E0000350C0000090F000000100000000C000000100000B90E00004C0C00001C0F000000000000000D00000010000060030000570B0000D40D000000010000000D00000010000033040000790B0000EF0D000000020000000D000000100000020500009B0B00000A0E000000030000000D000000100000CD050000BC0B0000240E000000040000000D00000010000095060000DC0B00003E0E000000050000000D0000001000005A070000FC0B0000570E000000060000000D0000001000001C0800001B0C00006F0E000000070000000D000000100000D9080000390C0000870E000000080000000D00000010000094090000570C00009E0E000000090000000D0000001000004B0A0000750C0000B50E0000000A0000000D000000100000FF0A0000910C0000CA0E0000000B0000000D000000100000AF0B0000AD0C0000E00E0000000C0000000D0000001000005C0C0000C90C0000F50E0000000D0000000D000000100000050D0000E40C0000090F0000000E0000000D000000100000AB0D0000FE0C00001C0F0000000F0000000D0000001000004D0E0000180D00002F0F000000100000000D000000100000EC0E0000310D0000410F000000000000000E00000010000092030000220C0000FA0D000000010000000E00000010000064040000450C0000160E000000020000000E00000010000034050000680C0000310E000000030000000E000000100000FF0500008B0C00004B0E000000040000000E000000100000C8060000AD0C0000640E000000050000000E0000001000008C070000CE0C00007D0E000000060000000E0000001000004E080000EF0C0000950E000000070000000E0000001000000C0900000F0D0000AD0E000000080000000E000000100000C60900002E0D0000C40E000000090000000E0000001000007D0A00004D0D0000DB0E0000000A0000000E000000100000310B00006C0D0000F00E0000000B0000000E000000100000E10B0000890D0000060F0000000C0000000E0000001000008E0C0000A60D00001A0F0000000D0000000E000000100000380D0000C30D00002E0F0000000E0000000E000000100000DE0D0000DF0D0000420F0000000F0000000E000000100000800E0000FA0D0000550F000000100000000E0000001000001F0F0000150E0000670F000000000000000F000000100000C4030000EB0C0000210E000000010000000F00000010000096040000100D00003C0E000000020000000F00000010000065050000350D0000570E000000030000000F00000010000031060000590D0000710E000000040000000F000000100000FA0600007C0D00008B0E000000050000000F000000100000BE0700009F0D0000A30E000000060000000F00000010000080080000C10D0000BC0E000000070000000F0000001000003E090000E30D0000D30E000000080000000F000000100000F9090000040E0000EA0E000000090000000F000000100000B00A0000240E0000010F0000000A0000000F000000100000640B0000440E0000160F0000000B0000000F000000100000140C0000630E00002C0F0000000C0000000F000000100000C10C0000820E0000400F0000000D0000000F0000001000006A0D0000A00E0000540F0000000E0000000F000000100000100E0000BD0E0000670F0000000F0000000F000000100000B30E0000DA0E00007A0F000000100000000F000000100000520F0000F70E00008C0F0000000000000010000000100000F5030000B20D0000480E0000000100000010000000100000C8040000D90D0000630E000000020000001000000010000097050000FF0D00007D0E000000030000001000000010000063060000250E0000970E00000004000000100000001000002B0700004A0E0000B10E0000000500000010000000100000F00700006E0E0000CA0E0000000600000010000000100000B2080000920E0000E20E000000070000001000000010000070090000B50E0000F90E00000008000000100000001000002B0A0000D70E0000100F0000000900000010000000100000E20A0000F90E0000260F0000000A00000010000000100000960B00001B0F00003C0F0000000B00000010000000100000460C00003C0F0000510F0000000C00000010000000100000F30C00005C0F0000660F0000000D000000100000001000009D0D00007B0F00007A0F0000000E00000010000000100000430E00009A0F00008D0F0000000F00000010000000100000E60E0000B90F00009F0F0000001000000010000000100000850F0000D70F0000B10F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000E80200004C000000280000000008000000000000000000009A050000850000004E000000000C0000000000000000000015080000B40000006A000000001000000000000000000000590A0000D90000007B000000000000000004000000000000C5000000020300005D000000000400000004000000000000AD030000570300008A0000000008000000040000000000005F060000A2030000AE000000000C00000004000000000000D9080000E4030000C70000000010000000040000000000001D0B00001C040000D700000000000000000800000000000089010000DE050000BF0000000004000000080000000000007104000046060000EA00000000080000000800000000000021070000A40600000C010000000C000000080000000000009B090000F806000023010000001000000008000000000000DF0B0000430700003101000000000000000C0000000000004B0200009F0800001F01000000040000000C00000000000032050000190900004801000000080000000C000000000000E30700008A09000068010000000C0000000C0000000000005C0A0000F10900007E01000000100000000C0000000000009F0C00004E0A00008A0100000000000000100000000000000C030000450B00007E010000000400000010000000000000F3050000D10B0000A5010000000800000010000000000000A3080000550C0000C3010000000C000000100000000000001C0B0000CE0C0000D60100000010000000100000000000005E0D00003E0D0000E00100000000000000000000000400004F0000003A0000002F0300000004000000000000000400004A030000790000006E0300000008000000000000000400000E060000AE000000A3030000000C000000000000000400009B080000DA000000CF030000001000000000000000040000F20A0000FC000000F00300000000000000040000000400001601000053030000A203000000040000000400000004000011040000A6030000DF030000000800000004000000040000D5060000EF03000012040000000C00000004000000040000620900002F0400003C040000001000000004000000040000B80B0000650400005C040000000000000008000000040000DC0100005006000013040000000400000008000000040000D6040000B70600004E0400000008000000080000000400009A0700001407000080040000000C00000008000000040000270A000068070000A80400000010000000080000000400007E0C0000B3070000C604000000000000000C000000040000A0020000310900008204000000040000000C0000000400009A050000AC090000BC04000000080000000C0000000400005E0800001E0A0000EC040000000C0000000C000000040000EB0A0000860A00001205000000100000000C000000040000410D0000E50A00002E05000000000000001000000004000062030000F70B0000F00400000004000000100000000400005C060000860C000028050000000800000010000000040000200900000C0D000056050000000C00000010000000040000AD0B0000890D00007A050000001000000010000000040000030E0000FB0D0000940500000000000000000000000800008C0000005B0000003A06000000040000000000000008000099030000960000008906000000080000000000000008000070060000C8000000CE060000000C000000000000000800000F090000F100000009070000001000000000000000080000780B00000F0100003B0700000000000000040000000800005501000094030000BC06000000040000000400000008000062040000E503000009070000000800000004000000080000390700002D0400004D070000000C00000004000000080000D90900006B04000086070000001000000004000000080000420C00009F040000B60700000000000000080000000800001C020000B10600003C0700000004000000080000000800002A05000018070000880700000008000000080000000800000108000075070000CA070000000C00000008000000080000A10A0000C9070000010800000010000000080000000800000A0D0000130800003008000000000000000C000000080000E1020000B4090000BB07000000040000000C000000080000F0050000300A00000508000000080000000C000000080000C7080000A30A000045080000000C0000000C000000080000670B00000C0B00007B08000000100000000C000000080000D10D00006C0B0000A7080000000000000010000000080000A50300009A0C000038080000000400000010000000080000B40600002C0D0000800800000008000000100000000800008B090000B50D0000BE080000000C000000100000000800002C0C0000340E0000F3080000001000000010000000080000960E0000A90E00001E0900000000000000000000000C0000B70000006C0000001B0900000004000000000000000C0000D7030000A40000007A0900000008000000000000000C0000BF060000D3000000CE090000000C000000000000000C000071090000F8000000190A00000010000000000000000C0000EC0B0000130100005B0A00000000000000040000000C000081010000C6030000AC0900000004000000040000000C0000A104000015040000090A00000008000000040000000C00008B0700005B0400005D0A0000000C000000040000000C00003D0A000097040000A60A00000010000000040000000C0000B90C0000CA040000E60A00000000000000080000000C00004A020000040700003B0A00000004000000080000000C00006B0500006A070000970A00000008000000080000000C000055080000C7070000E90A0000000C000000080000000C0000080B00001B080000310B00000010000000080000000C0000840D0000640800006F0B000000000000000C0000000C000011030000270A0000C90A000000040000000C0000000C000033060000A40A0000230B000000080000000C0000000C00001D090000180B0000730B0000000C0000000C0000000C0000D10B0000830B0000BA0B000000100000000C0000000C00004E0E0000E40B0000F70B00000000000000100000000C0000D70300002E0D0000550B00000004000000100000000C0000F9060000C20D0000AD0B00000008000000100000000C0000E40900004E0E0000FC0B0000000C000000100000000C0000990C0000CF0E0000410C00000010000000100000000C0000170F0000480F00007D0C0000000000000000000000100000D00000006F000000D20B000000040000000000000010000001040000A3000000400C0000000800000000000000100000FC060000CE000000A40C0000000C00000000000000100000C0090000F0000000FF0C00000010000000000000001000004D0C000008010000500D00000000000000040000001000009B010000E9030000720C0000000400000004000000100000CE04000036040000DF0C0000000800000004000000100000CA0700007A040000420D0000000C000000040000001000008F0A0000B40400009B0D00000010000000040000001000001D0D0000E5040000EB0D00000000000000080000001000006602000047070000100D000000040000000800000010000099050000AD0700007C0D0000000800000008000000100000970800000A080000DE0D0000000C000000080000001000005D0B00005D080000360E0000001000000008000000100000EC0D0000A6080000840E000000000000000C0000001000002E0300008A0A0000AD0D000000040000000C00000010000063060000090B0000170E000000080000000C000000100000610900007E0B0000780E0000000C0000000C000000100000290C0000EA0B0000CF0E000000100000000C000000100000B90E00004C0C00001C0F0000000000000010000000100000F5030000B20D0000480E00000004000000100000001000002B0700004A0E0000B10E00000008000000100000001000002B0A0000D70E0000100F0000000C00000010000000100000F30C00005C0F0000660F0000001000000010000000100000850F0000D70F0000B10F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000A00000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000002D000000400000004E000000580000005F0000006800000070000000760000007C00000082000000870000008C00000091000000970000009D000000A1000000A5000000AA000000AE000000B3000000B6000000BA000000BE000000C2000000C6000000C9000000CD000000CF000000D3000000D7000000D9000000DD000000E1000000E5000000E9000000EC000000EF000000F3000000F6000000F9000000FD0000000001000003010000070100000A0100000C0100000F010000110100001301000016010000190100001C0100001F010000210100002301000025010000290100002B0100002D0100002F010000320100003501000037010000390100003B0100003E01000040010000430100004501000046010000490100004C0100004E0100004F01000052010000530100005501000058010000590100005B0100005D0100005F01000061010000630100006501000066010000680100006A0100006B0100006D0100007001000072010000730100007501000076010000790100007A0100007C0100007E0100008001000081010000830100008401000087010000880100008A0100008B0100008D0100008E0100008F0100009201000093010000940100009601000097010000990100009A0100009C0100009E0100009F010000A0010000A2010000A4010000A5010000A6010000A7010000A9010000AA010000AD010000AE010000B0010000B1010000B2010000B3010000B5010000B6010000B7010000B9010000BA010000BB010000BC010000BD010000C0010000C1010000C2010000C3010000C5010000C5010000C6010000C7010000C8010000C9010000CB010000CC010000CE010000CF010000D0010000D1010000D2010000D4010000D4010000D5010000D6010000D8010000D9010000DA010000DB010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E5010000E7010000E8010000E9010000EA010000EB010000EC010000EC010000EE010000EF010000F0010000F1010000F2010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F02000010020000110200001202000013020000140200001402000015020000170200001702000018020000190200001B0200001C0200001C0200001D0200001E0200001F0200001F020000210200002202000023020000240200002502000026020000260200002702000028020000290200002B0200002B0200002C0200002D0200002E0200002F0200003002000030020000310200003202000033020000340200003402000035020000360200003702000038020000390200003A0200003C0200003D0200003E0200003E0200003F020000400200004002000041020000420200004302000044020000450200004502000046020000470200004802000048020000490200004A0200004B0200004C0200004C0200004D0200004E0200004F0200005002000051020000520200005202000054020000550200005602000057020000570200005802000058020000590200005A0200005B0200005C0200005C0200005D0200005D0200005F0200006002000060020000610200006202000063020000640200006402000065020000660200006802000068020000690200006A0200006B0200006B0200006C0200006D0200006D0200006E02000070020000710200007202000072020000720200007302000074020000750200007502000077020000770200007802000079020000790200007A0200007A0200007A0200007B0200007B0200007C0200007D0200007F020000800200008002000081020000820200008302000084020000850200008602000086020000870200008802000089020000890200008A0200008B0200008B0200008C0200008D0200008D0200008E0200008F020000900200009102000092020000920200009302000093020000940200009502000096020000970200009802000099020000990200009A0200009B0200009C0200009C0200009D0200009E0200009E020000A0020000A0020000A1020000A2020000A3020000A3020000A4020000A4020000A5020000A6020000A6020000A8020000A8020000A9020000AA020000AA020000AB020000AD020000AE020000AE020000AF020000AF020000B0020000B1020000B2020000B2020000B3020000B4020000B4020000B5020000B6020000B6020000B7020000B9020000BA020000BA020000BB020000BB020000BC020000BD020000BD020000BF020000BF020000C0020000C1020000C1020000C2020000C2020000C3020000C5020000C5020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CA020000CB020000CC020000CD020000CE020000CF020000CF020000D0020000D0020000D1020000D1020000D2020000D3020000D5020000D5020000D6020000D6020000D7020000D7020000D8020000D9020000D9020000DA020000DB020000DC020000DD020000DE020000DE020000DF020000DF020000E0020000E1020000E2020000E2020000E3020000E3020000E4020000E5020000E6020000E6020000E7020000E7020000E8020000E9020000EA020000EB020000EB020000EC020000EC020000ED020000ED020000EE020000EF020000EF020000F0020000F2020000F2020000F3020000F3020000F4020000F5020000F5020000F6020000F6020000F7020000F8020000F8020000F9020000FA020000FA020000FC020000FD020000FD020000FE020000FE020000FF020000FF02000000030000010300000103000002030000030300000403000004030000050300000503000006030000060300000703000008030000080300000A0300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F03000010030000100300001103000012030000120300001303000013030000140300001503000015030000160300001803000018030000190300001A0300001A0300001B0300001B0300001B0300001C0300001D0300001E0300001F0300001F030000200300002103000021030000220300002203000023030000230300002403000025030000250300002603000027030000280300002803000029030000290300002A0300002A0300002B0300002C0300002C0300002D0300002D0300002E0300002E0300002E0300002F0300002F0300002F030000300300003103000031030000310300003303000033030000330300003403000034030000350300003603000037030000370300003803000039030000390300003A0300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003E0300003E0300003F03000040030000400300004103000041030000410300004103000042030000420300004303000044030000440300004503000045030000450300004503000046030000470300004703000047030000480300004803000049030000490300004A0300004A0300004B0300004B0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000050030000510300005103000051030000510300005203000052030000530300005303000053030000540300005403000055030000550300005603000056030000570300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005B0300005C0300005C0300005C0300005D0300005D0300005D0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000620300006303000063030000630300006403000064030000650300006503000066030000660300006703000067030000670300006703000068030000680300006803000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006C0300006C0300006D0300006D0300006E0300006E0300006F0300006F0300007003000070030000710300007103000072030000720300007303000073030000730300007303000074030000740300007503000075030000750300007603000076030000770300007703000078030000780300007903000079030000790300007A0300007A0300007A0300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007D0300007E0300007E0300007F0300007F0300007F03000080030000800300008103000081030000810300008103000082030000820300008303000083030000840300008403000084030000850300008503000086030000860300008703000087030000880300008803000088030000890300008903000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008C0300008D0300008D0300008E0300008F0300008F0300008F0300008F0300009003000090030000900300009103000091030000920300009203000093030000930300009403000094030000940300009503000095030000960300009603000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009B0300009B0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A2030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AB030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B0030000B1030000B1030000B2030000B2030000B2030000B3030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B6030000B7030000B7030000B8030000B8030000B8030000B9030000B9030000BA030000BB030000BB030000BB030000BB030000BC030000BC030000BC030000BC030000BD030000BD030000BE030000BF030000BF030000BF030000C0030000C0030000C2030000C2030000C3030000C3030000C3030000C4030000C4030000C5030000C5030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000C9030000CA030000CA030000CB030000CB030000CB030000CC030000CC030000CE030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D1030000D2030000D2030000D3030000D3030000D3030000D4030000D4030000D5030000D5030000D6030000D6030000D7030000D7030000D8030000D9030000D9030000D9030000DA030000DA030000DB030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DF030000DF030000DF030000E0030000E1030000E2030000E2030000E2030000E3030000E3030000E3030000E4030000E4030000E5030000E6030000E6030000E7030000000000002C0000003F0000004C00000056000000600000006800000070000000760000007C00000082000000870000008C00000091000000960000009C000000A0000000A4000000A9000000AD000000B2000000B5000000B9000000BD000000C0000000C4000000C7000000CC000000CE000000D1000000D5000000D7000000DB000000DE000000E2000000E6000000E9000000EC000000F0000000F3000000F6000000FA000000FD000000000100000401000007010000090100000C0100000F0100001101000015010000180100001B0100001E010000200100002201000025010000280100002A0100002C0100002E010000310100003401000036010000380100003A0100003D0100003F010000410100004301000045010000470100004A0100004C0100004D0100005001000051010000530100005601000057010000590100005B0100005D0100005F0100006101000063010000640100006601000068010000690100006B0100006E0100007001000071010000730100007401000076010000770100007A0100007B0100007D0100007F0100008101000082010000840100008501000087010000880100008A0100008B0100008C0100008F010000900100009101000093010000940100009601000097010000990100009B0100009C0100009D0100009F010000A1010000A2010000A3010000A4010000A6010000A7010000A9010000AA010000AC010000AD010000AE010000AF010000B1010000B2010000B3010000B6010000B7010000B8010000B9010000BA010000BC010000BD010000BE010000BF010000C1010000C1010000C3010000C4010000C5010000C7010000C8010000C9010000CB010000CC010000CD010000CE010000D0010000D2010000D2010000D3010000D4010000D6010000D7010000D8010000D9010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E3010000E4010000E5010000E6010000E7010000E9010000EA010000EA010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F02000010020000110200001102000012020000140200001402000015020000160200001802000019020000190200001A0200001B0200001C0200001C0200001D0200001E0200001F02000020020000210200002202000022020000230200002402000025020000270200002702000028020000290200002A0200002B0200002C0200002C0200002D0200002E0200002F0200003002000030020000310200003202000033020000340200003502000036020000370200003802000039020000390200003A0200003B0200003B0200003C0200003D0200003E0200003F020000400200004002000041020000420200004302000043020000440200004502000046020000470200004702000048020000490200004A0200004B0200004C0200004D0200004D0200004E0200004F020000500200005102000051020000520200005202000053020000540200005502000056020000560200005702000057020000590200005A0200005A0200005B0200005C0200005D0200005E0200005E0200005F020000600200006102000061020000620200006302000064020000640200006502000066020000660200006702000068020000690200006A0200006A0200006A0200006B0200006C0200006E0200006E020000700200007002000071020000720200007202000074020000750200007502000076020000760200007702000078020000790200007A0200007A0200007B0200007C0200007D0200007E0200007F02000080020000800200008102000082020000830200008302000084020000850200008502000086020000870200008702000088020000890200008B0200008C0200008D0200008D0200008E0200008E0200008F020000900200009102000092020000930200009402000094020000950200009602000097020000970200009802000099020000990200009B0200009B0200009C0200009D0200009E0200009E0200009F0200009F020000A0020000A1020000A1020000A3020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000A9020000AA020000AC020000AD020000AD020000AE020000AF020000AF020000B0020000B1020000B1020000B2020000B3020000B4020000B4020000B5020000B5020000B6020000B7020000B7020000B9020000B9020000BA020000BB020000BB020000BC020000BC020000BD020000BF020000BF020000C0020000C1020000C1020000C2020000C3020000C3020000C4020000C4020000C5020000C6020000C7020000C8020000C9020000C9020000CA020000CA020000CB020000CB020000CC020000CD020000CE020000CE020000CF020000CF020000D0020000D0020000D1020000D2020000D2020000D4020000D4020000D5020000D6020000D7020000D7020000D8020000D8020000D9020000DA020000DB020000DB020000DC020000DC020000DD020000DE020000DF020000DF020000E0020000E0020000E1020000E2020000E3020000E4020000E4020000E5020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000EA020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000EF020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F5020000F5020000F6020000F6020000F7020000F7020000F9020000FA020000FA020000FB020000FC020000FD020000FD020000FE020000FE020000FF020000FF0200000003000001030000010300000203000002030000030300000403000005030000050300000603000007030000070300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F030000100300001003000011030000120300001203000013030000130300001303000014030000150300001603000017030000170300001803000019030000190300001A0300001A0300001B0300001B0300001C0300001D0300001D0300001E0300001F03000020030000200300002103000021030000220300002203000023030000240300002403000025030000250300002603000026030000270300002903000029030000290300002A0300002B0300002B0300002B0300002D0300002D0300002D0300002E0300002E0300002F03000030030000310300003103000032030000330300003303000034030000340300003503000035030000370300003703000038030000380300003903000039030000390300003A0300003C0300003C0300003D0300003D0300003D0300003D0300003E0300003E03000040030000410300004103000042030000420300004203000042030000430300004503000045030000450300004603000046030000480300004803000049030000490300004A0300004A0300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004F0300004F030000500300005003000051030000510300005103000051030000520300005203000053030000530300005303000054030000540300005603000056030000570300005703000058030000580300005803000059030000590300005B0300005B0300005C0300005C0300005D0300005D0300005D0300005E0300005E0300005E0300005F0300005F0300005F0300006003000060030000610300006103000063030000630300006403000064030000650300006503000065030000660300006603000066030000670300006703000068030000690300006A0300006A0300006B0300006B0300006B0300006B0300006C0300006C0300006C0300006D0300006D0300006F0300006F030000700300007003000071030000710300007103000071030000720300007203000073030000730300007503000075030000760300007603000077030000770300007803000078030000790300007903000079030000790300007A0300007A0300007B0300007B0300007B0300007D0300007D0300007E0300007E0300007F0300007F0300008003000080030000800300008103000081030000810300008103000082030000820300008303000084030000850300008503000085030000860300008603000088030000880300008803000089030000890300008A0300008A0300008A0300008A0300008B0300008B0300008D0300008D0300008E0300008E0300008E0300008F0300008F0300009003000090030000910300009103000092030000920300009203000093030000930300009303000093030000940300009403000095030000950300009603000096030000960300009703000097030000990300009A0300009A0300009A0300009A0300009B0300009B0300009B0300009C0300009C0300009D0300009D0300009F0300009F030000A0030000A0030000A0030000A1030000A1030000A2030000A2030000A2030000A2030000A3030000A3030000A4030000A4030000A6030000A6030000A7030000A7030000A8030000A8030000A8030000A8030000A9030000A9030000AA030000AA030000AC030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B0030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B5030000B5030000B6030000B6030000B7030000B7030000B7030000B8030000B8030000B9030000B9030000B9030000BA030000BA030000BA030000BB030000BB030000BC030000BC030000BE030000BE030000BF030000BF030000C0030000C0030000C0030000C1030000C1030000C2030000C2030000C2030000C3030000C3030000C3030000C4030000C4030000C6030000C6030000C7030000C7030000C7030000C8030000C8030000C9030000C9030000C9030000CA030000CA030000CB030000CC030000CC030000CC030000CC030000CD030000CD030000CD030000CD030000CE030000CE030000CF030000D0030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D3030000D5030000D5030000D6030000D6030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DB030000DB030000DB030000DC030000DC030000DD030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E3030000E4030000E4030000E5030000E5030000E5030000E6030000E6030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EB030000EB030000EB030000EC030000EC030000ED030000ED030000ED030000EE030000EE030000EF030000EF030000F0030000F1030000F1030000F1030000F2030000F3030000F4030000F4030000F4030000F6030000F6030000F7030000F7030000F8030000F9030000FB030000FB030000FF03000000000000290000003B00000048000000520000005B000000630000006B00000071000000770000007C00000081000000860000008A0000008F00000094000000980000009C000000A1000000A5000000AA000000AD000000B0000000B4000000B7000000BB000000BE000000C2000000C4000000C7000000CB000000CD000000D1000000D3000000D6000000D9000000DC000000DF000000E3000000E5000000E8000000EC000000EF000000F2000000F5000000F8000000FA000000FE000000010100000301000006010000090100000B0100000E010000100100001201000015010000180100001A0100001C0100001E010000210100002401000026010000280100002A0100002C0100002E01000030010000320100003401000036010000390100003B0100003C0100003F01000040010000420100004401000046010000480100004A0100004C0100004E0100004F0100005201000053010000550100005701000058010000590100005C0100005E0100005F0100006101000062010000640100006501000068010000690100006B0100006C0100006E0100006F010000710100007201000074010000750100007701000078010000790100007C0100007D0100007E010000800100008101000083010000840100008601000088010000890100008A0100008B0100008D0100008E0100008F010000900100009201000093010000950100009601000098010000990100009A0100009B0100009D0100009E0100009F010000A1010000A2010000A3010000A4010000A5010000A7010000A8010000A9010000AA010000AC010000AD010000AE010000AF010000B0010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BB010000BC010000BC010000BD010000BE010000C0010000C1010000C2010000C3010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CD010000CE010000CF010000D0010000D0010000D2010000D3010000D3010000D5010000D6010000D7010000D9010000DA010000DB010000DC010000DD010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E8010000E9010000EA010000EB010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FA010000FB010000FD010000FD010000FE010000FF01000000020000010200000102000002020000030200000502000005020000060200000702000008020000090200000A0200000B0200000B0200000C0200000D0200000D0200000F0200000F0200001002000011020000120200001302000014020000140200001502000016020000170200001802000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000021020000220200002302000023020000240200002502000026020000270200002802000028020000290200002A0200002B0200002B0200002C0200002D0200002E0200002F0200002F0200003002000030020000310200003202000033020000340200003402000036020000370200003802000039020000390200003A0200003A0200003B0200003C0200003D0200003E0200003E0200003F0200003F020000400200004102000041020000420200004302000044020000450200004502000046020000470200004802000048020000490200004A0200004B0200004B0200004C0200004D0200004D0200004E0200004F020000500200005102000051020000520200005202000053020000540200005402000056020000560200005702000058020000580200005A0200005B0200005B0200005C0200005C0200005C0200005D0200005E0200005F0200005F02000060020000610200006202000063020000630200006402000064020000650200006602000067020000670200006802000069020000690200006A0200006B0200006B0200006C0200006D0200006E0200006F0200007002000070020000710200007102000072020000720200007302000074020000750200007602000076020000770200007802000079020000790200007A0200007B0200007B0200007D0200007D0200007E0200007F02000080020000800200008102000081020000820200008302000083020000850200008502000086020000870200008702000088020000890200008A0200008A0200008A0200008B0200008B0200008D0200008E0200008E0200008F02000090020000900200009102000092020000920200009302000094020000950200009502000096020000960200009702000098020000980200009A0200009A0200009B0200009C0200009C0200009D0200009D0200009E0200009F0200009F020000A0020000A1020000A1020000A2020000A3020000A3020000A4020000A4020000A5020000A6020000A7020000A8020000A9020000A9020000AA020000AA020000AB020000AB020000AC020000AD020000AE020000AE020000AF020000AF020000B0020000B0020000B1020000B2020000B2020000B4020000B4020000B5020000B6020000B7020000B7020000B8020000B8020000B9020000BA020000BB020000BB020000BC020000BC020000BD020000BE020000BF020000BF020000C0020000C0020000C1020000C2020000C3020000C3020000C4020000C5020000C5020000C5020000C6020000C7020000C8020000C8020000C9020000CA020000CB020000CB020000CC020000CD020000CE020000CE020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D2020000D3020000D4020000D4020000D5020000D5020000D6020000D7020000D8020000D9020000D9020000DA020000DB020000DC020000DC020000DD020000DD020000DE020000DE020000DF020000E0020000E0020000E1020000E1020000E2020000E3020000E4020000E4020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000E9020000E9020000EA020000EA020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000F0020000F1020000F1020000F1020000F2020000F2020000F3020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F8020000F9020000F9020000FA020000FB020000FB020000FC020000FD020000FE020000FE020000FF020000FF02000000030000000300000103000002030000020300000303000003030000040300000403000005030000060300000703000007030000080300000903000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000F0300000F030000100300001103000011030000120300001203000013030000130300001403000014030000150300001503000016030000160300001703000017030000190300001A0300001A0300001B0300001B0300001B0300001C0300001C0300001E0300001E0300001F0300001F030000200300002003000020030000210300002203000023030000230300002303000024030000250300002603000026030000270300002703000028030000280300002803000029030000290300002A0300002A0300002B0300002B0300002D0300002E0300002E0300002F0300003003000030030000300300003003000031030000310300003203000033030000340300003503000035030000370300003703000038030000380300003903000039030000390300003A0300003B0300003C0300003D0300003E0300003E0300003F0300003F0300003F03000040030000400300004003000041030000410300004203000042030000430300004303000044030000450300004603000046030000470300004703000048030000480300004903000049030000490300004A0300004A0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004E0300004F0300004F0300004F0300005003000050030000520300005203000053030000530300005403000054030000540300005403000055030000550300005603000056030000580300005803000059030000590300005A0300005B0300005B0300005C0300005C0300005D0300005D0300005D0300005E0300005E0300005F0300005F0300005F03000060030000610300006103000062030000620300006303000063030000640300006403000065030000650300006503000065030000660300006603000067030000680300006903000069030000690300006A0300006A0300006C0300006C0300006C0300006D0300006D0300006E0300006E0300006E0300006F030000700300007003000071030000720300007203000073030000730300007403000074030000750300007503000076030000760300007703000077030000770300007803000078030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007D0300007D0300007F0300007F03000080030000800300008003000080030000800300008103000081030000820300008303000083030000840300008503000085030000860300008603000087030000870300008803000088030000880300008803000089030000890300008A0300008A0300008C0300008C0300008D0300008D0300008E0300008E0300008E0300008E0300008F0300008F03000090030000900300009203000092030000920300009303000093030000940300009403000095030000960300009603000097030000970300009703000097030000980300009803000099030000990300009A0300009A0300009C0300009C0300009D0300009D0300009E0300009E0300009E0300009F0300009F030000A0030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A5030000A5030000A6030000A6030000A7030000A7030000A7030000A9030000A9030000AA030000AA030000AA030000AB030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AE030000B0030000B0030000B1030000B1030000B2030000B2030000B2030000B4030000B5030000B5030000B5030000B5030000B7030000B7030000B7030000B7030000B8030000B8030000B9030000BA030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BD030000BF030000BF030000C0030000C0030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CB030000CB030000CC030000CC030000CC030000CD030000CD030000CE030000CE030000CE030000CE030000CE030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D6030000D7030000D7030000D8030000D8030000D8030000D9030000D9030000D9030000DA030000DA030000DB030000DB030000DB030000DC030000DC030000DD030000DD030000DD030000DE030000DF030000DF030000DF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="false" DataSize="88">0000000004000000040000000400000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="4" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="TruPalette" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="srgb" PictureQuality="enhanced" >
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000A00000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">DE020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F010000000000000000000000000048420000A041000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F020000000000000000000000000048420000A041000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="false" DataSize="88">0000000004000000040000000400000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ </Disp_Modes>
+ <Luts NumLuts="1">
+ <Lut Type="0" NumPackets="41">ECFFFFFF0000803F936F163FDA1AB13DEDFFFFFF0000803F87501D3FB9530A3EEEFFFFFF0000803FAAEE213FD1912C3EEFFFFFFF0000803F8CBC283F8C82603EF0FFFFFF0000803F473C2D3FD1E9813EF1FFFFFF0000803F5C02343FFE0E9D3EF2FFFFFF0000803F6E6E383FE04DAF3EF3FFFFFF0000803F31093F3F3C16CB3EF4FFFFFF0000803F3960433F73BDDD3EF5FFFFFF0000803F91D5493F6519FA3EF6FFFFFF0000803F840E4E3F957E063FF7FFFFFF0000803F1B62543FCEDF143FF8FFFFFF0000803F828C583F90871E3FF9FFFFFF0000803FF2B65E3F1A182D3FFAFFFFFF0000803FE7C4623FABCE363FFBFFFFFF0000803FD7BE683F8E5A453FFCFFFFFF0000803F41B66C3FD6194F3FFDFFFFFF0000803F1E8A723F8AAC5D3FFEFFFFFF0000803F516B763F6475673FFFFFFFFF0000803F8A227C3FB41E763F000000000000803F0000803F0000803F01000000836B723F6189773F0000803F02000000BF0C6A3F484E723F0000803F03000000CD945E3F191E6B3F0000803F04000000B988573FEFAB663F0000803F0500000084D44D3F5E81603F0000803F0600000045D9473FEBAA5C3F0000803F07000000CA883F3F2651573F0000803F080000005C593A3FADFB533F0000803F09000000802D333F05514F3F0000803F0A00000083C02E3FC3624C3F0000803F0B0000005986283FE04C483F0000803F0C0000008C9D243F18B3453F0000803F0D000000431C1F3F8909423F0000803F0E000000ABB21B3FE4C03F3F0000803F0F0000003DD4163FC07A3C3F0000803F1000000009C0133FE4683A3F0000803F110000008A740F3FF27B373F0000803F1200000039B80C3FCB9D353F0000803F130000005DDE083FBAF9323F0000803F140000009467063F3448313F0000803F</Lut>
+ </Luts>
+</Calib_Data>
diff --git a/config/qdcm_calib_data_talos_default.xml b/config/qdcm_calib_data_talos_default.xml
new file mode 100644
index 0000000..2eb0fb9
--- /dev/null
+++ b/config/qdcm_calib_data_talos_default.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" ?>
+<!--
+Copyright (c) 2019, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+-->
+<Calib_Data>
+ <Disp_Modes NumModes="3" DefaultMode="0">
+ <Mode ModeID="0" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="native" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="native">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="1" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="P3" NumOfFeatures="14" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="dcip3" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="false" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000D00000000000000000000000000200000000000000000000A00100000000000000000000000300000000000000000000710200000000000000000000000400000000000000000000410300000000000000000000000500000000000000000000110400000000000000000000000600000000000000000000E20400000000000000000000000700000000000000000000B20500000000000000000000000800000000000000000000830600000000000000000000000900000000000000000000530700000000000000000000000A00000000000000000000230800000000000000000000000B00000000000000000000F40800000000000000000000000C00000000000000000000C40900000000000000000000000D00000000000000000000950A00000000000000000000000E00000000000000000000650B00000000000000000000000F00000000000000000000350C00000000000000000000001000000000000000000000060D00000000000000000000000000000001000000000000290000001A01000000000000000100000001000000000000FA0000000501000000000000000200000001000000000000CA010000F0000000000000000003000000010000000000009B020000DA000000000000000004000000010000000000006C030000C5000000000000000005000000010000000000003C040000B0000000000000000006000000010000000000000D0500009B00000000000000000700000001000000000000DE0500008500000000000000000800000001000000000000AE06000070000000000000000009000000010000000000007F0700005B00000000000000000A00000001000000000000500800004500000000000000000B00000001000000000000200900003000000000000000000C00000001000000000000F10900001B00000000000000000D00000001000000000000C20A00000600000000000000000E00000001000000000000930B00000000000000000000000F00000001000000000000630C00000000000000000000001000000001000000000000340D00000000000000000000000000000002000000000000530000003902000000000000000100000002000000000000240100002302000000000000000200000002000000000000F40100000E02000000000000000300000002000000000000C5020000F80100000000000000040000000200000000000096030000E20100000000000000050000000200000000000067040000CD0100000000000000060000000200000000000038050000B70100000000000000070000000200000000000009060000A101000000000000000800000002000000000000DA0600008C01000000000000000900000002000000000000AB0700007601000000000000000A000000020000000000007C0800006001000000000000000B000000020000000000004D0900004B01000000000000000C000000020000000000001E0A00003501000000000000000D00000002000000000000EF0A00001F01000000000000000E00000002000000000000C00B00000A01000000000000000F00000002000000000000910C0000F400000000000000001000000002000000000000620D0000DF000000000000000000000000030000000000007C00000058030000010000000001000000030000000000004D01000042030000000000000002000000030000000000001F0200002C03000000000000000300000003000000000000F00200001603000000000000000400000003000000000000C1030000000300000000000000050000000300000000000092040000EA0200000000000000060000000300000000000064050000D40200000000000000070000000300000000000035060000BD0200000000000000080000000300000000000006070000A702000000000000000900000003000000000000D70700009102000000000000000A00000003000000000000A90800007B02000000000000000B000000030000000000007A0900006502000000000000000C000000030000000000004B0A00004F02000000000000000D000000030000000000001C0B00003902000000000000000E00000003000000000000EE0B00002302000000000000000F00000003000000000000BF0C00000D02000000000000001000000003000000000000900D0000F701000000000000000000000004000000000000A600000076040000020000000001000000040000000000007701000060040000000000000002000000040000000000004902000049040000000000000003000000040000000000001A0300003304000000000000000400000004000000000000EC0300001D04000000000000000500000004000000000000BD04000006040000000000000006000000040000000000008F050000F00300000000000000070000000400000000000060060000DA0300000000000000080000000400000000000032070000C30300000000000000090000000400000000000003080000AD03000000000000000A00000004000000000000D50800009603000000000000000B00000004000000000000A60900008003000000000000000C00000004000000000000780A00006A03000000000000000D000000040000000000004A0B00005303000000000000000E000000040000000000001B0C00003D03000000000000000F00000004000000000000ED0C00002703000000000000001000000004000000000000BE0D00001003000000000000000000000005000000000000CF0000009505000003000000000100000005000000000000A10100007E05000000000000000200000005000000000000730200006705000000000000000300000005000000000000450300005105000000000000000400000005000000000000160400003A05000000000000000500000005000000000000E80400002305000000000000000600000005000000000000BA0500000C050000000000000007000000050000000000008C060000F6040000000000000008000000050000000000005E070000DF040000000000000009000000050000000000002F080000C804000000000000000A0000000500000000000001090000B204000000000000000B00000005000000000000D30900009B04000000000000000C00000005000000000000A50A00008404000000000000000D00000005000000000000770B00006D04000000000000000E00000005000000000000490C00005704000000000000000F000000050000000000001A0D00004004000000000000001000000005000000000000EC0D00002904000000000000000000000006000000000000F9000000B306000004000000000100000006000000000000CB0100009C060000000000000002000000060000000000009D02000085060000000000000003000000060000000000006F0300006E06000000000000000400000006000000000000410400005706000000000000000500000006000000000000130500004006000000000000000600000006000000000000E50500002906000000000000000700000006000000000000B7060000120600000000000000080000000600000000000089070000FB050000000000000009000000060000000000005C080000E405000000000000000A000000060000000000002E090000CD05000000000000000B00000006000000000000000A0000B505000000000000000C00000006000000000000D20A00009E05000000000000000D00000006000000000000A40B00008705000000000000000E00000006000000000000760C00007005000000000000000F00000006000000000000480D000059050000000000000010000000060000000000001A0E0000420500000000000000000000000700000000000022010000D207000005000000000100000007000000000000F4010000BB07000000000000000200000007000000000000C7020000A307000000000000000300000007000000000000990300008C070000000000000004000000070000000000006C04000074070000000000000005000000070000000000003E0500005D07000000000000000600000007000000000000100600004507000000000000000700000007000000000000E30600002E07000000000000000800000007000000000000B5070000160700000000000000090000000700000000000088080000FF06000000000000000A000000070000000000005A090000E806000000000000000B000000070000000000002C0A0000D006000000000000000C00000007000000000000FF0A0000B906000000000000000D00000007000000000000D10B0000A106000000000000000E00000007000000000000A40C00008A06000000000000000F00000007000000000000760D00007206000000000000001000000007000000000000480E00005B060000000000000000000000080000000000004C010000F1080000070000000001000000080000000000001E020000D908000001000000000200000008000000000000F1020000C108000000000000000300000008000000000000C4030000A908000000000000000400000008000000000000960400009108000000000000000500000008000000000000690500007A080000000000000006000000080000000000003C06000062080000000000000007000000080000000000000E0700004A08000000000000000800000008000000000000E10700003208000000000000000900000008000000000000B40800001A08000000000000000A00000008000000000000860900000308000000000000000B00000008000000000000590A0000EB07000000000000000C000000080000000000002C0B0000D307000000000000000D00000008000000000000FF0B0000BB07000000000000000E00000008000000000000D10C0000A307000000000000000F00000008000000000000A40D00008C07000000000000001000000008000000000000770E00007407000000000000000000000009000000000000750100000F0A00000800000000010000000900000000000048020000F7090000020000000002000000090000000000001B030000DF09000000000000000300000009000000000000EE030000C709000000000000000400000009000000000000C1040000AF09000000000000000500000009000000000000940500009609000000000000000600000009000000000000670600007E090000000000000007000000090000000000003A07000066090000000000000008000000090000000000000D0800004E09000000000000000900000009000000000000E00800003609000000000000000A00000009000000000000B30900001E09000000000000000B00000009000000000000860A00000509000000000000000C00000009000000000000590B0000ED08000000000000000D000000090000000000002C0C0000D508000000000000000E00000009000000000000FF0C0000BD08000000000000000F00000009000000000000D20D0000A508000000000000001000000009000000000000A50E00008D0800000000000000000000000A0000000000009F0100002E0B00000900000000010000000A00000000000072020000150B00000300000000020000000A00000000000045030000FD0A00000000000000030000000A00000000000018040000E40A00000000000000040000000A000000000000EC040000CC0A00000000000000050000000A000000000000BF050000B30A00000000000000060000000A000000000000920600009B0A00000000000000070000000A00000000000065070000820A00000000000000080000000A000000000000390800006A0A00000000000000090000000A0000000000000C090000510A000000000000000A0000000A000000000000DF090000390A000000000000000B0000000A000000000000B20A0000200A000000000000000C0000000A000000000000860B0000080A000000000000000D0000000A000000000000590C0000EF09000000000000000E0000000A0000000000002C0D0000D709000000000000000F0000000A000000000000000E0000BE0900000000000000100000000A000000000000D30E0000A50900000000000000000000000B000000000000C80100004C0C00000A00000000010000000B0000000000009C020000330C00000500000000020000000B0000000000006F0300001B0C00000000000000030000000B00000000000043040000020C00000000000000040000000B00000000000016050000E90B00000000000000050000000B000000000000EA050000D00B00000000000000060000000B000000000000BD060000B70B00000000000000070000000B000000000000910700009E0B00000000000000080000000B00000000000064080000850B00000000000000090000000B000000000000380900006C0B000000000000000A0000000B0000000000000C0A0000540B000000000000000B0000000B000000000000DF0A00003B0B000000000000000C0000000B000000000000B30B0000220B000000000000000D0000000B000000000000860C0000090B000000000000000E0000000B0000000000005A0D0000F00A000000000000000F0000000B0000000000002D0E0000D70A00000000000000100000000B000000000000010F0000BE0A00000000000000000000000C000000000000F20100006B0D00000B00000000010000000C000000000000C5020000520D00000600000000020000000C00000000000099030000380D00000100000000030000000C0000000000006D0400001F0D00000000000000040000000C00000000000041050000060D00000000000000050000000C00000000000015060000ED0C00000000000000060000000C000000000000E9060000D40C00000000000000070000000C000000000000BC070000BA0C00000000000000080000000C00000000000090080000A10C00000000000000090000000C00000000000064090000880C000000000000000A0000000C000000000000380A00006F0C000000000000000B0000000C0000000000000C0B0000550C000000000000000C0000000C000000000000E00B00003C0C000000000000000D0000000C000000000000B30C0000230C000000000000000E0000000C000000000000870D00000A0C000000000000000F0000000C0000000000005B0E0000F00B00000000000000100000000C0000000000002F0F0000D70B00000000000000000000000D0000000000001B0200008A0E00000C00000000010000000D000000000000EF020000700E00000700000000020000000D000000000000C3030000560E00000200000000030000000D000000000000970400003D0E00000000000000040000000D0000000000006C050000230E00000000000000050000000D000000000000400600000A0E00000000000000060000000D00000000000014070000F00D00000000000000070000000D000000000000E8070000D60D00000000000000080000000D000000000000BC080000BD0D00000000000000090000000D00000000000090090000A30D000000000000000A0000000D000000000000640A00008A0D000000000000000B0000000D000000000000380B0000700D000000000000000C0000000D0000000000000D0C0000560D000000000000000D0000000D000000000000E10C00003D0D000000000000000E0000000D000000000000B50D0000230D000000000000000F0000000D000000000000890E00000A0D00000000000000100000000D0000000000005D0F0000F00C00000000000000000000000E00000000000045020000A80F00000D00000000010000000E000000000000190300008E0F00000800000000020000000E000000000000ED030000740F00000400000000030000000E000000000000C20400005A0F00000000000000040000000E00000000000096050000400F00000000000000050000000E0000000000006B060000260F00000000000000060000000E0000000000003F0700000C0F00000000000000070000000E00000000000013080000F30E00000000000000080000000E000000000000E8080000D90E00000000000000090000000E000000000000BC090000BF0E000000000000000A0000000E000000000000910A0000A50E000000000000000B0000000E000000000000650B00008B0E000000000000000C0000000E0000000000003A0C0000710E000000000000000D0000000E0000000000000E0D0000570E000000000000000E0000000E000000000000E20D00003D0E000000000000000F0000000E000000000000B70E0000230E00000000000000100000000E0000000000008B0F0000090E00000000000000000000000F0000000000006E020000FF0F00000E00000000010000000F00000000000043030000FF0F00000A00000000020000000F00000000000017040000FF0F00000500000000030000000F000000000000EC040000FF0F00000100000000040000000F000000000000C1050000FF0F00000000000000050000000F00000000000096060000FF0F00000000000000060000000F0000000000006A070000FF0F00000000000000070000000F0000000000003F080000FF0F00000000000000080000000F00000000000014090000F40F00000000000000090000000F000000000000E8090000DA0F000000000000000A0000000F000000000000BD0A0000C00F000000000000000B0000000F000000000000920B0000A50F000000000000000C0000000F000000000000660C00008B0F000000000000000D0000000F0000000000003B0D0000710F000000000000000E0000000F000000000000100E0000560F000000000000000F0000000F000000000000E50E00003C0F00000000000000100000000F000000000000B90F0000220F00000000000000000000001000000000000098020000FF0F00000F0000000001000000100000000000006D030000FF0F00000B00000000020000001000000000000042040000FF0F00000700000000030000001000000000000017050000FF0F000002000000000400000010000000000000EC050000FF0F000000000000000500000010000000000000C1060000FF0F00000000000000060000001000000000000096070000FF0F0000000000000007000000100000000000006B080000FF0F0000000000000008000000100000000000003F090000FF0F000000000000000900000010000000000000140A0000FF0F000000000000000A00000010000000000000E90A0000FF0F000000000000000B00000010000000000000BE0B0000FF0F000000000000000C00000010000000000000930C0000FF0F000000000000000D00000010000000000000680D0000FF0F000000000000000E000000100000000000003D0E0000FF0F000000000000000F00000010000000000000120F0000FF0F000000000000001000000010000000000000E70F0000FF0F000000000000000000000000000000010000020000000000000001010000000100000000000000010000D200000000000000FA000000000200000000000000010000A301000000000000F30000000003000000000000000100007402000000000000EC0000000004000000000000000100004403000000000000E50000000005000000000000000100001504000000000000DE000000000600000000000000010000E604000000000000D7000000000700000000000000010000B605000000000000D00000000008000000000000000100008706000000000000C90000000009000000000000000100005807000000000000C2000000000A000000000000000100002808000000000000BB000000000B00000000000000010000F908000000000000B4000000000C00000000000000010000CA09000000000000AD000000000D000000000000000100009A0A000000000000A6000000000E000000000000000100006B0B0000000000009F000000000F000000000000000100003C0C000000000000980000000010000000000000000100000D0D000000000000910000000000000000010000000100002B0000001101000002010000000100000001000000010000000100000001000000010000000200000001000000010000CD010000E8000000F40000000003000000010000000100009E020000D3000000EE0000000004000000010000000100006F030000BE000000E700000000050000000100000001000040040000A9000000E00000000006000000010000000100001105000094000000D9000000000700000001000000010000E20500007F000000D2000000000800000001000000010000B30600006A000000CC0000000009000000010000000100008407000055000000C5000000000A000000010000000100005508000040000000BE000000000B00000001000000010000260900002B000000B7000000000C00000001000000010000F709000016000000B0000000000D00000001000000010000C70A000001000000AA000000000E00000001000000010000980B000000000000A3000000000F00000001000000010000690C0000000000009C0000000010000000010000000100003A0D00000000000095000000000000000002000000010000550000003002000003010000000100000002000000010000260100001B020000FD000000000200000002000000010000F701000005020000F6000000000300000002000000010000C8020000F0010000EF0000000004000000020000000100009A030000DB010000E90000000005000000020000000100006B040000C5010000E20000000006000000020000000100003C050000B0010000DB0000000007000000020000000100000D0600009B010000D5000000000800000002000000010000DE06000085010000CE000000000900000002000000010000B007000070010000C7000000000A00000002000000010000810800005B010000C1000000000B000000020000000100005209000045010000BA000000000C00000002000000010000230A000030010000B3000000000D00000002000000010000F40A00001B010000AD000000000E00000002000000010000C60B000006010000A6000000000F00000002000000010000970C0000F0000000A0000000001000000002000000010000680D0000DB000000990000000000000000030000000100007E0000004F030000050100000001000000030000000100005001000039030000FE0000000002000000030000000100002102000023030000F8000000000300000003000000010000F30200000E030000F1000000000400000003000000010000C4030000F8020000EB00000000050000000300000001000096040000E2020000E400000000060000000300000001000067050000CD020000DE00000000070000000300000001000039060000B7020000D70000000008000000030000000100000A070000A1020000D1000000000900000003000000010000DC0700008C020000CA000000000A00000003000000010000AD08000076020000C4000000000B000000030000000100007E09000060020000BD000000000C00000003000000010000500A00004A020000B7000000000D00000003000000010000210B000035020000B0000000000E00000003000000010000F30B00001F020000AA000000000F00000003000000010000C40C000009020000A3000000001000000003000000010000960D0000F40100009D000000000000000004000000010000A80000006D040000060100000001000000040000000100007A01000057040000FF0000000002000000040000000100004B02000041040000F90000000003000000040000000100001D0300002B040000F3000000000400000004000000010000EF03000015040000EC000000000500000004000000010000C1040000FF030000E600000000060000000400000001000092050000E9030000E000000000070000000400000001000064060000D3030000D900000000080000000400000001000036070000BD030000D300000000090000000400000001000007080000A7030000CD000000000A00000004000000010000D908000091030000C6000000000B00000004000000010000AB0900007B030000C0000000000C000000040000000100007D0A000065030000BA000000000D000000040000000100004E0B00004F030000B3000000000E00000004000000010000200C000039030000AD000000000F00000004000000010000F20C000023030000A7000000001000000004000000010000C40D00000D030000A0000000000000000005000000010000D10000008C05000007010000000100000005000000010000A30100007505000001010000000200000005000000010000750200005F050000FB0000000003000000050000000100004703000049050000F40000000004000000050000000100001904000032050000EE000000000500000005000000010000EB0400001C050000E8000000000600000005000000010000BD05000005050000E20000000007000000050000000100008F060000EF040000DC00000000080000000500000001000061070000D9040000D600000000090000000500000001000033080000C2040000CF000000000A0000000500000001000005090000AC040000C9000000000B00000005000000010000D709000095040000C3000000000C00000005000000010000A90A00007F040000BD000000000D000000050000000100007B0B000069040000B7000000000E000000050000000100004D0C000052040000B1000000000F000000050000000100001F0D00003C040000AA000000001000000005000000010000F10D000025040000A4000000000000000006000000010000FB000000AB06000008010000000100000006000000010000CD0100009406000002010000000200000006000000010000A00200007D060000FC0000000003000000060000000100007203000066060000F6000000000400000006000000010000440400004F060000F00000000005000000060000000100001605000039060000EA000000000600000006000000010000E905000022060000E4000000000700000006000000010000BB0600000B060000DE0000000008000000060000000100008D070000F4050000D80000000009000000060000000100005F080000DE050000D2000000000A0000000600000001000032090000C7050000CC000000000B00000006000000010000040A0000B0050000C6000000000C00000006000000010000D60A000099050000C0000000000D00000006000000010000A80B000083050000BA000000000E000000060000000100007B0C00006C050000B4000000000F000000060000000100004D0D000055050000AE0000000010000000060000000100001F0E00003E050000A800000000000000000700000001000025010000C90700000A010000000100000007000000010000F7010000B207000004010000000200000007000000010000CA0200009B070000FE0000000003000000070000000100009C03000084070000F80000000004000000070000000100006F0400006D070000F20000000005000000070000000100004105000056070000EC000000000600000007000000010000140600003E070000E6000000000700000007000000010000E606000027070000E1000000000800000007000000010000B907000010070000DB0000000009000000070000000100008B080000F9060000D5000000000A000000070000000100005E090000E2060000CF000000000B00000007000000010000300A0000CB060000C9000000000C00000007000000010000030B0000B4060000C3000000000D00000007000000010000D50B00009D060000BD000000000E00000007000000010000A80C000085060000B8000000000F000000070000000100007A0D00006E060000B20000000010000000070000000100004D0E000057060000AC0000000000000000080000000100004E010000E80800000B01000000010000000800000001000021020000D008000005010000000200000008000000010000F4020000B9080000FF000000000300000008000000010000C7030000A1080000FA000000000400000008000000010000990400008A080000F40000000005000000080000000100006C05000072080000EE0000000006000000080000000100003F0600005B080000E90000000007000000080000000100001207000043080000E3000000000800000008000000010000E40700002C080000DD000000000900000008000000010000B708000014080000D7000000000A000000080000000100008A090000FD070000D2000000000B000000080000000100005D0A0000E5070000CC000000000C00000008000000010000300B0000CE070000C6000000000D00000008000000010000020C0000B6070000C1000000000E00000008000000010000D50C00009F070000BB000000000F00000008000000010000A80D000087070000B50000000010000000080000000100007B0E000070070000B000000000000000000900000001000078010000060A00000C0100000001000000090000000100004B020000EF090000060100000002000000090000000100001E030000D709000001010000000300000009000000010000F1030000BF090000FB000000000400000009000000010000C4040000A7090000F6000000000500000009000000010000970500008F090000F00000000006000000090000000100006A06000077090000EB0000000007000000090000000100003D0700005F090000E50000000008000000090000000100001008000048090000E0000000000900000009000000010000E308000030090000DA000000000A00000009000000010000B609000018090000D5000000000B00000009000000010000890A000000090000CF000000000C000000090000000100005C0B0000E8080000CA000000000D000000090000000100002F0C0000D0080000C4000000000E00000009000000010000020D0000B9080000BE000000000F00000009000000010000D50D0000A1080000B9000000001000000009000000010000A80E000089080000B300000000000000000A000000010000A1010000250B00000D01000000010000000A000000010000750200000D0B00000801000000020000000A00000001000048030000F50A00000201000000030000000A0000000100001B040000DC0A0000FD00000000040000000A000000010000EF040000C40A0000F800000000050000000A000000010000C2050000AC0A0000F200000000060000000A00000001000095060000940A0000ED00000000070000000A000000010000680700007C0A0000E800000000080000000A0000000100003C080000630A0000E200000000090000000A0000000100000F0900004B0A0000DD000000000A0000000A000000010000E2090000330A0000D7000000000B0000000A000000010000B60A00001B0A0000D2000000000C0000000A000000010000890B0000030A0000CD000000000D0000000A0000000100005C0C0000EA090000C7000000000E0000000A000000010000300D0000D2090000C2000000000F0000000A000000010000030E0000BA090000BD00000000100000000A000000010000D60E0000A2090000B700000000000000000B000000010000CB010000440C00000E01000000010000000B0000000100009F0200002B0C00000901000000020000000B00000001000072030000120C00000401000000030000000B00000001000046040000FA0B0000FF00000000040000000B00000001000019050000E10B0000FA00000000050000000B000000010000ED050000C90B0000F400000000060000000B000000010000C0060000B00B0000EF00000000070000000B00000001000094070000980B0000EA00000000080000000B000000010000670800007F0B0000E500000000090000000B0000000100003B090000670B0000DF000000000A0000000B0000000100000F0A00004E0B0000DA000000000B0000000B000000010000E20A0000350B0000D5000000000C0000000B000000010000B60B00001D0B0000D0000000000D0000000B000000010000890C0000040B0000CB000000000E0000000B0000000100005D0D0000EC0A0000C5000000000F0000000B000000010000300E0000D30A0000C000000000100000000B000000010000040F0000BB0A0000BB00000000000000000C000000010000F5010000620D00001001000000010000000C000000010000C8020000490D00000B01000000020000000C0000000100009C030000300D00000601000000030000000C00000001000070040000170D00000101000000040000000C00000001000044050000FF0C0000FB00000000050000000C00000001000018060000E60C0000F600000000060000000C000000010000EB060000CD0C0000F100000000070000000C000000010000BF070000B40C0000EC00000000080000000C000000010000930800009B0C0000E700000000090000000C00000001000067090000820C0000E2000000000A0000000C0000000100003B0A0000690C0000DD000000000B0000000C0000000100000F0B0000500C0000D8000000000C0000000C000000010000E20B0000370C0000D3000000000D0000000C000000010000B60C00001E0C0000CE000000000E0000000C0000000100008A0D0000050C0000C9000000000F0000000C0000000100005E0E0000EC0B0000C400000000100000000C000000010000320F0000D30B0000BF00000000000000000D0000000100001E020000810E00001101000000010000000D000000010000F2020000680E00000C01000000020000000D000000010000C60300004E0E00000701000000030000000D0000000100009A040000350E00000201000000040000000D0000000100006E0500001C0E0000FD00000000050000000D00000001000043060000020E0000F800000000060000000D00000001000017070000E90D0000F400000000070000000D000000010000EB070000D00D0000EF00000000080000000D000000010000BF080000B70D0000EA00000000090000000D000000010000930900009D0D0000E5000000000A0000000D000000010000670A0000840D0000E0000000000B0000000D0000000100003B0B00006B0D0000DB000000000C0000000D0000000100000F0C0000510D0000D6000000000D0000000D000000010000E30C0000380D0000D1000000000E0000000D000000010000B70D00001F0D0000CC000000000F0000000D0000000100008B0E0000060D0000C700000000100000000D0000000100005F0F0000EC0C0000C300000000000000000E000000010000480200009F0F00001201000000010000000E0000000100001C030000860F00000D01000000020000000E000000010000F00300006C0F00000901000000030000000E000000010000C5040000530F00000401000000040000000E00000001000099050000390F0000FF00000000050000000E0000000100006D0600001F0F0000FA00000000060000000E00000001000042070000060F0000F600000000070000000E00000001000016080000EC0E0000F100000000080000000E000000010000EA080000D20E0000EC00000000090000000E000000010000BF090000B90E0000E8000000000A0000000E000000010000930A00009F0E0000E3000000000B0000000E000000010000670B0000850E0000DE000000000C0000000E0000000100003C0C00006C0E0000D9000000000D0000000E000000010000100D0000520E0000D5000000000E0000000E000000010000E40D0000380E0000D0000000000F0000000E000000010000B90E00001F0E0000CB00000000100000000E0000000100008D0F0000050E0000C600000000000000000F00000001000071020000FF0F00001301000000010000000F00000001000046030000FF0F00000F01000000020000000F0000000100001B040000FF0F00000A01000000030000000F000000010000EF040000FF0F00000601000000040000000F000000010000C4050000FF0F00000101000000050000000F00000001000098060000FF0F0000FD00000000060000000F0000000100006D070000FF0F0000F800000000070000000F00000001000042080000FF0F0000F300000000080000000F00000001000016090000EE0F0000EF00000000090000000F000000010000EB090000D40F0000EA000000000A0000000F000000010000BF0A0000BA0F0000E6000000000B0000000F000000010000940B0000A00F0000E1000000000C0000000F000000010000690C0000860F0000DC000000000D0000000F0000000100003D0D00006C0F0000D8000000000E0000000F000000010000120E0000520F0000D3000000000F0000000F000000010000E60E0000380F0000CF00000000100000000F000000010000BB0F00001E0F0000CA0000000000000000100000000100009B020000FF0F00001501000000010000001000000001000070030000FF0F00001001000000020000001000000001000045040000FF0F00000C01000000030000001000000001000019050000FF0F000007010000000400000010000000010000EE050000FF0F000003010000000500000010000000010000C3060000FF0F0000FF00000000060000001000000001000098070000FF0F0000FA0000000007000000100000000100006D080000FF0F0000F600000000080000001000000001000042090000FF0F0000F1000000000900000010000000010000170A0000FF0F0000ED000000000A00000010000000010000EC0A0000FF0F0000E8000000000B00000010000000010000C00B0000FF0F0000E4000000000C00000010000000010000950C0000FF0F0000E0000000000D000000100000000100006A0D0000FF0F0000DB000000000E000000100000000100003F0E0000FF0F0000D7000000000F00000010000000010000140F0000FF0F0000D2000000001000000010000000010000E90F0000FF0F0000CE000000000000000000000000020000040000000000000004020000000100000000000000020000D500000000000000FD010000000200000000000000020000A601000000000000F60100000003000000000000000200007702000000000000EF0100000004000000000000000200004803000000000000E90100000005000000000000000200001904000000000000E2010000000600000000000000020000E904000000000000DB010000000700000000000000020000BA05000000000000D40100000008000000000000000200008B06000000000000CD0100000009000000000000000200005C07000000000000C7010000000A000000000000000200002D08000000000000C0010000000B00000000000000020000FE08000000000000B9010000000C00000000000000020000CF09000000000000B2010000000D00000000000000020000A00A000000000000AB010000000E00000000000000020000710B000000000000A5010000000F00000000000000020000420C0000000000009E010000001000000000000000020000130D000000000000970100000000000000010000000200002D0000000801000005020000000100000001000000020000FE000000F4000000FE010000000200000001000000020000D0010000DF000000F8010000000300000001000000020000A1020000CB000000F101000000040000000100000002000072030000B6000000EB01000000050000000100000002000043040000A1000000E4010000000600000001000000020000150500008D000000DD010000000700000001000000020000E605000078000000D7010000000800000001000000020000B706000063000000D0010000000900000001000000020000880700004F000000C9010000000A00000001000000020000590800003A000000C3010000000B000000010000000200002B09000026000000BC010000000C00000001000000020000FC09000011000000B5010000000D00000001000000020000CD0A000000000000AF010000000E000000010000000200009E0B000000000000A8010000000F00000001000000020000700C000000000000A1010000001000000001000000020000410D0000000000009B010000000000000002000000020000570000002702000007020000000100000002000000020000280100001202000000020000000200000002000000020000000200000002000000020000000300000002000000020000CB020000E8010000F30100000004000000020000000200009D030000D3010000EC0100000005000000020000000200006E040000BE010000E601000000060000000200000002000040050000A9010000DF0100000007000000020000000200001106000094010000D9010000000800000002000000020000E30600007F010000D2010000000900000002000000020000B40700006A010000CC010000000A000000020000000200008508000055010000C5010000000B000000020000000200005709000040010000BF010000000C00000002000000020000280A00002B010000B8010000000D00000002000000020000FA0A000016010000B2010000000E00000002000000020000CB0B000001010000AB010000000F000000020000000200009D0C0000EC000000A50100000010000000020000000200006E0D0000D70000009E010000000000000003000000020000810000004603000008020000000100000003000000020000520100003003000002020000000200000003000000020000240200001B030000FB010000000300000003000000020000F602000006030000F5010000000400000003000000020000C7030000F0020000EE01000000050000000300000002000099040000DB020000E80100000006000000030000000200006B050000C6020000E20100000007000000030000000200003C060000B0020000DB0100000008000000030000000200000E0700009B020000D5010000000900000003000000020000E007000086020000CE010000000A00000003000000020000B108000070020000C8010000000B00000003000000020000830900005B020000C2010000000C00000003000000020000550A000045020000BB010000000D00000003000000020000260B000030020000B5010000000E00000003000000020000F80B00001B020000AF010000000F00000003000000020000CA0C000005020000A80100000010000000030000000200009C0D0000F0010000A2010000000000000004000000020000AA00000064040000090200000001000000040000000200007C0100004F040000030200000002000000040000000200004E02000039040000FD0100000003000000040000000200002003000023040000F7010000000400000004000000020000F20300000E040000F0010000000500000004000000020000C4040000F8030000EA01000000060000000400000002000096050000E2030000E401000000070000000400000002000068060000CC030000DE0100000008000000040000000200003A070000B7030000D70100000009000000040000000200000C080000A1030000D1010000000A00000004000000020000DD0800008B030000CB010000000B00000004000000020000AF09000075030000C5010000000C00000004000000020000810A000060030000BE010000000D00000004000000020000530B00004A030000B8010000000E00000004000000020000250C000034030000B2010000000F00000004000000020000F70C00001F030000AC010000001000000004000000020000C90D000009030000A5010000000000000005000000020000D4000000830500000B020000000100000005000000020000A60100006D050000050200000002000000050000000200007802000057050000FF0100000003000000050000000200004A03000041050000F80100000004000000050000000200001D0400002B050000F2010000000500000005000000020000EF04000015050000EC010000000600000005000000020000C1050000FF040000E601000000070000000500000002000093060000E8040000E001000000080000000500000002000065070000D2040000DA01000000090000000500000002000037080000BC040000D4010000000A0000000500000002000009090000A6040000CE010000000B00000005000000020000DC09000090040000C8010000000C00000005000000020000AE0A00007A040000C1010000000D00000005000000020000800B000064040000BB010000000E00000005000000020000520C00004E040000B5010000000F00000005000000020000240D000038040000AF010000001000000005000000020000F60D000022040000A9010000000000000006000000020000FE000000A20600000C020000000100000006000000020000D00100008B06000006020000000200000006000000020000A20200007506000000020000000300000006000000020000750300005E060000FA0100000004000000060000000200004704000048060000F40100000005000000060000000200001A05000031060000EE010000000600000006000000020000EC0500001B060000E8010000000700000006000000020000BE06000005060000E201000000080000000600000002000091070000EE050000DC01000000090000000600000002000063080000D8050000D6010000000A0000000600000002000035090000C1050000D0010000000B00000006000000020000080A0000AB050000CB010000000C00000006000000020000DA0A000094050000C5010000000D00000006000000020000AD0B00007E050000BF010000000E000000060000000200007F0C000067050000B9010000000F00000006000000020000510D000051050000B3010000001000000006000000020000240E00003B050000AD01000000000000000700000002000027010000C00700000E020000000100000007000000020000FA010000A907000008020000000200000007000000020000CC02000093070000020200000003000000070000000200009F0300007C070000FC0100000004000000070000000200007204000065070000F6010000000500000007000000020000440500004E070000F00100000006000000070000000200001706000037070000EB010000000700000007000000020000EA06000021070000E5010000000800000007000000020000BC0700000A070000DF0100000009000000070000000200008F080000F3060000D9010000000A0000000700000002000061090000DC060000D3010000000B00000007000000020000340A0000C5060000CD010000000C00000007000000020000070B0000AF060000C8010000000D00000007000000020000D90B000098060000C2010000000E00000007000000020000AC0C000081060000BC010000000F000000070000000200007F0D00006A060000B6010000001000000007000000020000510E000053060000B001000000000000000800000002000051010000DF0800000F02000000010000000800000002000024020000C808000009020000000200000008000000020000F7020000B108000004020000000300000008000000020000C903000099080000FE0100000004000000080000000200009C04000082080000F80100000005000000080000000200006F0500006B080000F30100000006000000080000000200004206000054080000ED010000000700000008000000020000150700003D080000E7010000000800000008000000020000E807000026080000E1010000000900000008000000020000BB0800000E080000DC010000000A000000080000000200008D090000F7070000D6010000000B00000008000000020000600A0000E0070000D0010000000C00000008000000020000330B0000C9070000CB010000000D00000008000000020000060C0000B2070000C5010000000E00000008000000020000D90C00009B070000BF010000000F00000008000000020000AC0D000083070000BA0100000010000000080000000200007F0E00006C070000B40100000000000000090000000200007B010000FE090000100200000001000000090000000200004E020000E60900000B02000000020000000900000002000021030000CF09000005020000000300000009000000020000F4030000B709000000020000000400000009000000020000C70400009F090000FA0100000005000000090000000200009A05000088090000F50100000006000000090000000200006D06000070090000EF0100000007000000090000000200004007000059090000EA0100000008000000090000000200001308000041090000E4010000000900000009000000020000E60800002A090000DE010000000A00000009000000020000B909000012090000D9010000000B000000090000000200008D0A0000FB080000D3010000000C00000009000000020000600B0000E3080000CE010000000D00000009000000020000330C0000CC080000C8010000000E00000009000000020000060D0000B4080000C3010000000F00000009000000020000D90D00009D080000BD010000001000000009000000020000AC0E000085080000B801000000000000000A000000020000A40100001C0B00001202000000010000000A00000002000078020000040B00000C02000000020000000A0000000200004B030000EC0A00000702000000030000000A0000000200001E040000D50A00000202000000040000000A000000020000F2040000BD0A0000FC01000000050000000A000000020000C5050000A50A0000F701000000060000000A000000020000980600008D0A0000F101000000070000000A0000000200006C070000750A0000EC01000000080000000A0000000200003F0800005D0A0000E601000000090000000A00000002000012090000450A0000E1010000000A0000000A000000020000E60900002D0A0000DC010000000B0000000A000000020000B90A0000150A0000D6010000000C0000000A0000000200008C0B0000FD090000D1010000000D0000000A0000000200005F0C0000E6090000CB010000000E0000000A000000020000330D0000CE090000C6010000000F0000000A000000020000060E0000B6090000C101000000100000000A000000020000D90E00009E090000BB01000000000000000B000000020000CE0100003B0C00001302000000010000000B000000020000A1020000230C00000E02000000020000000B000000020000750300000A0C00000902000000030000000B00000002000049040000F20B00000302000000040000000B0000000200001C050000DA0B0000FE01000000050000000B000000020000F0050000C20B0000F901000000060000000B000000020000C3060000A90B0000F401000000070000000B00000002000097070000910B0000EE01000000080000000B0000000200006A080000790B0000E901000000090000000B0000000200003E090000610B0000E4010000000A0000000B000000020000120A0000480B0000DE010000000B0000000B000000020000E50A0000300B0000D9010000000C0000000B000000020000B90B0000180B0000D4010000000D0000000B0000000200008C0C0000000B0000CF010000000E0000000B000000020000600D0000E70A0000C9010000000F0000000B000000020000330E0000CF0A0000C401000000100000000B000000020000070F0000B70A0000BF01000000000000000C000000020000F8010000590D00001502000000010000000C000000020000CB020000410D00000F02000000020000000C0000000200009F030000280D00000A02000000030000000C00000002000073040000100D00000502000000040000000C00000002000047050000F70C00000002000000050000000C0000000200001B060000DE0C0000FB01000000060000000C000000020000EE060000C60C0000F601000000070000000C000000020000C2070000AD0C0000F101000000080000000C00000002000096080000950C0000EB01000000090000000C0000000200006A0900007C0C0000E6010000000A0000000C0000000200003E0A0000630C0000E1010000000B0000000C000000020000110B00004B0C0000DC010000000C0000000C000000020000E50B0000320C0000D7010000000D0000000C000000020000B90C0000190C0000D2010000000E0000000C0000000200008D0D0000010C0000CD010000000F0000000C000000020000600E0000E80B0000C801000000100000000C000000020000340F0000D00B0000C201000000000000000D00000002000021020000780E00001602000000010000000D000000020000F50200005F0E00001102000000020000000D000000020000C9030000460E00000C02000000030000000D0000000200009D0400002D0E00000702000000040000000D00000002000071050000140E00000202000000050000000D00000002000045060000FB0D0000FD01000000060000000D00000002000019070000E20D0000F801000000070000000D000000020000ED070000C90D0000F301000000080000000D000000020000C1080000B00D0000EE01000000090000000D00000002000095090000970D0000E9010000000A0000000D0000000200006A0A00007E0D0000E4010000000B0000000D0000000200003E0B0000650D0000DF010000000C0000000D000000020000120C00004C0D0000DA010000000D0000000D000000020000E60C0000330D0000D5010000000E0000000D000000020000BA0D00001A0D0000D0010000000F0000000D0000000200008E0E0000010D0000CB01000000100000000D000000020000620F0000E80C0000C601000000000000000E0000000200004B020000970F00001702000000010000000E0000000200001F0300007D0F00001202000000020000000E000000020000F3030000640F00000E02000000030000000E000000020000C80400004B0F00000902000000040000000E0000000200009C050000310F00000402000000050000000E00000002000070060000180F0000FF01000000060000000E00000002000044070000FF0E0000FA01000000070000000E00000002000019080000E50E0000F501000000080000000E000000020000ED080000CC0E0000F101000000090000000E000000020000C1090000B30E0000EC010000000A0000000E000000020000960A0000990E0000E7010000000B0000000E0000000200006A0B0000800E0000E2010000000C0000000E0000000200003E0C0000670E0000DD010000000D0000000E000000020000120D00004D0E0000D8010000000E0000000E000000020000E70D0000340E0000D3010000000F0000000E000000020000BB0E00001B0E0000CF01000000100000000E0000000200008F0F0000010E0000CA01000000000000000F00000002000075020000FF0F00001902000000010000000F00000002000049030000FF0F00001402000000020000000F0000000200001E040000FF0F00000F02000000030000000F000000020000F2040000FF0F00000B02000000040000000F000000020000C7050000FF0F00000602000000050000000F0000000200009B060000FF0F00000102000000060000000F00000002000070070000FF0F0000FC01000000070000000F00000002000044080000FF0F0000F801000000080000000F00000002000019090000E80F0000F301000000090000000F000000020000ED090000CE0F0000EE010000000A0000000F000000020000C20A0000B40F0000EA010000000B0000000F000000020000960B00009B0F0000E5010000000C0000000F0000000200006B0C0000810F0000E0010000000D0000000F0000000200003F0D0000670F0000DB010000000E0000000F000000020000140E00004D0F0000D7010000000F0000000F000000020000E80E0000340F0000D201000000100000000F000000020000BD0F00001A0F0000CD0100000000000000100000000200009E020000FF0F00001A02000000010000001000000002000073030000FF0F00001602000000020000001000000002000048040000FF0F0000110200000003000000100000000200001C050000FF0F00000C020000000400000010000000020000F1050000FF0F000008020000000500000010000000020000C6060000FF0F0000030200000006000000100000000200009B070000FF0F0000FF0100000007000000100000000200006F080000FF0F0000FA01000000080000001000000002000044090000FF0F0000F6010000000900000010000000020000190A0000FF0F0000F1010000000A00000010000000020000EE0A0000FF0F0000EC010000000B00000010000000020000C20B0000FF0F0000E8010000000C00000010000000020000970C0000FF0F0000E3010000000D000000100000000200006C0D0000FF0F0000DF010000000E00000010000000020000400E0000FF0F0000DA010000000F00000010000000020000150F0000FF0F0000D6010000001000000010000000020000EA0F0000FF0F0000D1010000000000000000000000030000060000000000000007030000000100000000000000030000D70000000000000000030000000200000000000000030000A801000000000000F90200000003000000000000000300007902000000000000F30200000004000000000000000300004B03000000000000EC0200000005000000000000000300001C04000000000000E6020000000600000000000000030000ED04000000000000DF020000000700000000000000030000BF05000000000000D80200000008000000000000000300009006000000000000D20200000009000000000000000300006107000000000000CB020000000A000000000000000300003208000000000000C4020000000B000000000000000300000409000000000000BE020000000C00000000000000030000D509000000000000B7020000000D00000000000000030000A60A000000000000B0020000000E00000000000000030000780B000000000000AA020000000F00000000000000030000490C000000000000A30200000010000000000000000300001A0D0000000000009D0200000000000000010000000300002F000000000100000803000000010000000100000003000001010000EB00000002030000000200000001000000030000D2010000D7000000FB020000000300000001000000030000A4020000C3000000F502000000040000000100000003000075030000AE000000EE020000000500000001000000030000470400009A000000E80200000006000000010000000300001805000086000000E1020000000700000001000000030000EA05000071000000DB020000000800000001000000030000BB0600005D000000D40200000009000000010000000300008D07000049000000CE020000000A000000010000000300005E08000035000000C7020000000B000000010000000300003009000020000000C1020000000C00000001000000030000010A00000C000000BA020000000D00000001000000030000D30A000000000000B4020000000E00000001000000030000A40B000000000000AD020000000F00000001000000030000760C000000000000A7020000001000000001000000030000470D000000000000A0020000000000000002000000030000590000001E0200000A0300000001000000020000000300002B0100000A02000003030000000200000002000000030000FD010000F5010000FD020000000300000002000000030000CE020000E0010000F7020000000400000002000000030000A0030000CC010000F002000000050000000200000003000072040000B7010000EA02000000060000000200000003000043050000A2010000E3020000000700000002000000030000150600008E010000DD020000000800000002000000030000E706000079010000D7020000000900000002000000030000B807000064010000D0020000000A000000020000000300008A08000050010000CA020000000B000000020000000300005C0900003B010000C3020000000C000000020000000300002D0A000026010000BD020000000D00000002000000030000FF0A000012010000B7020000000E00000002000000030000D10B0000FD000000B0020000000F00000002000000030000A30C0000E8000000AA020000001000000002000000030000740D0000D4000000A3020000000000000003000000030000830000003D0300000B0300000001000000030000000300005501000028030000050300000002000000030000000300002702000013030000FF020000000300000003000000030000000300000003000000030000000400000003000000030000CA030000E9020000F20200000005000000030000000300009C040000D4020000EC0200000006000000030000000300006E050000BF020000E602000000070000000300000003000040060000AA020000DF0200000008000000030000000300001207000095020000D9020000000900000003000000030000E407000080020000D3020000000A00000003000000030000B60800006B020000CD020000000B000000030000000300008809000056020000C6020000000C000000030000000300005A0A000040020000C0020000000D000000030000000300002C0B00002B020000BA020000000E00000003000000030000FD0B000016020000B3020000000F00000003000000030000CF0C000001020000AD020000001000000003000000030000A10D0000EC010000A7020000000000000004000000030000AD0000005C0400000D0300000001000000040000000300007F0100004604000007030000000200000004000000030000510200003104000001030000000300000004000000030000230300001B040000FA020000000400000004000000030000F503000006040000F4020000000500000004000000030000C7040000F1030000EE02000000060000000400000003000099050000DB030000E80200000007000000040000000300006B060000C6030000E20200000008000000040000000300003D070000B0030000DC020000000900000004000000030000100800009B030000D6020000000A00000004000000030000E208000086030000CF020000000B00000004000000030000B409000070030000C9020000000C00000004000000030000860A00005B030000C3020000000D00000004000000030000580B000045030000BD020000000E000000040000000300002A0C000030030000B7020000000F00000004000000030000FC0C00001B030000B1020000001000000004000000030000CE0D000005030000AA020000000000000005000000030000D60000007A0500000E030000000100000005000000030000A901000064050000080300000002000000050000000300007B0200004F050000020300000003000000050000000300004D03000039050000FC0200000004000000050000000300002004000023050000F6020000000500000005000000030000F20400000D050000F0020000000600000005000000030000C4050000F8040000EA02000000070000000500000003000097060000E2040000E402000000080000000500000003000069070000CC040000DE0200000009000000050000000300003B080000B6040000D8020000000A000000050000000300000E090000A1040000D2020000000B00000005000000030000E00900008B040000CC020000000C00000005000000030000B20A000075040000C6020000000D00000005000000030000840B00005F040000C0020000000E00000005000000030000570C00004A040000BA020000000F00000005000000030000290D000034040000B4020000001000000005000000030000FB0D00001E040000AE020000000000000006000000030000000100009906000010030000000100000006000000030000D3010000830600000A030000000200000006000000030000A50200006D060000040300000003000000060000000300007803000056060000FE0200000004000000060000000300004A04000040060000F80200000005000000060000000300001D0500002A060000F2020000000600000006000000030000EF05000014060000ED020000000700000006000000030000C2060000FE050000E702000000080000000600000003000094070000E8050000E102000000090000000600000003000067080000D2050000DB020000000A0000000600000003000039090000BC050000D5020000000B000000060000000300000C0A0000A5050000CF020000000C00000006000000030000DE0A00008F050000C9020000000D00000006000000030000B10B000079050000C3020000000E00000006000000030000830C000063050000BD020000000F00000006000000030000560D00004D050000B7020000001000000006000000030000290E000037050000B10200000000000000070000000300002A010000B707000012030000000100000007000000030000FD010000A10700000C030000000200000007000000030000CF0200008B07000006030000000300000007000000030000A20300007407000000030000000400000007000000030000750400005E070000FA0200000005000000070000000300004805000047070000F50200000006000000070000000300001A06000031070000EF020000000700000007000000030000ED0600001A070000E9020000000800000007000000030000C007000004070000E302000000090000000700000003000092080000ED060000DD020000000A0000000700000003000065090000D7060000D8020000000B00000007000000030000380A0000C0060000D2020000000C000000070000000300000B0B0000AA060000CC020000000D00000007000000030000DD0B000093060000C6020000000E00000007000000030000B00C00007D060000C0020000000F00000007000000030000830D000066060000BB020000001000000007000000030000560E000050060000B502000000000000000800000003000054010000D60800001303000000010000000800000003000027020000BF0800000D030000000200000008000000030000F9020000A808000008030000000300000008000000030000CC03000092080000020300000004000000080000000300009F0400007B080000FC0200000005000000080000000300007205000064080000F7020000000600000008000000030000450600004D080000F10200000007000000080000000300001807000036080000EB020000000800000008000000030000EB0700001F080000E6020000000900000008000000030000BE08000008080000E0020000000A0000000800000003000091090000F2070000DA020000000B00000008000000030000640A0000DB070000D5020000000C00000008000000030000370B0000C4070000CF020000000D000000080000000300000A0C0000AD070000C9020000000E00000008000000030000DD0C000096070000C4020000000F00000008000000030000B00D00007F070000BE020000001000000008000000030000830E000068070000B80200000000000000090000000300007D010000F50900001503000000010000000900000003000050020000DE0900000F03000000020000000900000003000024030000C60900000A030000000300000009000000030000F7030000AF09000004030000000400000009000000030000CA04000098090000FE0200000005000000090000000300009D05000081090000F90200000006000000090000000300007006000069090000F30200000007000000090000000300004307000052090000EE020000000800000009000000030000170800003B090000E8020000000900000009000000030000EA08000024090000E3020000000A00000009000000030000BD0900000D090000DD020000000B00000009000000030000900A0000F5080000D8020000000C00000009000000030000630B0000DE080000D2020000000D00000009000000030000360C0000C7080000CC020000000E00000009000000030000090D0000B0080000C7020000000F00000009000000030000DD0D000099080000C1020000001000000009000000030000B00E000081080000BC02000000000000000A000000030000A7010000130B00001603000000010000000A0000000300007A020000FC0A00001103000000020000000A0000000300004E030000E40A00000B03000000030000000A00000003000021040000CD0A00000603000000040000000A000000030000F5040000B50A00000103000000050000000A000000030000C80500009E0A0000FB02000000060000000A0000000300009B060000860A0000F602000000070000000A0000000300006F0700006E0A0000F002000000080000000A00000003000042080000570A0000EB02000000090000000A000000030000150900003F0A0000E5020000000A0000000A000000030000E9090000280A0000E0020000000B0000000A000000030000BC0A0000100A0000DA020000000C0000000A0000000300008F0B0000F8090000D5020000000D0000000A000000030000630C0000E1090000D0020000000E0000000A000000030000360D0000C9090000CA020000000F0000000A000000030000090E0000B2090000C502000000100000000A000000030000DD0E00009A090000BF02000000000000000B000000030000D1010000320C00001803000000010000000B000000030000A40200001A0C00001203000000020000000B00000003000078030000020C00000D03000000030000000B0000000300004C040000EA0B00000803000000040000000B0000000300001F050000D20B00000303000000050000000B000000030000F3050000BA0B0000FD02000000060000000B000000030000C6060000A20B0000F802000000070000000B0000000300009A0700008A0B0000F302000000080000000B0000000300006D080000730B0000ED02000000090000000B000000030000410900005B0B0000E8020000000A0000000B000000030000140A0000430B0000E3020000000B0000000B000000030000E80A00002B0B0000DD020000000C0000000B000000030000BC0B0000130B0000D8020000000D0000000B0000000300008F0C0000FB0A0000D3020000000E0000000B000000030000630D0000E30A0000CD020000000F0000000B000000030000360E0000CB0A0000C802000000100000000B0000000300000A0F0000B30A0000C302000000000000000C000000030000FB010000510D00001903000000010000000C000000030000CE020000380D00001403000000020000000C000000030000A2030000200D00000F03000000030000000C00000003000076040000080D00000A03000000040000000C0000000300004A050000F00C00000503000000050000000C0000000300001D060000D70C0000FF02000000060000000C000000030000F1060000BF0C0000FA02000000070000000C000000030000C5070000A70C0000F502000000080000000C000000030000990800008E0C0000F002000000090000000C0000000300006D090000760C0000EB020000000A0000000C000000030000400A00005E0C0000E5020000000B0000000C000000030000140B0000450C0000E0020000000C0000000C000000030000E80B00002D0C0000DB020000000D0000000C000000030000BC0C0000150C0000D6020000000E0000000C0000000300008F0D0000FC0B0000D1020000000F0000000C000000030000630E0000E40B0000CB02000000100000000C000000030000370F0000CC0B0000C602000000000000000D000000030000240200006F0E00001B03000000010000000D000000030000F8020000570E00001603000000020000000D000000030000CC0300003E0E00001103000000030000000D000000030000A0040000250E00000C03000000040000000D000000030000740500000D0E00000703000000050000000D00000003000048060000F40D00000203000000060000000D0000000300001C070000DB0D0000FC02000000070000000D000000030000F0070000C30D0000F702000000080000000D000000030000C4080000AA0D0000F202000000090000000D00000003000098090000910D0000ED020000000A0000000D0000000300006C0A0000790D0000E8020000000B0000000D000000030000400B0000600D0000E3020000000C0000000D000000030000140C0000470D0000DE020000000D0000000D000000030000E80C00002F0D0000D9020000000E0000000D000000030000BC0D0000160D0000D4020000000F0000000D000000030000900E0000FD0C0000CF02000000100000000D000000030000640F0000E50C0000CA02000000000000000E0000000300004E0200008E0F00001C03000000010000000E00000003000022030000750F00001803000000020000000E000000030000F60300005C0F00001303000000030000000E000000030000CB040000430F00000E03000000040000000E0000000300009F0500002A0F00000903000000050000000E00000003000073060000110F00000403000000060000000E00000003000047070000F80E0000FF02000000070000000E0000000300001B080000DF0E0000FA02000000080000000E000000030000F0080000C60E0000F502000000090000000E000000030000C4090000AD0E0000F0020000000A0000000E000000030000980A0000940E0000EB020000000B0000000E0000000300006C0B00007B0E0000E6020000000C0000000E000000030000400C0000620E0000E1020000000D0000000E000000030000150D0000490E0000DC020000000E0000000E000000030000E90D00002F0E0000D7020000000F0000000E000000030000BD0E0000160E0000D202000000100000000E000000030000910F0000FD0D0000CD02000000000000000F00000003000078020000FF0F00001E03000000010000000F0000000300004C030000FF0F00001903000000020000000F00000003000021040000FF0F00001403000000030000000F000000030000F5040000FF0F00001003000000040000000F000000030000C9050000FF0F00000B03000000050000000F0000000300009E060000FF0F00000603000000060000000F00000003000072070000FF0F00000103000000070000000F00000003000047080000FB0F0000FC02000000080000000F0000000300001B090000E10F0000F702000000090000000F000000030000EF090000C80F0000F2020000000A0000000F000000030000C40A0000AF0F0000EE020000000B0000000F000000030000980B0000950F0000E9020000000C0000000F0000000300006D0C00007C0F0000E4020000000D0000000F000000030000410D0000620F0000DF020000000E0000000F000000030000150E0000490F0000DA020000000F0000000F000000030000EA0E0000300F0000D502000000100000000F000000030000BE0F0000160F0000D1020000000000000010000000030000A2020000FF0F00002003000000010000001000000003000076030000FF0F00001B0300000002000000100000000300004B040000FF0F0000160300000003000000100000000300001F050000FF0F000011030000000400000010000000030000F4050000FF0F00000D030000000500000010000000030000C9060000FF0F0000080300000006000000100000000300009D070000FF0F00000303000000070000001000000003000072080000FF0F0000FF02000000080000001000000003000046090000FF0F0000FA0200000009000000100000000300001B0A0000FF0F0000F5020000000A00000010000000030000F00A0000FF0F0000F0020000000B00000010000000030000C40B0000FF0F0000EC020000000C00000010000000030000990C0000FF0F0000E7020000000D000000100000000300006D0D0000FF0F0000E2020000000E00000010000000030000420E0000FF0F0000DD020000000F00000010000000030000170F0000FF0F0000D9020000001000000010000000030000EB0F0000FF0F0000D402000000000000000000000004000008000000000000000A040000000100000000000000040000D90000000000000003040000000200000000000000040000AB01000000000000FD0300000003000000000000000400007C02000000000000F60300000004000000000000000400004E03000000000000F00300000005000000000000000400002004000000000000E9030000000600000000000000040000F104000000000000E3030000000700000000000000040000C305000000000000DC0300000008000000000000000400009406000000000000D60300000009000000000000000400006607000000000000CF030000000A000000000000000400003708000000000000C9030000000B000000000000000400000909000000000000C3030000000C00000000000000040000DB09000000000000BC030000000D00000000000000040000AC0A000000000000B6030000000E000000000000000400007E0B000000000000AF030000000F000000000000000400004F0C000000000000A9030000001000000000000000040000210D000000000000A203000000000000000100000004000032000000F70000000B04000000010000000100000004000003010000E300000005040000000200000001000000040000D5010000CF000000FF030000000300000001000000040000A7020000BB000000F803000000040000000100000004000079030000A7000000F20300000005000000010000000400004A04000093000000EC0300000006000000010000000400001C0500007F000000E5030000000700000001000000040000EE0500006B000000DF030000000800000001000000040000C006000057000000D80300000009000000010000000400009107000043000000D2030000000A00000001000000040000630800002F000000CC030000000B00000001000000040000350900001B000000C5030000000C00000001000000040000070A000007000000BF030000000D00000001000000040000D80A000000000000B9030000000E00000001000000040000AA0B000000000000B2030000000F000000010000000400007C0C000000000000AC0300000010000000010000000400004E0D000000000000A50300000000000000020000000400005B000000150200000D0400000001000000020000000400002D0100000102000007040000000200000002000000040000FF010000ED01000001040000000300000002000000040000D1020000D8010000FA030000000400000002000000040000A3030000C4010000F403000000050000000200000004000075040000B0010000EE030000000600000002000000040000470500009B010000E70300000007000000020000000400001906000087010000E1030000000800000002000000040000EB06000073010000DB030000000900000002000000040000BD0700005E010000D5030000000A000000020000000400008F0800004A010000CE030000000B000000020000000400006109000036010000C8030000000C00000002000000040000330A000021010000C2030000000D00000002000000040000050B00000D010000BC030000000E00000002000000040000D60B0000F9000000B5030000000F00000002000000040000A80C0000E4000000AF0300000010000000020000000400007A0D0000D0000000A903000000000000000300000004000085000000340300000F040000000100000003000000040000570100001F03000009040000000200000003000000040000290200000B03000002040000000300000003000000040000FC020000F6020000FC030000000400000003000000040000CE030000E1020000F6030000000500000003000000040000A0040000CC020000F003000000060000000300000004000072050000B8020000EA03000000070000000300000004000044060000A3020000E4030000000800000003000000040000160700008E020000DD030000000900000003000000040000E80700007A020000D7030000000A00000003000000040000BA08000065020000D1030000000B000000030000000400008C09000050020000CB030000000C000000030000000400005F0A00003C020000C5030000000D00000003000000040000310B000027020000BF030000000E00000003000000040000030C000012020000B8030000000F00000003000000040000D50C0000FD010000B2030000001000000003000000040000A70D0000E9010000AC030000000000000004000000040000AF0000005304000011040000000100000004000000040000810100003E0400000A0400000002000000040000000400005402000028040000040400000003000000040000000400002603000013040000FE030000000400000004000000040000000400000004000000040000000500000004000000040000CA040000E9030000F20300000006000000040000000400009D050000D4030000EC0300000007000000040000000400006F060000BF030000E603000000080000000400000004000041070000AA030000E00300000009000000040000000400001408000095030000DA030000000A00000004000000040000E608000080030000D4030000000B00000004000000040000B80900006B030000CE030000000C000000040000000400008B0A000056030000C8030000000D000000040000000400005D0B000041030000C2030000000E000000040000000400002F0C00002C030000BC030000000F00000004000000040000010D000017030000B5030000001000000004000000040000D40D000002030000AF030000000000000005000000040000D90000007105000012040000000100000005000000040000AB0100005C0500000C0400000002000000050000000400007E0200004605000006040000000300000005000000040000500300003105000000040000000400000005000000040000230400001C050000FA030000000500000005000000040000F504000006050000F4030000000600000005000000040000C8050000F1040000EE0300000007000000050000000400009A060000DB040000E80300000008000000050000000400006D070000C6040000E20300000009000000050000000400003F080000B0040000DC030000000A00000005000000040000120900009B040000D7030000000B00000005000000040000E409000085040000D1030000000C00000005000000040000B70A000070040000CB030000000D00000005000000040000890B00005B040000C5030000000E000000050000000400005C0C000045040000BF030000000F000000050000000400002E0D000030040000B9030000001000000005000000040000000E00001A040000B3030000000000000006000000040000030100009006000014040000000100000006000000040000D50100007A0600000E040000000200000006000000040000A802000064060000080400000003000000060000000400007B0300004F060000020400000004000000060000000400004D04000039060000FC0300000005000000060000000400002005000023060000F7030000000600000006000000040000F30500000D060000F1030000000700000006000000040000C5060000F7050000EB03000000080000000600000004000098070000E2050000E50300000009000000060000000400006B080000CC050000DF030000000A000000060000000400003D090000B6050000D9030000000B00000006000000040000100A0000A0050000D3030000000C00000006000000040000E30A00008A050000CD030000000D00000006000000040000B50B000075050000C8030000000E00000006000000040000880C00005F050000C2030000000F000000060000000400005B0D000049050000BC0300000010000000060000000400002D0E000033050000B60300000000000000070000000400002C010000AF07000016040000000100000007000000040000FF0100009807000010040000000200000007000000040000D2020000820700000A040000000300000007000000040000A50300006C070000040400000004000000070000000400007804000056070000FF0300000005000000070000000400004B05000040070000F90300000006000000070000000400001E0600002A070000F3030000000700000007000000040000F006000013070000ED030000000800000007000000040000C3070000FD060000E703000000090000000700000004000096080000E7060000E2030000000A0000000700000004000069090000D1060000DC030000000B000000070000000400003C0A0000BB060000D6030000000C000000070000000400000F0B0000A5060000D0030000000D00000007000000040000E10B00008E060000CB030000000E00000007000000040000B40C000078060000C5030000000F00000007000000040000870D000062060000BF0300000010000000070000000400005A0E00004C060000B903000000000000000800000004000056010000CD0800001704000000010000000800000004000029020000B708000012040000000200000008000000040000FC020000A00800000C040000000300000008000000040000CF0300008A08000006040000000400000008000000040000A20400007308000001040000000500000008000000040000750500005D080000FB0300000006000000080000000400004806000046080000F50300000007000000080000000400001B07000030080000F0030000000800000008000000040000EE07000019080000EA030000000900000008000000040000C208000002080000E4030000000A0000000800000004000095090000EC070000DF030000000B00000008000000040000680A0000D5070000D9030000000C000000080000000400003B0B0000BF070000D3030000000D000000080000000400000E0C0000A8070000CE030000000E00000008000000040000E10C000092070000C8030000000F00000008000000040000B40D00007B070000C2030000001000000008000000040000870E000065070000BD03000000000000000900000004000080010000EC0900001904000000010000000900000004000053020000D50900001304000000020000000900000004000027030000BE0900000E040000000300000009000000040000FA030000A709000008040000000400000009000000040000CD0400009009000003040000000500000009000000040000A005000079090000FD0300000006000000090000000400007306000063090000F8030000000700000009000000040000470700004C090000F20300000008000000090000000400001A08000035090000EC030000000900000009000000040000ED0800001E090000E7030000000A00000009000000040000C009000007090000E1030000000B00000009000000040000930A0000F0080000DC030000000C00000009000000040000670B0000D9080000D6030000000D000000090000000400003A0C0000C2080000D1030000000E000000090000000400000D0D0000AB080000CB030000000F00000009000000040000E00D000094080000C6030000001000000009000000040000B30E00007E080000C003000000000000000A000000040000AA0100000B0B00001B04000000010000000A0000000400007D020000F30A00001504000000020000000A00000004000051030000DC0A00001004000000030000000A00000004000024040000C50A00000A04000000040000000A000000040000F7040000AE0A00000504000000050000000A000000040000CB050000960A0000FF03000000060000000A0000000400009E0600007F0A0000FA03000000070000000A00000004000072070000680A0000F403000000080000000A00000004000045080000500A0000EF03000000090000000A00000004000018090000390A0000EA030000000A0000000A000000040000EC090000220A0000E4030000000B0000000A000000040000BF0A00000B0A0000DF030000000C0000000A000000040000930B0000F3090000D9030000000D0000000A000000040000660C0000DC090000D4030000000E0000000A000000040000390D0000C5090000CE030000000F0000000A0000000400000D0E0000AE090000C903000000100000000A000000040000E00E000096090000C303000000000000000B000000040000D4010000290C00001C04000000010000000B000000040000A7020000120C00001704000000020000000B0000000400007B030000FA0B00001204000000030000000B0000000400004E040000E20B00000C04000000040000000B00000004000022050000CB0B00000704000000050000000B000000040000F6050000B30B00000204000000060000000B000000040000C90600009C0B0000FC03000000070000000B0000000400009D070000840B0000F703000000080000000B000000040000700800006C0B0000F203000000090000000B00000004000044090000550B0000EC030000000A0000000B000000040000170A00003D0B0000E7030000000B0000000B000000040000EB0A0000250B0000E1030000000C0000000B000000040000BF0B00000E0B0000DC030000000D0000000B000000040000920C0000F60A0000D7030000000E0000000B000000040000660D0000DE0A0000D1030000000F0000000B000000040000390E0000C70A0000CC03000000100000000B0000000400000D0F0000AF0A0000C703000000000000000C000000040000FE010000480D00001E04000000010000000C000000040000D1020000300D00001904000000020000000C000000040000A5030000180D00001404000000030000000C00000004000079040000000D00000E04000000040000000C0000000400004D050000E80C00000904000000050000000C00000004000020060000D00C00000404000000060000000C000000040000F4060000B80C0000FF03000000070000000C000000040000C8070000A00C0000F903000000080000000C0000000400009C080000880C0000F403000000090000000C0000000400006F090000700C0000EF030000000A0000000C000000040000430A0000580C0000E9030000000B0000000C000000040000170B0000400C0000E4030000000C0000000C000000040000EB0B0000280C0000DF030000000D0000000C000000040000BE0C0000100C0000DA030000000E0000000C000000040000920D0000F80B0000D4030000000F0000000C000000040000660E0000E00B0000CF03000000100000000C0000000400003A0F0000C80B0000CA03000000000000000D00000004000027020000670E00002004000000010000000D000000040000FB0200004E0E00001B04000000020000000D000000040000CF030000360E00001604000000030000000D000000040000A30400001E0E00001004000000040000000D00000004000077050000050E00000B04000000050000000D0000000400004B060000ED0D00000604000000060000000D0000000400001F070000D40D00000104000000070000000D000000040000F3070000BC0D0000FC03000000080000000D000000040000C7080000A40D0000F703000000090000000D0000000400009B0900008B0D0000F1030000000A0000000D0000000400006F0A0000730D0000EC030000000B0000000D000000040000430B00005B0D0000E7030000000C0000000D000000040000170C0000420D0000E2030000000D0000000D000000040000EB0C00002A0D0000DD030000000E0000000D000000040000BE0D0000110D0000D8030000000F0000000D000000040000920E0000F90C0000D203000000100000000D000000040000660F0000E10C0000CD03000000000000000E00000004000051020000850F00002204000000010000000E000000040000250300006D0F00001D04000000020000000E000000040000F9030000540F00001704000000030000000E000000040000CE0400003B0F00001204000000040000000E000000040000A2050000220F00000D04000000050000000E000000040000760600000A0F00000804000000060000000E0000000400004A070000F10E00000304000000070000000E0000000400001E080000D80E0000FE03000000080000000E000000040000F2080000BF0E0000F903000000090000000E000000040000C6090000A70E0000F4030000000A0000000E0000000400009A0A00008E0E0000EF030000000B0000000E0000000400006E0B0000750E0000EA030000000C0000000E000000040000430C00005C0E0000E5030000000D0000000E000000040000170D0000440E0000E0030000000E0000000E000000040000EB0D00002B0E0000DB030000000F0000000E000000040000BF0E0000120E0000D603000000100000000E000000040000930F0000F90D0000D003000000000000000F0000000400007B020000FF0F00002304000000010000000F0000000400004F030000FF0F00001E04000000020000000F00000004000024040000FF0F00001904000000030000000F000000040000F8040000FF0F00001404000000040000000F000000040000CC050000FF0F00000F04000000050000000F000000040000A1060000FF0F00000A04000000060000000F00000004000075070000FF0F00000604000000070000000F00000004000049080000F40F00000104000000080000000F0000000400001D090000DB0F0000FC03000000090000000F000000040000F2090000C20F0000F7030000000A0000000F000000040000C60A0000A90F0000F2030000000B0000000F0000000400009A0B0000900F0000ED030000000C0000000F0000000400006F0C0000770F0000E8030000000D0000000F000000040000430D00005E0F0000E3030000000E0000000F000000040000170E0000450F0000DE030000000F0000000F000000040000EB0E00002B0F0000D903000000100000000F000000040000C00F0000120F0000D4030000000000000010000000040000A5020000FF0F00002504000000010000001000000004000079030000FF0F0000200400000002000000100000000400004E040000FF0F00001B04000000030000001000000004000022050000FF0F000016040000000400000010000000040000F7050000FF0F000012040000000500000010000000040000CB060000FF0F00000D040000000600000010000000040000A0070000FF0F00000804000000070000001000000004000074080000FF0F00000304000000080000001000000004000049090000FF0F0000FE0300000009000000100000000400001D0A0000FF0F0000F9030000000A00000010000000040000F20A0000FF0F0000F4030000000B00000010000000040000C60B0000FF0F0000EF030000000C000000100000000400009B0C0000FF0F0000EB030000000D000000100000000400006F0D0000FF0F0000E6030000000E00000010000000040000440E0000FF0F0000E1030000000F00000010000000040000180F0000FF0F0000DC030000001000000010000000040000ED0F0000FF0F0000D70300000000000000000000000500000A000000000000000D050000000100000000000000050000DC0000000000000006050000000200000000000000050000AD01000000000000000500000003000000000000000500007F02000000000000FA0400000004000000000000000500005103000000000000F30400000005000000000000000500002304000000000000ED040000000600000000000000050000F504000000000000E7040000000700000000000000050000C705000000000000E00400000008000000000000000500009906000000000000DA0400000009000000000000000500006B07000000000000D4040000000A000000000000000500003C08000000000000CE040000000B000000000000000500000E09000000000000C7040000000C00000000000000050000E009000000000000C1040000000D00000000000000050000B20A000000000000BB040000000E00000000000000050000840B000000000000B4040000000F00000000000000050000560C000000000000AE040000001000000000000000050000280D000000000000A804000000000000000100000005000034000000EE0000000E05000000010000000100000005000006010000DA00000008050000000200000001000000050000D8010000C600000002050000000300000001000000050000AA020000B3000000FC0400000004000000010000000500007C0300009F000000F60400000005000000010000000500004E0400008B000000EF0400000006000000010000000500002005000078000000E9040000000700000001000000050000F205000064000000E3040000000800000001000000050000C406000051000000DD040000000900000001000000050000960700003D000000D6040000000A000000010000000500006808000029000000D0040000000B000000010000000500003A09000016000000CA040000000C000000010000000500000C0A000002000000C4040000000D00000001000000050000DE0A000000000000BE040000000E00000001000000050000B00B000000000000B7040000000F00000001000000050000820C000000000000B1040000001000000001000000050000540D000000000000AB0400000000000000020000000500005E0000000C0200001005000000010000000200000005000030010000F80100000A05000000020000000200000005000002020000E401000004050000000300000002000000050000D4020000D0010000FE040000000400000002000000050000A6030000BC010000F804000000050000000200000005000078040000A8010000F20400000006000000020000000500004B05000094010000EB0400000007000000020000000500001D06000080010000E5040000000800000002000000050000EF0600006C010000DF040000000900000002000000050000C107000058010000D9040000000A000000020000000500009308000044010000D3040000000B000000020000000500006509000030010000CD040000000C00000002000000050000380A00001C010000C7040000000D000000020000000500000A0B000008010000C0040000000E00000002000000050000DC0B0000F4000000BA040000000F00000002000000050000AE0C0000E0000000B4040000001000000002000000050000800D0000CC000000AE040000000000000003000000050000870000002B030000120500000001000000030000000500005A010000170300000C0500000002000000030000000500002C0200000203000006050000000300000003000000050000FE020000EE02000000050000000400000003000000050000D1030000DA020000FA040000000500000003000000050000A3040000C5020000F404000000060000000300000005000075050000B1020000EE040000000700000003000000050000480600009C020000E80400000008000000030000000500001A07000088020000E2040000000900000003000000050000EC07000074020000DC040000000A00000003000000050000BF0800005F020000D6040000000B00000003000000050000910900004B020000D0040000000C00000003000000050000630A000037020000C9040000000D00000003000000050000360B000022020000C3040000000E00000003000000050000080C00000E020000BD040000000F00000003000000050000DA0C0000F9010000B7040000001000000003000000050000AD0D0000E5010000B1040000000000000004000000050000B10000004A0400001405000000010000000400000005000084010000350400000E050000000200000004000000050000560200002004000008050000000300000004000000050000290300000C04000002050000000400000004000000050000FB030000F7030000FC040000000500000004000000050000CE040000E2030000F6040000000600000004000000050000A0050000CD030000F004000000070000000400000005000073060000B9030000EA04000000080000000400000005000045070000A4030000E4040000000900000004000000050000180800008F030000DE040000000A00000004000000050000EA0800007A030000D8040000000B00000004000000050000BD09000066030000D2040000000C000000040000000500008F0A000051030000CC040000000D00000004000000050000620B00003C030000C6040000000E00000004000000050000340C000027030000C0040000000F00000004000000050000070D000013030000BA040000001000000004000000050000D90D0000FE020000B4040000000000000005000000050000DB0000006805000016050000000100000005000000050000AE0100005305000010050000000200000005000000050000810200003E0500000A0500000003000000050000000500005303000029050000040500000004000000050000000500002604000014050000FE040000000500000005000000050000000500000005000000050000000600000005000000050000CB050000EA040000F30400000007000000050000000500009E060000D5040000ED04000000080000000500000005000070070000C0040000E704000000090000000500000005000043080000AA040000E1040000000A000000050000000500001609000095040000DB040000000B00000005000000050000E809000080040000D5040000000C00000005000000050000BB0A00006B040000CF040000000D000000050000000500008E0B000056040000C9040000000E00000005000000050000600C000041040000C3040000000F00000005000000050000330D00002C040000BD040000001000000005000000050000060E000017040000B8040000000000000006000000050000050100008706000018050000000100000006000000050000D80100007206000012050000000200000006000000050000AB0200005C0600000C0500000003000000060000000500007E0300004706000006050000000400000006000000050000500400003106000001050000000500000006000000050000230500001C060000FB040000000600000006000000050000F605000006060000F5040000000700000006000000050000C9060000F1050000EF0400000008000000060000000500009C070000DB050000E90400000009000000060000000500006E080000C6050000E3040000000A0000000600000005000041090000B0050000DE040000000B00000006000000050000140A00009B050000D8040000000C00000006000000050000E70A000085050000D2040000000D00000006000000050000BA0B000070050000CC040000000E000000060000000500008C0C00005A050000C6040000000F000000060000000500005F0D000045050000C0040000001000000006000000050000320E00002F050000BB0400000000000000070000000500002F010000A60700001A050000000100000007000000050000020200009007000014050000000200000007000000050000D50200007A0700000E050000000300000007000000050000A803000064070000080500000004000000070000000500007B0400004E070000030500000005000000070000000500004E05000039070000FD0400000006000000070000000500002106000023070000F7040000000700000007000000050000F40600000D070000F1040000000800000007000000050000C7070000F7060000EC0400000009000000070000000500009A080000E1060000E6040000000A000000070000000500006D090000CB060000E0040000000B00000007000000050000400A0000B5060000DB040000000C00000007000000050000130B0000A0060000D5040000000D00000007000000050000E50B00008A060000CF040000000E00000007000000050000B80C000074060000C9040000000F000000070000000500008B0D00005E060000C40400000010000000070000000500005E0E000048060000BE04000000000000000800000005000059010000C50800001C0500000001000000080000000500002C020000AE08000016050000000200000008000000050000FF0200009808000010050000000300000008000000050000D2030000820800000B050000000400000008000000050000A50400006C080000050500000005000000080000000500007805000055080000FF0400000006000000080000000500004C0600003F080000FA0400000007000000080000000500001F07000029080000F4040000000800000008000000050000F207000013080000EE040000000900000008000000050000C5080000FD070000E9040000000A0000000800000005000098090000E6070000E3040000000B000000080000000500006B0A0000D0070000DD040000000C000000080000000500003E0B0000BA070000D8040000000D00000008000000050000110C0000A4070000D2040000000E00000008000000050000E40C00008D070000CC040000000F00000008000000050000B80D000077070000C70400000010000000080000000500008B0E000061070000C104000000000000000900000005000083010000E30900001D05000000010000000900000005000056020000CD0900001805000000020000000900000005000029030000B609000012050000000300000009000000050000FD0300009F0900000D050000000400000009000000050000D00400008909000007050000000500000009000000050000A30500007209000002050000000600000009000000050000760600005C090000FC0400000007000000090000000500004A07000045090000F60400000008000000090000000500001D0800002E090000F1040000000900000009000000050000F008000018090000EB040000000A00000009000000050000C409000001090000E6040000000B00000009000000050000970A0000EB080000E0040000000C000000090000000500006A0B0000D4080000DA040000000D000000090000000500003D0C0000BE080000D5040000000E00000009000000050000110D0000A7080000CF040000000F00000009000000050000E40D000090080000CA040000001000000009000000050000B70E00007A080000C404000000000000000A000000050000AD010000020B00001F05000000010000000A00000005000080020000EB0A00001A05000000020000000A00000005000054030000D40A00001405000000030000000A00000005000027040000BD0A00000F05000000040000000A000000050000FA040000A60A00000905000000050000000A000000050000CE0500008F0A00000405000000060000000A000000050000A1060000780A0000FE04000000070000000A00000005000075070000610A0000F904000000080000000A000000050000480800004A0A0000F304000000090000000A0000000500001C090000330A0000EE040000000A0000000A000000050000EF0900001C0A0000E8040000000B0000000A000000050000C20A0000050A0000E3040000000C0000000A000000050000960B0000EE090000DD040000000D0000000A000000050000690C0000D7090000D8040000000E0000000A0000000500003D0D0000C0090000D2040000000F0000000A000000050000100E0000A9090000CD04000000100000000A000000050000E30E000093090000C704000000000000000B000000050000D7010000210C00002105000000010000000B000000050000AA020000090C00001C05000000020000000B0000000500007E030000F20B00001605000000030000000B00000005000051040000DB0B00001105000000040000000B00000005000025050000C30B00000B05000000050000000B000000050000F9050000AC0B00000605000000060000000B000000050000CC060000950B00000105000000070000000B000000050000A00700007D0B0000FB04000000080000000B00000005000073080000660B0000F604000000090000000B000000050000470900004F0B0000F0040000000A0000000B0000000500001A0A0000370B0000EB040000000B0000000B000000050000EE0A0000200B0000E6040000000C0000000B000000050000C20B0000090B0000E0040000000D0000000B000000050000950C0000F10A0000DB040000000E0000000B000000050000690D0000DA0A0000D5040000000F0000000B0000000500003C0E0000C30A0000D004000000100000000B000000050000100F0000AB0A0000CA04000000000000000C000000050000010200003F0D00002305000000010000000C000000050000D4020000280D00001E05000000020000000C000000050000A8030000100D00001805000000030000000C0000000500007C040000F80C00001305000000040000000C0000000500004F050000E00C00000E05000000050000000C00000005000023060000C90C00000805000000060000000C000000050000F7060000B10C00000305000000070000000C000000050000CB070000990C0000FE04000000080000000C0000000500009E080000820C0000F804000000090000000C000000050000720900006A0C0000F3040000000A0000000C000000050000460A0000520C0000EE040000000B0000000C0000000500001A0B00003B0C0000E8040000000C0000000C000000050000ED0B0000230C0000E3040000000D0000000C000000050000C10C00000B0C0000DE040000000E0000000C000000050000950D0000F30B0000D8040000000F0000000C000000050000690E0000DC0B0000D304000000100000000C0000000500003C0F0000C40B0000CE04000000000000000D0000000500002A0200005E0E00002505000000010000000D000000050000FE020000460E00002005000000020000000D000000050000D20300002E0E00001A05000000030000000D000000050000A6040000160E00001505000000040000000D0000000500007A050000FE0D00001005000000050000000D0000000500004E060000E60D00000B05000000060000000D00000005000022070000CE0D00000505000000070000000D000000050000F6070000B50D00000005000000080000000D000000050000CA0800009D0D0000FB04000000090000000D0000000500009D090000850D0000F6040000000A0000000D000000050000710A00006D0D0000F0040000000B0000000D000000050000450B0000550D0000EB040000000C0000000D000000050000190C00003D0D0000E6040000000D0000000D000000050000ED0C0000250D0000E0040000000E0000000D000000050000C10D00000D0D0000DB040000000F0000000D000000050000950E0000F50C0000D604000000100000000D000000050000690F0000DD0C0000D104000000000000000E000000050000540200007D0F00002705000000010000000E00000005000028030000640F00002205000000020000000E000000050000FC0300004C0F00001C05000000030000000E000000050000D0040000330F00001705000000040000000E000000050000A50500001B0F00001205000000050000000E00000005000079060000020F00000D05000000060000000E0000000500004D070000EA0E00000805000000070000000E00000005000021080000D20E00000205000000080000000E000000050000F5080000B90E0000FD04000000090000000E000000050000C9090000A10E0000F8040000000A0000000E0000000500009D0A0000880E0000F3040000000B0000000E000000050000710B0000700E0000EE040000000C0000000E000000050000450C0000570E0000E9040000000D0000000E000000050000190D00003F0E0000E3040000000E0000000E000000050000ED0D0000270E0000DE040000000F0000000E000000050000C10E00000E0E0000D904000000100000000E000000050000950F0000F60D0000D404000000000000000F0000000500007E020000FF0F00002905000000010000000F00000005000052030000FF0F00002405000000020000000F00000005000027040000FF0F00001E05000000030000000F000000050000FB040000FF0F00001905000000040000000F000000050000CF050000FF0F00001405000000050000000F000000050000A3060000FF0F00000F05000000060000000F00000005000077070000FF0F00000A05000000070000000F0000000500004C080000EE0F00000505000000080000000F00000005000020090000D50F00000005000000090000000F000000050000F4090000BC0F0000FB040000000A0000000F000000050000C80A0000A30F0000F6040000000B0000000F0000000500009C0B00008A0F0000F1040000000C0000000F000000050000710C0000720F0000EB040000000D0000000F000000050000450D0000590F0000E6040000000E0000000F000000050000190E0000400F0000E1040000000F0000000F000000050000ED0E0000270F0000DC04000000100000000F000000050000C10F00000E0F0000D7040000000000000010000000050000A8020000FF0F00002B0500000001000000100000000500007D030000FF0F00002505000000020000001000000005000051040000FF0F00002005000000030000001000000005000025050000FF0F00001B050000000400000010000000050000FA050000FF0F000016050000000500000010000000050000CE060000FF0F000011050000000600000010000000050000A2070000FF0F00000C05000000070000001000000005000077080000FF0F0000070500000008000000100000000500004B090000FF0F0000020500000009000000100000000500001F0A0000FF0F0000FD040000000A00000010000000050000F40A0000FF0F0000F8040000000B00000010000000050000C80B0000FF0F0000F3040000000C000000100000000500009C0C0000FF0F0000EE040000000D00000010000000050000710D0000FF0F0000E9040000000E00000010000000050000450E0000FF0F0000E4040000000F00000010000000050000190F0000FF0F0000DF040000001000000010000000050000EE0F0000FF0F0000DA0400000000000000000000000600000C0000000000000010060000000100000000000000060000DE0000000000000009060000000200000000000000060000B001000000000000030600000003000000000000000600008202000000000000FD0500000004000000000000000600005403000000000000F70500000005000000000000000600002704000000000000F1050000000600000000000000060000F904000000000000EB050000000700000000000000060000CB05000000000000E50500000008000000000000000600009D06000000000000DE0500000009000000000000000600006F07000000000000D8050000000A000000000000000600004108000000000000D2050000000B000000000000000600001409000000000000CC050000000C00000000000000060000E609000000000000C6050000000D00000000000000060000B80A000000000000C0050000000E000000000000000600008A0B000000000000BA050000000F000000000000000600005C0C000000000000B40500000010000000000000000600002E0D000000000000AD05000000000000000100000006000036000000E50000001206000000010000000100000006000008010000D10000000C060000000200000001000000060000DA010000BE00000005060000000300000001000000060000AD020000AB000000FF0500000004000000010000000600007F03000097000000F90500000005000000010000000600005104000084000000F30500000006000000010000000600002405000071000000ED050000000700000001000000060000F60500005E000000E7050000000800000001000000060000C80600004A000000E10500000009000000010000000600009A07000037000000DB050000000A000000010000000600006D08000024000000D5050000000B000000010000000600003F09000010000000CF050000000C00000001000000060000110A000000000000C9050000000D00000001000000060000E40A000000000000C3050000000E00000001000000060000B60B000000000000BD050000000F00000001000000060000880C000000000000B60500000010000000010000000600005A0D000000000000B005000000000000000200000006000060000000030200001406000000010000000200000006000032010000F00100000E06000000020000000200000006000005020000DC01000008060000000300000002000000060000D7020000C801000002060000000400000002000000060000A9030000B5010000FC0500000005000000020000000600007C040000A1010000F60500000006000000020000000600004E0500008D010000F0050000000700000002000000060000210600007A010000EA050000000800000002000000060000F306000066010000E3050000000900000002000000060000C607000052010000DD050000000A00000002000000060000980800003F010000D7050000000B000000020000000600006A0900002B010000D1050000000C000000020000000600003D0A000017010000CB050000000D000000020000000600000F0B000004010000C5050000000E00000002000000060000E20B0000F0000000BF050000000F00000002000000060000B40C0000DC000000B9050000001000000002000000060000860D0000C9000000B30500000000000000030000000600008A00000022030000160600000001000000030000000600005C0100000E030000100600000002000000030000000600002F020000FA0200000A06000000030000000300000006000001030000E602000004060000000400000003000000060000D4030000D2020000FE050000000500000003000000060000A6040000BE020000F805000000060000000300000006000079050000AA020000F20500000007000000030000000600004C06000096020000EC0500000008000000030000000600001E07000082020000E6050000000900000003000000060000F10700006E020000E0050000000A00000003000000060000C30800005A020000DA050000000B000000030000000600009609000046020000D4050000000C00000003000000060000680A000032020000CE050000000D000000030000000600003B0B00001E020000C8050000000E000000030000000600000D0C000009020000C2050000000F00000003000000060000E00C0000F5010000BC050000001000000003000000060000B30D0000E1010000B6050000000000000004000000060000B40000004104000018060000000100000004000000060000860100002C0400001206000000020000000400000006000059020000180400000C0600000003000000040000000600002C0300000404000006060000000400000004000000060000FE030000EF03000000060000000500000004000000060000D1040000DB030000FA050000000600000004000000060000A4050000C6030000F405000000070000000400000006000076060000B2030000EE050000000800000004000000060000490700009D030000E90500000009000000040000000600001C08000089030000E3050000000A00000004000000060000EE08000075030000DD050000000B00000004000000060000C109000060030000D7050000000C00000004000000060000940A00004C030000D1050000000D00000004000000060000670B000037030000CB050000000E00000004000000060000390C000023030000C5050000000F000000040000000600000C0D00000F030000BF050000001000000004000000060000DF0D0000FA020000B9050000000000000005000000060000DE000000600500001A060000000100000005000000060000B00100004B0500001406000000020000000500000006000083020000360500000E060000000300000005000000060000560300002105000008060000000400000005000000060000290400000C05000002060000000500000005000000060000FC040000F8040000FD050000000600000005000000060000CF050000E3040000F7050000000700000005000000060000A1060000CE040000F105000000080000000500000006000074070000B9040000EB05000000090000000500000006000047080000A4040000E5050000000A000000050000000600001A09000090040000DF050000000B00000005000000060000ED0900007B040000DA050000000C00000005000000060000BF0A000066040000D4050000000D00000005000000060000920B000051040000CE050000000E00000005000000060000650C00003C040000C8050000000F00000005000000060000380D000028040000C20500000010000000050000000600000B0E000013040000BC050000000000000006000000060000080100007E0600001C060000000100000006000000060000DB0100006906000016060000000200000006000000060000AE0200005406000010060000000300000006000000060000800300003F0600000A060000000400000006000000060000530400002A060000050600000005000000060000000600002605000014060000FF050000000600000006000000060000000600000006000000060000000700000006000000060000CC060000EA050000F30500000008000000060000000600009F070000D5050000EE05000000090000000600000006000072080000C0050000E8050000000A0000000600000006000045090000AB050000E2050000000B00000006000000060000180A000095050000DC050000000C00000006000000060000EB0A000080050000D6050000000D00000006000000060000BE0B00006B050000D1050000000E00000006000000060000910C000056050000CB050000000F00000006000000060000640D000041050000C5050000001000000006000000060000370E00002C050000BF050000000000000007000000060000320100009D0700001E060000000100000007000000060000050200008707000018060000000200000007000000060000D80200007207000012060000000300000007000000060000AB0300005C0700000D0600000004000000070000000600007E0400004707000007060000000500000007000000060000510500003107000001060000000600000007000000060000240600001C070000FB050000000700000007000000060000F706000006070000F6050000000800000007000000060000CA070000F1060000F00500000009000000070000000600009D080000DB060000EA050000000A0000000700000006000070090000C6060000E5050000000B00000007000000060000430A0000B0060000DF050000000C00000007000000060000160B00009B060000D9050000000D00000007000000060000EA0B000085060000D3050000000E00000007000000060000BD0C00006F060000CE050000000F00000007000000060000900D00005A060000C8050000001000000007000000060000630E000044060000C20500000000000000080000000600005C010000BC080000200600000001000000080000000600002F020000A60800001A060000000200000008000000060000020300009008000014060000000300000008000000060000D50300007A0800000F060000000400000008000000060000A804000064080000090600000005000000080000000600007C0500004E080000030600000006000000080000000600004F06000038080000FE0500000007000000080000000600002207000022080000F8050000000800000008000000060000F50700000C080000F3050000000900000008000000060000C8080000F7070000ED050000000A000000080000000600009C090000E1070000E7050000000B000000080000000600006F0A0000CB070000E2050000000C00000008000000060000420B0000B5070000DC050000000D00000008000000060000150C00009F070000D6050000000E00000008000000060000E80C000089070000D1050000000F00000008000000060000BC0D000073070000CB0500000010000000080000000600008F0E00005D070000C505000000000000000900000006000086010000DA0900002206000000010000000900000006000059020000C40900001C0600000002000000090000000600002C030000AE09000017060000000300000009000000060000000400009809000011060000000400000009000000060000D3040000810900000B060000000500000009000000060000A60500006B090000060600000006000000090000000600007A06000055090000000600000007000000090000000600004D0700003E090000FB0500000008000000090000000600002008000028090000F5050000000900000009000000060000F408000012090000EF050000000A00000009000000060000C7090000FC080000EA050000000B000000090000000600009A0A0000E5080000E4050000000C000000090000000600006D0B0000CF080000DF050000000D00000009000000060000410C0000B9080000D9050000000E00000009000000060000140D0000A3080000D3050000000F00000009000000060000E70D00008C080000CE050000001000000009000000060000BB0E000076080000C805000000000000000A000000060000B0010000F90A00002406000000010000000A00000006000083020000E20A00001E06000000020000000A00000006000056030000CC0A00001906000000030000000A0000000600002A040000B50A00001306000000040000000A000000060000FD0400009F0A00000E06000000050000000A000000060000D1050000880A00000806000000060000000A000000060000A4060000710A00000306000000070000000A000000060000780700005B0A0000FD05000000080000000A0000000600004B080000440A0000F805000000090000000A0000000600001F0900002D0A0000F2050000000A0000000A000000060000F2090000170A0000EC050000000B0000000A000000060000C60A0000000A0000E7050000000C0000000A000000060000990B0000E9090000E1050000000D0000000A0000000600006C0C0000D3090000DC050000000E0000000A000000060000400D0000BC090000D6050000000F0000000A000000060000130E0000A5090000D105000000100000000A000000060000E70E00008F090000CB05000000000000000B000000060000DA010000180C00002606000000010000000B000000060000AD020000010C00002006000000020000000B00000006000081030000EA0B00001B06000000030000000B00000006000054040000D30B00001506000000040000000B00000006000028050000BC0B00001006000000050000000B000000060000FB050000A50B00000A06000000060000000B000000060000CF0600008E0B00000506000000070000000B000000060000A3070000770B00000006000000080000000B00000006000076080000600B0000FA05000000090000000B0000000600004A090000490B0000F5050000000A0000000B0000000600001D0A0000320B0000EF050000000B0000000B000000060000F10A00001B0B0000EA050000000C0000000B000000060000C50B0000040B0000E4050000000D0000000B000000060000980C0000ED0A0000DF050000000E0000000B0000000600006C0D0000D60A0000D9050000000F0000000B0000000600003F0E0000BE0A0000D405000000100000000B000000060000130F0000A70A0000CE05000000000000000C00000006000004020000370D00002806000000010000000C000000060000D70200001F0D00002206000000020000000C000000060000AB030000080D00001D06000000030000000C0000000600007F040000F00C00001806000000040000000C00000006000052050000D90C00001206000000050000000C00000006000026060000C20C00000D06000000060000000C000000060000FA060000AA0C00000706000000070000000C000000060000CE070000930C00000206000000080000000C000000060000A10800007B0C0000FD05000000090000000C00000006000075090000640C0000F7050000000A0000000C000000060000490A00004D0C0000F2050000000B0000000C0000000600001C0B0000350C0000EC050000000C0000000C000000060000F00B00001E0C0000E7050000000D0000000C000000060000C40C0000060C0000E1050000000E0000000C000000060000980D0000EF0B0000DC050000000F0000000C0000000600006B0E0000D80B0000D705000000100000000C0000000600003F0F0000C00B0000D105000000000000000D0000000600002E020000550E00002A06000000010000000D000000060000010300003E0E00002506000000020000000D000000060000D5030000260E00001F06000000030000000D000000060000A90400000E0E00001A06000000040000000D0000000600007D050000F60D00001406000000050000000D00000006000051060000DE0D00000F06000000060000000D00000006000025070000C70D00000A06000000070000000D000000060000F8070000AF0D00000406000000080000000D000000060000CC080000970D0000FF05000000090000000D000000060000A00900007F0D0000FA050000000A0000000D000000060000740A0000680D0000F4050000000B0000000D000000060000480B0000500D0000EF050000000C0000000D0000000600001C0C0000380D0000EA050000000D0000000D000000060000EF0C0000200D0000E4050000000E0000000D000000060000C30D0000090D0000DF050000000F0000000D000000060000970E0000F10C0000DA05000000100000000D0000000600006B0F0000D90C0000D405000000000000000E00000006000058020000740F00002C06000000010000000E0000000600002B0300005C0F00002706000000020000000E000000060000FF030000440F00002106000000030000000E000000060000D30400002C0F00001C06000000040000000E000000060000A7050000130F00001706000000050000000E0000000600007B060000FB0E00001106000000060000000E0000000600004F070000E30E00000C06000000070000000E00000006000023080000CB0E00000706000000080000000E000000060000F7080000B30E00000206000000090000000E000000060000CB0900009B0E0000FC050000000A0000000E0000000600009F0A0000830E0000F7050000000B0000000E000000060000730B00006A0E0000F2050000000C0000000E000000060000470C0000520E0000EC050000000D0000000E0000000600001B0D00003A0E0000E7050000000E0000000E000000060000EF0D0000220E0000E2050000000F0000000E000000060000C30E00000A0E0000DD05000000100000000E000000060000970F0000F20D0000D705000000000000000F00000006000081020000FF0F00002E06000000010000000F00000006000056030000FF0F00002906000000020000000F0000000600002A040000FF0F00002306000000030000000F000000060000FE040000FF0F00001E06000000040000000F000000060000D2050000FF0F00001906000000050000000F000000060000A6060000FF0F00001406000000060000000F0000000600007A070000FF0F00000F06000000070000000F0000000600004E080000E70F00000906000000080000000F00000006000022090000CF0F00000406000000090000000F000000060000F6090000B60F0000FF050000000A0000000F000000060000CA0A00009E0F0000FA050000000B0000000F0000000600009F0B0000850F0000F4050000000C0000000F000000060000730C00006D0F0000EF050000000D0000000F000000060000470D0000540F0000EA050000000E0000000F0000000600001B0E00003C0F0000E5050000000F0000000F000000060000EF0E0000230F0000DF05000000100000000F000000060000C30F00000B0F0000DA050000000000000010000000060000AB020000FF0F00003006000000010000001000000006000080030000FF0F00002B06000000020000001000000006000054040000FF0F00002606000000030000001000000006000028050000FF0F000020060000000400000010000000060000FC050000FF0F00001B060000000500000010000000060000D1060000FF0F000016060000000600000010000000060000A5070000FF0F00001106000000070000001000000006000079080000FF0F00000C0600000008000000100000000600004D090000FF0F000007060000000900000010000000060000220A0000FF0F000001060000000A00000010000000060000F60A0000FF0F0000FC050000000B00000010000000060000CA0B0000FF0F0000F7050000000C000000100000000600009E0C0000FF0F0000F2050000000D00000010000000060000720D0000FF0F0000ED050000000E00000010000000060000470E0000FF0F0000E8050000000F000000100000000600001B0F0000FF0F0000E2050000001000000010000000060000EF0F0000FF0F0000DD0500000000000000000000000700000E0000000000000013070000000100000000000000070000E0000000000000000D070000000200000000000000070000B301000000000000070700000003000000000000000700008502000000000000010700000004000000000000000700005803000000000000FB0600000005000000000000000700002A04000000000000F5060000000600000000000000070000FD04000000000000EF060000000700000000000000070000CF05000000000000E9060000000800000000000000070000A106000000000000E30600000009000000000000000700007407000000000000DD060000000A000000000000000700004608000000000000D7060000000B000000000000000700001909000000000000D1060000000C00000000000000070000EB09000000000000CB060000000D00000000000000070000BE0A000000000000C5060000000E00000000000000070000900B000000000000BF060000000F00000000000000070000630C000000000000B9060000001000000000000000070000350D000000000000B306000000000000000100000007000038000000DC000000150700000001000000010000000700000A010000C90000000F070000000200000001000000070000DD010000B600000009070000000300000001000000070000B0020000A3000000030700000004000000010000000700008203000090000000FD060000000500000001000000070000550400007D000000F7060000000600000001000000070000270500006A000000F1060000000700000001000000070000FA05000057000000EB060000000800000001000000070000CC06000044000000E50600000009000000010000000700009F07000031000000DF060000000A00000001000000070000710800001E000000D9060000000B00000001000000070000440900000B000000D3060000000C00000001000000070000170A000000000000CE060000000D00000001000000070000E90A000000000000C8060000000E00000001000000070000BC0B000000000000C2060000000F000000010000000700008E0C000000000000BC060000001000000001000000070000610D000000000000B606000000000000000200000007000062000000FB0100001707000000010000000200000007000035010000E70100001107000000020000000200000007000007020000D40100000B070000000300000002000000070000DA020000C001000005070000000400000002000000070000AD030000AD010000FF0600000005000000020000000700007F0400009A010000F90600000006000000020000000700005205000086010000F40600000007000000020000000700002506000073010000EE060000000800000002000000070000F706000060010000E8060000000900000002000000070000CA0700004C010000E2060000000A000000020000000700009D08000039010000DC060000000B000000020000000700006F09000026010000D6060000000C00000002000000070000420A000012010000D0060000000D00000002000000070000150B0000FF000000CA060000000E00000002000000070000E70B0000EC000000C4060000000F00000002000000070000BA0C0000D8000000BF0600000010000000020000000700008D0D0000C5000000B90600000000000000030000000700008C00000019030000190700000001000000030000000700005F010000060300001307000000020000000300000007000032020000F20200000D07000000030000000300000007000004030000DE02000008070000000400000003000000070000D7030000CA02000002070000000500000003000000070000AA040000B7020000FC0600000006000000030000000700007D050000A3020000F60600000007000000030000000700004F0600008F020000F0060000000800000003000000070000220700007B020000EA060000000900000003000000070000F507000068020000E4060000000A00000003000000070000C808000054020000DF060000000B000000030000000700009A09000040020000D9060000000C000000030000000700006D0A00002D020000D3060000000D00000003000000070000400B000019020000CD060000000E00000003000000070000130C000005020000C7060000000F00000003000000070000E50C0000F1010000C1060000001000000003000000070000B80D0000DE010000BB060000000000000004000000070000B6000000380400001B0700000001000000040000000700008901000024040000150700000002000000040000000700005C02000010040000100700000003000000040000000700002F030000FC0300000A07000000040000000400000007000002040000E803000004070000000500000004000000070000D4040000D3030000FE060000000600000004000000070000A7050000BF030000F80600000007000000040000000700007A060000AB030000F30600000008000000040000000700004D07000097030000ED0600000009000000040000000700002008000083030000E7060000000A00000004000000070000F30800006F030000E1060000000B00000004000000070000C60900005B030000DB060000000C00000004000000070000980A000047030000D6060000000D000000040000000700006B0B000033030000D0060000000E000000040000000700003E0C00001F030000CA060000000F00000004000000070000110D00000B030000C4060000001000000004000000070000E40D0000F6020000BE060000000000000005000000070000E0000000570500001D070000000100000005000000070000B30100004205000018070000000200000005000000070000860200002E0500001207000000030000000500000007000059030000190500000C0700000004000000050000000700002C0400000505000006070000000500000005000000070000FF040000F004000001070000000600000005000000070000D2050000DC040000FB060000000700000005000000070000A5060000C7040000F506000000080000000500000007000078070000B3040000EF0600000009000000050000000700004B0800009E040000EA060000000A000000050000000700001E0900008A040000E4060000000B00000005000000070000F109000076040000DE060000000C00000005000000070000C40A000061040000D8060000000D00000005000000070000970B00004D040000D2060000000E000000050000000700006A0C000038040000CD060000000F000000050000000700003D0D000024040000C7060000001000000005000000070000100E00000F040000C10600000000000000060000000700000A0100007506000020070000000100000006000000070000DD010000610600001A070000000200000006000000070000B00200004C0600001407000000030000000600000007000083030000370600000E0700000004000000060000000700005604000022060000090700000005000000060000000700002A0500000D06000003070000000600000006000000070000FD050000F8050000FD060000000700000006000000070000D0060000E4050000F8060000000800000006000000070000A3070000CF050000F206000000090000000600000007000076080000BA050000EC060000000A0000000600000007000049090000A5050000E6060000000B000000060000000700001C0A000090050000E1060000000C00000006000000070000EF0A00007B050000DB060000000D00000006000000070000C20B000066050000D5060000000E00000006000000070000950C000052050000CF060000000F00000006000000070000680D00003D050000CA0600000010000000060000000700003B0E000028050000C4060000000000000007000000070000340100009407000022070000000100000007000000070000070200007F0700001C070000000200000007000000070000DB0200006A07000016070000000300000007000000070000AE0300005507000011070000000400000007000000070000810400003F0700000B070000000500000007000000070000540500002A07000005070000000600000007000000070000270600001507000000070000000700000007000000070000000700000007000000070000000800000007000000070000CE070000EA060000F4060000000900000007000000070000A1080000D5060000EF060000000A0000000700000007000074090000C0060000E9060000000B00000007000000070000470A0000AB060000E3060000000C000000070000000700001A0B000096060000DE060000000D00000007000000070000EE0B000080060000D8060000000E00000007000000070000C10C00006B060000D2060000000F00000007000000070000940D000056060000CC060000001000000007000000070000670E000041060000C70600000000000000080000000700005E010000B308000024070000000100000008000000070000320200009D0800001E070000000200000008000000070000050300008808000019070000000300000008000000070000D80300007208000013070000000400000008000000070000AB0400005D0800000D0700000005000000080000000700007F0500004708000008070000000600000008000000070000520600003108000002070000000700000008000000070000250700001C080000FC060000000800000008000000070000F907000006080000F7060000000900000008000000070000CC080000F1070000F1060000000A000000080000000700009F090000DB070000EC060000000B00000008000000070000720A0000C5070000E6060000000C00000008000000070000460B0000B0070000E0060000000D00000008000000070000190C00009A070000DB060000000E00000008000000070000EC0C000085070000D5060000000F00000008000000070000BF0D00006F070000CF060000001000000008000000070000930E000059070000CA06000000000000000900000007000088010000D2090000260700000001000000090000000700005C020000BC090000210700000002000000090000000700002F030000A60900001B070000000300000009000000070000020400009009000015070000000400000009000000070000D60400007A09000010070000000500000009000000070000A9050000640900000A0700000006000000090000000700007D0600004E090000050700000007000000090000000700005007000038090000FF0600000008000000090000000700002308000022090000F9060000000900000009000000070000F70800000C090000F4060000000A00000009000000070000CA090000F6080000EE060000000B000000090000000700009E0A0000E0080000E8060000000C00000009000000070000710B0000CA080000E3060000000D00000009000000070000440C0000B4080000DD060000000E00000009000000070000180D00009E080000D8060000000F00000009000000070000EB0D000088080000D2060000001000000009000000070000BE0E000072080000CC06000000000000000A000000070000B2010000F00A00002807000000010000000A00000007000086020000DA0A00002307000000020000000A00000007000059030000C40A00001D07000000030000000A0000000700002D040000AD0A00001807000000040000000A00000007000000050000970A00001207000000050000000A000000070000D4050000810A00000D07000000060000000A000000070000A70600006A0A00000707000000070000000A0000000700007B070000540A00000107000000080000000A0000000700004E0800003E0A0000FC06000000090000000A00000007000022090000270A0000F6060000000A0000000A000000070000F5090000110A0000F1060000000B0000000A000000070000C90A0000FB090000EB060000000C0000000A0000000700009C0B0000E4090000E6060000000D0000000A000000070000700C0000CE090000E0060000000E0000000A000000070000430D0000B8090000DA060000000F0000000A000000070000170E0000A1090000D506000000100000000A000000070000EA0E00008B090000CF06000000000000000B000000070000DC0100000F0C00002B07000000010000000B000000070000B0020000F80B00002507000000020000000B00000007000084030000E20B00001F07000000030000000B00000007000057040000CB0B00001A07000000040000000B0000000700002B050000B40B00001407000000050000000B000000070000FE0500009E0B00000F07000000060000000B000000070000D2060000870B00000907000000070000000B000000070000A6070000700B00000407000000080000000B00000007000079080000590B0000FE06000000090000000B0000000700004D090000430B0000F9060000000A0000000B000000070000200A00002C0B0000F3060000000B0000000B000000070000F40A0000150B0000EE060000000C0000000B000000070000C80B0000FF0A0000E8060000000D0000000B0000000700009B0C0000E80A0000E3060000000E0000000B0000000700006F0D0000D10A0000DD060000000F0000000B000000070000420E0000BA0A0000D806000000100000000B000000070000160F0000A40A0000D206000000000000000C000000070000070200002E0D00002D07000000010000000C000000070000DA020000170D00002707000000020000000C000000070000AE030000000D00002207000000030000000C00000007000082040000E90C00001C07000000040000000C00000007000055050000D10C00001707000000050000000C00000007000029060000BA0C00001107000000060000000C000000070000FD060000A30C00000C07000000070000000C000000070000D00700008C0C00000607000000080000000C000000070000A4080000750C00000107000000090000000C000000070000780900005E0C0000FB060000000A0000000C0000000700004B0A0000470C0000F6060000000B0000000C0000000700001F0B0000300C0000F0060000000C0000000C000000070000F30B0000190C0000EB060000000D0000000C000000070000C70C0000020C0000E5060000000E0000000C0000000700009A0D0000EB0B0000E0060000000F0000000C0000000700006E0E0000D30B0000DA06000000100000000C000000070000420F0000BC0B0000D506000000000000000D000000070000310200004D0E00002F07000000010000000D00000007000004030000350E00002907000000020000000D000000070000D80300001E0E00002407000000030000000D000000070000AC040000060E00001F07000000040000000D00000007000080050000EF0D00001907000000050000000D00000007000054060000D70D00001407000000060000000D00000007000027070000C00D00000E07000000070000000D000000070000FB070000A80D00000907000000080000000D000000070000CF080000910D00000307000000090000000D000000070000A3090000790D0000FE060000000A0000000D000000070000770A0000620D0000F8060000000B0000000D0000000700004A0B00004A0D0000F3060000000C0000000D0000000700001E0C0000330D0000EE060000000D0000000D000000070000F20C00001C0D0000E8060000000E0000000D000000070000C60D0000040D0000E3060000000F0000000D000000070000990E0000ED0C0000DD06000000100000000D0000000700006D0F0000D50C0000D806000000000000000E0000000700005B0200006B0F00003107000000010000000E0000000700002F030000530F00002C07000000020000000E000000070000020400003C0F00002607000000030000000E000000070000D6040000240F00002107000000040000000E000000070000AA0500000C0F00001B07000000050000000E0000000700007E060000F40E00001607000000060000000E00000007000052070000DC0E00001107000000070000000E00000007000026080000C40E00000B07000000080000000E000000070000FA080000AD0E00000607000000090000000E000000070000CE090000950E000000070000000A0000000E000000070000A20A00007D0E0000FB060000000B0000000E000000070000760B0000650E0000F6060000000C0000000E000000070000490C00004D0E0000F0060000000D0000000E0000000700001D0D0000350E0000EB060000000E0000000E000000070000F10D00001E0E0000E5060000000F0000000E000000070000C50E0000060E0000E006000000100000000E000000070000990F0000EE0D0000DB06000000000000000F00000007000085020000FF0F00003307000000010000000F00000007000059030000FF0F00002E07000000020000000F0000000700002D040000FF0F00002907000000030000000F00000007000001050000FF0F00002307000000040000000F000000070000D5050000FF0F00001E07000000050000000F000000070000A9060000FF0F00001807000000060000000F0000000700007D070000F90F00001307000000070000000F00000007000051080000E10F00000E07000000080000000F00000007000025090000C80F00000807000000090000000F000000070000F9090000B00F000003070000000A0000000F000000070000CD0A0000980F0000FE060000000B0000000F000000070000A10B0000800F0000F8060000000C0000000F000000070000750C0000670F0000F3060000000D0000000F000000070000490D00004F0F0000EE060000000E0000000F0000000700001D0E0000370F0000E8060000000F0000000F000000070000F10E00001F0F0000E306000000100000000F000000070000C50F0000070F0000DD060000000000000010000000070000AF020000FF0F00003507000000010000001000000007000083030000FF0F00003007000000020000001000000007000057040000FF0F00002B0700000003000000100000000700002B050000FF0F000025070000000400000010000000070000FF050000FF0F000020070000000500000010000000070000D3060000FF0F00001B070000000600000010000000070000A7070000FF0F0000150700000007000000100000000700007B080000FF0F00001007000000080000001000000007000050090000FF0F00000B070000000900000010000000070000240A0000FF0F000006070000000A00000010000000070000F80A0000FF0F000000070000000B00000010000000070000CC0B0000FF0F0000FB060000000C00000010000000070000A00C0000FF0F0000F6060000000D00000010000000070000740D0000FF0F0000F0060000000E00000010000000070000480E0000FF0F0000EB060000000F000000100000000700001C0F0000FF0F0000E6060000001000000010000000070000F00F0000FF0F0000E0060000000000000000000000080000100000000000000015080000000100000000000000080000E30000000000000010080000000200000000000000080000B5010000000000000A0800000003000000000000000800008802000000000000040800000004000000000000000800005B03000000000000FE0700000005000000000000000800002E04000000000000F80700000006000000000000000800000005000000000000F3070000000700000000000000080000D305000000000000ED070000000800000000000000080000A606000000000000E70700000009000000000000000800007907000000000000E1070000000A000000000000000800004B08000000000000DB070000000B000000000000000800001E09000000000000D6070000000C00000000000000080000F109000000000000D0070000000D00000000000000080000C40A000000000000CA070000000E00000000000000080000960B000000000000C4070000000F00000000000000080000690C000000000000BE0700000010000000000000000800003C0D000000000000B90700000000000000010000000800003A000000D3000000180800000001000000010000000800000D010000C000000012080000000200000001000000080000E0010000AE0000000C080000000300000001000000080000B20200009B000000060800000004000000010000000800008503000088000000010800000005000000010000000800005804000076000000FB0700000006000000010000000800002B05000063000000F5070000000700000001000000080000FE05000050000000EF070000000800000001000000080000D10600003E000000EA070000000900000001000000080000A30700002B000000E4070000000A000000010000000800007608000018000000DE070000000B000000010000000800004909000006000000D8070000000C000000010000000800001C0A000000000000D2070000000D00000001000000080000EF0A000000000000CD070000000E00000001000000080000C20B000000000000C7070000000F00000001000000080000940C000000000000C1070000001000000001000000080000670D000000000000BB07000000000000000200000008000064000000F20100001A08000000010000000200000008000037010000DF010000140800000002000000020000000800000A020000CC0100000F080000000300000002000000080000DD020000B901000009080000000400000002000000080000B0030000A6010000030800000005000000020000000800008304000092010000FD070000000600000002000000080000560500007F010000F8070000000700000002000000080000280600006C010000F2070000000800000002000000080000FB06000059010000EC070000000900000002000000080000CE07000046010000E6070000000A00000002000000080000A108000033010000E1070000000B000000020000000800007409000020010000DB070000000C00000002000000080000470A00000D010000D5070000000D000000020000000800001A0B0000FA000000CF070000000E00000002000000080000ED0B0000E7000000C9070000000F00000002000000080000C00C0000D4000000C4070000001000000002000000080000930D0000C1000000BE0700000000000000030000000800008E000000100300001C08000000010000000300000008000061010000FD0200001708000000020000000300000008000034020000EA0200001108000000030000000300000008000007030000D60200000B080000000400000003000000080000DA030000C302000006080000000500000003000000080000AD040000AF02000000080000000600000003000000080000800500009C020000FA0700000007000000030000000800005306000089020000F40700000008000000030000000800002607000075020000EF070000000900000003000000080000F907000062020000E9070000000A00000003000000080000CC0800004E020000E3070000000B000000030000000800009F0900003B020000DD070000000C00000003000000080000720A000028020000D8070000000D00000003000000080000450B000014020000D2070000000E00000003000000080000180C000001020000CC070000000F00000003000000080000EB0C0000ED010000C6070000001000000003000000080000BE0D0000DA010000C1070000000000000004000000080000B80000002F0400001F0800000001000000040000000800008B0100001B040000190800000002000000040000000800005F020000080400001308000000030000000400000008000032030000F40300000E08000000040000000400000008000005040000E003000008080000000500000004000000080000D8040000CC03000002080000000600000004000000080000AB050000B8030000FC0700000007000000040000000800007E060000A5030000F70700000008000000040000000800005107000091030000F1070000000900000004000000080000240800007D030000EB070000000A00000004000000080000F708000069030000E6070000000B00000004000000080000CA09000056030000E0070000000C000000040000000800009D0A000042030000DA070000000D00000004000000080000700B00002E030000D4070000000E00000004000000080000430C00001A030000CF070000000F00000004000000080000160D000007030000C9070000001000000004000000080000E90D0000F3020000C3070000000000000005000000080000E30000004E05000021080000000100000005000000080000B60100003A0500001B0800000002000000050000000800008902000026050000160800000003000000050000000800005C03000011050000100800000004000000050000000800002F040000FD0400000A08000000050000000500000008000002050000E904000005080000000600000005000000080000D5050000D5040000FF070000000700000005000000080000A8060000C1040000F90700000008000000050000000800007C070000AD040000F40700000009000000050000000800004F08000099040000EE070000000A000000050000000800002209000084040000E8070000000B00000005000000080000F509000070040000E2070000000C00000005000000080000C80A00005C040000DD070000000D000000050000000800009B0B000048040000D7070000000E000000050000000800006E0C000034040000D1070000000F00000005000000080000420D000020040000CC070000001000000005000000080000150E00000B040000C60700000000000000060000000800000D0100006D06000023080000000100000006000000080000E0010000580600001E080000000200000006000000080000B30200004406000018080000000300000006000000080000860300002F060000120800000004000000060000000800005A0400001A0600000D0800000005000000060000000800002D050000060600000708000000060000000600000008000000060000F105000001080000000700000006000000080000D3060000DD050000FC070000000800000006000000080000A6070000C8050000F60700000009000000060000000800007A080000B4050000F0070000000A000000060000000800004D0900009F050000EB070000000B00000006000000080000200A00008B050000E5070000000C00000006000000080000F30A000076050000DF070000000D00000006000000080000C60B000062050000DA070000000E000000060000000800009A0C00004D050000D4070000000F000000060000000800006D0D000039050000CE070000001000000006000000080000400E000024050000C9070000000000000007000000080000370100008B070000260800000001000000070000000800000A0200007607000020080000000200000007000000080000DD020000620700001B080000000300000007000000080000B10300004D0700001508000000040000000700000008000084040000380700000F08000000050000000700000008000057050000230700000A0800000006000000070000000800002B0600000E07000004080000000700000007000000080000FE060000F9060000FE070000000800000007000000080000D1070000E4060000F9070000000900000007000000080000A4080000CF060000F3070000000A0000000700000008000078090000BA060000ED070000000B000000070000000800004B0A0000A5060000E8070000000C000000070000000800001E0B000091060000E2070000000D00000007000000080000F20B00007C060000DC070000000E00000007000000080000C50C000067060000D7070000000F00000007000000080000980D000052060000D10700000010000000070000000800006B0E00003D060000CB07000000000000000800000008000061010000AA0800002808000000010000000800000008000034020000950800002308000000020000000800000008000008030000800800001D080000000300000008000000080000DB0300006A08000017080000000400000008000000080000AE040000550800001208000000050000000800000008000082050000400800000C080000000600000008000000080000550600002A08000006080000000700000008000000080000290700001508000001080000000800000008000000080000000800000008000000080000000900000008000000080000CF080000EB070000F5070000000A00000008000000080000A3090000D5070000F0070000000B00000008000000080000760A0000C0070000EA070000000C00000008000000080000490B0000AB070000E5070000000D000000080000000800001D0C000095070000DF070000000E00000008000000080000F00C000080070000D9070000000F00000008000000080000C30D00006B070000D4070000001000000008000000080000970E000056070000CE0700000000000000090000000800008B010000C90900002B0800000001000000090000000800005F020000B309000025080000000200000009000000080000320300009E0900001F08000000030000000900000008000005040000880900001A080000000400000009000000080000D90400007209000014080000000500000009000000080000AC0500005D0900000E080000000600000009000000080000800600004709000009080000000700000009000000080000530700003109000003080000000800000009000000080000270800001C090000FE070000000900000009000000080000FA08000006090000F8070000000A00000009000000080000CE090000F0080000F2070000000B00000009000000080000A10A0000DB080000ED070000000C00000009000000080000740B0000C5080000E7070000000D00000009000000080000480C0000AF080000E1070000000E000000090000000800001B0D00009A080000DC070000000F00000009000000080000EF0D000084080000D6070000001000000009000000080000C20E00006E080000D107000000000000000A000000080000B5010000E80A00002D08000000010000000A00000008000089020000D20A00002708000000020000000A0000000800005C030000BC0A00002208000000030000000A00000008000030040000A60A00001C08000000040000000A000000080000030500008F0A00001608000000050000000A000000080000D7050000790A00001108000000060000000A000000080000AA060000630A00000B08000000070000000A0000000800007E0700004D0A00000608000000080000000A00000008000051080000370A00000008000000090000000A00000008000025090000210A0000FA070000000A0000000A000000080000F80900000B0A0000F5070000000B0000000A000000080000CC0A0000F5090000EF070000000C0000000A0000000800009F0B0000DF090000EA070000000D0000000A000000080000730C0000C9090000E4070000000E0000000A000000080000460D0000B3090000DF070000000F0000000A0000000800001A0E00009D090000D907000000100000000A000000080000EE0E000087090000D307000000000000000B000000080000DF010000060C00002F08000000010000000B000000080000B3020000F00B00002A08000000020000000B00000008000087030000DA0B00002408000000030000000B0000000800005A040000C30B00001E08000000040000000B0000000800002E050000AD0B00001908000000050000000B00000008000001060000960B00001308000000060000000B000000080000D5060000800B00000E08000000070000000B000000080000A90700006A0B00000808000000080000000B0000000800007C080000530B00000308000000090000000B000000080000500900003D0B0000FD070000000A0000000B000000080000230A0000260B0000F7070000000B0000000B000000080000F70A0000100B0000F2070000000C0000000B000000080000CB0B0000F90A0000EC070000000D0000000B0000000800009E0C0000E30A0000E7070000000E0000000B000000080000720D0000CD0A0000E1070000000F0000000B000000080000450E0000B60A0000DC07000000100000000B000000080000190F0000A00A0000D607000000000000000C0000000800000A020000250D00003208000000010000000C000000080000DD0200000E0D00002C08000000020000000C000000080000B1030000F80C00002608000000030000000C00000008000085040000E10C00002108000000040000000C00000008000058050000CA0C00001B08000000050000000C0000000800002C060000B30C00001608000000060000000C000000080000000700009C0C00001008000000070000000C000000080000D3070000860C00000B08000000080000000C000000080000A70800006F0C00000508000000090000000C0000000800007B090000580C000000080000000A0000000C0000000800004E0A0000410C0000FA070000000B0000000C000000080000220B00002A0C0000F4070000000C0000000C000000080000F60B0000140C0000EF070000000D0000000C000000080000C90C0000FD0B0000E9070000000E0000000C0000000800009D0D0000E60B0000E4070000000F0000000C000000080000710E0000CF0B0000DE07000000100000000C000000080000440F0000B90B0000D907000000000000000D00000008000034020000440E00003408000000010000000D000000080000070300002D0E00002E08000000020000000D000000080000DB030000160E00002908000000030000000D000000080000AF040000FE0D00002308000000040000000D00000008000083050000E70D00001E08000000050000000D00000008000056060000D00D00001808000000060000000D0000000800002A070000B90D00001308000000070000000D000000080000FE070000A20D00000D08000000080000000D000000080000D20800008B0D00000808000000090000000D000000080000A5090000730D000002080000000A0000000D000000080000790A00005C0D0000FD070000000B0000000D0000000800004D0B0000450D0000F7070000000C0000000D000000080000210C00002E0D0000F1070000000D0000000D000000080000F40C0000170D0000EC070000000E0000000D000000080000C80D0000000D0000E6070000000F0000000D0000000800009C0E0000E80C0000E107000000100000000D000000080000700F0000D10C0000DB07000000000000000E0000000800005E020000630F00003608000000010000000E000000080000320300004B0F00003108000000020000000E00000008000005040000340F00002B08000000030000000E000000080000D90400001C0F00002608000000040000000E000000080000AD050000040F00002008000000050000000E00000008000081060000ED0E00001B08000000060000000E00000008000055070000D50E00001508000000070000000E00000008000029080000BE0E00001008000000080000000E000000080000FC080000A60E00000A08000000090000000E000000080000D00900008F0E000005080000000A0000000E000000080000A40A0000770E0000FF070000000B0000000E000000080000780B0000600E0000FA070000000C0000000E0000000800004C0C0000480E0000F4070000000D0000000E0000000800001F0D0000310E0000EF070000000E0000000E000000080000F30D0000190E0000E9070000000F0000000E000000080000C70E0000020E0000E407000000100000000E0000000800009B0F0000EA0D0000DE07000000000000000F00000008000088020000FF0F00003908000000010000000F0000000800005C030000FF0F00003308000000020000000F00000008000030040000FF0F00002E08000000030000000F00000008000004050000FF0F00002808000000040000000F000000080000D8050000FF0F00002308000000050000000F000000080000AB060000FF0F00001D08000000060000000F0000000800007F070000F20F00001808000000070000000F00000008000053080000DA0F00001208000000080000000F00000008000027090000C20F00000D08000000090000000F000000080000FB090000AA0F000007080000000A0000000F000000080000CF0A0000920F000002080000000B0000000F000000080000A30B00007A0F0000FC070000000C0000000F000000080000770C0000620F0000F7070000000D0000000F0000000800004B0D00004A0F0000F1070000000E0000000F0000000800001F0E0000330F0000EC070000000F0000000F000000080000F20E00001B0F0000E607000000100000000F000000080000C60F0000030F0000E1070000000000000010000000080000B2020000FF0F00003B08000000010000001000000008000086030000FF0F0000350800000002000000100000000800005A040000FF0F0000300800000003000000100000000800002E050000FF0F00002A08000000040000001000000008000002060000FF0F000025080000000500000010000000080000D6060000FF0F000020080000000600000010000000080000AA070000FF0F00001A0800000007000000100000000800007E080000FF0F00001508000000080000001000000008000052090000FF0F00000F080000000900000010000000080000260A0000FF0F00000A080000000A00000010000000080000FA0A0000FF0F000004080000000B00000010000000080000CE0B0000FF0F0000FF070000000C00000010000000080000A20C0000FF0F0000F9070000000D00000010000000080000760D0000FF0F0000F4070000000E000000100000000800004A0E0000FF0F0000EE070000000F000000100000000800001E0F0000FF0F0000E9070000001000000010000000080000F20F0000FF0F0000E3070000000000000000000000090000120000000000000018090000000100000000000000090000E50000000000000013090000000200000000000000090000B8010000000000000D0900000003000000000000000900008B02000000000000080900000004000000000000000900005E03000000000000020900000005000000000000000900003104000000000000FC0800000006000000000000000900000405000000000000F7080000000700000000000000090000D705000000000000F1080000000800000000000000090000AA06000000000000EB0800000009000000000000000900007D07000000000000E6080000000A000000000000000900005008000000000000E0080000000B000000000000000900002309000000000000DA080000000C00000000000000090000F609000000000000D5080000000D00000000000000090000CA0A000000000000CF080000000E000000000000000900009D0B000000000000C9080000000F00000000000000090000700C000000000000C4080000001000000000000000090000430D000000000000BE0800000000000000010000000900003C000000CA0000001B0900000001000000010000000900000F010000B800000015090000000200000001000000090000E2010000A500000010090000000300000001000000090000B5020000930000000A0900000004000000010000000900008803000081000000040900000005000000010000000900005C0400006E000000FF0800000006000000010000000900002F0500005C000000F9080000000700000001000000090000020600004A000000F3080000000800000001000000090000D506000037000000EE080000000900000001000000090000A807000025000000E8080000000A000000010000000900007B08000013000000E3080000000B000000010000000900004E09000000000000DD080000000C00000001000000090000210A000000000000D7080000000D00000001000000090000F40A000000000000D2080000000E00000001000000090000C80B000000000000CC080000000F000000010000000900009B0C000000000000C60800000010000000010000000900006E0D000000000000C108000000000000000200000009000066000000E90100001D09000000010000000200000009000039010000D6010000180900000002000000020000000900000D020000C301000012090000000300000002000000090000E0020000B10100000D090000000400000002000000090000B30300009E01000007090000000500000002000000090000860400008B010000010900000006000000020000000900005905000079010000FC0800000007000000020000000900002C06000066010000F60800000008000000020000000900000007000053010000F0080000000900000002000000090000D307000040010000EB080000000A00000002000000090000A60800002E010000E5080000000B00000002000000090000790900001B010000DF080000000C000000020000000900004C0A000008010000DA080000000D000000020000000900001F0B0000F6000000D4080000000E00000002000000090000F20B0000E3000000CF080000000F00000002000000090000C60C0000D0000000C9080000001000000002000000090000990D0000BE000000C308000000000000000300000009000091000000070300002009000000010000000300000009000064010000F40200001A09000000020000000300000009000037020000E1020000150900000003000000030000000900000A030000CE0200000F090000000400000003000000090000DD030000BB02000009090000000500000003000000090000B1040000A8020000040900000006000000030000000900008405000095020000FE0800000007000000030000000900005706000082020000F80800000008000000030000000900002A0700006F020000F3080000000900000003000000090000FD0700005C020000ED080000000A00000003000000090000D108000049020000E8080000000B00000003000000090000A409000036020000E2080000000C00000003000000090000770A000023020000DC080000000D000000030000000900004A0B000010020000D7080000000E000000030000000900001D0C0000FC010000D1080000000F00000003000000090000F10C0000E9010000CB080000001000000003000000090000C40D0000D6010000C6080000000000000004000000090000BB00000026040000220900000001000000040000000900008E010000130400001D09000000020000000400000009000061020000FF0300001709000000030000000400000009000035030000EC0300001109000000040000000400000009000008040000D80300000C090000000500000004000000090000DB040000C503000006090000000600000004000000090000AE050000B203000001090000000700000004000000090000820600009E030000FB080000000800000004000000090000550700008B030000F50800000009000000040000000900002808000077030000F0080000000A00000004000000090000FB08000064030000EA080000000B00000004000000090000CF09000050030000E4080000000C00000004000000090000A20A00003D030000DF080000000D00000004000000090000750B000029030000D9080000000E00000004000000090000480C000016030000D4080000000F000000040000000900001C0D000002030000CE080000001000000004000000090000EF0D0000EF020000C8080000000000000005000000090000E50000004505000025090000000100000005000000090000B8010000310500001F0900000002000000050000000900008C0200001D0500001A0900000003000000050000000900005F030000090500001409000000040000000500000009000032040000F60400000E09000000050000000500000009000005050000E204000009090000000600000005000000090000D9050000CE04000003090000000700000005000000090000AC060000BA040000FD0800000008000000050000000900007F070000A6040000F80800000009000000050000000900005308000093040000F2080000000A00000005000000090000260900007F040000ED080000000B00000005000000090000F90900006B040000E7080000000C00000005000000090000CD0A000057040000E1080000000D00000005000000090000A00B000043040000DC080000000E00000005000000090000730C00002F040000D6080000000F00000005000000090000460D00001C040000D00800000010000000050000000900001A0E000008040000CB0800000000000000060000000900000F0100006406000027090000000100000006000000090000E30100005006000022090000000200000006000000090000B60200003B0600001C0900000003000000060000000900008903000027060000160900000004000000060000000900005D040000130600001109000000050000000600000009000030050000FF0500000B09000000060000000600000009000003060000EB05000006090000000700000006000000090000D7060000D605000000090000000800000006000000090000AA070000C2050000FA0800000009000000060000000900007D080000AE050000F5080000000A00000006000000090000510900009A050000EF080000000B00000006000000090000240A000085050000E9080000000C00000006000000090000F70A000071050000E4080000000D00000006000000090000CB0B00005D050000DE080000000E000000060000000900009E0C000049050000D9080000000F00000006000000090000710D000035050000D3080000001000000006000000090000450E000020050000CD08000000000000000700000009000039010000830700002A0900000001000000070000000900000D0200006E07000024090000000200000007000000090000E0020000590700001F090000000300000007000000090000B403000045070000190900000004000000070000000900008704000030070000130900000005000000070000000900005A0500001C0700000E0900000006000000070000000900002E060000070700000809000000070000000700000009000001070000F206000002090000000800000007000000090000D5070000DE060000FD080000000900000007000000090000A8080000C9060000F7080000000A000000070000000900007B090000B5060000F2080000000B000000070000000900004F0A0000A0060000EC080000000C00000007000000090000220B00008C060000E6080000000D00000007000000090000F60B000077060000E1080000000E00000007000000090000C90C000062060000DB080000000F000000070000000900009C0D00004E060000D5080000001000000007000000090000700E000039060000D008000000000000000800000009000064010000A10800002C090000000100000008000000090000370200008C080000270900000002000000080000000900000B0300007708000021090000000300000008000000090000DE030000620800001B090000000400000008000000090000B10400004D0800001609000000050000000800000009000085050000380800001009000000060000000800000009000058060000240800000B0900000007000000080000000900002C0700000F08000005090000000800000008000000090000FF070000FA070000FF080000000900000008000000090000D3080000E5070000FA080000000A00000008000000090000A6090000D0070000F4080000000B000000080000000900007A0A0000BB070000EE080000000C000000080000000900004D0B0000A6070000E9080000000D00000008000000090000200C000091070000E3080000000E00000008000000090000F40C00007C070000DE080000000F00000008000000090000C70D000067070000D80800000010000000080000000900009B0E000052070000D20800000000000000090000000900008E010000C00900002F09000000010000000900000009000061020000AB0900002909000000020000000900000009000035030000950900002409000000030000000900000009000008040000800900001E090000000400000009000000090000DC0400006B09000018090000000500000009000000090000AF050000550900001309000000060000000900000009000083060000400900000D090000000700000009000000090000560700002B090000070900000008000000090000000900002A0800001509000002090000000900000009000000090000FF080000FF080000FF080000000A00000009000000090000D1090000EB080000F7080000000B00000009000000090000A40A0000D5080000F1080000000C00000009000000090000780B0000C0080000EB080000000D000000090000000900004B0C0000AB080000E6080000000E000000090000000900001F0D000095080000E0080000000F00000009000000090000F20D000080080000DA080000001000000009000000090000C60E00006B080000D508000000000000000A000000090000B8010000DF0A00003109000000010000000A0000000900008C020000C90A00002C09000000020000000A0000000900005F030000B30A00002609000000030000000A000000090000330400009E0A00002009000000040000000A00000009000006050000880A00001B09000000050000000A000000090000DA050000720A00001509000000060000000A000000090000AD0600005D0A00001009000000070000000A00000009000081070000470A00000A09000000080000000A00000009000054080000310A00000409000000090000000A000000090000280900001B0A0000FF080000000A0000000A000000090000FC090000060A0000F9080000000B0000000A000000090000CF0A0000F0090000F3080000000C0000000A000000090000A30B0000DA090000EE080000000D0000000A000000090000760C0000C4090000E8080000000E0000000A0000000900004A0D0000AF090000E3080000000F0000000A0000000900001D0E000099090000DD08000000100000000A000000090000F10E000083090000D708000000000000000B000000090000E2010000FE0B00003409000000010000000B000000090000B6020000E80B00002E09000000020000000B00000009000089030000D10B00002909000000030000000B0000000900005D040000BB0B00002309000000040000000B00000009000031050000A50B00001D09000000050000000B000000090000040600008F0B00001809000000060000000B000000090000D8060000790B00001209000000070000000B000000090000AB070000630B00000C09000000080000000B0000000900007F0800004D0B00000709000000090000000B00000009000053090000370B000001090000000A0000000B000000090000260A0000210B0000FC080000000B0000000B000000090000FA0A00000B0B0000F6080000000C0000000B000000090000CD0B0000F40A0000F0080000000D0000000B000000090000A10C0000DE0A0000EB080000000E0000000B000000090000750D0000C80A0000E5080000000F0000000B000000090000480E0000B20A0000DF08000000100000000B0000000900001C0F00009C0A0000DA08000000000000000C0000000900000D0200001C0D00003609000000010000000C000000090000E0020000060D00003109000000020000000C000000090000B4030000EF0C00002B09000000030000000C00000009000087040000D90C00002509000000040000000C0000000900005B050000C20C00002009000000050000000C0000000900002F060000AC0C00001A09000000060000000C00000009000002070000960C00001509000000070000000C000000090000D60700007F0C00000F09000000080000000C000000090000AA080000690C00000909000000090000000C0000000900007D090000520C000004090000000A0000000C000000090000510A00003C0C0000FE080000000B0000000C000000090000250B0000250C0000F8080000000C0000000C000000090000F80B00000F0C0000F3080000000D0000000C000000090000CC0C0000F80B0000ED080000000E0000000C000000090000A00D0000E20B0000E8080000000F0000000C000000090000730E0000CB0B0000E208000000100000000C000000090000470F0000B50B0000DC08000000000000000D000000090000370200003B0E00003909000000010000000D0000000900000A030000240E00003309000000020000000D000000090000DE0300000D0E00002E09000000030000000D000000090000B2040000F70D00002809000000040000000D00000009000086050000E00D00002209000000050000000D00000009000059060000C90D00001D09000000060000000D0000000900002D070000B20D00001709000000070000000D000000090000010800009B0D00001109000000080000000D000000090000D4080000840D00000C09000000090000000D000000090000A80900006D0D000006090000000A0000000D0000000900007C0A0000570D000001090000000B0000000D0000000900004F0B0000400D0000FB080000000C0000000D000000090000230C0000290D0000F5080000000D0000000D000000090000F70C0000120D0000F0080000000E0000000D000000090000CB0D0000FB0C0000EA080000000F0000000D0000000900009E0E0000E40C0000E508000000100000000D000000090000720F0000CD0C0000DF08000000000000000E000000090000610200005A0F00003B09000000010000000E00000009000035030000430F00003609000000020000000E000000090000080400002B0F00003009000000030000000E000000090000DC040000140F00002A09000000040000000E000000090000B0050000FD0E00002509000000050000000E00000009000084060000E60E00001F09000000060000000E00000009000057070000CF0E00001A09000000070000000E0000000900002B080000B70E00001409000000080000000E000000090000FF080000A00E00000E09000000090000000E000000090000D3090000890E000009090000000A0000000E000000090000A60A0000720E000003090000000B0000000E0000000900007A0B00005A0E0000FD080000000C0000000E0000000900004E0C0000430E0000F8080000000D0000000E000000090000220D00002C0E0000F2080000000E0000000E000000090000F50D0000150E0000ED080000000F0000000E000000090000C90E0000FD0D0000E708000000100000000E0000000900009D0F0000E60D0000E108000000000000000F0000000900008B020000FF0F00003E09000000010000000F0000000900005F030000FF0F00003809000000020000000F00000009000033040000FF0F00003309000000030000000F00000009000007050000FF0F00002D09000000040000000F000000090000DA050000FF0F00002709000000050000000F000000090000AE060000FF0F00002209000000060000000F00000009000082070000EB0F00001C09000000070000000F00000009000056080000D30F00001609000000080000000F0000000900002A090000BC0F00001109000000090000000F000000090000FD090000A40F00000B090000000A0000000F000000090000D10A00008D0F000006090000000B0000000F000000090000A50B0000750F000000090000000C0000000F000000090000790C00005D0F0000FA080000000D0000000F0000000900004D0D0000460F0000F5080000000E0000000F000000090000200E00002E0F0000EF080000000F0000000F000000090000F40E0000160F0000EA08000000100000000F000000090000C80F0000FF0E0000E4080000000000000010000000090000B5020000FF0F00004009000000010000001000000009000089030000FF0F00003B0900000002000000100000000900005D040000FF0F00003509000000030000001000000009000031050000FF0F00002F09000000040000001000000009000005060000FF0F00002A090000000500000010000000090000D9060000FF0F000024090000000600000010000000090000AC070000FF0F00001F09000000070000001000000009000080080000FF0F00001909000000080000001000000009000054090000FF0F000013090000000900000010000000090000280A0000FF0F00000E090000000A00000010000000090000FC0A0000FF0F000008090000000B00000010000000090000D00B0000FF0F000003090000000C00000010000000090000A40C0000FF0F0000FD080000000D00000010000000090000770D0000FF0F0000F7080000000E000000100000000900004B0E0000FF0F0000F2080000000F000000100000000900001F0F0000FF0F0000EC080000001000000010000000090000F30F0000FF0F0000E60800000000000000000000000A000014000000000000001B0A00000001000000000000000A0000E700000000000000160A00000002000000000000000A0000BB01000000000000100A00000003000000000000000A00008E020000000000000B0A00000004000000000000000A00006103000000000000050A00000005000000000000000A00003504000000000000000A00000006000000000000000A00000805000000000000FB0900000007000000000000000A0000DB05000000000000F50900000008000000000000000A0000AF06000000000000F00900000009000000000000000A00008207000000000000EA090000000A000000000000000A00005508000000000000E5090000000B000000000000000A00002909000000000000DF090000000C000000000000000A0000FC09000000000000DA090000000D000000000000000A0000CF0A000000000000D4090000000E000000000000000A0000A30B000000000000CF090000000F000000000000000A0000760C000000000000C90900000010000000000000000A0000490D000000000000C40900000000000000010000000A00003E000000C10000001E0A00000001000000010000000A000012010000AF000000190A00000002000000010000000A0000E50100009D000000130A00000003000000010000000A0000B80200008B0000000E0A00000004000000010000000A00008C03000079000000080A00000005000000010000000A00005F04000067000000030A00000006000000010000000A00003205000055000000FD0900000007000000010000000A00000606000043000000F80900000008000000010000000A0000D906000031000000F20900000009000000010000000A0000AD0700001F000000ED090000000A000000010000000A0000800800000D000000E7090000000B000000010000000A00005309000000000000E2090000000C000000010000000A0000270A000000000000DC090000000D000000010000000A0000FA0A000000000000D7090000000E000000010000000A0000CD0B000000000000D1090000000F000000010000000A0000A10C000000000000CC0900000010000000010000000A0000740D000000000000C60900000000000000020000000A000069000000E0010000210A00000001000000020000000A00003C010000CD0100001B0A00000002000000020000000A00000F020000BB010000160A00000003000000020000000A0000E3020000A9010000100A00000004000000020000000A0000B6030000960100000B0A00000005000000020000000A00008904000084010000050A00000006000000020000000A00005D05000072010000000A00000007000000020000000A0000300600005F010000FA0900000008000000020000000A0000040700004D010000F50900000009000000020000000A0000D70700003A010000EF090000000A000000020000000A0000AA08000028010000EA090000000B000000020000000A00007E09000016010000E4090000000C000000020000000A0000510A000003010000DF090000000D000000020000000A0000250B0000F1000000D9090000000E000000020000000A0000F80B0000DF000000D4090000000F000000020000000A0000CB0C0000CC000000CE0900000010000000020000000A00009F0D0000BA000000C90900000000000000030000000A000093000000FF020000230A00000001000000030000000A000066010000EC0200001E0A00000002000000030000000A00003A020000D9020000180A00000003000000030000000A00000D030000C6020000130A00000004000000030000000A0000E0030000B40200000D0A00000005000000030000000A0000B4040000A1020000080A00000006000000030000000A0000870500008E020000020A00000007000000030000000A00005B0600007B020000FD0900000008000000030000000A00002E07000069020000F70900000009000000030000000A00000208000056020000F2090000000A000000030000000A0000D508000043020000EC090000000B000000030000000A0000A809000030020000E7090000000C000000030000000A00007C0A00001E020000E1090000000D000000030000000A00004F0B00000B020000DB090000000E000000030000000A0000230C0000F8010000D6090000000F000000030000000A0000F60C0000E5010000D00900000010000000030000000A0000C90D0000D3010000CB0900000000000000040000000A0000BD0000001D040000260A00000001000000040000000A0000910100000A040000200A00000002000000040000000A000064020000F70300001B0A00000003000000040000000A000037030000E4030000150A00000004000000040000000A00000B040000D1030000100A00000005000000040000000A0000DE040000BE0300000A0A00000006000000040000000A0000B2050000AB030000050A00000007000000040000000A00008506000097030000FF0900000008000000040000000A00005907000084030000FA0900000009000000040000000A00002C08000071030000F4090000000A000000040000000A0000000900005E030000EF090000000B000000040000000A0000D30900004B030000E9090000000C000000040000000A0000A60A000038030000E3090000000D000000040000000A00007A0B000025030000DE090000000E000000040000000A00004D0C000012030000D8090000000F000000040000000A0000210D0000FE020000D30900000010000000040000000A0000F40D0000EB020000CD0900000000000000050000000A0000E70000003C050000290A00000001000000050000000A0000BB01000029050000230A00000002000000050000000A00008E020000150500001D0A00000003000000050000000A00006203000002050000180A00000004000000050000000A000035040000EE040000120A00000005000000050000000A000009050000DB0400000D0A00000006000000050000000A0000DC050000C7040000070A00000007000000050000000A0000B0060000B4040000020A00000008000000050000000A000083070000A0040000FC0900000009000000050000000A0000570800008D040000F7090000000A000000050000000A00002A09000079040000F1090000000B000000050000000A0000FE09000066040000EB090000000C000000050000000A0000D10A000052040000E6090000000D000000050000000A0000A40B00003F040000E0090000000E000000050000000A0000780C00002B040000DB090000000F000000050000000A00004B0D000018040000D50900000010000000050000000A00001F0E000004040000D00900000000000000060000000A0000120100005B0600002B0A00000001000000060000000A0000E501000047060000260A00000002000000060000000A0000B902000033060000200A00000003000000060000000A00008C0300001F0600001B0A00000004000000060000000A0000600400000B060000150A00000005000000060000000A000033050000F70500000F0A00000006000000060000000A000007060000E40500000A0A00000007000000060000000A0000DA060000D0050000040A00000008000000060000000A0000AE070000BC050000FF0900000009000000060000000A000081080000A8050000F9090000000A000000060000000A00005509000094050000F3090000000B000000060000000A0000280A000080050000EE090000000C000000060000000A0000FC0A00006C050000E8090000000D000000060000000A0000CF0B000058050000E3090000000E000000060000000A0000A30C000045050000DD090000000F000000060000000A0000760D000031050000D80900000010000000060000000A00004A0E00001D050000D20900000000000000070000000A00003C0100007A0700002E0A00000001000000070000000A00001002000065070000280A00000002000000070000000A0000E302000051070000230A00000003000000070000000A0000B70300003D0700001D0A00000004000000070000000A00008A04000029070000180A00000005000000070000000A00005E05000014070000120A00000006000000070000000A000031060000000700000C0A00000007000000070000000A000005070000EC060000070A00000008000000070000000A0000D8070000D8060000010A00000009000000070000000A0000AC080000C3060000FC090000000A000000070000000A00007F090000AF060000F6090000000B000000070000000A0000530A00009B060000F0090000000C000000070000000A0000260B000086060000EB090000000D000000070000000A0000FA0B000072060000E5090000000E000000070000000A0000CD0C00005E060000E0090000000F000000070000000A0000A10D00004A060000DA0900000010000000070000000A0000740E000035060000D40900000000000000080000000A00006601000098080000310A00000001000000080000000A00003A020000840800002B0A00000002000000080000000A00000D0300006F080000250A00000003000000080000000A0000E10300005B080000200A00000004000000080000000A0000B4040000460800001A0A00000005000000080000000A00008805000031080000140A00000006000000080000000A00005C0600001D0800000F0A00000007000000080000000A00002F07000008080000090A00000008000000080000000A000003080000F3070000040A00000009000000080000000A0000D6080000DF070000FE090000000A000000080000000A0000AA090000CA070000F8090000000B000000080000000A00007D0A0000B5070000F3090000000C000000080000000A0000510B0000A1070000ED090000000D000000080000000A0000240C00008C070000E8090000000E000000080000000A0000F80C000077070000E2090000000F000000080000000A0000CB0D000063070000DC0900000010000000080000000A00009F0E00004E070000D70900000000000000090000000A000091010000B7090000330A00000001000000090000000A000064020000A20900002E0A00000002000000090000000A0000380300008D090000280A00000003000000090000000A00000B04000078090000220A00000004000000090000000A0000DF040000630900001D0A00000005000000090000000A0000B20500004E090000170A00000006000000090000000A00008606000039090000110A00000007000000090000000A00005A070000240900000C0A00000008000000090000000A00002D0800000F090000060A00000009000000090000000A000001090000FA080000000A0000000A000000090000000A0000D4090000E5080000FB090000000B000000090000000A0000A80A0000D0080000F5090000000C000000090000000A00007B0B0000BB080000F0090000000D000000090000000A00004F0C0000A6080000EA090000000E000000090000000A0000220D000091080000E4090000000F000000090000000A0000F60D00007C080000DF0900000010000000090000000A0000CA0E000067080000D909000000000000000A0000000A0000BB010000D60A0000360A000000010000000A0000000A00008E020000C10A0000300A000000020000000A0000000A000062030000AB0A00002B0A000000030000000A0000000A000036040000960A0000250A000000040000000A0000000A000009050000800A00001F0A000000050000000A0000000A0000DD0500006B0A00001A0A000000060000000A0000000A0000B0060000560A0000140A000000070000000A0000000A000084070000400A00000E0A000000080000000A0000000A0000580800002B0A0000090A000000090000000A0000000A00002B090000150A0000030A0000000A0000000A0000000A0000FF090000FF090000FF090000000B0000000A0000000A0000D20A0000EB090000F8090000000C0000000A0000000A0000A60B0000D5090000F2090000000D0000000A0000000A0000790C0000C0090000EC090000000E0000000A0000000A00004D0D0000AA090000E7090000000F0000000A0000000A0000210E000095090000E109000000100000000A0000000A0000F40E000080090000DB09000000000000000B0000000A0000E5010000F50B0000390A000000010000000B0000000A0000B9020000DF0B0000330A000000020000000B0000000A00008C030000C90B00002D0A000000030000000B0000000A000060040000B30B0000280A000000040000000B0000000A0000340500009E0B0000220A000000050000000B0000000A000007060000880B00001C0A000000060000000B0000000A0000DB060000720B0000160A000000070000000B0000000A0000AE0700005C0B0000110A000000080000000B0000000A000082080000470B00000B0A000000090000000B0000000A000056090000310B0000050A0000000A0000000B0000000A0000290A00001B0B0000000A0000000B0000000B0000000A0000FD0A0000050B0000FA090000000C0000000B0000000A0000D00B0000EF0A0000F4090000000D0000000B0000000A0000A40C0000DA0A0000EF090000000E0000000B0000000A0000780D0000C40A0000E9090000000F0000000B0000000A00004B0E0000AE0A0000E309000000100000000B0000000A00001F0F0000980A0000DE09000000000000000C0000000A000010020000140D00003B0A000000010000000C0000000A0000E3020000FD0C0000350A000000020000000C0000000A0000B7030000E70C0000300A000000030000000C0000000A00008A040000D10C00002A0A000000040000000C0000000A00005E050000BB0C0000240A000000050000000C0000000A000032060000A50C00001F0A000000060000000C0000000A0000050700008F0C0000190A000000070000000C0000000A0000D9070000780C0000130A000000080000000C0000000A0000AD080000620C00000E0A000000090000000C0000000A0000800900004C0C0000080A0000000A0000000C0000000A0000540A0000360C0000020A0000000B0000000C0000000A0000270B0000200C0000FD090000000C0000000C0000000A0000FB0B00000A0C0000F7090000000D0000000C0000000A0000CF0C0000F30B0000F1090000000E0000000C0000000A0000A20D0000DD0B0000EB090000000F0000000C0000000A0000760E0000C70B0000E609000000100000000C0000000A00004A0F0000B10B0000E009000000000000000D0000000A00003A020000320E00003E0A000000010000000D0000000A00000D0300001C0E0000380A000000020000000D0000000A0000E1030000050E0000320A000000030000000D0000000A0000B5040000EF0D00002D0A000000040000000D0000000A000088050000D80D0000270A000000050000000D0000000A00005C060000C20D0000210A000000060000000D0000000A000030070000AB0D00001C0A000000070000000D0000000A000003080000950D0000160A000000080000000D0000000A0000D70800007E0D0000100A000000090000000D0000000A0000AB090000670D00000A0A0000000A0000000D0000000A00007E0A0000510D0000050A0000000B0000000D0000000A0000520B00003A0D0000FF090000000C0000000D0000000A0000260C0000240D0000F9090000000D0000000D0000000A0000F90C00000D0D0000F4090000000E0000000D0000000A0000CD0D0000F70C0000EE090000000F0000000D0000000A0000A10E0000E00C0000E809000000100000000D0000000A0000740F0000CA0C0000E209000000000000000E0000000A000064020000510F0000400A000000010000000E0000000A0000380300003A0F00003B0A000000020000000E0000000A00000B040000230F0000350A000000030000000E0000000A0000DF0400000C0F00002F0A000000040000000E0000000A0000B3050000F60E00002A0A000000050000000E0000000A000086060000DF0E0000240A000000060000000E0000000A00005A070000C80E00001E0A000000070000000E0000000A00002E080000B10E0000180A000000080000000E0000000A0000020900009A0E0000130A000000090000000E0000000A0000D5090000830E00000D0A0000000A0000000E0000000A0000A90A00006C0E0000070A0000000B0000000E0000000A00007D0B0000550E0000010A0000000C0000000E0000000A0000500C00003E0E0000FC090000000D0000000E0000000A0000240D0000270E0000F6090000000E0000000E0000000A0000F80D0000100E0000F0090000000F0000000E0000000A0000CB0E0000F90D0000EB09000000100000000E0000000A00009F0F0000E20D0000E509000000000000000F0000000A00008E020000FF0F0000430A000000010000000F0000000A000062030000FF0F00003D0A000000020000000F0000000A000036040000FF0F0000380A000000030000000F0000000A00000A050000FF0F0000320A000000040000000F0000000A0000DD050000FF0F00002C0A000000050000000F0000000A0000B1060000FB0F0000260A000000060000000F0000000A000085070000E40F0000210A000000070000000F0000000A000058080000CD0F00001B0A000000080000000F0000000A00002C090000B60F0000150A000000090000000F0000000A0000000A00009E0F00000F0A0000000A0000000F0000000A0000D30A0000870F00000A0A0000000B0000000F0000000A0000A70B0000700F0000040A0000000C0000000F0000000A00007B0C0000580F0000FE090000000D0000000F0000000A00004E0D0000410F0000F8090000000E0000000F0000000A0000220E00002A0F0000F3090000000F0000000F0000000A0000F60E0000120F0000ED09000000100000000F0000000A0000CA0F0000FB0E0000E70900000000000000100000000A0000B9020000FF0F0000460A00000001000000100000000A00008C030000FF0F0000400A00000002000000100000000A000060040000FF0F00003A0A00000003000000100000000A000034050000FF0F0000340A00000004000000100000000A000008060000FF0F00002F0A00000005000000100000000A0000DB060000FF0F0000290A00000006000000100000000A0000AF070000FF0F0000230A00000007000000100000000A000083080000FF0F00001D0A00000008000000100000000A000056090000FF0F0000180A00000009000000100000000A00002A0A0000FF0F0000120A0000000A000000100000000A0000FE0A0000FF0F00000C0A0000000B000000100000000A0000D20B0000FF0F0000060A0000000C000000100000000A0000A50C0000FF0F0000010A0000000D000000100000000A0000790D0000FF0F0000FB090000000E000000100000000A00004D0E0000FF0F0000F5090000000F000000100000000A0000210F0000FF0F0000EF0900000010000000100000000A0000F40F0000FF0F0000E90900000000000000000000000B000016000000000000001E0B00000001000000000000000B0000EA00000000000000190B00000002000000000000000B0000BD01000000000000140B00000003000000000000000B000091020000000000000E0B00000004000000000000000B00006503000000000000090B00000005000000000000000B00003804000000000000040B00000006000000000000000B00000C05000000000000FE0A00000007000000000000000B0000DF05000000000000F90A00000008000000000000000B0000B306000000000000F40A00000009000000000000000B00008707000000000000EF0A0000000A000000000000000B00005A08000000000000E90A0000000B000000000000000B00002E09000000000000E40A0000000C000000000000000B0000020A000000000000DF0A0000000D000000000000000B0000D50A000000000000D90A0000000E000000000000000B0000A90B000000000000D40A0000000F000000000000000B00007D0C000000000000CF0A00000010000000000000000B0000500D000000000000C90A00000000000000010000000B000040000000B8000000210B00000001000000010000000B000014010000A60000001C0B00000002000000010000000B0000E801000095000000160B00000003000000010000000B0000BB02000083000000110B00000004000000010000000B00008F030000710000000C0B00000005000000010000000B00006304000060000000060B00000006000000010000000B0000360500004E000000010B00000007000000010000000B00000A0600003C000000FC0A00000008000000010000000B0000DD0600002B000000F60A00000009000000010000000B0000B107000019000000F10A0000000A000000010000000B00008508000008000000EC0A0000000B000000010000000B00005809000000000000E60A0000000C000000010000000B00002C0A000000000000E10A0000000D000000010000000B0000000B000000000000DC0A0000000E000000010000000B0000D30B000000000000D60A0000000F000000010000000B0000A70C000000000000D10A00000010000000010000000B00007B0D000000000000CC0A00000000000000020000000B00006B000000D7010000240B00000001000000020000000B00003E010000C50100001F0B00000002000000020000000B000012020000B3010000190B00000003000000020000000B0000E6020000A1010000140B00000004000000020000000B0000B90300008F0100000E0B00000005000000020000000B00008D0400007D010000090B00000006000000020000000B0000610500006B010000040B00000007000000020000000B00003406000059010000FE0A00000008000000020000000B00000807000047010000F90A00000009000000020000000B0000DB07000035010000F30A0000000A000000020000000B0000AF08000023010000EE0A0000000B000000020000000B00008309000010010000E90A0000000C000000020000000B0000560A0000FE000000E30A0000000D000000020000000B00002A0B0000EC000000DE0A0000000E000000020000000B0000FE0B0000DA000000D90A0000000F000000020000000B0000D10C0000C8000000D30A00000010000000020000000B0000A50D0000B6000000CE0A00000000000000030000000B000095000000F6020000270B00000001000000030000000B000069010000E3020000210B00000002000000030000000B00003C020000D10200001C0B00000003000000030000000B000010030000BE020000160B00000004000000030000000B0000E4030000AC020000110B00000005000000030000000B0000B70400009A0200000C0B00000006000000030000000B00008B05000087020000060B00000007000000030000000B00005F06000075020000010B00000008000000030000000B00003207000062020000FB0A00000009000000030000000B00000608000050020000F60A0000000A000000030000000B0000D90800003D020000F10A0000000B000000030000000B0000AD0900002B020000EB0A0000000C000000030000000B0000810A000019020000E60A0000000D000000030000000B0000540B000006020000E00A0000000E000000030000000B0000280C0000F4010000DB0A0000000F000000030000000B0000FC0C0000E1010000D50A00000010000000030000000B0000CF0D0000CF010000D00A00000000000000040000000B0000BF000000140400002A0B00000001000000040000000B00009301000002040000240B00000002000000040000000B000067020000EF0300001F0B00000003000000040000000B00003A030000DC030000190B00000004000000040000000B00000E040000C9030000140B00000005000000040000000B0000E2040000B60300000E0B00000006000000040000000B0000B5050000A4030000090B00000007000000040000000B00008906000091030000030B00000008000000040000000B00005D0700007E030000FE0A00000009000000040000000B0000300800006B030000F80A0000000A000000040000000B00000409000058030000F30A0000000B000000040000000B0000D709000046030000EE0A0000000C000000040000000B0000AB0A000033030000E80A0000000D000000040000000B00007F0B000020030000E30A0000000E000000040000000B0000520C00000D030000DD0A0000000F000000040000000B0000260D0000FA020000D80A00000010000000040000000B0000FA0D0000E8020000D20A00000000000000050000000B0000EA000000330500002C0B00000001000000050000000B0000BD01000020050000270B00000002000000050000000B0000910200000D050000210B00000003000000050000000B000065030000FA0400001C0B00000004000000050000000B000038040000E7040000160B00000005000000050000000B00000C050000D3040000110B00000006000000050000000B0000E0050000C00400000B0B00000007000000050000000B0000B3060000AD040000060B00000008000000050000000B0000870700009A040000000B00000009000000050000000B00005B08000087040000FB0A0000000A000000050000000B00002E09000073040000F50A0000000B000000050000000B0000020A000060040000F00A0000000C000000050000000B0000D50A00004D040000EA0A0000000D000000050000000B0000A90B00003A040000E50A0000000E000000050000000B00007D0C000027040000DF0A0000000F000000050000000B0000500D000014040000DA0A00000010000000050000000B0000240E000000040000D40A00000000000000060000000B000014010000520600002F0B00000001000000060000000B0000E80100003E0600002A0B00000002000000060000000B0000BB0200002B060000240B00000003000000060000000B00008F030000170600001F0B00000004000000060000000B00006304000004060000190B00000005000000060000000B000036050000F0050000130B00000006000000060000000B00000A060000DD0500000E0B00000007000000060000000B0000DE060000C9050000080B00000008000000060000000B0000B1070000B6050000030B00000009000000060000000B000085080000A2050000FD0A0000000A000000060000000B0000580900008E050000F80A0000000B000000060000000B00002C0A00007B050000F20A0000000C000000060000000B0000000B000067050000ED0A0000000D000000060000000B0000D30B000054050000E70A0000000E000000060000000B0000A70C000040050000E20A0000000F000000060000000B00007B0D00002D050000DC0A00000010000000060000000B00004E0E000019050000D70A00000000000000070000000B00003F01000071070000320B00000001000000070000000B0000120200005D0700002C0B00000002000000070000000B0000E602000049070000270B00000003000000070000000B0000B903000035070000210B00000004000000070000000B00008D040000210700001C0B00000005000000070000000B0000610500000D070000160B00000006000000070000000B000034060000F9060000110B00000007000000070000000B000008070000E50600000B0B00000008000000070000000B0000DC070000D1060000050B00000009000000070000000B0000AF080000BD060000000B0000000A000000070000000B000083090000A9060000FA0A0000000B000000070000000B0000560A000095060000F50A0000000C000000070000000B00002A0B000081060000EF0A0000000D000000070000000B0000FE0B00006E060000EA0A0000000E000000070000000B0000D10C00005A060000E40A0000000F000000070000000B0000A50D000046060000DE0A00000010000000070000000B0000790E000032060000D90A00000000000000080000000B00006901000090080000350B00000001000000080000000B00003D0200007B0800002F0B00000002000000080000000B000010030000670800002A0B00000003000000080000000B0000E403000053080000240B00000004000000080000000B0000B70400003E0800001E0B00000005000000080000000B00008B0500002A080000190B00000006000000080000000B00005F06000016080000130B00000007000000080000000B000032070000010800000D0B00000008000000080000000B000006080000ED070000080B00000009000000080000000B0000DA080000D9070000020B0000000A000000080000000B0000AD090000C4070000FD0A0000000B000000080000000B0000810A0000B0070000F70A0000000C000000080000000B0000540B00009C070000F10A0000000D000000080000000B0000280C000087070000EC0A0000000E000000080000000B0000FC0C000073070000E60A0000000F000000080000000B0000CF0D00005F070000E10A00000010000000080000000B0000A30E00004A070000DB0A00000000000000090000000B000093010000AE090000380B00000001000000090000000B0000670200009A090000320B00000002000000090000000B00003B030000850900002C0B00000003000000090000000B00000E04000070090000270B00000004000000090000000B0000E20400005C090000210B00000005000000090000000B0000B5050000470900001B0B00000006000000090000000B00008906000032090000160B00000007000000090000000B00005D0700001D090000100B00000008000000090000000B000030080000090900000A0B00000009000000090000000B000004090000F4080000050B0000000A000000090000000B0000D8090000DF080000FF0A0000000B000000090000000B0000AB0A0000CB080000F90A0000000C000000090000000B00007F0B0000B6080000F40A0000000D000000090000000B0000520C0000A1080000EE0A0000000E000000090000000B0000260D00008C080000E80A0000000F000000090000000B0000FA0D000078080000E30A00000010000000090000000B0000CD0E000063080000DD0A000000000000000A0000000B0000BE010000CD0A00003A0B000000010000000A0000000B000091020000B80A0000350B000000020000000A0000000B000065030000A30A00002F0B000000030000000A0000000B0000390400008E0A0000290B000000040000000A0000000B00000C050000790A0000240B000000050000000A0000000B0000E0050000640A00001E0B000000060000000A0000000B0000B30600004F0A0000180B000000070000000A0000000B0000870700003A0A0000130B000000080000000A0000000B00005B080000250A00000D0B000000090000000A0000000B00002E0900000F0A0000070B0000000A0000000A0000000B0000020A0000FA090000020B0000000B0000000A0000000B0000D50A0000E5090000FC0A0000000C0000000A0000000B0000A90B0000D0090000F60A0000000D0000000A0000000B00007D0C0000BB090000F00A0000000E0000000A0000000B0000500D0000A6090000EB0A0000000F0000000A0000000B0000240E000091090000E50A000000100000000A0000000B0000F80E00007C090000DF0A000000000000000B0000000B0000E8010000EC0B00003D0B000000010000000B0000000B0000BC020000D70B0000370B000000020000000B0000000B00008F030000C10B0000320B000000030000000B0000000B000063040000AC0B00002C0B000000040000000B0000000B000037050000960B0000260B000000050000000B0000000B00000A060000810B0000210B000000060000000B0000000B0000DE0600006B0B00001B0B000000070000000B0000000B0000B1070000560B0000150B000000080000000B0000000B000085080000400B00000F0B000000090000000B0000000B0000590900002B0B00000A0B0000000A0000000B0000000B00002C0A0000150B0000040B0000000B0000000B0000000B0000FF0A0000FF0A0000FF0A0000000C0000000B0000000B0000D30B0000EA0A0000F80A0000000D0000000B0000000B0000A70C0000D50A0000F30A0000000E0000000B0000000B00007B0D0000BF0A0000ED0A0000000F0000000B0000000B00004E0E0000AA0A0000E70A000000100000000B0000000B0000220F0000940A0000E20A000000000000000C0000000B0000130200000B0D0000400B000000010000000C0000000B0000E6020000F50C00003A0B000000020000000C0000000B0000BA030000DF0C0000340B000000030000000C0000000B00008D040000C90C00002F0B000000040000000C0000000B000061050000B30C0000290B000000050000000C0000000B0000350600009E0C0000230B000000060000000C0000000B000008070000880C00001D0B000000070000000C0000000B0000DC070000720C0000180B000000080000000C0000000B0000AF0800005C0C0000120B000000090000000C0000000B000083090000460C00000C0B0000000A0000000C0000000B0000570A0000300C0000060B0000000B0000000C0000000B00002A0B00001A0C0000010B0000000C0000000C0000000B0000FE0B0000050C0000FB0A0000000D0000000C0000000B0000D10C0000EF0B0000F50A0000000E0000000C0000000B0000A50D0000D90B0000EF0A0000000F0000000C0000000B0000790E0000C30B0000EA0A000000100000000C0000000B00004C0F0000AD0B0000E40A000000000000000D0000000B00003D0200002A0E0000430B000000010000000D0000000B000010030000130E00003D0B000000020000000D0000000B0000E4030000FD0D0000370B000000030000000D0000000B0000B8040000E70D0000310B000000040000000D0000000B00008B050000D10D00002C0B000000050000000D0000000B00005F060000BA0D0000260B000000060000000D0000000B000033070000A40D0000200B000000070000000D0000000B0000060800008E0D00001A0B000000080000000D0000000B0000DA080000780D0000140B000000090000000D0000000B0000AD090000610D00000F0B0000000A0000000D0000000B0000810A00004B0D0000090B0000000B0000000D0000000B0000550B0000350D0000030B0000000C0000000D0000000B0000280C00001F0D0000FD0A0000000D0000000D0000000B0000FC0C0000080D0000F70A0000000E0000000D0000000B0000CF0D0000F20C0000F20A0000000F0000000D0000000B0000A30E0000DC0C0000EC0A000000100000000D0000000B0000770F0000C60C0000E60A000000000000000E0000000B000067020000490F0000460B000000010000000E0000000B00003B030000320F0000400B000000020000000E0000000B00000E0400001B0F00003A0B000000030000000E0000000B0000E2040000050F0000340B000000040000000E0000000B0000B6050000EE0E00002E0B000000050000000E0000000B000089060000D70E0000280B000000060000000E0000000B00005D070000C10E0000230B000000070000000E0000000B000030080000AA0E00001D0B000000080000000E0000000B000004090000930E0000170B000000090000000E0000000B0000D80900007D0E0000110B0000000A0000000E0000000B0000AB0A0000660E00000B0B0000000B0000000E0000000B00007F0B0000500E0000050B0000000C0000000E0000000B0000520C0000390E0000000B0000000D0000000E0000000B0000260D0000220E0000FA0A0000000E0000000E0000000B0000FA0D00000C0E0000F40A0000000F0000000E0000000B0000CD0E0000F50D0000EE0A000000100000000E0000000B0000A10F0000DE0D0000E80A000000000000000F0000000B000092020000FF0F0000480B000000010000000F0000000B000065030000FF0F0000430B000000020000000F0000000B000039040000FF0F00003D0B000000030000000F0000000B00000C050000FF0F0000370B000000040000000F0000000B0000E0050000FF0F0000310B000000050000000F0000000B0000B4060000F40F00002B0B000000060000000F0000000B000087070000DD0F0000250B000000070000000F0000000B00005B080000C60F00001F0B000000080000000F0000000B00002E090000AF0F0000190B000000090000000F0000000B0000020A0000980F0000140B0000000A0000000F0000000B0000D60A0000810F00000E0B0000000B0000000F0000000B0000A90B00006A0F0000080B0000000C0000000F0000000B00007D0C0000530F0000020B0000000D0000000F0000000B0000500D00003C0F0000FC0A0000000E0000000F0000000B0000240E0000250F0000F60A0000000F0000000F0000000B0000F80E00000E0F0000F00A000000100000000F0000000B0000CB0F0000F70E0000EA0A00000000000000100000000B0000BC020000FF0F00004B0B00000001000000100000000B000090030000FF0F0000450B00000002000000100000000B000063040000FF0F00003F0B00000003000000100000000B000037050000FF0F0000390B00000004000000100000000B00000A060000FF0F0000340B00000005000000100000000B0000DE060000FF0F00002E0B00000006000000100000000B0000B2070000FF0F0000280B00000007000000100000000B000085080000FF0F0000220B00000008000000100000000B000059090000FF0F00001C0B00000009000000100000000B00002C0A0000FF0F0000160B0000000A000000100000000B0000000B0000FF0F0000100B0000000B000000100000000B0000D40B0000FF0F00000A0B0000000C000000100000000B0000A70C0000FF0F0000040B0000000D000000100000000B00007B0D0000FF0F0000FE0A0000000E000000100000000B00004E0E0000FF0F0000F80A0000000F000000100000000B0000220F0000FF0F0000F20A00000010000000100000000B0000F60F0000FF0F0000ED0A00000000000000000000000C00001800000000000000210C00000001000000000000000C0000EC000000000000001C0C00000002000000000000000C0000C001000000000000170C00000003000000000000000C00009402000000000000120C00000004000000000000000C000068030000000000000D0C00000005000000000000000C00003C04000000000000080C00000006000000000000000C00001005000000000000020C00000007000000000000000C0000E405000000000000FD0B00000008000000000000000C0000B706000000000000F80B00000009000000000000000C00008B07000000000000F30B0000000A000000000000000C00005F08000000000000EE0B0000000B000000000000000C00003309000000000000E90B0000000C000000000000000C0000070A000000000000E40B0000000D000000000000000C0000DB0A000000000000DE0B0000000E000000000000000C0000AF0B000000000000D90B0000000F000000000000000C0000830C000000000000D40B00000010000000000000000C0000570D000000000000CF0B00000000000000010000000C000042000000AF000000240C00000001000000010000000C0000160100009E0000001F0C00000002000000010000000C0000EA0100008C0000001A0C00000003000000010000000C0000BE0200007B000000150C00000004000000010000000C0000920300006A0000000F0C00000005000000010000000C000066040000580000000A0C00000006000000010000000C00003A05000047000000050C00000007000000010000000C00000E06000036000000000C00000008000000010000000C0000E206000025000000FB0B00000009000000010000000C0000B607000013000000F50B0000000A000000010000000C00008A08000002000000F00B0000000B000000010000000C00005D09000000000000EB0B0000000C000000010000000C0000310A000000000000E60B0000000D000000010000000C0000050B000000000000E10B0000000E000000010000000C0000D90B000000000000DB0B0000000F000000010000000C0000AD0C000000000000D60B00000010000000010000000C0000810D000000000000D10B00000000000000020000000C00006D000000CE010000270C00000001000000020000000C000041010000BC010000220C00000002000000020000000C000015020000AA0100001D0C00000003000000020000000C0000E902000099010000170C00000004000000020000000C0000BC03000087010000120C00000005000000020000000C000090040000750100000D0C00000006000000020000000C00006405000064010000080C00000007000000020000000C00003806000052010000020C00000008000000020000000C00000C07000040010000FD0B00000009000000020000000C0000E00700002F010000F80B0000000A000000020000000C0000B40800001D010000F30B0000000B000000020000000C0000880900000B010000ED0B0000000C000000020000000C00005B0A0000F9000000E80B0000000D000000020000000C00002F0B0000E8000000E30B0000000E000000020000000C0000030C0000D6000000DE0B0000000F000000020000000C0000D70C0000C4000000D80B00000010000000020000000C0000AB0D0000B3000000D30B00000000000000030000000C000097000000ED0200002A0C00000001000000030000000C00006B010000DB020000250C00000002000000030000000C00003F020000C9020000200C00000003000000030000000C000013030000B60200001A0C00000004000000030000000C0000E7030000A4020000150C00000005000000030000000C0000BB04000092020000100C00000006000000030000000C00008E050000800200000A0C00000007000000030000000C0000620600006E020000050C00000008000000030000000C0000360700005C020000000C00000009000000030000000C00000A0800004A020000FA0B0000000A000000030000000C0000DE08000038020000F50B0000000B000000030000000C0000B209000026020000F00B0000000C000000030000000C0000860A000014020000EA0B0000000D000000030000000C0000590B000002020000E50B0000000E000000030000000C00002D0C0000EF010000E00B0000000F000000030000000C0000010D0000DD010000DA0B00000010000000030000000C0000D50D0000CB010000D50B00000000000000040000000C0000C20000000C0400002D0C00000001000000040000000C000096010000F9030000280C00000002000000040000000C000069020000E7030000220C00000003000000040000000C00003D030000D40300001D0C00000004000000040000000C000011040000C2030000180C00000005000000040000000C0000E5040000AF030000120C00000006000000040000000C0000B90500009D0300000D0C00000007000000040000000C00008D0600008A030000080C00000008000000040000000C00006007000078030000020C00000009000000040000000C00003408000065030000FD0B0000000A000000040000000C00000809000053030000F70B0000000B000000040000000C0000DC09000040030000F20B0000000C000000040000000C0000B00A00002E030000ED0B0000000D000000040000000C0000840B00001B030000E70B0000000E000000040000000C0000570C000009030000E20B0000000F000000040000000C00002B0D0000F6020000DD0B00000010000000040000000C0000FF0D0000E4020000D70B00000000000000050000000C0000EC0000002A050000300C00000001000000050000000C0000C0010000180500002B0C00000002000000050000000C00009402000005050000250C00000003000000050000000C000068030000F2040000200C00000004000000050000000C00003B040000DF0400001A0C00000005000000050000000C00000F050000CC040000150C00000006000000050000000C0000E3050000B9040000100C00000007000000050000000C0000B7060000A60400000A0C00000008000000050000000C00008B07000094040000050C00000009000000050000000C00005E08000081040000FF0B0000000A000000050000000C0000320900006E040000FA0B0000000B000000050000000C0000060A00005B040000F40B0000000C000000050000000C0000DA0A000048040000EF0B0000000D000000050000000C0000AE0B000035040000EA0B0000000E000000050000000C0000810C000022040000E40B0000000F000000050000000C0000550D00000F040000DF0B00000010000000050000000C0000290E0000FD030000D90B00000000000000060000000C00001701000049060000330C00000001000000060000000C0000EB010000360600002E0C00000002000000060000000C0000BE02000023060000280C00000003000000060000000C0000920300000F060000230C00000004000000060000000C000066040000FC0500001D0C00000005000000060000000C00003A050000E9050000180C00000006000000060000000C00000D060000D6050000120C00000007000000060000000C0000E1060000C20500000D0C00000008000000060000000C0000B5070000AF050000070C00000009000000060000000C0000890800009C050000020C0000000A000000060000000C00005C09000089050000FC0B0000000B000000060000000C0000300A000076050000F70B0000000C000000060000000C0000040B000062050000F10B0000000D000000060000000C0000D80B00004F050000EC0B0000000E000000060000000C0000AB0C00003C050000E60B0000000F000000060000000C00007F0D000029050000E10B00000010000000060000000C0000530E000015050000DB0B00000000000000070000000C00004101000068070000360C00000001000000070000000C00001502000054070000300C00000002000000070000000C0000E9020000410700002B0C00000003000000070000000C0000BC0300002D070000250C00000004000000070000000C0000900400001A070000200C00000005000000070000000C000064050000060700001A0C00000006000000070000000C000038060000F2060000150C00000007000000070000000C00000B070000DF0600000F0C00000008000000070000000C0000DF070000CB0600000A0C00000009000000070000000C0000B3080000B7060000040C0000000A000000070000000C000087090000A4060000FF0B0000000B000000070000000C00005A0A000090060000F90B0000000C000000070000000C00002E0B00007C060000F30B0000000D000000070000000C0000020C000069060000EE0B0000000E000000070000000C0000D50C000055060000E80B0000000F000000070000000C0000A90D000042060000E30B00000010000000070000000C00007D0E00002E060000DD0B00000000000000080000000C00006C01000087080000390C00000001000000080000000C00003F02000073080000330C00000002000000080000000C0000130300005F0800002E0C00000003000000080000000C0000E70300004B080000280C00000004000000080000000C0000BA04000037080000230C00000005000000080000000C00008E050000230800001D0C00000006000000080000000C0000620600000F080000170C00000007000000080000000C000036070000FB070000120C00000008000000080000000C000009080000E70700000C0C00000009000000080000000C0000DD080000D3070000070C0000000A000000080000000C0000B1090000BF070000010C0000000B000000080000000C0000840A0000AB070000FB0B0000000C000000080000000C0000580B000097070000F60B0000000D000000080000000C00002C0C000083070000F00B0000000E000000080000000C0000000D00006F070000EB0B0000000F000000080000000C0000D30D00005B070000E50B00000010000000080000000C0000A70E000047070000DF0B00000000000000090000000C000096010000A60900003C0C00000001000000090000000C00006A02000091090000360C00000002000000090000000C00003D0300007D090000310C00000003000000090000000C000011040000680900002B0C00000004000000090000000C0000E504000054090000250C00000005000000090000000C0000B805000040090000200C00000006000000090000000C00008C0600002B0900001A0C00000007000000090000000C00006007000017090000140C00000008000000090000000C000034080000020900000F0C00000009000000090000000C000007090000EE080000090C0000000A000000090000000C0000DB090000DA080000030C0000000B000000090000000C0000AF0A0000C5080000FE0B0000000C000000090000000C0000820B0000B1080000F80B0000000D000000090000000C0000560C00009C080000F20B0000000E000000090000000C00002A0D000088080000ED0B0000000F000000090000000C0000FD0D000074080000E70B00000010000000090000000C0000D10E00005F080000E10B000000000000000A0000000C0000C1010000C50A00003F0C000000010000000A0000000C000094020000B00A0000390C000000020000000A0000000C0000680300009B0A0000330C000000030000000A0000000C00003C040000860A00002E0C000000040000000A0000000C00000F050000710A0000280C000000050000000A0000000C0000E30500005D0A0000220C000000060000000A0000000C0000B6060000480A00001D0C000000070000000A0000000C00008A070000330A0000170C000000080000000A0000000C00005E0800001E0A0000110C000000090000000A0000000C000031090000090A00000B0C0000000A0000000A0000000C0000050A0000F5090000060C0000000B0000000A0000000C0000D90A0000E0090000000C0000000C0000000A0000000C0000AC0B0000CB090000FA0B0000000D0000000A0000000C0000800C0000B6090000F50B0000000E0000000A0000000C0000540D0000A1090000EF0B0000000F0000000A0000000C0000270E00008D090000E90B000000100000000A0000000C0000FB0E000078090000E30B000000000000000B0000000C0000EB010000E30B0000420C000000010000000B0000000C0000BF020000CE0B00003C0C000000020000000B0000000C000092030000B90B0000360C000000030000000B0000000C000066040000A40B0000310C000000040000000B0000000C00003A0500008F0B00002B0C000000050000000B0000000C00000D060000790B0000250C000000060000000B0000000C0000E1060000640B00001F0C000000070000000B0000000C0000B40700004F0B0000190C000000080000000B0000000C0000880800003A0B0000140C000000090000000B0000000C00005C090000250B00000E0C0000000A0000000B0000000C00002F0A0000100B0000080C0000000B0000000B0000000C0000030B0000FA0A0000020C0000000C0000000B0000000C0000D60B0000E50A0000FD0B0000000D0000000B0000000C0000AA0C0000D00A0000F70B0000000E0000000B0000000C00007E0D0000BB0A0000F10B0000000F0000000B0000000C0000510E0000A60A0000EB0B000000100000000B0000000C0000250F0000910A0000E50B000000000000000C0000000C000016020000020D0000450C000000010000000C0000000C0000E9020000ED0C00003F0C000000020000000C0000000C0000BD030000D70C0000390C000000030000000C0000000C000090040000C20C0000330C000000040000000C0000000C000064050000AC0C00002D0C000000050000000C0000000C000037060000960C0000280C000000060000000C0000000C00000B070000810C0000220C000000070000000C0000000C0000DF0700006B0C00001C0C000000080000000C0000000C0000B2080000560C0000160C000000090000000C0000000C000086090000400C0000100C0000000A0000000C0000000C0000590A00002B0C00000A0C0000000B0000000C0000000C00002D0B0000150C0000050C0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B0000000D0000000C0000000C0000D40C0000EA0B0000F90B0000000E0000000C0000000C0000A80D0000D40B0000F30B0000000F0000000C0000000C00007B0E0000BF0B0000ED0B000000100000000C0000000C00004F0F0000A90B0000E70B000000000000000D0000000C000040020000210E0000480C000000010000000D0000000C0000140300000B0E0000420C000000020000000D0000000C0000E7030000F50D00003C0C000000030000000D0000000C0000BB040000DF0D0000360C000000040000000D0000000C00008E050000C90D0000300C000000050000000D0000000C000062060000B30D00002A0C000000060000000D0000000C0000350700009D0D0000240C000000070000000D0000000C000009080000870D00001F0C000000080000000D0000000C0000DC080000710D0000190C000000090000000D0000000C0000B00900005C0D0000130C0000000A0000000D0000000C0000840A0000460D00000D0C0000000B0000000D0000000C0000570B0000300D0000070C0000000C0000000D0000000C00002B0C00001A0D0000010C0000000D0000000D0000000C0000FE0C0000040D0000FB0B0000000E0000000D0000000C0000D20D0000EE0C0000F50B0000000F0000000D0000000C0000A50E0000D80C0000EF0B000000100000000D0000000C0000790F0000C20C0000EA0B000000000000000E0000000C00006A020000400F00004B0C000000010000000E0000000C00003E0300002A0F0000450C000000020000000E0000000C000011040000130F00003F0C000000030000000E0000000C0000E5040000FD0E0000390C000000040000000E0000000C0000B9050000E70E0000330C000000050000000E0000000C00008C060000D00E00002D0C000000060000000E0000000C000060070000BA0E0000270C000000070000000E0000000C000033080000A40E0000210C000000080000000E0000000C0000070900008D0E00001B0C000000090000000E0000000C0000DA090000770E0000150C0000000A0000000E0000000C0000AE0A0000610E00000F0C0000000B0000000E0000000C0000810B00004A0E0000090C0000000C0000000E0000000C0000550C0000340E0000030C0000000D0000000E0000000C0000280D00001E0E0000FD0B0000000E0000000E0000000C0000FC0D0000070E0000F70B0000000F0000000E0000000C0000CF0E0000F10D0000F10B000000100000000E0000000C0000A30F0000DB0D0000EC0B000000000000000F0000000C000095020000FF0F00004E0C000000010000000F0000000C000068030000FF0F0000480C000000020000000F0000000C00003C040000FF0F0000420C000000030000000F0000000C00000F050000FF0F00003C0C000000040000000F0000000C0000E3050000FF0F0000360C000000050000000F0000000C0000B6060000ED0F0000300C000000060000000F0000000C00008A070000D60F00002A0C000000070000000F0000000C00005D080000C00F0000240C000000080000000F0000000C000031090000A90F00001E0C000000090000000F0000000C0000040A0000920F0000180C0000000A0000000F0000000C0000D80A00007C0F0000120C0000000B0000000F0000000C0000AB0B0000650F00000C0C0000000C0000000F0000000C00007F0C00004E0F0000060C0000000D0000000F0000000C0000520D0000370F0000000C0000000E0000000F0000000C0000260E0000210F0000FA0B0000000F0000000F0000000C0000F90E00000A0F0000F40B000000100000000F0000000C0000CD0F0000F30E0000EE0B00000000000000100000000C0000BF020000FF0F0000510C00000001000000100000000C000093030000FF0F00004B0C00000002000000100000000C000066040000FF0F0000450C00000003000000100000000C00003A050000FF0F00003E0C00000004000000100000000C00000D060000FF0F0000380C00000005000000100000000C0000E1060000FF0F0000320C00000006000000100000000C0000B4070000FF0F00002C0C00000007000000100000000C000088080000FF0F0000260C00000008000000100000000C00005B090000FF0F0000200C00000009000000100000000C00002F0A0000FF0F00001A0C0000000A000000100000000C0000020B0000FF0F0000140C0000000B000000100000000C0000D50B0000FF0F00000E0C0000000C000000100000000C0000A90C0000FF0F0000080C0000000D000000100000000C00007C0D0000FF0F0000020C0000000E000000100000000C0000500E0000FF0F0000FC0B0000000F000000100000000C0000230F0000FF0F0000F60B00000010000000100000000C0000F70F0000FF0F0000F00B00000000000000000000000D00001A00000000000000240D00000001000000000000000D0000EE000000000000001F0D00000002000000000000000D0000C2010000000000001A0D00000003000000000000000D00009702000000000000150D00000004000000000000000D00006B03000000000000100D00000005000000000000000D00003F040000000000000B0D00000006000000000000000D00001305000000000000060D00000007000000000000000D0000E805000000000000010D00000008000000000000000D0000BC06000000000000FC0C00000009000000000000000D00009007000000000000F70C0000000A000000000000000D00006408000000000000F20C0000000B000000000000000D00003909000000000000EE0C0000000C000000000000000D00000D0A000000000000E90C0000000D000000000000000D0000E10A000000000000E40C0000000E000000000000000D0000B50B000000000000DF0C0000000F000000000000000D00008A0C000000000000DA0C00000010000000000000000D00005E0D000000000000D50C00000000000000010000000D000045000000A6000000270D00000001000000010000000D00001901000095000000220D00000002000000010000000D0000ED010000840000001D0D00000003000000010000000D0000C102000073000000180D00000004000000010000000D00009503000062000000130D00000005000000010000000D000069040000510000000E0D00000006000000010000000D00003E05000040000000090D00000007000000010000000D0000120600002F000000040D00000008000000010000000D0000E60600001E000000FF0C00000009000000010000000D0000BA0700000D000000FA0C0000000A000000010000000D00008E08000000000000F50C0000000B000000010000000D00006309000000000000F00C0000000C000000010000000D0000370A000000000000EB0C0000000D000000010000000D00000B0B000000000000E60C0000000E000000010000000D0000DF0B000000000000E10C0000000F000000010000000D0000B30C000000000000DC0C00000010000000010000000D0000870D000000000000D70C00000000000000020000000D00006F000000C50100002A0D00000001000000020000000D000043010000B4010000250D00000002000000020000000D000017020000A2010000200D00000003000000020000000D0000EB020000910100001B0D00000004000000020000000D0000C00300007F010000160D00000005000000020000000D0000940400006E010000110D00000006000000020000000D0000680500005D0100000C0D00000007000000020000000D00003C0600004B010000070D00000008000000020000000D0000100700003A010000010D00000009000000020000000D0000E407000029010000FC0C0000000A000000020000000D0000B808000017010000F70C0000000B000000020000000D00008C09000006010000F20C0000000C000000020000000D0000610A0000F4000000ED0C0000000D000000020000000D0000350B0000E3000000E80C0000000E000000020000000D0000090C0000D2000000E30C0000000F000000020000000D0000DD0C0000C0000000DE0C00000010000000020000000D0000B10D0000AF000000D80C00000000000000030000000D00009A000000E40200002E0D00000001000000030000000D00006E010000D2020000280D00000002000000030000000D000042020000C0020000230D00000003000000030000000D000016030000AF0200001E0D00000004000000030000000D0000EA0300009D020000190D00000005000000030000000D0000BE0400008B020000140D00000006000000030000000D000092050000790200000E0D00000007000000030000000D00006606000067020000090D00000008000000030000000D00003A07000056020000040D00000009000000030000000D00000E08000044020000FF0C0000000A000000030000000D0000E208000032020000FA0C0000000B000000030000000D0000B609000020020000F40C0000000C000000030000000D00008A0A00000F020000EF0C0000000D000000030000000D00005F0B0000FD010000EA0C0000000E000000030000000D0000330C0000EB010000E50C0000000F000000030000000D0000070D0000D9010000DF0C00000010000000030000000D0000DB0D0000C8010000DA0C00000000000000040000000D0000C400000003040000310D00000001000000040000000D000098010000F10300002B0D00000002000000040000000D00006C020000DE030000260D00000003000000040000000D000040030000CC030000210D00000004000000040000000D000014040000BA0300001C0D00000005000000040000000D0000E8040000A8030000160D00000006000000040000000D0000BC05000096030000110D00000007000000040000000D000090060000840300000C0D00000008000000040000000D00006407000071030000060D00000009000000040000000D0000380800005F030000010D0000000A000000040000000D00000C0900004D030000FC0C0000000B000000040000000D0000E00900003B030000F70C0000000C000000040000000D0000B40A000029030000F10C0000000D000000040000000D0000880B000017030000EC0C0000000E000000040000000D00005C0C000005030000E70C0000000F000000040000000D0000300D0000F2020000E10C00000010000000040000000D0000040E0000E0020000DC0C00000000000000050000000D0000EF00000022050000340D00000001000000050000000D0000C30100000F0500002E0D00000002000000050000000D000097020000FC040000290D00000003000000050000000D00006B030000EA040000240D00000004000000050000000D00003F040000D70400001E0D00000005000000050000000D000012050000C5040000190D00000006000000050000000D0000E6050000B2040000140D00000007000000050000000D0000BA060000A00400000E0D00000008000000050000000D00008E0700008D040000090D00000009000000050000000D0000620800007B040000040D0000000A000000050000000D00003609000068040000FE0C0000000B000000050000000D00000A0A000056040000F90C0000000C000000050000000D0000DE0A000043040000F30C0000000D000000050000000D0000B20B000031040000EE0C0000000E000000050000000D0000860C00001E040000E90C0000000F000000050000000D00005A0D00000B040000E30C00000010000000050000000D00002E0E0000F9030000DE0C00000000000000060000000D00001901000040060000370D00000001000000060000000D0000ED0100002D060000320D00000002000000060000000D0000C10200001B0600002C0D00000003000000060000000D00009503000008060000270D00000004000000060000000D000069040000F5050000210D00000005000000060000000D00003D050000E20500001C0D00000006000000060000000D000011060000CF050000160D00000007000000060000000D0000E5060000BC050000110D00000008000000060000000D0000B8070000A90500000B0D00000009000000060000000D00008C08000096050000060D0000000A000000060000000D00006009000083050000010D0000000B000000060000000D0000340A000070050000FB0C0000000C000000060000000D0000080B00005D050000F60C0000000D000000060000000D0000DC0B00004A050000F00C0000000E000000060000000D0000B00C000037050000EB0C0000000F000000060000000D0000840D000024050000E50C00000010000000060000000D0000580E000012050000E00C00000000000000070000000D0000440100005F0700003A0D00000001000000070000000D0000180200004C070000350D00000002000000070000000D0000EB020000390700002F0D00000003000000070000000D0000BF030000250700002A0D00000004000000070000000D00009304000012070000240D00000005000000070000000D000067050000FF0600001E0D00000006000000070000000D00003B060000EB060000190D00000007000000070000000D00000F070000D8060000130D00000008000000070000000D0000E3070000C50600000E0D00000009000000070000000D0000B6080000B1060000080D0000000A000000070000000D00008A0900009E060000030D0000000B000000070000000D00005E0A00008B060000FD0C0000000C000000070000000D0000320B000077060000F80C0000000D000000070000000D0000060C000064060000F20C0000000E000000070000000D0000DA0C000051060000ED0C0000000F000000070000000D0000AD0D00003E060000E70C00000010000000070000000D0000810E00002A060000E20C00000000000000080000000D00006E0100007E0800003D0D00000001000000080000000D0000420200006A080000380D00000002000000080000000D00001603000057080000320D00000003000000080000000D0000EA030000430800002C0D00000004000000080000000D0000BD0400002F080000270D00000005000000080000000D0000910500001C080000210D00000006000000080000000D000065060000080800001C0D00000007000000080000000D000039070000F4070000160D00000008000000080000000D00000D080000E0070000100D00000009000000080000000D0000E0080000CD0700000B0D0000000A000000080000000D0000B4090000B9070000050D0000000B000000080000000D0000880A0000A5070000000D0000000C000000080000000D00005C0B000092070000FA0C0000000D000000080000000D0000300C00007E070000F40C0000000E000000080000000D0000030D00006A070000EF0C0000000F000000080000000D0000D70D000057070000E90C00000010000000080000000D0000AB0E000043070000E40C00000000000000090000000D0000990100009D090000400D00000001000000090000000D00006D020000890900003B0D00000002000000090000000D00004003000075090000350D00000003000000090000000D000014040000610900002F0D00000004000000090000000D0000E80400004D0900002A0D00000005000000090000000D0000BC05000038090000240D00000006000000090000000D00008F060000240900001E0D00000007000000090000000D00006307000010090000190D00000008000000090000000D000037080000FC080000130D00000009000000090000000D00000A090000E80800000D0D0000000A000000090000000D0000DE090000D4080000080D0000000B000000090000000D0000B20A0000C0080000020D0000000C000000090000000D0000860B0000AC080000FC0C0000000D000000090000000D0000590C000098080000F70C0000000E000000090000000D00002D0D000084080000F10C0000000F000000090000000D0000010E000070080000EB0C00000010000000090000000D0000D50E00005B080000E60C000000000000000A0000000D0000C3010000BC0A0000430D000000010000000A0000000D000097020000A70A00003E0D000000020000000A0000000D00006B030000930A0000380D000000030000000A0000000D00003E0400007E0A0000320D000000040000000A0000000D0000120500006A0A00002C0D000000050000000A0000000D0000E6050000550A0000270D000000060000000A0000000D0000B9060000410A0000210D000000070000000A0000000D00008D0700002C0A00001B0D000000080000000A0000000D000061080000180A0000150D000000090000000A0000000D000035090000030A0000100D0000000A0000000A0000000D0000080A0000EF0900000A0D0000000B0000000A0000000D0000DC0A0000DB090000040D0000000C0000000A0000000D0000B00B0000C6090000FE0C0000000D0000000A0000000D0000830C0000B2090000F90C0000000E0000000A0000000D0000570D00009D090000F30C0000000F0000000A0000000D00002B0E000089090000ED0C000000100000000A0000000D0000FE0E000074090000E70C000000000000000B0000000D0000EE010000DB0B0000470D000000010000000B0000000D0000C2020000C60B0000410D000000020000000B0000000D000095030000B10B00003B0D000000030000000B0000000D0000690400009C0B0000350D000000040000000B0000000D00003C050000870B00002F0D000000050000000B0000000D000010060000720B0000290D000000060000000B0000000D0000E40600005D0B0000240D000000070000000B0000000D0000B7070000490B00001E0D000000080000000B0000000D00008B080000340B0000180D000000090000000B0000000D00005F0900001F0B0000120D0000000A0000000B0000000D0000320A00000A0B00000C0D0000000B0000000B0000000D0000060B0000F50A0000060D0000000C0000000B0000000D0000D90B0000E00A0000010D0000000D0000000B0000000D0000AD0C0000CB0A0000FB0C0000000E0000000B0000000D0000810D0000B60A0000F50C0000000F0000000B0000000D0000540E0000A20A0000EF0C000000100000000B0000000D0000280F00008D0A0000E90C000000000000000C0000000D000018020000F90C00004A0D000000010000000C0000000D0000EC020000E40C0000440D000000020000000C0000000D0000C0030000CF0C00003E0D000000030000000C0000000D000093040000BA0C0000380D000000040000000C0000000D000067050000A40C0000320D000000050000000C0000000D00003A0600008F0C00002C0D000000060000000C0000000D00000E0700007A0C0000260D000000070000000C0000000D0000E1070000650C0000200D000000080000000C0000000D0000B50800004F0C00001A0D000000090000000C0000000D0000890900003A0C0000150D0000000A0000000C0000000D00005C0A0000250C00000F0D0000000B0000000C0000000D0000300B0000100C0000090D0000000C0000000C0000000D0000030C0000FA0B0000030D0000000D0000000C0000000D0000D70C0000E50B0000FD0C0000000E0000000C0000000D0000AA0D0000D00B0000F70C0000000F0000000C0000000D00007E0E0000BB0B0000F10C000000100000000C0000000D0000520F0000A50B0000EB0C000000000000000D0000000D000043020000180E00004D0D000000010000000D0000000D000017030000030E0000470D000000020000000D0000000D0000EA030000ED0D0000410D000000030000000D0000000D0000BE040000D70D00003B0D000000040000000D0000000D000091050000C20D0000350D000000050000000D0000000D000065060000AC0D00002F0D000000060000000D0000000D000038070000960D0000290D000000070000000D0000000D00000C080000810D0000230D000000080000000D0000000D0000DF0800006B0D00001D0D000000090000000D0000000D0000B3090000560D0000170D0000000A0000000D0000000D0000860A0000400D0000110D0000000B0000000D0000000D00005A0B00002A0D00000B0D0000000C0000000D0000000D00002D0C0000150D0000050D0000000D0000000D0000000D0000FF0C0000FF0C0000FF0C0000000E0000000D0000000D0000D40D0000E90C0000F90C0000000F0000000D0000000D0000A80E0000D40C0000F30C000000100000000D0000000D00007B0F0000BE0C0000ED0C000000000000000E0000000D00006E020000370F0000500D000000010000000E0000000D000041030000210F00004A0D000000020000000E0000000D0000140400000B0F0000440D000000030000000E0000000D0000E8040000F50E00003E0D000000040000000E0000000D0000BB050000DF0E0000380D000000050000000E0000000D00008F060000C90E0000320D000000060000000E0000000D000062070000B30E00002C0D000000070000000E0000000D0000360800009D0E0000250D000000080000000E0000000D000009090000870E00001F0D000000090000000E0000000D0000DD090000710E0000190D0000000A0000000E0000000D0000B00A00005B0E0000130D0000000B0000000E0000000D0000840B0000450E00000D0D0000000C0000000E0000000D0000570C00002F0E0000070D0000000D0000000E0000000D00002A0D0000190E0000010D0000000E0000000E0000000D0000FE0D0000030E0000FB0C0000000F0000000E0000000D0000D10E0000ED0D0000F50C000000100000000E0000000D0000A50F0000D70D0000EF0C000000000000000F0000000D000098020000FF0F0000530D000000010000000F0000000D00006C030000FF0F00004D0D000000020000000F0000000D00003F040000FF0F0000470D000000030000000F0000000D000012050000FF0F0000410D000000040000000F0000000D0000E6050000FC0F00003A0D000000050000000F0000000D0000B9060000E60F0000340D000000060000000F0000000D00008C070000D00F00002E0D000000070000000F0000000D000060080000B90F0000280D000000080000000F0000000D000033090000A30F0000220D000000090000000F0000000D0000070A00008C0F00001C0D0000000A0000000F0000000D0000DA0A0000760F0000160D0000000B0000000F0000000D0000AD0B00005F0F00000F0D0000000C0000000F0000000D0000810C0000490F0000090D0000000D0000000F0000000D0000540D0000330F0000030D0000000E0000000F0000000D0000280E00001C0F0000FD0C0000000F0000000F0000000D0000FB0E0000060F0000F70C000000100000000F0000000D0000CE0F0000EF0E0000F10C00000000000000100000000D0000C3020000FF0F0000560D00000001000000100000000D000096030000FF0F0000500D00000002000000100000000D000069040000FF0F00004A0D00000003000000100000000D00003D050000FF0F0000440D00000004000000100000000D000010060000FF0F00003D0D00000005000000100000000D0000E3060000FF0F0000370D00000006000000100000000D0000B7070000FF0F0000310D00000007000000100000000D00008A080000FF0F00002B0D00000008000000100000000D00005D090000FF0F0000240D00000009000000100000000D0000310A0000FF0F00001E0D0000000A000000100000000D0000040B0000FF0F0000180D0000000B000000100000000D0000D70B0000FF0F0000120D0000000C000000100000000D0000AB0C0000FF0F00000C0D0000000D000000100000000D00007E0D0000FF0F0000050D0000000E000000100000000D0000510E0000FF0F0000FF0C0000000F000000100000000D0000250F0000FF0F0000F90C00000010000000100000000D0000F80F0000FF0F0000F30C00000000000000000000000E00001C00000000000000270E00000001000000000000000E0000F100000000000000220E00000002000000000000000E0000C5010000000000001E0E00000003000000000000000E00009A02000000000000190E00000004000000000000000E00006E03000000000000140E00000005000000000000000E000043040000000000000F0E00000006000000000000000E000017050000000000000A0E00000007000000000000000E0000EC05000000000000060E00000008000000000000000E0000C006000000000000010E00000009000000000000000E00009507000000000000FC0D0000000A000000000000000E00006908000000000000F70D0000000B000000000000000E00003E09000000000000F20D0000000C000000000000000E0000120A000000000000ED0D0000000D000000000000000E0000E70A000000000000E90D0000000E000000000000000E0000BB0B000000000000E40D0000000F000000000000000E0000900C000000000000DF0D00000010000000000000000E0000650D000000000000DA0D00000000000000010000000E0000470000009D0000002A0E00000001000000010000000E00001B0100008D000000260E00000002000000010000000E0000F00100007C000000210E00000003000000010000000E0000C40200006B0000001C0E00000004000000010000000E0000980300005B000000170E00000005000000010000000E00006D0400004A000000120E00000006000000010000000E000041050000390000000D0E00000007000000010000000E00001606000029000000080E00000008000000010000000E0000EA06000018000000030E00000009000000010000000E0000BF07000007000000FE0D0000000A000000010000000E00009308000000000000F90D0000000B000000010000000E00006809000000000000F50D0000000C000000010000000E00003C0A000000000000F00D0000000D000000010000000E0000110B000000000000EB0D0000000E000000010000000E0000E50B000000000000E60D0000000F000000010000000E0000B90C000000000000E10D00000010000000010000000E00008E0D000000000000DC0D00000000000000020000000E000071000000BC0100002E0E00000001000000020000000E000046010000AB010000290E00000002000000020000000E00001A0200009A010000240E00000003000000020000000E0000EE020000890100001F0E00000004000000020000000E0000C3030000780100001A0E00000005000000020000000E00009704000067010000150E00000006000000020000000E00006B05000056010000100E00000007000000020000000E000040060000450100000B0E00000008000000020000000E00001407000034010000060E00000009000000020000000E0000E907000023010000010E0000000A000000020000000E0000BD08000012010000FC0D0000000B000000020000000E00009109000001010000F70D0000000C000000020000000E0000660A0000F0000000F20D0000000D000000020000000E00003A0B0000DE000000ED0D0000000E000000020000000E00000E0C0000CD000000E80D0000000F000000020000000E0000E30C0000BC000000E30D00000010000000020000000E0000B70D0000AB000000DE0D00000000000000030000000E00009C000000DB020000310E00000001000000030000000E000070010000C90200002C0E00000002000000030000000E000044020000B8020000270E00000003000000030000000E000019030000A7020000220E00000004000000030000000E0000ED030000950200001D0E00000005000000030000000E0000C104000084020000180E00000006000000030000000E00009605000072020000120E00000007000000030000000E00006A060000610200000D0E00000008000000030000000E00003E0700004F020000080E00000009000000030000000E0000120800003E020000030E0000000A000000030000000E0000E70800002D020000FE0D0000000B000000030000000E0000BB0900001B020000F90D0000000C000000030000000E00008F0A00000A020000F40D0000000D000000030000000E0000640B0000F8010000EF0D0000000E000000030000000E0000380C0000E7010000EA0D0000000F000000030000000E00000C0D0000D5010000E50D00000010000000030000000E0000E00D0000C4010000DF0D00000000000000040000000E0000C7000000FA030000340E00000001000000040000000E00009B010000E80300002F0E00000002000000040000000E00006F020000D60300002A0E00000003000000040000000E000043030000C4030000250E00000004000000040000000E000017040000B20300001F0E00000005000000040000000E0000EC040000A10300001A0E00000006000000040000000E0000C00500008F030000150E00000007000000040000000E0000940600007D030000100E00000008000000040000000E0000680700006B0300000B0E00000009000000040000000E00003C08000059030000060E0000000A000000040000000E00001109000048030000000E0000000B000000040000000E0000E509000036030000FB0D0000000C000000040000000E0000B90A000024030000F60D0000000D000000040000000E00008D0B000012030000F10D0000000E000000040000000E0000610C000000030000EC0D0000000F000000040000000E0000360D0000EE020000E60D00000010000000040000000E00000A0E0000DD020000E10D00000000000000050000000E0000F100000019050000380E00000001000000050000000E0000C501000006050000320E00000002000000050000000E000099020000F40400002D0E00000003000000050000000E00006E030000E2040000280E00000004000000050000000E000042040000D0040000220E00000005000000050000000E000016050000BE0400001D0E00000006000000050000000E0000EA050000AB040000180E00000007000000050000000E0000BE06000099040000130E00000008000000050000000E000092070000870400000D0E00000009000000050000000E00006608000075040000080E0000000A000000050000000E00003A09000063040000030E0000000B000000050000000E00000E0A000050040000FD0D0000000C000000050000000E0000E30A00003E040000F80D0000000D000000050000000E0000B70B00002C040000F30D0000000E000000050000000E00008B0C00001A040000ED0D0000000F000000050000000E00005F0D000007040000E80D00000010000000050000000E0000330E0000F5030000E30D00000000000000060000000E00001C010000380600003B0E00000001000000060000000E0000F001000025060000350E00000002000000060000000E0000C402000012060000300E00000003000000060000000E000098030000000600002B0E00000004000000060000000E00006C040000ED050000250E00000005000000060000000E000040050000DA050000200E00000006000000060000000E000014060000C80500001A0E00000007000000060000000E0000E8060000B5050000150E00000008000000060000000E0000BC070000A3050000100E00000009000000060000000E000090080000900500000A0E0000000A000000060000000E0000640900007D050000050E0000000B000000060000000E0000380A00006B050000000E0000000C000000060000000E00000C0B000058050000FA0D0000000D000000060000000E0000E00B000046050000F50D0000000E000000060000000E0000B40C000033050000EF0D0000000F000000060000000E0000880D000020050000EA0D00000010000000060000000E00005C0E00000E050000E50D00000000000000070000000E000046010000560700003E0E00000001000000070000000E00001A02000043070000390E00000002000000070000000E0000EE02000030070000330E00000003000000070000000E0000C20300001D0700002E0E00000004000000070000000E0000960400000A070000280E00000005000000070000000E00006A050000F7060000230E00000006000000070000000E00003E060000E40600001D0E00000007000000070000000E000012070000D1060000180E00000008000000070000000E0000E6070000BE060000120E00000009000000070000000E0000BA080000AB0600000D0E0000000A000000070000000E00008E09000098060000070E0000000B000000070000000E0000620A000085060000020E0000000C000000070000000E0000360B000072060000FC0D0000000D000000070000000E00000A0C00005F060000F70D0000000E000000070000000E0000DE0C00004C060000F10D0000000F000000070000000E0000B20D000039060000EC0D00000010000000070000000E0000860E000026060000E60D00000000000000080000000E00007101000075080000410E00000001000000080000000E000045020000620800003C0E00000002000000080000000E0000190300004E080000360E00000003000000080000000E0000ED0300003B080000310E00000004000000080000000E0000C1040000280800002B0E00000005000000080000000E00009405000014080000250E00000006000000080000000E00006806000001080000200E00000007000000080000000E00003C070000EE0700001A0E00000008000000080000000E000010080000DA070000150E00000009000000080000000E0000E4080000C70700000F0E0000000A000000080000000E0000B8090000B30700000A0E0000000B000000080000000E00008C0A0000A0070000040E0000000C000000080000000E00005F0B00008D070000FE0D0000000D000000080000000E0000330C000079070000F90D0000000E000000080000000E0000070D000066070000F30D0000000F000000080000000E0000DB0D000052070000EE0D00000010000000080000000E0000AF0E00003F070000E80D00000000000000090000000E00009C01000094090000450E00000001000000090000000E00006F020000800900003F0E00000002000000090000000E0000430300006D090000390E00000003000000090000000E00001704000059090000340E00000004000000090000000E0000EB040000450900002E0E00000005000000090000000E0000BF05000031090000280E00000006000000090000000E0000920600001D090000230E00000007000000090000000E0000660700000A0900001D0E00000008000000090000000E00003A080000F6080000170E00000009000000090000000E00000E090000E2080000120E0000000A000000090000000E0000E2090000CE0800000C0E0000000B000000090000000E0000B50A0000BB080000060E0000000C000000090000000E0000890B0000A7080000000E0000000D000000090000000E00005D0C000093080000FB0D0000000E000000090000000E0000310D00007F080000F50D0000000F000000090000000E0000040E00006B080000EF0D00000010000000090000000E0000D80E000058080000EA0D000000000000000A0000000E0000C6010000B30A0000480E000000010000000A0000000E00009A0200009F0A0000420E000000020000000A0000000E00006E0300008B0A00003C0E000000030000000A0000000E000041040000760A0000370E000000040000000A0000000E000015050000620A0000310E000000050000000A0000000E0000E90500004E0A00002B0E000000060000000A0000000E0000BD0600003A0A0000250E000000070000000A0000000E000090070000260A00001F0E000000080000000A0000000E000064080000120A00001A0E000000090000000A0000000E000038090000FD090000140E0000000A0000000A0000000E00000B0A0000E90900000E0E0000000B0000000A0000000E0000DF0A0000D5090000080E0000000C0000000A0000000E0000B30B0000C1090000030E0000000D0000000A0000000E0000860C0000AD090000FD0D0000000E0000000A0000000E00005A0D000099090000F70D0000000F0000000A0000000E00002E0E000084090000F10D000000100000000A0000000E0000020F000070090000EB0D000000000000000B0000000E0000F1010000D20B00004B0E000000010000000B0000000E0000C4020000BD0B0000450E000000020000000B0000000E000098030000A90B00003F0E000000030000000B0000000E00006C040000940B00003A0E000000040000000B0000000E00003F050000800B0000340E000000050000000B0000000E0000130600006B0B00002E0E000000060000000B0000000E0000E7060000570B0000280E000000070000000B0000000E0000BA070000420B0000220E000000080000000B0000000E00008E0800002D0B00001C0E000000090000000B0000000E000062090000190B0000160E0000000A0000000B0000000E0000350A0000040B0000100E0000000B0000000B0000000E0000090B0000F00A00000B0E0000000C0000000B0000000E0000DC0B0000DB0A0000050E0000000D0000000B0000000E0000B00C0000C70A0000FF0D0000000E0000000B0000000E0000840D0000B20A0000F90D0000000F0000000B0000000E0000570E00009D0A0000F30D000000100000000B0000000E00002B0F0000890A0000ED0D000000000000000C0000000E00001B020000F10C00004F0E000000010000000C0000000E0000EF020000DC0C0000490E000000020000000C0000000E0000C3030000C70C0000430E000000030000000C0000000E000096040000B20C00003D0E000000040000000C0000000E00006A0500009D0C0000370E000000050000000C0000000E00003D060000880C0000310E000000060000000C0000000E000011070000730C00002B0E000000070000000C0000000E0000E40700005E0C0000250E000000080000000C0000000E0000B8080000490C00001F0E000000090000000C0000000E00008B090000340C0000190E0000000A0000000C0000000E00005F0A00001F0C0000130E0000000B0000000C0000000E0000320B00000A0C00000D0E0000000C0000000C0000000E0000060C0000F50B0000070E0000000D0000000C0000000E0000DA0C0000E00B0000010E0000000E0000000C0000000E0000AD0D0000CB0B0000FB0D0000000F0000000C0000000E0000810E0000B70B0000F50D000000100000000C0000000E0000540F0000A20B0000EF0D000000000000000D0000000E000046020000100E0000520E000000010000000D0000000E00001A030000FA0D00004C0E000000020000000D0000000E0000ED030000E50D0000460E000000030000000D0000000E0000C0040000D00D0000400E000000040000000D0000000E000094050000BA0D0000390E000000050000000D0000000E000067060000A50D0000330E000000060000000D0000000E00003B070000900D00002D0E000000070000000D0000000E00000E0800007A0D0000270E000000080000000D0000000E0000E2080000650D0000210E000000090000000D0000000E0000B5090000500D00001B0E0000000A0000000D0000000E0000890A00003A0D0000150E0000000B0000000D0000000E00005C0B0000250D00000F0E0000000C0000000D0000000E0000300C0000100D0000090E0000000D0000000D0000000E0000030D0000FA0C0000030E0000000E0000000D0000000E0000D70D0000E50C0000FD0D0000000F0000000D0000000E0000AA0E0000D00C0000F70D000000100000000D0000000E00007D0F0000BA0C0000F10D000000000000000E0000000E0000710200002E0F0000550E000000010000000E0000000E000044030000190F00004F0E000000020000000E0000000E000017040000030F0000490E000000030000000E0000000E0000EB040000ED0E0000430E000000040000000E0000000E0000BE050000D80E00003C0E000000050000000E0000000E000092060000C20E0000360E000000060000000E0000000E000065070000AC0E0000300E000000070000000E0000000E000038080000960E00002A0E000000080000000E0000000E00000C090000810E0000240E000000090000000E0000000E0000DF0900006B0E00001E0E0000000A0000000E0000000E0000B30A0000550E0000170E0000000B0000000E0000000E0000860B00003F0E0000110E0000000C0000000E0000000E0000590C00002A0E00000B0E0000000D0000000E0000000E00002D0D0000140E0000050E0000000E0000000E0000000E0000FF0D0000FF0D0000FF0D0000000F0000000E0000000E0000D30E0000E90D0000F80D000000100000000E0000000E0000A70F0000D30D0000F20D000000000000000F0000000E00009B020000FF0F0000580E000000010000000F0000000E00006F030000FF0F0000520E000000020000000F0000000E000042040000FF0F00004C0E000000030000000F0000000E000015050000FF0F0000460E000000040000000F0000000E0000E9050000F50F00003F0E000000050000000F0000000E0000BC060000DF0F0000390E000000060000000F0000000E00008F070000C90F0000330E000000070000000F0000000E000062080000B30F00002C0E000000080000000F0000000E0000360900009C0F0000260E000000090000000F0000000E0000090A0000860F0000200E0000000A0000000F0000000E0000DC0A0000700F00001A0E0000000B0000000F0000000E0000B00B00005A0F0000130E0000000C0000000F0000000E0000830C0000440F00000D0E0000000D0000000F0000000E0000560D00002E0F0000070E0000000E0000000F0000000E00002A0E0000180F0000010E0000000F0000000F0000000E0000FD0E0000020F0000FA0D000000100000000F0000000E0000D00F0000EB0E0000F40D00000000000000100000000E0000C6020000FF0F00005C0E00000001000000100000000E000099030000FF0F0000550E00000002000000100000000E00006C040000FF0F00004F0E00000003000000100000000E000040050000FF0F0000490E00000004000000100000000E000013060000FF0F0000420E00000005000000100000000E0000E6060000FF0F00003C0E00000006000000100000000E0000B9070000FF0F0000350E00000007000000100000000E00008C080000FF0F00002F0E00000008000000100000000E000060090000FF0F0000290E00000009000000100000000E0000330A0000FF0F0000220E0000000A000000100000000E0000060B0000FF0F00001C0E0000000B000000100000000E0000D90B0000FF0F0000160E0000000C000000100000000E0000AD0C0000FF0F00000F0E0000000D000000100000000E0000800D0000FF0F0000090E0000000E000000100000000E0000530E0000FF0F0000020E0000000F000000100000000E0000260F0000FF0F0000FC0D00000010000000100000000E0000F90F0000FF0F0000F60D00000000000000000000000F00001E000000000000002A0F00000001000000000000000F0000F300000000000000250F00000002000000000000000F0000C801000000000000210F00000003000000000000000F00009D020000000000001C0F00000004000000000000000F00007103000000000000180F00000005000000000000000F00004604000000000000130F00000006000000000000000F00001B050000000000000E0F00000007000000000000000F0000F0050000000000000A0F00000008000000000000000F0000C506000000000000050F00000009000000000000000F00009A07000000000000000F0000000A000000000000000F00006E08000000000000FC0E0000000B000000000000000F00004309000000000000F70E0000000C000000000000000F0000180A000000000000F20E0000000D000000000000000F0000ED0A000000000000EE0E0000000E000000000000000F0000C20B000000000000E90E0000000F000000000000000F0000960C000000000000E50E00000010000000000000000F00006B0D000000000000E00E00000000000000010000000F000049000000940000002E0F00000001000000010000000F00001E01000084000000290F00000002000000010000000F0000F201000074000000240F00000003000000010000000F0000C7020000630000001F0F00000004000000010000000F00009C030000530000001B0F00000005000000010000000F00007004000043000000160F00000006000000010000000F00004505000032000000110F00000007000000010000000F00001A060000220000000C0F00000008000000010000000F0000EF06000012000000080F00000009000000010000000F0000C307000001000000030F0000000A000000010000000F00009808000000000000FE0E0000000B000000010000000F00006D09000000000000F90E0000000C000000010000000F0000410A000000000000F40E0000000D000000010000000F0000160B000000000000F00E0000000E000000010000000F0000EB0B000000000000EB0E0000000F000000010000000F0000C00C000000000000E60E00000010000000010000000F0000940D000000000000E10E00000000000000020000000F000073000000B3010000310F00000001000000020000000F000048010000A20100002C0F00000002000000020000000F00001D02000092010000270F00000003000000020000000F0000F102000081010000220F00000004000000020000000F0000C6030000700100001D0F00000005000000020000000F00009B04000060010000190F00000006000000020000000F00006F0500004F010000140F00000007000000020000000F0000440600003E0100000F0F00000008000000020000000F0000180700002D0100000A0F00000009000000020000000F0000ED0700001D010000050F0000000A000000020000000F0000C20800000C010000000F0000000B000000020000000F000096090000FB000000FB0E0000000C000000020000000F00006B0A0000EB000000F60E0000000D000000020000000F00003F0B0000DA000000F20E0000000E000000020000000F0000140C0000C9000000ED0E0000000F000000020000000F0000E90C0000B8000000E80E00000010000000020000000F0000BD0D0000A8000000E30E00000000000000030000000F00009E000000D2020000340F00000001000000030000000F000073010000C10200002F0F00000002000000030000000F000047020000B00200002A0F00000003000000030000000F00001C0300009F020000250F00000004000000030000000F0000F00300008E020000200F00000005000000030000000F0000C50400007C0200001B0F00000006000000030000000F0000990500006B020000160F00000007000000030000000F00006E0600005A020000110F00000008000000030000000F000042070000490200000C0F00000009000000030000000F00001708000038020000080F0000000A000000030000000F0000EB08000027020000030F0000000B000000030000000F0000C009000016020000FE0E0000000C000000030000000F0000940A000005020000F90E0000000D000000030000000F0000690B0000F4010000F40E0000000E000000030000000F00003D0C0000E3010000EF0E0000000F000000030000000F0000120D0000D1010000EA0E00000010000000030000000F0000E60D0000C0010000E50E00000000000000040000000F0000C9000000F1030000380F00000001000000040000000F00009D010000DF030000330F00000002000000040000000F000072020000CE0300002E0F00000003000000040000000F000046030000BC030000290F00000004000000040000000F00001A040000AB030000230F00000005000000040000000F0000EF040000990300001E0F00000006000000040000000F0000C305000088030000190F00000007000000040000000F00009806000076030000140F00000008000000040000000F00006C070000650300000F0F00000009000000040000000F000040080000530300000A0F0000000A000000040000000F00001509000042030000050F0000000B000000040000000F0000E909000030030000000F0000000C000000040000000F0000BE0A00001F030000FB0E0000000D000000040000000F0000920B00000D030000F50E0000000E000000040000000F0000660C0000FC020000F00E0000000F000000040000000F00003B0D0000EA020000EB0E00000010000000040000000F00000F0E0000D9020000E60E00000000000000050000000F0000F4000000100500003B0F00000001000000050000000F0000C8010000FE040000360F00000002000000050000000F00009C020000EC040000310F00000003000000050000000F000070030000DA0400002C0F00000004000000050000000F000045040000C8040000260F00000005000000050000000F000019050000B6040000210F00000006000000050000000F0000ED050000A40400001C0F00000007000000050000000F0000C206000093040000170F00000008000000050000000F00009607000081040000110F00000009000000050000000F00006A0800006F0400000C0F0000000A000000050000000F00003E0900005D040000070F0000000B000000050000000F0000130A00004B040000020F0000000C000000050000000F0000E70A000039040000FD0E0000000D000000050000000F0000BB0B000027040000F70E0000000E000000050000000F0000900C000015040000F20E0000000F000000050000000F0000640D000003040000ED0E00000010000000050000000F0000380E0000F2030000E80E00000000000000060000000F00001E0100002F0600003F0F00000001000000060000000F0000F20100001C060000390F00000002000000060000000F0000C70200000A060000340F00000003000000060000000F00009B030000F80500002F0F00000004000000060000000F00006F040000E6050000290F00000005000000060000000F000043050000D3050000240F00000006000000060000000F000017060000C10500001F0F00000007000000060000000F0000EC060000AF050000190F00000008000000060000000F0000C00700009C050000140F00000009000000060000000F0000940800008A0500000F0F0000000A000000060000000F00006809000078050000090F0000000B000000060000000F00003C0A000066050000040F0000000C000000060000000F0000100B000053050000FF0E0000000D000000060000000F0000E50B000041050000F90E0000000E000000060000000F0000B90C00002F050000F40E0000000F000000060000000F00008D0D00001C050000EF0E00000010000000060000000F0000610E00000A050000E90E00000000000000070000000F0000490100004E070000420F00000001000000070000000F00001D0200003B0700003D0F00000002000000070000000F0000F102000028070000370F00000003000000070000000F0000C503000016070000320F00000004000000070000000F000099040000030700002C0F00000005000000070000000F00006D050000F0060000270F00000006000000070000000F000041060000DD060000210F00000007000000070000000F000015070000CB0600001C0F00000008000000070000000F0000EA070000B8060000160F00000009000000070000000F0000BE080000A5060000110F0000000A000000070000000F000092090000930600000C0F0000000B000000070000000F0000660A000080060000060F0000000C000000070000000F00003A0B00006D060000010F0000000D000000070000000F00000E0C00005B060000FB0E0000000E000000070000000F0000E20C000048060000F60E0000000F000000070000000F0000B60D000035060000F00E00000010000000070000000F00008A0E000023060000EB0E00000000000000080000000F0000740100006C080000460F00000001000000080000000F00004802000059080000400F00000002000000080000000F00001C030000460800003A0F00000003000000080000000F0000F003000033080000350F00000004000000080000000F0000C4040000200800002F0F00000005000000080000000F0000970500000D0800002A0F00000006000000080000000F00006B060000FA070000240F00000007000000080000000F00003F070000E70700001F0F00000008000000080000000F000013080000D4070000190F00000009000000080000000F0000E7080000C1070000130F0000000A000000080000000F0000BB090000AE0700000E0F0000000B000000080000000F00008F0A00009B070000080F0000000C000000080000000F0000630B000088070000030F0000000D000000080000000F0000370C000075070000FD0E0000000E000000080000000F00000B0D000061070000F80E0000000F000000080000000F0000DF0D00004E070000F20E00000010000000080000000F0000B30E00003B070000EC0E00000000000000090000000F00009E0100008B090000490F00000001000000090000000F00007202000078090000430F00000002000000090000000F000046030000640900003E0F00000003000000090000000F00001A04000051090000380F00000004000000090000000F0000EE0400003D090000320F00000005000000090000000F0000C20500002A0900002D0F00000006000000090000000F00009506000017090000270F00000007000000090000000F00006907000003090000210F00000008000000090000000F00003D080000F00800001B0F00000009000000090000000F000011090000DC080000160F0000000A000000090000000F0000E5090000C9080000100F0000000B000000090000000F0000B90A0000B50800000A0F0000000C000000090000000F00008D0B0000A2080000050F0000000D000000090000000F0000600C00008E080000FF0E0000000E000000090000000F0000340D00007B080000F90E0000000F000000090000000F0000080E000067080000F40E00000010000000090000000F0000DC0E000054080000EE0E000000000000000A0000000F0000C9010000AA0A00004C0F000000010000000A0000000F00009D020000960A0000470F000000020000000A0000000F000071030000830A0000410F000000030000000A0000000F0000440400006F0A00003B0F000000040000000A0000000F0000180500005B0A0000350F000000050000000A0000000F0000EC050000470A00002F0F000000060000000A0000000F0000C0060000330A00002A0F000000070000000A0000000F0000930700001F0A0000240F000000080000000A0000000F0000670800000B0A00001E0F000000090000000A0000000F00003B090000F8090000180F0000000A0000000A0000000F00000E0A0000E4090000120F0000000B0000000A0000000F0000E20A0000D00900000D0F0000000C0000000A0000000F0000B60B0000BC090000070F0000000D0000000A0000000F00008A0C0000A8090000010F0000000E0000000A0000000F00005D0D000094090000FB0E0000000F0000000A0000000F0000310E000080090000F50E000000100000000A0000000F0000050F00006D090000EF0E000000000000000B0000000F0000F4010000C90B0000500F000000010000000B0000000F0000C7020000B50B00004A0F000000020000000B0000000F00009B030000A10B0000440F000000030000000B0000000F00006F0400008C0B00003E0F000000040000000B0000000F000042050000780B0000380F000000050000000B0000000F000016060000640B0000320F000000060000000B0000000F0000EA060000500B00002C0F000000070000000B0000000F0000BD0700003B0B0000260F000000080000000B0000000F000091080000270B0000200F000000090000000B0000000F000064090000130B00001B0F0000000A0000000B0000000F0000380A0000FF0A0000150F0000000B0000000B0000000F00000C0B0000EA0A00000F0F0000000C0000000B0000000F0000DF0B0000D60A0000090F0000000D0000000B0000000F0000B30C0000C20A0000030F0000000E0000000B0000000F0000870D0000AE0A0000FD0E0000000F0000000B0000000F00005A0E0000990A0000F70E000000100000000B0000000F00002E0F0000850A0000F10E000000000000000C0000000F00001E020000E80C0000530F000000010000000C0000000F0000F2020000D30C00004D0F000000020000000C0000000F0000C6030000BF0C0000470F000000030000000C0000000F000099040000AA0C0000410F000000040000000C0000000F00006D050000950C00003B0F000000050000000C0000000F000040060000810C0000350F000000060000000C0000000F0000140700006C0C00002F0F000000070000000C0000000F0000E7070000580C0000290F000000080000000C0000000F0000BB080000430C0000230F000000090000000C0000000F00008E0900002E0C00001D0F0000000A0000000C0000000F0000620A00001A0C0000170F0000000B0000000C0000000F0000350B0000050C0000110F0000000C0000000C0000000F0000090C0000F00B00000B0F0000000D0000000C0000000F0000DC0C0000DC0B0000050F0000000E0000000C0000000F0000B00D0000C70B0000FF0E0000000F0000000C0000000F0000830E0000B20B0000F90E000000100000000C0000000F0000570F00009E0B0000F30E000000000000000D0000000F000049020000070E0000570F000000010000000D0000000F00001D030000F20D0000510F000000020000000D0000000F0000F0030000DD0D00004A0F000000030000000D0000000F0000C3040000C80D0000440F000000040000000D0000000F000097050000B30D00003E0F000000050000000D0000000F00006A0600009E0D0000380F000000060000000D0000000F00003E070000890D0000320F000000070000000D0000000F000011080000740D00002C0F000000080000000D0000000F0000E40800005F0D0000250F000000090000000D0000000F0000B80900004A0D00001F0F0000000A0000000D0000000F00008B0A0000350D0000190F0000000B0000000D0000000F00005F0B0000200D0000130F0000000C0000000D0000000F0000320C00000A0D00000D0F0000000D0000000D0000000F0000060D0000F50C0000070F0000000E0000000D0000000F0000D90D0000E00C0000000F0000000F0000000D0000000F0000AC0E0000CB0C0000FA0E000000100000000D0000000F0000800F0000B60C0000F40E000000000000000E0000000F000074020000260F00005A0F000000010000000E0000000F000047030000100F0000540F000000020000000E0000000F00001A040000FB0E00004E0F000000030000000E0000000F0000EE040000E60E0000470F000000040000000E0000000F0000C1050000D00E0000410F000000050000000E0000000F000094060000BB0E00003B0F000000060000000E0000000F000068070000A50E0000350F000000070000000E0000000F00003B080000900E00002E0F000000080000000E0000000F00000E0900007A0E0000280F000000090000000E0000000F0000E2090000650E0000220F0000000A0000000E0000000F0000B50A00004F0E00001B0F0000000B0000000E0000000F0000880B00003A0E0000150F0000000C0000000E0000000F00005C0C0000250E00000F0F0000000D0000000E0000000F00002F0D00000F0E0000090F0000000E0000000E0000000F0000020E0000FA0D0000020F0000000F0000000E0000000F0000D50E0000E40D0000FC0E000000100000000E0000000F0000A90F0000CF0D0000F60E000000000000000F0000000F00009F020000FF0F00005E0F000000010000000F0000000F000072030000FF0F0000570F000000020000000F0000000F000045040000FF0F0000510F000000030000000F0000000F000018050000FF0F00004A0F000000040000000F0000000F0000EB050000ED0F0000440F000000050000000F0000000F0000BF060000D80F00003E0F000000060000000F0000000F000092070000C20F0000370F000000070000000F0000000F000065080000AC0F0000310F000000080000000F0000000F000038090000960F00002A0F000000090000000F0000000F00000B0A0000800F0000240F0000000A0000000F0000000F0000DF0A00006A0F00001E0F0000000B0000000F0000000F0000B20B0000550F0000170F0000000C0000000F0000000F0000850C00003F0F0000110F0000000D0000000F0000000F0000580D0000290F00000A0F0000000E0000000F0000000F00002B0E0000130F0000040F0000000F0000000F0000000F0000FF0E0000FF0E0000FF0E000000100000000F0000000F0000D20F0000E80E0000F70E00000000000000100000000F0000C9020000FF0F0000610F00000001000000100000000F00009C030000FF0F00005B0F00000002000000100000000F00006F040000FF0F0000540F00000003000000100000000F000043050000FF0F00004E0F00000004000000100000000F000016060000FF0F0000470F00000005000000100000000F0000E9060000FF0F0000400F00000006000000100000000F0000BC070000FF0F00003A0F00000007000000100000000F00008F080000FF0F0000330F00000008000000100000000F000062090000FF0F00002D0F00000009000000100000000F0000350A0000FF0F0000260F0000000A000000100000000F0000080B0000FF0F0000200F0000000B000000100000000F0000DB0B0000FF0F0000190F0000000C000000100000000F0000AE0C0000FF0F0000130F0000000D000000100000000F0000810D0000FF0F00000C0F0000000E000000100000000F0000550E0000FF0F0000060F0000000F000000100000000F0000280F0000FF0F0000FF0E00000010000000100000000F0000FB0F0000FF0F0000F90E00000000000000000000001000002000000000000000FF0F0000000100000000000000100000F500000000000000FF0F0000000200000000000000100000CA01000000000000FF0F0000000300000000000000100000A002000000000000FF0F00000004000000000000001000007503000000000000FF0F00000005000000000000001000004A04000000000000FF0F00000006000000000000001000001F05000000000000FF0F0000000700000000000000100000F405000000000000FF0F0000000800000000000000100000C906000000000000FF0F00000009000000000000001000009E07000000000000FF0F0000000A000000000000001000007308000000000000FF0F0000000B000000000000001000004809000000000000FC0F0000000C000000000000001000001E0A000000000000F70F0000000D00000000000000100000F30A000000000000F30F0000000E00000000000000100000C80B000000000000EE0F0000000F000000000000001000009D0C000000000000EA0F0000001000000000000000100000720D000000000000E50F00000000000000010000001000004B0000008B000000FF0F0000000100000001000000100000200100007B000000FF0F0000000200000001000000100000F50100006B000000FF0F0000000300000001000000100000CA0200005B000000FF0F00000004000000010000001000009F0300004B000000FF0F0000000500000001000000100000740400003B000000FF0F0000000600000001000000100000490500002B000000FF0F00000007000000010000001000001E0600001B000000FF0F0000000800000001000000100000F30600000B000000FF0F0000000900000001000000100000C807000000000000FF0F0000000A000000010000001000009D08000000000000FF0F0000000B000000010000001000007209000000000000FE0F0000000C00000001000000100000470A000000000000F90F0000000D000000010000001000001C0B000000000000F50F0000000E00000001000000100000F10B000000000000F00F0000000F00000001000000100000C60C000000000000EC0F00000010000000010000001000009B0D000000000000E70F000000000000000200000010000076000000AA010000FF0F00000001000000020000001000004B0100009A010000FF0F00000002000000020000001000001F02000089010000FF0F0000000300000002000000100000F402000079010000FF0F0000000400000002000000100000C903000069010000FF0F00000005000000020000001000009E04000058010000FF0F00000006000000020000001000007305000048010000FF0F00000007000000020000001000004806000038010000FF0F00000008000000020000001000001D07000027010000FF0F0000000900000002000000100000F107000017010000FF0F0000000A00000002000000100000C608000006010000FF0F0000000B000000020000001000009B090000F6000000FF0F0000000C00000002000000100000700A0000E6000000FB0F0000000D00000002000000100000450B0000D5000000F70F0000000E000000020000001000001A0C0000C5000000F20F0000000F00000002000000100000EE0C0000B4000000ED0F0000001000000002000000100000C30D0000A4000000E80F0000000000000003000000100000A0000000C9020000FF0F000000010000000300000010000075010000B8020000FF0F00000002000000030000001000004A020000A8020000FF0F00000003000000030000001000001F03000097020000FF0F0000000400000003000000100000F303000086020000FF0F0000000500000003000000100000C804000075020000FF0F00000006000000030000001000009D05000064020000FF0F00000007000000030000001000007106000054020000FF0F00000008000000030000001000004607000043020000FF0F00000009000000030000001000001B08000032020000FF0F0000000A00000003000000100000F008000021020000FF0F0000000B00000003000000100000C409000011020000FF0F0000000C00000003000000100000990A000000020000FD0F0000000D000000030000001000006E0B0000EF010000F80F0000000E00000003000000100000430C0000DE010000F30F0000000F00000003000000100000170D0000CD010000EF0F0000001000000003000000100000EC0D0000BD010000EA0F0000000000000004000000100000CB000000E8030000FF0F0000000100000004000000100000A0010000D7030000FF0F000000020000000400000010000074020000C6030000FF0F000000030000000400000010000049030000B4030000FF0F00000004000000040000001000001E040000A3030000FF0F0000000500000004000000100000F204000092030000FF0F0000000600000004000000100000C705000081030000FF0F00000007000000040000001000009B06000070030000FF0F0000000800000004000000100000700700005F030000FF0F0000000900000004000000100000440800004D030000FF0F0000000A00000004000000100000190900003C030000FF0F0000000B00000004000000100000EE0900002B030000FF0F0000000C00000004000000100000C20A00001A030000FF0F0000000D00000004000000100000970B000009030000FA0F0000000E000000040000001000006B0C0000F8020000F50F0000000F00000004000000100000400D0000E6020000F00F0000001000000004000000100000150E0000D5020000EB0F0000000000000005000000100000F600000007050000FF0F0000000100000005000000100000CA010000F5040000FF0F00000002000000050000001000009F020000E4040000FF0F000000030000000500000010000073030000D2040000FF0F000000040000000500000010000048040000C1040000FF0F00000005000000050000001000001C050000AF040000FF0F0000000600000005000000100000F10500009D040000FF0F0000000700000005000000100000C50600008C040000FF0F00000008000000050000001000009A0700007A040000FF0F00000009000000050000001000006E08000069040000FF0F0000000A000000050000001000004309000057040000FF0F0000000B00000005000000100000170A000046040000FF0F0000000C00000005000000100000EB0A000034040000FF0F0000000D00000005000000100000C00B000023040000FC0F0000000E00000005000000100000940C000011040000F70F0000000F00000005000000100000690D0000FF030000F20F00000010000000050000001000003D0E0000EE030000EC0F00000000000000060000001000002101000026060000FF0F0000000100000006000000100000F501000014060000FF0F0000000200000006000000100000C902000002060000FF0F00000003000000060000001000009E030000F0050000FF0F000000040000000600000010000072040000DE050000FF0F000000050000000600000010000046050000CC050000FF0F00000006000000060000001000001B060000BA050000FF0F0000000700000006000000100000EF060000A8050000FF0F0000000800000006000000100000C307000096050000FF0F00000009000000060000001000009808000084050000FF0F0000000A000000060000001000006C09000072050000FF0F0000000B00000006000000100000400A000060050000FF0F0000000C00000006000000100000150B00004E050000FF0F0000000D00000006000000100000E90B00003C050000FE0F0000000E00000006000000100000BD0C00002A050000F80F0000000F00000006000000100000910D000018050000F30F0000001000000006000000100000660E000006050000EE0F00000000000000070000001000004C01000045070000FF0F00000001000000070000001000002002000032070000FF0F0000000200000007000000100000F402000020070000FF0F0000000300000007000000100000C80300000E070000FF0F00000004000000070000001000009C040000FB060000FF0F000000050000000700000010000070050000E9060000FF0F000000060000000700000010000045060000D7060000FF0F000000070000000700000010000019070000C4060000FF0F0000000800000007000000100000ED070000B2060000FF0F0000000900000007000000100000C10800009F060000FF0F0000000A00000007000000100000950900008D060000FF0F0000000B000000070000001000006A0A00007B060000FF0F0000000C000000070000001000003E0B000068060000FF0F0000000D00000007000000100000120C000056060000FF0F0000000E00000007000000100000E60C000044060000FA0F0000000F00000007000000100000BA0D000031060000F50F00000010000000070000001000008E0E00001F060000EF0F00000000000000080000001000007601000064080000FF0F00000001000000080000001000004A02000051080000FF0F00000002000000080000001000001E0300003E080000FF0F0000000300000008000000100000F20300002B080000FF0F0000000400000008000000100000C704000019080000FF0F00000005000000080000001000009B05000006080000FF0F00000006000000080000001000006F060000F3070000FF0F000000070000000800000010000043070000E0070000FF0F000000080000000800000010000017080000CE070000FF0F0000000900000008000000100000EB080000BB070000FF0F0000000A00000008000000100000BF090000A8070000FF0F0000000B00000008000000100000930A000095070000FF0F0000000C00000008000000100000670B000083070000FF0F0000000D000000080000001000003B0C000070070000FF0F0000000E000000080000001000000F0D00005D070000FC0F0000000F00000008000000100000E30D00004A070000F60F0000001000000008000000100000B70E000038070000F10F0000000000000009000000100000A101000083090000FF0F0000000100000009000000100000750200006F090000FF0F0000000200000009000000100000490300005C090000FF0F00000003000000090000001000001D04000049090000FF0F0000000400000009000000100000F104000036090000FF0F0000000500000009000000100000C505000023090000FF0F00000006000000090000001000009906000010090000FF0F00000007000000090000001000006C070000FC080000FF0F000000080000000900000010000040080000E9080000FF0F000000090000000900000010000014090000D6080000FF0F0000000A00000009000000100000E8090000C3080000FF0F0000000B00000009000000100000BC0A0000B0080000FF0F0000000C00000009000000100000900B00009D080000FF0F0000000D00000009000000100000640C00008A080000FF0F0000000E00000009000000100000380D000076080000FD0F0000000F000000090000001000000C0E000063080000F80F0000001000000009000000100000E00E000050080000F20F000000000000000A000000100000CC010000A10A0000FF0F000000010000000A000000100000A00200008E0A0000FF0F000000020000000A000000100000730300007A0A0000FF0F000000030000000A00000010000047040000670A0000FF0F000000040000000A0000001000001B050000530A0000FF0F000000050000000A000000100000EF050000400A0000FF0F000000060000000A000000100000C30600002C0A0000FF0F000000070000000A00000010000096070000190A0000FF0F000000080000000A0000001000006A080000050A0000FF0F000000090000000A0000001000003E090000F2090000FF0F0000000A0000000A000000100000120A0000DE090000FF0F0000000B0000000A000000100000E50A0000CA090000FF0F0000000C0000000A000000100000B90B0000B7090000FF0F0000000D0000000A0000001000008D0C0000A3090000FF0F0000000E0000000A000000100000610D000090090000FF0F0000000F0000000A000000100000340E00007C090000F90F000000100000000A000000100000080F000069090000F30F000000000000000B000000100000F7010000C00B0000FF0F000000010000000B000000100000CA020000AC0B0000FF0F000000020000000B0000001000009E030000980B0000FF0F000000030000000B00000010000072040000850B0000FF0F000000040000000B00000010000045050000710B0000FF0F000000050000000B000000100000190600005D0B0000FF0F000000060000000B000000100000ED060000490B0000FF0F000000070000000B000000100000C0070000350B0000FF0F000000080000000B00000010000094080000210B0000FF0F000000090000000B000000100000670900000D0B0000FF0F0000000A0000000B0000001000003B0A0000F90A0000FF0F0000000B0000000B0000001000000F0B0000E50A0000FF0F0000000C0000000B000000100000E20B0000D10A0000FF0F0000000D0000000B000000100000B60C0000BD0A0000FF0F0000000E0000000B0000001000008A0D0000A90A0000FF0F0000000F0000000B0000001000005D0E0000950A0000FB0F000000100000000B000000100000310F0000810A0000F50F000000000000000C00000010000021020000DF0C0000FF0F000000010000000C000000100000F5020000CB0C0000FF0F000000020000000C000000100000C8030000B70C0000FF0F000000030000000C0000001000009C040000A20C0000FF0F000000040000000C0000001000006F0500008E0C0000FF0F000000050000000C000000100000430600007A0C0000FF0F000000060000000C00000010000016070000650C0000FF0F000000070000000C000000100000EA070000510C0000FF0F000000080000000C000000100000BD0800003D0C0000FF0F000000090000000C00000010000091090000280C0000FF0F0000000A0000000C000000100000640A0000140C0000FF0F0000000B0000000C000000100000380B0000000C0000FF0F0000000C0000000C0000001000000C0C0000EB0B0000FF0F0000000D0000000C000000100000DF0C0000D70B0000FF0F0000000E0000000C000000100000B30D0000C30B0000FF0F0000000F0000000C000000100000860E0000AE0B0000FC0F000000100000000C0000001000005A0F00009A0B0000F60F000000000000000D0000001000004C020000FE0D0000FF0F000000010000000D00000010000020030000E90D0000FF0F000000020000000D000000100000F3030000D50D0000FF0F000000030000000D000000100000C6040000C00D0000FF0F000000040000000D0000001000009A050000AB0D0000FF0F000000050000000D0000001000006D060000970D0000FF0F000000060000000D00000010000040070000820D0000FF0F000000070000000D000000100000140800006D0D0000FF0F000000080000000D000000100000E7080000580D0000FF0F000000090000000D000000100000BB090000440D0000FF0F0000000A0000000D0000001000008E0A00002F0D0000FF0F0000000B0000000D000000100000610B00001A0D0000FF0F0000000C0000000D000000100000350C0000050D0000FF0F0000000D0000000D000000100000080D0000F10C0000FF0F0000000E0000000D000000100000DB0D0000DC0C0000FF0F0000000F0000000D000000100000AF0E0000C70C0000FE0F000000100000000D000000100000820F0000B20C0000F80F000000000000000E000000100000770200001D0F0000FF0F000000010000000E0000001000004A030000080F0000FF0F000000020000000E0000001000001D040000F30E0000FF0F000000030000000E000000100000F1040000DE0E0000FF0F000000040000000E000000100000C4050000C90E0000FF0F000000050000000E00000010000097060000B30E0000FF0F000000060000000E0000001000006A0700009E0E0000FF0F000000070000000E0000001000003E080000890E0000FF0F000000080000000E00000010000011090000740E0000FF0F000000090000000E000000100000E40900005F0E0000FF0F0000000A0000000E000000100000B70A00004A0E0000FF0F0000000B0000000E0000001000008B0B0000350E0000FF0F0000000C0000000E0000001000005E0C0000200E0000FF0F0000000D0000000E000000100000310D00000A0E0000FF0F0000000E0000000E000000100000040E0000F50D0000FF0F0000000F0000000E000000100000D80E0000E00D0000FF0F000000100000000E000000100000AB0F0000CB0D0000F90F000000000000000F000000100000A2020000FF0F0000FF0F000000010000000F00000010000075030000FF0F0000FF0F000000020000000F00000010000048040000FF0F0000FF0F000000030000000F0000001000001B050000FB0F0000FF0F000000040000000F000000100000EE050000E60F0000FF0F000000050000000F000000100000C1060000D00F0000FF0F000000060000000F00000010000094070000BB0F0000FF0F000000070000000F00000010000067080000A50F0000FF0F000000080000000F0000001000003B090000900F0000FF0F000000090000000F0000001000000E0A00007A0F0000FF0F0000000A0000000F000000100000E10A0000650F0000FF0F0000000B0000000F000000100000B40B00004F0F0000FF0F0000000C0000000F000000100000870C00003A0F0000FF0F0000000D0000000F0000001000005A0D0000240F0000FF0F0000000E0000000F0000001000002D0E00000F0F0000FF0F0000000F0000000F000000100000000F0000F90E0000FF0F000000100000000F000000100000D30F0000E40E0000FA0F0000000000000010000000100000CD020000FF0F0000FF0F0000000100000010000000100000A0030000FF0F0000FF0F000000020000001000000010000073040000FF0F0000FF0F000000030000001000000010000045050000FF0F0000FF0F000000040000001000000010000018060000FF0F0000FF0F0000000500000010000000100000EB060000FF0F0000FF0F0000000600000010000000100000BE070000FF0F0000FF0F000000070000001000000010000091080000FF0F0000FF0F000000080000001000000010000064090000FF0F0000FF0F0000000900000010000000100000370A0000FF0F0000FF0F0000000A000000100000001000000A0B0000FF0F0000FF0F0000000B00000010000000100000DD0B0000FF0F0000FF0F0000000C00000010000000100000B00C0000FF0F0000FF0F0000000D00000010000000100000830D0000FF0F0000FF0F0000000E00000010000000100000560E0000FF0F0000FF0F0000000F00000010000000100000290F0000FF0F0000FF0F0000001000000010000000100000FF0F0000FF0F0000FF0F0000</Feature>
+ <Feature FeatureType="4" Disable="false" DataSize="52744">0000000000000000010000007D000000000000000000000000000000000000000000000000000000000400000000000000000000410300000000000000000000000800000000000000000000830600000000000000000000000C00000000000000000000C40900000000000000000000001000000000000000000000060D00000000000000000000000000000004000000000000A60000007604000002000000000400000004000000000000EC0300001D0400000000000000080000000400000000000032070000C303000000000000000C00000004000000000000780A00006A03000000000000001000000004000000000000BE0D000010030000000000000000000000080000000000004C010000F108000007000000000400000008000000000000960400009108000000000000000800000008000000000000E10700003208000000000000000C000000080000000000002C0B0000D307000000000000001000000008000000000000770E0000740700000000000000000000000C000000000000F20100006B0D00000B00000000040000000C00000000000041050000060D00000000000000080000000C00000000000090080000A10C000000000000000C0000000C000000000000E00B00003C0C00000000000000100000000C0000000000002F0F0000D70B00000000000000000000001000000000000098020000FF0F00000F000000000400000010000000000000EC050000FF0F0000000000000008000000100000000000003F090000FF0F000000000000000C00000010000000000000930C0000FF0F000000000000001000000010000000000000E70F0000FF0F00000000000000000000000000000004000008000000000000000A0400000004000000000000000400004E03000000000000F00300000008000000000000000400009406000000000000D6030000000C00000000000000040000DB09000000000000BC030000001000000000000000040000210D000000000000A2030000000000000004000000040000AF000000530400001104000000040000000400000004000000040000000400000004000000080000000400000004000041070000AA030000E0030000000C000000040000000400008B0A000056030000C8030000001000000004000000040000D40D000002030000AF03000000000000000800000004000056010000CD08000017040000000400000008000000040000A20400007308000001040000000800000008000000040000EE07000019080000EA030000000C000000080000000400003B0B0000BF070000D3030000001000000008000000040000870E000065070000BD03000000000000000C000000040000FE010000480D00001E04000000040000000C0000000400004D050000E80C00000904000000080000000C0000000400009C080000880C0000F4030000000C0000000C000000040000EB0B0000280C0000DF03000000100000000C0000000400003A0F0000C80B0000CA030000000000000010000000040000A5020000FF0F000025040000000400000010000000040000F7050000FF0F00001204000000080000001000000004000049090000FF0F0000FE030000000C000000100000000400009B0C0000FF0F0000EB030000001000000010000000040000ED0F0000FF0F0000D70300000000000000000000000800001000000000000000150800000004000000000000000800005B03000000000000FE070000000800000000000000080000A606000000000000E7070000000C00000000000000080000F109000000000000D00700000010000000000000000800003C0D000000000000B9070000000000000004000000080000B80000002F0400001F08000000040000000400000008000005040000E0030000080800000008000000040000000800005107000091030000F1070000000C000000040000000800009D0A000042030000DA070000001000000004000000080000E90D0000F3020000C307000000000000000800000008000061010000AA08000028080000000400000008000000080000AE0400005508000012080000000800000008000000080000000800000008000000080000000C00000008000000080000490B0000AB070000E5070000001000000008000000080000970E000056070000CE07000000000000000C0000000800000A020000250D00003208000000040000000C00000008000058050000CA0C00001B08000000080000000C000000080000A70800006F0C000005080000000C0000000C000000080000F60B0000140C0000EF07000000100000000C000000080000440F0000B90B0000D9070000000000000010000000080000B2020000FF0F00003B08000000040000001000000008000002060000FF0F00002508000000080000001000000008000052090000FF0F00000F080000000C00000010000000080000A20C0000FF0F0000F9070000001000000010000000080000F20F0000FF0F0000E30700000000000000000000000C00001800000000000000210C00000004000000000000000C000068030000000000000D0C00000008000000000000000C0000B706000000000000F80B0000000C000000000000000C0000070A000000000000E40B00000010000000000000000C0000570D000000000000CF0B00000000000000040000000C0000C20000000C0400002D0C00000004000000040000000C000011040000C2030000180C00000008000000040000000C00006007000078030000020C0000000C000000040000000C0000B00A00002E030000ED0B00000010000000040000000C0000FF0D0000E4020000D70B00000000000000080000000C00006C01000087080000390C00000004000000080000000C0000BA04000037080000230C00000008000000080000000C000009080000E70700000C0C0000000C000000080000000C0000580B000097070000F60B00000010000000080000000C0000A70E000047070000DF0B000000000000000C0000000C000016020000020D0000450C000000040000000C0000000C000064050000AC0C00002D0C000000080000000C0000000C0000B2080000560C0000160C0000000C0000000C0000000C0000FF0B0000FF0B0000FF0B000000100000000C0000000C00004F0F0000A90B0000E70B00000000000000100000000C0000BF020000FF0F0000510C00000004000000100000000C00000D060000FF0F0000380C00000008000000100000000C00005B090000FF0F0000200C0000000C000000100000000C0000A90C0000FF0F0000080C00000010000000100000000C0000F70F0000FF0F0000F00B00000000000000000000001000002000000000000000FF0F00000004000000000000001000007503000000000000FF0F0000000800000000000000100000C906000000000000FF0F0000000C000000000000001000001E0A000000000000F70F0000001000000000000000100000720D000000000000E50F0000000000000004000000100000CB000000E8030000FF0F00000004000000040000001000001E040000A3030000FF0F0000000800000004000000100000700700005F030000FF0F0000000C00000004000000100000C20A00001A030000FF0F0000001000000004000000100000150E0000D5020000EB0F00000000000000080000001000007601000064080000FF0F0000000400000008000000100000C704000019080000FF0F000000080000000800000010000017080000CE070000FF0F0000000C00000008000000100000670B000083070000FF0F0000001000000008000000100000B70E000038070000F10F000000000000000C00000010000021020000DF0C0000FF0F000000040000000C0000001000006F0500008E0C0000FF0F000000080000000C000000100000BD0800003D0C0000FF0F0000000C0000000C0000001000000C0C0000EB0B0000FF0F000000100000000C0000001000005A0F00009A0B0000F60F0000000000000010000000100000CD020000FF0F0000FF0F000000040000001000000010000018060000FF0F0000FF0F000000080000001000000010000064090000FF0F0000FF0F0000000C00000010000000100000B00C0000FF0F0000FF0F0000001000000010000000100000FF0F0000FF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="false" DataSize="12300">00000500000100000600000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000000200000002000000020000000300000003000000030000000400000005000000060000000700000008000000090000000B0000000C0000000D0000000F00000011000000130000001400000016000000190000001B0000001D000000200000002200000025000000270000002A0000002D0000003000000034000000370000003A0000003E0000004100000045000000490000004D00000051000000550000005A0000005E00000063000000670000006C00000071000000760000007B00000080000000860000008B00000091000000970000009D000000A3000000A9000000AF000000B5000000BC000000C2000000C9000000D0000000D7000000DE000000E5000000ED000000F4000000FC000000040100000B010000140100001C010000240100002C010000350100003E010000460100004F01000058010000620100006B010000740100007E01000088010000910100009B010000A6010000B0010000BA010000C5010000CF010000DA010000E5010000F0010000FB01000007020000120200001E0200002A02000036020000420200004E0200005A0200006702000073020000800200008D0200009A020000A7020000B4020000C2020000CF020000DD020000EB020000F90200000703000016030000240300003203000042030000500300005F0300006E0300007D0300008C0300009C030000AC030000BC030000CC030000DC030000EC030000FC0300000D0400001E0400002F040000400400005104000062040000740400008504000097040000A9040000BB040000CD040000DF040000F204000005050000170500002A0500003D0500005105000064050000780500008B0500009F050000B3050000C7050000DB050000F005000004060000190600002E06000043060000580600006E0600008306000099060000AF060000C5060000DB060000F1060000070700001E070000350700004C070000630700007A07000091070000A9070000C0070000D8070000F0070000080800002008000039080000510800006A080000830800009C080000B5080000CF080000E8080000020900001C09000036090000500900006A090000850900009F090000BA090000D5090000F00900000B0A0000270A0000420A00005E0A00007A0A0000960A0000B20A0000CE0A0000EB0A0000080B0000240B0000410B00005F0B00007C0B0000990B0000B70B0000D50B0000F30B0000110C00002F0C00004E0C00006C0C00008B0C0000AA0C0000C90C0000E80C0000080D0000270D0000470D0000670D0000870D0000A70D0000C80D0000E80D0000090E00002A0E00004B0E00006C0E00008D0E0000AF0E0000D10E0000F20E0000140F0000370F0000590F00007B0F00009E0F0000C10F0000F80F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="false" DataSize="12300">010000000004000006000000000000002C0000003C00000048000000520000005B000000630000006A00000071000000770000007D00000082000000880000008D00000091000000960000009B0000009F000000A3000000A7000000AB000000AF000000B3000000B6000000BA000000BD000000C1000000C4000000C7000000CB000000CE000000D1000000D4000000D7000000DA000000DD000000DF000000E2000000E5000000E8000000EA000000ED000000F0000000F2000000F5000000F7000000FA000000FC000000FF000000010100000301000006010000080100000A0100000D0100000F010000110100001301000016010000180100001A0100001C0100001E01000020010000220100002401000026010000280100002A0100002C0100002E01000030010000320100003401000036010000380100003A0100003C0100003E0100003F01000041010000430100004501000047010000480100004A0100004C0100004E0100004F01000051010000530100005501000056010000580100005A0100005B0100005D0100005F0100006001000062010000640100006501000067010000680100006A0100006B0100006D0100006F010000700100007201000073010000750100007601000078010000790100007B0100007C0100007E0100007F010000810100008201000084010000850100008701000088010000890100008B0100008C0100008E0100008F010000910100009201000093010000950100009601000097010000990100009A0100009C0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A6010000A8010000A9010000AA010000AB010000AD010000AE010000AF010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BB010000BC010000BD010000BE010000C0010000C1010000C2010000C3010000C4010000C6010000C7010000C8010000C9010000CA010000CC010000CD010000CE010000CF010000D0010000D2010000D3010000D4010000D5010000D6010000D7010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003F02000040020000410200004202000043020000440200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004C0200004D0200004E0200004F0200005002000051020000520200005302000053020000540200005502000056020000570200005802000059020000590200005A0200005B0200005C0200005D0200005E0200005F0200005F02000060020000610200006202000063020000640200006502000065020000660200006702000068020000690200006A0200006A0200006B0200006C0200006D0200006E0200006F0200006F0200007002000071020000720200007302000073020000740200007502000076020000770200007802000078020000790200007A0200007B0200007C0200007C0200007D0200007E0200007F020000800200008002000081020000820200008302000084020000840200008502000086020000870200008702000088020000890200008A0200008B0200008B0200008C0200008D0200008E0200008F0200008F020000900200009102000092020000920200009302000094020000950200009502000096020000970200009802000099020000990200009A0200009B0200009C0200009C0200009D0200009E0200009F0200009F020000A0020000A1020000A2020000A2020000A3020000A4020000A5020000A5020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B5020000B6020000B6020000B7020000B8020000B8020000B9020000BA020000BB020000BB020000BC020000BD020000BD020000BE020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C4020000C5020000C5020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CC020000CC020000CD020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D3020000D3020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E1020000E2020000E2020000E3020000E4020000E4020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000EA020000EA020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000EF020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FB020000FB020000FC020000FD020000FD020000FE020000FE020000FF020000000300000003000001030000020300000203000003030000040300000403000005030000050300000603000007030000070300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F030000100300001003000011030000110300001203000013030000130300001403000015030000150300001603000016030000170300001803000018030000190300001A0300001A0300001B0300001B0300001C0300001D0300001D0300001E0300001E0300001F03000020030000200300002103000021030000220300002303000023030000240300002503000025030000260300002603000027030000280300002803000029030000290300002A0300002B0300002B0300002C0300002C0300002D0300002E0300002E0300002F0300002F03000030030000310300003103000032030000320300003303000034030000340300003503000035030000360300003603000037030000380300003803000039030000390300003A0300003B0300003B0300003C0300003C0300003D0300003E0300003E0300003F0300003F03000040030000400300004103000042030000420300004303000043030000440300004403000045030000460300004603000047030000470300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004D0300004D0300004E0300004E0300004F0300004F03000050030000510300005103000052030000520300005303000053030000540300005503000055030000560300005603000057030000570300005803000058030000590300005A0300005A0300005B0300005B0300005C0300005C0300005D0300005E0300005E0300005F0300005F0300006003000060030000610300006103000062030000630300006303000064030000640300006503000065030000660300006603000067030000670300006803000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000072030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007B0300007B0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F030000800300008003000081030000810300008203000083030000830300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F030000900300009003000091030000910300009203000092030000930300009303000094030000940300009503000095030000960300009603000097030000970300009803000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CA030000CB030000CB030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D5030000D5030000D6030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E6030000E6030000E7030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EE030000EF030000EF030000F0030000F0030000F1030000F1030000F2030000F2030000F3030000F3030000F4030000F4030000F4030000F5030000F5030000F6030000F6030000F7030000F7030000F8030000F8030000F9030000F9030000FA030000FA030000FA030000FB030000FB030000FC030000FC030000FD030000FD030000FE030000FE030000FF030000FF030000000000002800000037000000430000004C000000540000005B00000062000000680000006E00000073000000780000007D00000082000000860000008A0000008E00000092000000960000009A0000009E000000A1000000A5000000A8000000AB000000AE000000B2000000B5000000B8000000BB000000BE000000C0000000C3000000C6000000C9000000CB000000CE000000D0000000D3000000D6000000D8000000DA000000DD000000DF000000E2000000E4000000E6000000E8000000EB000000ED000000EF000000F1000000F3000000F5000000F8000000FA000000FC000000FE00000000010000020100000401000006010000080100000A0100000B0100000D0100000F01000011010000130100001501000017010000180100001A0100001C0100001E0100001F01000021010000230100002501000026010000280100002A0100002B0100002D0100002F0100003001000032010000330100003501000037010000380100003A0100003B0100003D0100003E010000400100004201000043010000450100004601000048010000490100004B0100004C0100004D0100004F010000500100005201000053010000550100005601000057010000590100005A0100005C0100005D0100005E01000060010000610100006301000064010000650100006701000068010000690100006B0100006C0100006D0100006E01000070010000710100007201000074010000750100007601000077010000790100007A0100007B0100007C0100007E0100007F01000080010000810100008301000084010000850100008601000087010000890100008A0100008B0100008C0100008D0100008F0100009001000091010000920100009301000094010000960100009701000098010000990100009A0100009B0100009C0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FC010000FD010000FE010000FF0100000002000001020000020200000302000003020000040200000502000006020000070200000802000009020000090200000A0200000B0200000C0200000D0200000E0200000E0200000F0200001002000011020000120200001302000013020000140200001502000016020000170200001802000018020000190200001A0200001B0200001C0200001D0200001D0200001E0200001F020000200200002102000021020000220200002302000024020000250200002502000026020000270200002802000029020000290200002A0200002B0200002C0200002D0200002D0200002E0200002F020000300200003102000031020000320200003302000034020000340200003502000036020000370200003802000038020000390200003A0200003B0200003B0200003C0200003D0200003E0200003E0200003F020000400200004102000041020000420200004302000044020000440200004502000046020000470200004702000048020000490200004A0200004A0200004B0200004C0200004D0200004D0200004E0200004F02000050020000500200005102000052020000520200005302000054020000550200005502000056020000570200005802000058020000590200005A0200005A0200005B0200005C0200005D0200005D0200005E0200005F0200005F02000060020000610200006202000062020000630200006402000064020000650200006602000066020000670200006802000069020000690200006A0200006B0200006B0200006C0200006D0200006D0200006E0200006F0200006F02000070020000710200007202000072020000730200007402000074020000750200007602000076020000770200007802000078020000790200007A0200007A0200007B0200007C0200007C0200007D0200007E0200007E0200007F0200008002000080020000810200008202000082020000830200008402000084020000850200008602000086020000870200008802000088020000890200008A0200008A0200008B0200008C0200008C0200008D0200008E0200008E0200008F0200008F0200009002000091020000910200009202000093020000930200009402000095020000950200009602000097020000970200009802000098020000990200009A0200009A0200009B0200009C0200009C0200009D0200009E0200009E0200009F0200009F020000A0020000A1020000A1020000A2020000A3020000A3020000A4020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000A9020000A9020000AA020000AB020000AB020000AC020000AD020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B1020000B2020000B3020000B3020000B4020000B4020000B5020000B6020000B6020000B7020000B7020000B8020000B9020000B9020000BA020000BA020000BB020000BC020000BC020000BD020000BD020000BE020000BF020000BF020000C0020000C0020000C1020000C2020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C6020000C7020000C8020000C8020000C9020000C9020000CA020000CA020000CB020000CC020000CC020000CD020000CD020000CE020000CF020000CF020000D0020000D0020000D1020000D1020000D2020000D3020000D3020000D4020000D4020000D5020000D5020000D6020000D7020000D7020000D8020000D8020000D9020000D9020000DA020000DB020000DB020000DC020000DC020000DD020000DD020000DE020000DF020000DF020000E0020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E4020000E5020000E5020000E6020000E6020000E7020000E8020000E8020000E9020000E9020000EA020000EA020000EB020000EB020000EC020000ED020000ED020000EE020000EE020000EF020000EF020000F0020000F0020000F1020000F1020000F2020000F3020000F3020000F4020000F4020000F5020000F5020000F6020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FB020000FB020000FC020000FC020000FD020000FD020000FE020000FF020000FF020000000300000003000001030000010300000203000002030000030300000303000004030000040300000503000005030000060300000703000007030000080300000803000009030000090300000A0300000A0300000B0300000B0300000C0300000C0300000D0300000D0300000E0300000E0300000F0300000F030000100300001103000011030000120300001203000013030000130300001403000014030000150300001503000016030000160300001703000017030000180300001803000019030000190300001A0300001A0300001B0300001B0300001C0300001C0300001D0300001D0300001E0300001E0300001F0300001F030000200300002003000021030000220300002203000023030000230300002403000024030000250300002503000026030000260300002703000027030000280300002803000029030000290300002A0300002A0300002B0300002B0300002C0300002C0300002D0300002D0300002E0300002E0300002F0300002F03000030030000300300003103000031030000320300003203000033030000330300003403000034030000350300003503000036030000360300003703000037030000380300003803000039030000390300003A0300003A0300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003E0300003F0300003F03000040030000400300004103000041030000420300004203000043030000430300004403000044030000450300004503000046030000460300004703000047030000480300004803000049030000490300004A0300004A0300004A0300004B0300004B0300004C0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000050030000510300005103000052030000520300005303000053030000540300005403000054030000550300005503000056030000560300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005C0300005C0300005C0300005D0300005D0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000630300006303000063030000640300006403000065030000650300006603000066030000670300006703000068030000680300006903000069030000690300006A0300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000072030000730300007303000073030000740300007403000075030000750300007603000076030000770300007703000078030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007C0300007C0300007D0300007D0300007E0300007E0300007F0300007F03000080030000800300008003000081030000810300008203000082030000830300008303000084030000840300008403000085030000850300008603000086030000870300008703000088030000880300008803000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F0300008F03000090030000900300009103000091030000920300009203000092030000930300009303000094030000940300009503000095030000960300009603000096030000970300009703000098030000980300009903000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A5030000A6030000A6030000A7030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AD030000AE030000AE030000AF030000000000002B0000003B00000047000000510000005A00000062000000690000006F000000750000007B00000081000000860000008B0000009000000094000000990000009D000000A1000000A5000000A9000000AD000000B0000000B4000000B7000000BB000000BE000000C2000000C5000000C8000000CB000000CE000000D1000000D4000000D7000000DA000000DD000000DF000000E2000000E5000000E7000000EA000000ED000000EF000000F2000000F4000000F7000000F9000000FB000000FE00000000010000020100000501000007010000090100000C0100000E01000010010000120100001401000016010000180100001A0100001D0100001F01000021010000230100002501000027010000290100002A0100002C0100002E01000030010000320100003401000036010000380100003A0100003B0100003D0100003F0100004101000043010000440100004601000048010000490100004B0100004D0100004F0100005001000052010000540100005501000057010000590100005A0100005C0100005D0100005F0100006101000062010000640100006501000067010000680100006A0100006C0100006D0100006F010000700100007201000073010000750100007601000078010000790100007A0100007C0100007D0100007F010000800100008201000083010000850100008601000087010000890100008A0100008B0100008D0100008E01000090010000910100009201000094010000950100009601000098010000990100009A0100009C0100009D0100009E010000A0010000A1010000A2010000A4010000A5010000A6010000A7010000A9010000AA010000AB010000AC010000AE010000AF010000B0010000B1010000B3010000B4010000B5010000B6010000B8010000B9010000BA010000BB010000BC010000BE010000BF010000C0010000C1010000C2010000C4010000C5010000C6010000C7010000C8010000C9010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F02000010020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F02000020020000210200002202000023020000240200002502000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F02000030020000310200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003A0200003B0200003C0200003D0200003E0200003F0200004002000041020000420200004202000043020000440200004502000046020000470200004802000048020000490200004A0200004B0200004C0200004D0200004E0200004F0200004F0200005002000051020000520200005302000054020000540200005502000056020000570200005802000059020000590200005A0200005B0200005C0200005D0200005E0200005E0200005F0200006002000061020000620200006302000063020000640200006502000066020000670200006802000068020000690200006A0200006B0200006C0200006C0200006D0200006E0200006F020000700200007002000071020000720200007302000074020000740200007502000076020000770200007802000078020000790200007A0200007B0200007B0200007C0200007D0200007E0200007F0200007F020000800200008102000082020000820200008302000084020000850200008602000086020000870200008802000089020000890200008A0200008B0200008C0200008C0200008D0200008E0200008F0200008F020000900200009102000092020000920200009302000094020000950200009502000096020000970200009802000098020000990200009A0200009B0200009B0200009C0200009D0200009E0200009E0200009F020000A0020000A1020000A1020000A2020000A3020000A3020000A4020000A5020000A6020000A6020000A7020000A8020000A8020000A9020000AA020000AB020000AB020000AC020000AD020000AE020000AE020000AF020000B0020000B0020000B1020000B2020000B3020000B3020000B4020000B5020000B5020000B6020000B7020000B7020000B8020000B9020000BA020000BA020000BB020000BC020000BC020000BD020000BE020000BE020000BF020000C0020000C1020000C1020000C2020000C3020000C3020000C4020000C5020000C5020000C6020000C7020000C7020000C8020000C9020000C9020000CA020000CB020000CB020000CC020000CD020000CE020000CE020000CF020000D0020000D0020000D1020000D2020000D2020000D3020000D4020000D4020000D5020000D6020000D6020000D7020000D8020000D8020000D9020000DA020000DA020000DB020000DC020000DC020000DD020000DE020000DE020000DF020000DF020000E0020000E1020000E1020000E2020000E3020000E3020000E4020000E5020000E5020000E6020000E7020000E7020000E8020000E9020000E9020000EA020000EB020000EB020000EC020000EC020000ED020000EE020000EE020000EF020000F0020000F0020000F1020000F2020000F2020000F3020000F4020000F4020000F5020000F5020000F6020000F7020000F7020000F8020000F9020000F9020000FA020000FA020000FB020000FC020000FC020000FD020000FE020000FE020000FF02000000030000000300000103000001030000020300000303000003030000040300000403000005030000060300000603000007030000080300000803000009030000090300000A0300000B0300000B0300000C0300000C0300000D0300000E0300000E0300000F03000010030000100300001103000011030000120300001303000013030000140300001403000015030000160300001603000017030000170300001803000019030000190300001A0300001A0300001B0300001C0300001C0300001D0300001D0300001E0300001F0300001F03000020030000200300002103000022030000220300002303000023030000240300002403000025030000260300002603000027030000270300002803000029030000290300002A0300002A0300002B0300002C0300002C0300002D0300002D0300002E0300002E0300002F0300003003000030030000310300003103000032030000330300003303000034030000340300003503000035030000360300003703000037030000380300003803000039030000390300003A0300003B0300003B0300003C0300003C0300003D0300003D0300003E0300003F0300003F0300004003000040030000410300004103000042030000420300004303000044030000440300004503000045030000460300004603000047030000480300004803000049030000490300004A0300004A0300004B0300004B0300004C0300004D0300004D0300004E0300004E0300004F0300004F0300005003000050030000510300005203000052030000530300005303000054030000540300005503000055030000560300005703000057030000580300005803000059030000590300005A0300005A0300005B0300005B0300005C0300005D0300005D0300005E0300005E0300005F0300005F030000600300006003000061030000610300006203000062030000630300006403000064030000650300006503000066030000660300006703000067030000680300006803000069030000690300006A0300006B0300006B0300006C0300006C0300006D0300006D0300006E0300006E0300006F0300006F030000700300007003000071030000710300007203000073030000730300007403000074030000750300007503000076030000760300007703000077030000780300007803000079030000790300007A0300007A0300007B0300007B0300007C0300007C0300007D0300007E0300007E0300007F0300007F03000080030000800300008103000081030000820300008203000083030000830300008403000084030000850300008503000086030000860300008703000087030000880300008803000089030000890300008A0300008A0300008B0300008B0300008C0300008C0300008D0300008D0300008E0300008E0300008F0300008F030000900300009103000091030000920300009203000093030000930300009403000094030000950300009503000096030000960300009703000097030000980300009803000099030000990300009A0300009A0300009B0300009B0300009C0300009C0300009D0300009D0300009E0300009E0300009F0300009F030000A0030000A0030000A1030000A1030000A2030000A2030000A3030000A3030000A4030000A4030000A5030000A5030000A6030000A6030000A6030000A7030000A7030000A8030000A8030000A9030000A9030000AA030000AA030000AB030000AB030000AC030000AC030000AD030000AD030000AE030000AE030000AF030000AF030000B0030000B0030000B1030000B1030000B2030000B2030000B3030000B3030000B4030000B4030000B5030000B5030000B6030000B6030000B7030000B7030000B8030000B8030000B9030000B9030000B9030000BA030000BA030000BB030000BB030000BC030000BC030000BD030000BD030000BE030000BE030000BF030000BF030000C0030000C0030000C1030000C1030000C2030000C2030000C3030000C3030000C4030000C4030000C4030000C5030000C5030000C6030000C6030000C7030000C7030000C8030000C8030000C9030000C9030000CA030000CA030000CB030000CB030000CC030000CC030000CC030000CD030000CD030000CE030000CE030000CF030000CF030000D0030000D0030000D1030000D1030000D2030000D2030000D3030000D3030000D4030000D4030000D4030000D5030000D5030000D6030000D6030000D7030000D7030000D8030000D8030000D9030000D9030000DA030000DA030000DA030000DB030000DB030000DC030000DC030000DD030000DD030000DE030000DE030000DF030000DF030000E0030000E0030000E0030000E1030000E1030000E2030000E2030000E3030000E3030000E4030000E4030000E5030000E5030000E5030000E6030000E6030000E7030000E7030000E8030000E8030000E9030000E9030000EA030000EA030000EA030000EB030000EB030000EC030000EC030000ED030000ED030000EE030000EE030000EF030000EF030000EF030000F0030000F0030000F1030000F1030000F2030000F2030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000005000000050000000500000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ <Mode ModeID="2" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="sRGB" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" ColorGamut="srgb" DynamicRange="sdr" PictureQuality="standard">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="3" Disable="true" DataSize="117928">00000000000000000000000031130000000000000000000000000000000000000000000000000000000100000000000000000000000100000000000000000000000200000000000000000000000200000000000000000000000300000000000000000000000300000000000000000000000400000000000000000000000400000000000000000000000500000000000000000000000500000000000000000000000600000000000000000000000600000000000000000000000700000000000000000000000700000000000000000000000800000000000000000000000800000000000000000000000900000000000000000000000900000000000000000000000A00000000000000000000000A00000000000000000000000B00000000000000000000000B00000000000000000000000C00000000000000000000000C00000000000000000000000D00000000000000000000000D00000000000000000000000E00000000000000000000000E00000000000000000000000F00000000000000000000000F00000000000000000000001000000000000000000000001000000000000000000000000000000001000000000000000000000001000000000000000100000001000000000000000100000001000000000000000200000001000000000000000200000001000000000000000300000001000000000000000300000001000000000000000400000001000000000000000400000001000000000000000500000001000000000000000500000001000000000000000600000001000000000000000600000001000000000000000700000001000000000000000700000001000000000000000800000001000000000000000800000001000000000000000900000001000000000000000900000001000000000000000A00000001000000000000000A00000001000000000000000B00000001000000000000000B00000001000000000000000C00000001000000000000000C00000001000000000000000D00000001000000000000000D00000001000000000000000E00000001000000000000000E00000001000000000000000F00000001000000000000000F00000001000000000000001000000001000000000000001000000001000000000000000000000002000000000000000000000002000000000000000100000002000000000000000100000002000000000000000200000002000000000000000200000002000000000000000300000002000000000000000300000002000000000000000400000002000000000000000400000002000000000000000500000002000000000000000500000002000000000000000600000002000000000000000600000002000000000000000700000002000000000000000700000002000000000000000800000002000000000000000800000002000000000000000900000002000000000000000900000002000000000000000A00000002000000000000000A00000002000000000000000B00000002000000000000000B00000002000000000000000C00000002000000000000000C00000002000000000000000D00000002000000000000000D00000002000000000000000E00000002000000000000000E00000002000000000000000F00000002000000000000000F00000002000000000000001000000002000000000000001000000002000000000000000000000003000000000000000000000003000000000000000100000003000000000000000100000003000000000000000200000003000000000000000200000003000000000000000300000003000000000000000300000003000000000000000400000003000000000000000400000003000000000000000500000003000000000000000500000003000000000000000600000003000000000000000600000003000000000000000700000003000000000000000700000003000000000000000800000003000000000000000800000003000000000000000900000003000000000000000900000003000000000000000A00000003000000000000000A00000003000000000000000B00000003000000000000000B00000003000000000000000C00000003000000000000000C00000003000000000000000D00000003000000000000000D00000003000000000000000E00000003000000000000000E00000003000000000000000F00000003000000000000000F00000003000000000000001000000003000000000000001000000003000000000000000000000004000000000000000000000004000000000000000100000004000000000000000100000004000000000000000200000004000000000000000200000004000000000000000300000004000000000000000300000004000000000000000400000004000000000000000400000004000000000000000500000004000000000000000500000004000000000000000600000004000000000000000600000004000000000000000700000004000000000000000700000004000000000000000800000004000000000000000800000004000000000000000900000004000000000000000900000004000000000000000A00000004000000000000000A00000004000000000000000B00000004000000000000000B00000004000000000000000C00000004000000000000000C00000004000000000000000D00000004000000000000000D00000004000000000000000E00000004000000000000000E00000004000000000000000F00000004000000000000000F00000004000000000000001000000004000000000000001000000004000000000000000000000005000000000000000000000005000000000000000100000005000000000000000100000005000000000000000200000005000000000000000200000005000000000000000300000005000000000000000300000005000000000000000400000005000000000000000400000005000000000000000500000005000000000000000500000005000000000000000600000005000000000000000600000005000000000000000700000005000000000000000700000005000000000000000800000005000000000000000800000005000000000000000900000005000000000000000900000005000000000000000A00000005000000000000000A00000005000000000000000B00000005000000000000000B00000005000000000000000C00000005000000000000000C00000005000000000000000D00000005000000000000000D00000005000000000000000E00000005000000000000000E00000005000000000000000F00000005000000000000000F00000005000000000000001000000005000000000000001000000005000000000000000000000006000000000000000000000006000000000000000100000006000000000000000100000006000000000000000200000006000000000000000200000006000000000000000300000006000000000000000300000006000000000000000400000006000000000000000400000006000000000000000500000006000000000000000500000006000000000000000600000006000000000000000600000006000000000000000700000006000000000000000700000006000000000000000800000006000000000000000800000006000000000000000900000006000000000000000900000006000000000000000A00000006000000000000000A00000006000000000000000B00000006000000000000000B00000006000000000000000C00000006000000000000000C00000006000000000000000D00000006000000000000000D00000006000000000000000E00000006000000000000000E00000006000000000000000F00000006000000000000000F00000006000000000000001000000006000000000000001000000006000000000000000000000007000000000000000000000007000000000000000100000007000000000000000100000007000000000000000200000007000000000000000200000007000000000000000300000007000000000000000300000007000000000000000400000007000000000000000400000007000000000000000500000007000000000000000500000007000000000000000600000007000000000000000600000007000000000000000700000007000000000000000700000007000000000000000800000007000000000000000800000007000000000000000900000007000000000000000900000007000000000000000A00000007000000000000000A00000007000000000000000B00000007000000000000000B00000007000000000000000C00000007000000000000000C00000007000000000000000D00000007000000000000000D00000007000000000000000E00000007000000000000000E00000007000000000000000F00000007000000000000000F00000007000000000000001000000007000000000000001000000007000000000000000000000008000000000000000000000008000000000000000100000008000000000000000100000008000000000000000200000008000000000000000200000008000000000000000300000008000000000000000300000008000000000000000400000008000000000000000400000008000000000000000500000008000000000000000500000008000000000000000600000008000000000000000600000008000000000000000700000008000000000000000700000008000000000000000800000008000000000000000800000008000000000000000900000008000000000000000900000008000000000000000A00000008000000000000000A00000008000000000000000B00000008000000000000000B00000008000000000000000C00000008000000000000000C00000008000000000000000D00000008000000000000000D00000008000000000000000E00000008000000000000000E00000008000000000000000F00000008000000000000000F00000008000000000000001000000008000000000000001000000008000000000000000000000009000000000000000000000009000000000000000100000009000000000000000100000009000000000000000200000009000000000000000200000009000000000000000300000009000000000000000300000009000000000000000400000009000000000000000400000009000000000000000500000009000000000000000500000009000000000000000600000009000000000000000600000009000000000000000700000009000000000000000700000009000000000000000800000009000000000000000800000009000000000000000900000009000000000000000900000009000000000000000A00000009000000000000000A00000009000000000000000B00000009000000000000000B00000009000000000000000C00000009000000000000000C00000009000000000000000D00000009000000000000000D00000009000000000000000E00000009000000000000000E00000009000000000000000F00000009000000000000000F0000000900000000000000100000000900000000000000100000000900000000000000000000000A00000000000000000000000A00000000000000010000000A00000000000000010000000A00000000000000020000000A00000000000000020000000A00000000000000030000000A00000000000000030000000A00000000000000040000000A00000000000000040000000A00000000000000050000000A00000000000000050000000A00000000000000060000000A00000000000000060000000A00000000000000070000000A00000000000000070000000A00000000000000080000000A00000000000000080000000A00000000000000090000000A00000000000000090000000A000000000000000A0000000A000000000000000A0000000A000000000000000B0000000A000000000000000B0000000A000000000000000C0000000A000000000000000C0000000A000000000000000D0000000A000000000000000D0000000A000000000000000E0000000A000000000000000E0000000A000000000000000F0000000A000000000000000F0000000A00000000000000100000000A00000000000000100000000A00000000000000000000000B00000000000000000000000B00000000000000010000000B00000000000000010000000B00000000000000020000000B00000000000000020000000B00000000000000030000000B00000000000000030000000B00000000000000040000000B00000000000000040000000B00000000000000050000000B00000000000000050000000B00000000000000060000000B00000000000000060000000B00000000000000070000000B00000000000000070000000B00000000000000080000000B00000000000000080000000B00000000000000090000000B00000000000000090000000B000000000000000A0000000B000000000000000A0000000B000000000000000B0000000B000000000000000B0000000B000000000000000C0000000B000000000000000C0000000B000000000000000D0000000B000000000000000D0000000B000000000000000E0000000B000000000000000E0000000B000000000000000F0000000B000000000000000F0000000B00000000000000100000000B00000000000000100000000B00000000000000000000000C00000000000000000000000C00000000000000010000000C00000000000000010000000C00000000000000020000000C00000000000000020000000C00000000000000030000000C00000000000000030000000C00000000000000040000000C00000000000000040000000C00000000000000050000000C00000000000000050000000C00000000000000060000000C00000000000000060000000C00000000000000070000000C00000000000000070000000C00000000000000080000000C00000000000000080000000C00000000000000090000000C00000000000000090000000C000000000000000A0000000C000000000000000A0000000C000000000000000B0000000C000000000000000B0000000C000000000000000C0000000C000000000000000C0000000C000000000000000D0000000C000000000000000D0000000C000000000000000E0000000C000000000000000E0000000C000000000000000F0000000C000000000000000F0000000C00000000000000100000000C00000000000000100000000C00000000000000000000000D00000000000000000000000D00000000000000010000000D00000000000000010000000D00000000000000020000000D00000000000000020000000D00000000000000030000000D00000000000000030000000D00000000000000040000000D00000000000000040000000D00000000000000050000000D00000000000000050000000D00000000000000060000000D00000000000000060000000D00000000000000070000000D00000000000000070000000D00000000000000080000000D00000000000000080000000D00000000000000090000000D00000000000000090000000D000000000000000A0000000D000000000000000A0000000D000000000000000B0000000D000000000000000B0000000D000000000000000C0000000D000000000000000C0000000D000000000000000D0000000D000000000000000D0000000D000000000000000E0000000D000000000000000E0000000D000000000000000F0000000D000000000000000F0000000D00000000000000100000000D00000000000000100000000D00000000000000000000000E00000000000000000000000E00000000000000010000000E00000000000000010000000E00000000000000020000000E00000000000000020000000E00000000000000030000000E00000000000000030000000E00000000000000040000000E00000000000000040000000E00000000000000050000000E00000000000000050000000E00000000000000060000000E00000000000000060000000E00000000000000070000000E00000000000000070000000E00000000000000080000000E00000000000000080000000E00000000000000090000000E00000000000000090000000E000000000000000A0000000E000000000000000A0000000E000000000000000B0000000E000000000000000B0000000E000000000000000C0000000E000000000000000C0000000E000000000000000D0000000E000000000000000D0000000E000000000000000E0000000E000000000000000E0000000E000000000000000F0000000E000000000000000F0000000E00000000000000100000000E00000000000000100000000E00000000000000000000000F00000000000000000000000F00000000000000010000000F00000000000000010000000F00000000000000020000000F00000000000000020000000F00000000000000030000000F00000000000000030000000F00000000000000040000000F00000000000000040000000F00000000000000050000000F00000000000000050000000F00000000000000060000000F00000000000000060000000F00000000000000070000000F00000000000000070000000F00000000000000080000000F00000000000000080000000F00000000000000090000000F00000000000000090000000F000000000000000A0000000F000000000000000A0000000F000000000000000B0000000F000000000000000B0000000F000000000000000C0000000F000000000000000C0000000F000000000000000D0000000F000000000000000D0000000F000000000000000E0000000F000000000000000E0000000F000000000000000F0000000F000000000000000F0000000F00000000000000100000000F00000000000000100000000F000000000000000000000010000000000000000000000010000000000000000100000010000000000000000100000010000000000000000200000010000000000000000200000010000000000000000300000010000000000000000300000010000000000000000400000010000000000000000400000010000000000000000500000010000000000000000500000010000000000000000600000010000000000000000600000010000000000000000700000010000000000000000700000010000000000000000800000010000000000000000800000010000000000000000900000010000000000000000900000010000000000000000A00000010000000000000000A00000010000000000000000B00000010000000000000000B00000010000000000000000C00000010000000000000000C00000010000000000000000D00000010000000000000000D00000010000000000000000E00000010000000000000000E00000010000000000000000F00000010000000000000000F00000010000000000000001000000010000000000000001000000010000000000000000000000000000000010000000000000000000000010000000100000000000000010000000100000000000000010000000200000000000000010000000200000000000000010000000300000000000000010000000300000000000000010000000400000000000000010000000400000000000000010000000500000000000000010000000500000000000000010000000600000000000000010000000600000000000000010000000700000000000000010000000700000000000000010000000800000000000000010000000800000000000000010000000900000000000000010000000900000000000000010000000A00000000000000010000000A00000000000000010000000B00000000000000010000000B00000000000000010000000C00000000000000010000000C00000000000000010000000D00000000000000010000000D00000000000000010000000E00000000000000010000000E00000000000000010000000F00000000000000010000000F00000000000000010000001000000000000000010000001000000000000000010000000000000001000000010000000000000001000000010000000100000001000000010000000100000001000000010000000200000001000000010000000200000001000000010000000300000001000000010000000300000001000000010000000400000001000000010000000400000001000000010000000500000001000000010000000500000001000000010000000600000001000000010000000600000001000000010000000700000001000000010000000700000001000000010000000800000001000000010000000800000001000000010000000900000001000000010000000900000001000000010000000A00000001000000010000000A00000001000000010000000B00000001000000010000000B00000001000000010000000C00000001000000010000000C00000001000000010000000D00000001000000010000000D00000001000000010000000E00000001000000010000000E00000001000000010000000F00000001000000010000000F00000001000000010000001000000001000000010000001000000001000000010000000000000002000000010000000000000002000000010000000100000002000000010000000100000002000000010000000200000002000000010000000200000002000000010000000300000002000000010000000300000002000000010000000400000002000000010000000400000002000000010000000500000002000000010000000500000002000000010000000600000002000000010000000600000002000000010000000700000002000000010000000700000002000000010000000800000002000000010000000800000002000000010000000900000002000000010000000900000002000000010000000A00000002000000010000000A00000002000000010000000B00000002000000010000000B00000002000000010000000C00000002000000010000000C00000002000000010000000D00000002000000010000000D00000002000000010000000E00000002000000010000000E00000002000000010000000F00000002000000010000000F00000002000000010000001000000002000000010000001000000002000000010000000000000003000000010000000000000003000000010000000100000003000000010000000100000003000000010000000200000003000000010000000200000003000000010000000300000003000000010000000300000003000000010000000400000003000000010000000400000003000000010000000500000003000000010000000500000003000000010000000600000003000000010000000600000003000000010000000700000003000000010000000700000003000000010000000800000003000000010000000800000003000000010000000900000003000000010000000900000003000000010000000A00000003000000010000000A00000003000000010000000B00000003000000010000000B00000003000000010000000C00000003000000010000000C00000003000000010000000D00000003000000010000000D00000003000000010000000E00000003000000010000000E00000003000000010000000F00000003000000010000000F00000003000000010000001000000003000000010000001000000003000000010000000000000004000000010000000000000004000000010000000100000004000000010000000100000004000000010000000200000004000000010000000200000004000000010000000300000004000000010000000300000004000000010000000400000004000000010000000400000004000000010000000500000004000000010000000500000004000000010000000600000004000000010000000600000004000000010000000700000004000000010000000700000004000000010000000800000004000000010000000800000004000000010000000900000004000000010000000900000004000000010000000A00000004000000010000000A00000004000000010000000B00000004000000010000000B00000004000000010000000C00000004000000010000000C00000004000000010000000D00000004000000010000000D00000004000000010000000E00000004000000010000000E00000004000000010000000F00000004000000010000000F00000004000000010000001000000004000000010000001000000004000000010000000000000005000000010000000000000005000000010000000100000005000000010000000100000005000000010000000200000005000000010000000200000005000000010000000300000005000000010000000300000005000000010000000400000005000000010000000400000005000000010000000500000005000000010000000500000005000000010000000600000005000000010000000600000005000000010000000700000005000000010000000700000005000000010000000800000005000000010000000800000005000000010000000900000005000000010000000900000005000000010000000A00000005000000010000000A00000005000000010000000B00000005000000010000000B00000005000000010000000C00000005000000010000000C00000005000000010000000D00000005000000010000000D00000005000000010000000E00000005000000010000000E00000005000000010000000F00000005000000010000000F00000005000000010000001000000005000000010000001000000005000000010000000000000006000000010000000000000006000000010000000100000006000000010000000100000006000000010000000200000006000000010000000200000006000000010000000300000006000000010000000300000006000000010000000400000006000000010000000400000006000000010000000500000006000000010000000500000006000000010000000600000006000000010000000600000006000000010000000700000006000000010000000700000006000000010000000800000006000000010000000800000006000000010000000900000006000000010000000900000006000000010000000A00000006000000010000000A00000006000000010000000B00000006000000010000000B00000006000000010000000C00000006000000010000000C00000006000000010000000D00000006000000010000000D00000006000000010000000E00000006000000010000000E00000006000000010000000F00000006000000010000000F00000006000000010000001000000006000000010000001000000006000000010000000000000007000000010000000000000007000000010000000100000007000000010000000100000007000000010000000200000007000000010000000200000007000000010000000300000007000000010000000300000007000000010000000400000007000000010000000400000007000000010000000500000007000000010000000500000007000000010000000600000007000000010000000600000007000000010000000700000007000000010000000700000007000000010000000800000007000000010000000800000007000000010000000900000007000000010000000900000007000000010000000A00000007000000010000000A00000007000000010000000B00000007000000010000000B00000007000000010000000C00000007000000010000000C00000007000000010000000D00000007000000010000000D00000007000000010000000E00000007000000010000000E00000007000000010000000F00000007000000010000000F00000007000000010000001000000007000000010000001000000007000000010000000000000008000000010000000000000008000000010000000100000008000000010000000100000008000000010000000200000008000000010000000200000008000000010000000300000008000000010000000300000008000000010000000400000008000000010000000400000008000000010000000500000008000000010000000500000008000000010000000600000008000000010000000600000008000000010000000700000008000000010000000700000008000000010000000800000008000000010000000800000008000000010000000900000008000000010000000900000008000000010000000A00000008000000010000000A00000008000000010000000B00000008000000010000000B00000008000000010000000C00000008000000010000000C00000008000000010000000D00000008000000010000000D00000008000000010000000E00000008000000010000000E00000008000000010000000F00000008000000010000000F00000008000000010000001000000008000000010000001000000008000000010000000000000009000000010000000000000009000000010000000100000009000000010000000100000009000000010000000200000009000000010000000200000009000000010000000300000009000000010000000300000009000000010000000400000009000000010000000400000009000000010000000500000009000000010000000500000009000000010000000600000009000000010000000600000009000000010000000700000009000000010000000700000009000000010000000800000009000000010000000800000009000000010000000900000009000000010000000900000009000000010000000A00000009000000010000000A00000009000000010000000B00000009000000010000000B00000009000000010000000C00000009000000010000000C00000009000000010000000D00000009000000010000000D00000009000000010000000E00000009000000010000000E00000009000000010000000F00000009000000010000000F0000000900000001000000100000000900000001000000100000000900000001000000000000000A00000001000000000000000A00000001000000010000000A00000001000000010000000A00000001000000020000000A00000001000000020000000A00000001000000030000000A00000001000000030000000A00000001000000040000000A00000001000000040000000A00000001000000050000000A00000001000000050000000A00000001000000060000000A00000001000000060000000A00000001000000070000000A00000001000000070000000A00000001000000080000000A00000001000000080000000A00000001000000090000000A00000001000000090000000A000000010000000A0000000A000000010000000A0000000A000000010000000B0000000A000000010000000B0000000A000000010000000C0000000A000000010000000C0000000A000000010000000D0000000A000000010000000D0000000A000000010000000E0000000A000000010000000E0000000A000000010000000F0000000A000000010000000F0000000A00000001000000100000000A00000001000000100000000A00000001000000000000000B00000001000000000000000B00000001000000010000000B00000001000000010000000B00000001000000020000000B00000001000000020000000B00000001000000030000000B00000001000000030000000B00000001000000040000000B00000001000000040000000B00000001000000050000000B00000001000000050000000B00000001000000060000000B00000001000000060000000B00000001000000070000000B00000001000000070000000B00000001000000080000000B00000001000000080000000B00000001000000090000000B00000001000000090000000B000000010000000A0000000B000000010000000A0000000B000000010000000B0000000B000000010000000B0000000B000000010000000C0000000B000000010000000C0000000B000000010000000D0000000B000000010000000D0000000B000000010000000E0000000B000000010000000E0000000B000000010000000F0000000B000000010000000F0000000B00000001000000100000000B00000001000000100000000B00000001000000000000000C00000001000000000000000C00000001000000010000000C00000001000000010000000C00000001000000020000000C00000001000000020000000C00000001000000030000000C00000001000000030000000C00000001000000040000000C00000001000000040000000C00000001000000050000000C00000001000000050000000C00000001000000060000000C00000001000000060000000C00000001000000070000000C00000001000000070000000C00000001000000080000000C00000001000000080000000C00000001000000090000000C00000001000000090000000C000000010000000A0000000C000000010000000A0000000C000000010000000B0000000C000000010000000B0000000C000000010000000C0000000C000000010000000C0000000C000000010000000D0000000C000000010000000D0000000C000000010000000E0000000C000000010000000E0000000C000000010000000F0000000C000000010000000F0000000C00000001000000100000000C00000001000000100000000C00000001000000000000000D00000001000000000000000D00000001000000010000000D00000001000000010000000D00000001000000020000000D00000001000000020000000D00000001000000030000000D00000001000000030000000D00000001000000040000000D00000001000000040000000D00000001000000050000000D00000001000000050000000D00000001000000060000000D00000001000000060000000D00000001000000070000000D00000001000000070000000D00000001000000080000000D00000001000000080000000D00000001000000090000000D00000001000000090000000D000000010000000A0000000D000000010000000A0000000D000000010000000B0000000D000000010000000B0000000D000000010000000C0000000D000000010000000C0000000D000000010000000D0000000D000000010000000D0000000D000000010000000E0000000D000000010000000E0000000D000000010000000F0000000D000000010000000F0000000D00000001000000100000000D00000001000000100000000D00000001000000000000000E00000001000000000000000E00000001000000010000000E00000001000000010000000E00000001000000020000000E00000001000000020000000E00000001000000030000000E00000001000000030000000E00000001000000040000000E00000001000000040000000E00000001000000050000000E00000001000000050000000E00000001000000060000000E00000001000000060000000E00000001000000070000000E00000001000000070000000E00000001000000080000000E00000001000000080000000E00000001000000090000000E00000001000000090000000E000000010000000A0000000E000000010000000A0000000E000000010000000B0000000E000000010000000B0000000E000000010000000C0000000E000000010000000C0000000E000000010000000D0000000E000000010000000D0000000E000000010000000E0000000E000000010000000E0000000E000000010000000F0000000E000000010000000F0000000E00000001000000100000000E00000001000000100000000E00000001000000000000000F00000001000000000000000F00000001000000010000000F00000001000000010000000F00000001000000020000000F00000001000000020000000F00000001000000030000000F00000001000000030000000F00000001000000040000000F00000001000000040000000F00000001000000050000000F00000001000000050000000F00000001000000060000000F00000001000000060000000F00000001000000070000000F00000001000000070000000F00000001000000080000000F00000001000000080000000F00000001000000090000000F00000001000000090000000F000000010000000A0000000F000000010000000A0000000F000000010000000B0000000F000000010000000B0000000F000000010000000C0000000F000000010000000C0000000F000000010000000D0000000F000000010000000D0000000F000000010000000E0000000F000000010000000E0000000F000000010000000F0000000F000000010000000F0000000F00000001000000100000000F00000001000000100000000F000000010000000000000010000000010000000000000010000000010000000100000010000000010000000100000010000000010000000200000010000000010000000200000010000000010000000300000010000000010000000300000010000000010000000400000010000000010000000400000010000000010000000500000010000000010000000500000010000000010000000600000010000000010000000600000010000000010000000700000010000000010000000700000010000000010000000800000010000000010000000800000010000000010000000900000010000000010000000900000010000000010000000A00000010000000010000000A00000010000000010000000B00000010000000010000000B00000010000000010000000C00000010000000010000000C00000010000000010000000D00000010000000010000000D00000010000000010000000E00000010000000010000000E00000010000000010000000F00000010000000010000000F00000010000000010000001000000010000000010000001000000010000000010000000000000000000000020000000000000000000000020000000100000000000000020000000100000000000000020000000200000000000000020000000200000000000000020000000300000000000000020000000300000000000000020000000400000000000000020000000400000000000000020000000500000000000000020000000500000000000000020000000600000000000000020000000600000000000000020000000700000000000000020000000700000000000000020000000800000000000000020000000800000000000000020000000900000000000000020000000900000000000000020000000A00000000000000020000000A00000000000000020000000B00000000000000020000000B00000000000000020000000C00000000000000020000000C00000000000000020000000D00000000000000020000000D00000000000000020000000E00000000000000020000000E00000000000000020000000F00000000000000020000000F00000000000000020000001000000000000000020000001000000000000000020000000000000001000000020000000000000001000000020000000100000001000000020000000100000001000000020000000200000001000000020000000200000001000000020000000300000001000000020000000300000001000000020000000400000001000000020000000400000001000000020000000500000001000000020000000500000001000000020000000600000001000000020000000600000001000000020000000700000001000000020000000700000001000000020000000800000001000000020000000800000001000000020000000900000001000000020000000900000001000000020000000A00000001000000020000000A00000001000000020000000B00000001000000020000000B00000001000000020000000C00000001000000020000000C00000001000000020000000D00000001000000020000000D00000001000000020000000E00000001000000020000000E00000001000000020000000F00000001000000020000000F00000001000000020000001000000001000000020000001000000001000000020000000000000002000000020000000000000002000000020000000100000002000000020000000100000002000000020000000200000002000000020000000200000002000000020000000300000002000000020000000300000002000000020000000400000002000000020000000400000002000000020000000500000002000000020000000500000002000000020000000600000002000000020000000600000002000000020000000700000002000000020000000700000002000000020000000800000002000000020000000800000002000000020000000900000002000000020000000900000002000000020000000A00000002000000020000000A00000002000000020000000B00000002000000020000000B00000002000000020000000C00000002000000020000000C00000002000000020000000D00000002000000020000000D00000002000000020000000E00000002000000020000000E00000002000000020000000F00000002000000020000000F00000002000000020000001000000002000000020000001000000002000000020000000000000003000000020000000000000003000000020000000100000003000000020000000100000003000000020000000200000003000000020000000200000003000000020000000300000003000000020000000300000003000000020000000400000003000000020000000400000003000000020000000500000003000000020000000500000003000000020000000600000003000000020000000600000003000000020000000700000003000000020000000700000003000000020000000800000003000000020000000800000003000000020000000900000003000000020000000900000003000000020000000A00000003000000020000000A00000003000000020000000B00000003000000020000000B00000003000000020000000C00000003000000020000000C00000003000000020000000D00000003000000020000000D00000003000000020000000E00000003000000020000000E00000003000000020000000F00000003000000020000000F00000003000000020000001000000003000000020000001000000003000000020000000000000004000000020000000000000004000000020000000100000004000000020000000100000004000000020000000200000004000000020000000200000004000000020000000300000004000000020000000300000004000000020000000400000004000000020000000400000004000000020000000500000004000000020000000500000004000000020000000600000004000000020000000600000004000000020000000700000004000000020000000700000004000000020000000800000004000000020000000800000004000000020000000900000004000000020000000900000004000000020000000A00000004000000020000000A00000004000000020000000B00000004000000020000000B00000004000000020000000C00000004000000020000000C00000004000000020000000D00000004000000020000000D00000004000000020000000E00000004000000020000000E00000004000000020000000F00000004000000020000000F00000004000000020000001000000004000000020000001000000004000000020000000000000005000000020000000000000005000000020000000100000005000000020000000100000005000000020000000200000005000000020000000200000005000000020000000300000005000000020000000300000005000000020000000400000005000000020000000400000005000000020000000500000005000000020000000500000005000000020000000600000005000000020000000600000005000000020000000700000005000000020000000700000005000000020000000800000005000000020000000800000005000000020000000900000005000000020000000900000005000000020000000A00000005000000020000000A00000005000000020000000B00000005000000020000000B00000005000000020000000C00000005000000020000000C00000005000000020000000D00000005000000020000000D00000005000000020000000E00000005000000020000000E00000005000000020000000F00000005000000020000000F00000005000000020000001000000005000000020000001000000005000000020000000000000006000000020000000000000006000000020000000100000006000000020000000100000006000000020000000200000006000000020000000200000006000000020000000300000006000000020000000300000006000000020000000400000006000000020000000400000006000000020000000500000006000000020000000500000006000000020000000600000006000000020000000600000006000000020000000700000006000000020000000700000006000000020000000800000006000000020000000800000006000000020000000900000006000000020000000900000006000000020000000A00000006000000020000000A00000006000000020000000B00000006000000020000000B00000006000000020000000C00000006000000020000000C00000006000000020000000D00000006000000020000000D00000006000000020000000E00000006000000020000000E00000006000000020000000F00000006000000020000000F00000006000000020000001000000006000000020000001000000006000000020000000000000007000000020000000000000007000000020000000100000007000000020000000100000007000000020000000200000007000000020000000200000007000000020000000300000007000000020000000300000007000000020000000400000007000000020000000400000007000000020000000500000007000000020000000500000007000000020000000600000007000000020000000600000007000000020000000700000007000000020000000700000007000000020000000800000007000000020000000800000007000000020000000900000007000000020000000900000007000000020000000A00000007000000020000000A00000007000000020000000B00000007000000020000000B00000007000000020000000C00000007000000020000000C00000007000000020000000D00000007000000020000000D00000007000000020000000E00000007000000020000000E00000007000000020000000F00000007000000020000000F00000007000000020000001000000007000000020000001000000007000000020000000000000008000000020000000000000008000000020000000100000008000000020000000100000008000000020000000200000008000000020000000200000008000000020000000300000008000000020000000300000008000000020000000400000008000000020000000400000008000000020000000500000008000000020000000500000008000000020000000600000008000000020000000600000008000000020000000700000008000000020000000700000008000000020000000800000008000000020000000800000008000000020000000900000008000000020000000900000008000000020000000A00000008000000020000000A00000008000000020000000B00000008000000020000000B00000008000000020000000C00000008000000020000000C00000008000000020000000D00000008000000020000000D00000008000000020000000E00000008000000020000000E00000008000000020000000F00000008000000020000000F00000008000000020000001000000008000000020000001000000008000000020000000000000009000000020000000000000009000000020000000100000009000000020000000100000009000000020000000200000009000000020000000200000009000000020000000300000009000000020000000300000009000000020000000400000009000000020000000400000009000000020000000500000009000000020000000500000009000000020000000600000009000000020000000600000009000000020000000700000009000000020000000700000009000000020000000800000009000000020000000800000009000000020000000900000009000000020000000900000009000000020000000A00000009000000020000000A00000009000000020000000B00000009000000020000000B00000009000000020000000C00000009000000020000000C00000009000000020000000D00000009000000020000000D00000009000000020000000E00000009000000020000000E00000009000000020000000F00000009000000020000000F0000000900000002000000100000000900000002000000100000000900000002000000000000000A00000002000000000000000A00000002000000010000000A00000002000000010000000A00000002000000020000000A00000002000000020000000A00000002000000030000000A00000002000000030000000A00000002000000040000000A00000002000000040000000A00000002000000050000000A00000002000000050000000A00000002000000060000000A00000002000000060000000A00000002000000070000000A00000002000000070000000A00000002000000080000000A00000002000000080000000A00000002000000090000000A00000002000000090000000A000000020000000A0000000A000000020000000A0000000A000000020000000B0000000A000000020000000B0000000A000000020000000C0000000A000000020000000C0000000A000000020000000D0000000A000000020000000D0000000A000000020000000E0000000A000000020000000E0000000A000000020000000F0000000A000000020000000F0000000A00000002000000100000000A00000002000000100000000A00000002000000000000000B00000002000000000000000B00000002000000010000000B00000002000000010000000B00000002000000020000000B00000002000000020000000B00000002000000030000000B00000002000000030000000B00000002000000040000000B00000002000000040000000B00000002000000050000000B00000002000000050000000B00000002000000060000000B00000002000000060000000B00000002000000070000000B00000002000000070000000B00000002000000080000000B00000002000000080000000B00000002000000090000000B00000002000000090000000B000000020000000A0000000B000000020000000A0000000B000000020000000B0000000B000000020000000B0000000B000000020000000C0000000B000000020000000C0000000B000000020000000D0000000B000000020000000D0000000B000000020000000E0000000B000000020000000E0000000B000000020000000F0000000B000000020000000F0000000B00000002000000100000000B00000002000000100000000B00000002000000000000000C00000002000000000000000C00000002000000010000000C00000002000000010000000C00000002000000020000000C00000002000000020000000C00000002000000030000000C00000002000000030000000C00000002000000040000000C00000002000000040000000C00000002000000050000000C00000002000000050000000C00000002000000060000000C00000002000000060000000C00000002000000070000000C00000002000000070000000C00000002000000080000000C00000002000000080000000C00000002000000090000000C00000002000000090000000C000000020000000A0000000C000000020000000A0000000C000000020000000B0000000C000000020000000B0000000C000000020000000C0000000C000000020000000C0000000C000000020000000D0000000C000000020000000D0000000C000000020000000E0000000C000000020000000E0000000C000000020000000F0000000C000000020000000F0000000C00000002000000100000000C00000002000000100000000C00000002000000000000000D00000002000000000000000D00000002000000010000000D00000002000000010000000D00000002000000020000000D00000002000000020000000D00000002000000030000000D00000002000000030000000D00000002000000040000000D00000002000000040000000D00000002000000050000000D00000002000000050000000D00000002000000060000000D00000002000000060000000D00000002000000070000000D00000002000000070000000D00000002000000080000000D00000002000000080000000D00000002000000090000000D00000002000000090000000D000000020000000A0000000D000000020000000A0000000D000000020000000B0000000D000000020000000B0000000D000000020000000C0000000D000000020000000C0000000D000000020000000D0000000D000000020000000D0000000D000000020000000E0000000D000000020000000E0000000D000000020000000F0000000D000000020000000F0000000D00000002000000100000000D00000002000000100000000D00000002000000000000000E00000002000000000000000E00000002000000010000000E00000002000000010000000E00000002000000020000000E00000002000000020000000E00000002000000030000000E00000002000000030000000E00000002000000040000000E00000002000000040000000E00000002000000050000000E00000002000000050000000E00000002000000060000000E00000002000000060000000E00000002000000070000000E00000002000000070000000E00000002000000080000000E00000002000000080000000E00000002000000090000000E00000002000000090000000E000000020000000A0000000E000000020000000A0000000E000000020000000B0000000E000000020000000B0000000E000000020000000C0000000E000000020000000C0000000E000000020000000D0000000E000000020000000D0000000E000000020000000E0000000E000000020000000E0000000E000000020000000F0000000E000000020000000F0000000E00000002000000100000000E00000002000000100000000E00000002000000000000000F00000002000000000000000F00000002000000010000000F00000002000000010000000F00000002000000020000000F00000002000000020000000F00000002000000030000000F00000002000000030000000F00000002000000040000000F00000002000000040000000F00000002000000050000000F00000002000000050000000F00000002000000060000000F00000002000000060000000F00000002000000070000000F00000002000000070000000F00000002000000080000000F00000002000000080000000F00000002000000090000000F00000002000000090000000F000000020000000A0000000F000000020000000A0000000F000000020000000B0000000F000000020000000B0000000F000000020000000C0000000F000000020000000C0000000F000000020000000D0000000F000000020000000D0000000F000000020000000E0000000F000000020000000E0000000F000000020000000F0000000F000000020000000F0000000F00000002000000100000000F00000002000000100000000F000000020000000000000010000000020000000000000010000000020000000100000010000000020000000100000010000000020000000200000010000000020000000200000010000000020000000300000010000000020000000300000010000000020000000400000010000000020000000400000010000000020000000500000010000000020000000500000010000000020000000600000010000000020000000600000010000000020000000700000010000000020000000700000010000000020000000800000010000000020000000800000010000000020000000900000010000000020000000900000010000000020000000A00000010000000020000000A00000010000000020000000B00000010000000020000000B00000010000000020000000C00000010000000020000000C00000010000000020000000D00000010000000020000000D00000010000000020000000E00000010000000020000000E00000010000000020000000F00000010000000020000000F00000010000000020000001000000010000000020000001000000010000000020000000000000000000000030000000000000000000000030000000100000000000000030000000100000000000000030000000200000000000000030000000200000000000000030000000300000000000000030000000300000000000000030000000400000000000000030000000400000000000000030000000500000000000000030000000500000000000000030000000600000000000000030000000600000000000000030000000700000000000000030000000700000000000000030000000800000000000000030000000800000000000000030000000900000000000000030000000900000000000000030000000A00000000000000030000000A00000000000000030000000B00000000000000030000000B00000000000000030000000C00000000000000030000000C00000000000000030000000D00000000000000030000000D00000000000000030000000E00000000000000030000000E00000000000000030000000F00000000000000030000000F00000000000000030000001000000000000000030000001000000000000000030000000000000001000000030000000000000001000000030000000100000001000000030000000100000001000000030000000200000001000000030000000200000001000000030000000300000001000000030000000300000001000000030000000400000001000000030000000400000001000000030000000500000001000000030000000500000001000000030000000600000001000000030000000600000001000000030000000700000001000000030000000700000001000000030000000800000001000000030000000800000001000000030000000900000001000000030000000900000001000000030000000A00000001000000030000000A00000001000000030000000B00000001000000030000000B00000001000000030000000C00000001000000030000000C00000001000000030000000D00000001000000030000000D00000001000000030000000E00000001000000030000000E00000001000000030000000F00000001000000030000000F00000001000000030000001000000001000000030000001000000001000000030000000000000002000000030000000000000002000000030000000100000002000000030000000100000002000000030000000200000002000000030000000200000002000000030000000300000002000000030000000300000002000000030000000400000002000000030000000400000002000000030000000500000002000000030000000500000002000000030000000600000002000000030000000600000002000000030000000700000002000000030000000700000002000000030000000800000002000000030000000800000002000000030000000900000002000000030000000900000002000000030000000A00000002000000030000000A00000002000000030000000B00000002000000030000000B00000002000000030000000C00000002000000030000000C00000002000000030000000D00000002000000030000000D00000002000000030000000E00000002000000030000000E00000002000000030000000F00000002000000030000000F00000002000000030000001000000002000000030000001000000002000000030000000000000003000000030000000000000003000000030000000100000003000000030000000100000003000000030000000200000003000000030000000200000003000000030000000300000003000000030000000300000003000000030000000400000003000000030000000400000003000000030000000500000003000000030000000500000003000000030000000600000003000000030000000600000003000000030000000700000003000000030000000700000003000000030000000800000003000000030000000800000003000000030000000900000003000000030000000900000003000000030000000A00000003000000030000000A00000003000000030000000B00000003000000030000000B00000003000000030000000C00000003000000030000000C00000003000000030000000D00000003000000030000000D00000003000000030000000E00000003000000030000000E00000003000000030000000F00000003000000030000000F00000003000000030000001000000003000000030000001000000003000000030000000000000004000000030000000000000004000000030000000100000004000000030000000100000004000000030000000200000004000000030000000200000004000000030000000300000004000000030000000300000004000000030000000400000004000000030000000400000004000000030000000500000004000000030000000500000004000000030000000600000004000000030000000600000004000000030000000700000004000000030000000700000004000000030000000800000004000000030000000800000004000000030000000900000004000000030000000900000004000000030000000A00000004000000030000000A00000004000000030000000B00000004000000030000000B00000004000000030000000C00000004000000030000000C00000004000000030000000D00000004000000030000000D00000004000000030000000E00000004000000030000000E00000004000000030000000F00000004000000030000000F00000004000000030000001000000004000000030000001000000004000000030000000000000005000000030000000000000005000000030000000100000005000000030000000100000005000000030000000200000005000000030000000200000005000000030000000300000005000000030000000300000005000000030000000400000005000000030000000400000005000000030000000500000005000000030000000500000005000000030000000600000005000000030000000600000005000000030000000700000005000000030000000700000005000000030000000800000005000000030000000800000005000000030000000900000005000000030000000900000005000000030000000A00000005000000030000000A00000005000000030000000B00000005000000030000000B00000005000000030000000C00000005000000030000000C00000005000000030000000D00000005000000030000000D00000005000000030000000E00000005000000030000000E00000005000000030000000F00000005000000030000000F00000005000000030000001000000005000000030000001000000005000000030000000000000006000000030000000000000006000000030000000100000006000000030000000100000006000000030000000200000006000000030000000200000006000000030000000300000006000000030000000300000006000000030000000400000006000000030000000400000006000000030000000500000006000000030000000500000006000000030000000600000006000000030000000600000006000000030000000700000006000000030000000700000006000000030000000800000006000000030000000800000006000000030000000900000006000000030000000900000006000000030000000A00000006000000030000000A00000006000000030000000B00000006000000030000000B00000006000000030000000C00000006000000030000000C00000006000000030000000D00000006000000030000000D00000006000000030000000E00000006000000030000000E00000006000000030000000F00000006000000030000000F00000006000000030000001000000006000000030000001000000006000000030000000000000007000000030000000000000007000000030000000100000007000000030000000100000007000000030000000200000007000000030000000200000007000000030000000300000007000000030000000300000007000000030000000400000007000000030000000400000007000000030000000500000007000000030000000500000007000000030000000600000007000000030000000600000007000000030000000700000007000000030000000700000007000000030000000800000007000000030000000800000007000000030000000900000007000000030000000900000007000000030000000A00000007000000030000000A00000007000000030000000B00000007000000030000000B00000007000000030000000C00000007000000030000000C00000007000000030000000D00000007000000030000000D00000007000000030000000E00000007000000030000000E00000007000000030000000F00000007000000030000000F00000007000000030000001000000007000000030000001000000007000000030000000000000008000000030000000000000008000000030000000100000008000000030000000100000008000000030000000200000008000000030000000200000008000000030000000300000008000000030000000300000008000000030000000400000008000000030000000400000008000000030000000500000008000000030000000500000008000000030000000600000008000000030000000600000008000000030000000700000008000000030000000700000008000000030000000800000008000000030000000800000008000000030000000900000008000000030000000900000008000000030000000A00000008000000030000000A00000008000000030000000B00000008000000030000000B00000008000000030000000C00000008000000030000000C00000008000000030000000D00000008000000030000000D00000008000000030000000E00000008000000030000000E00000008000000030000000F00000008000000030000000F00000008000000030000001000000008000000030000001000000008000000030000000000000009000000030000000000000009000000030000000100000009000000030000000100000009000000030000000200000009000000030000000200000009000000030000000300000009000000030000000300000009000000030000000400000009000000030000000400000009000000030000000500000009000000030000000500000009000000030000000600000009000000030000000600000009000000030000000700000009000000030000000700000009000000030000000800000009000000030000000800000009000000030000000900000009000000030000000900000009000000030000000A00000009000000030000000A00000009000000030000000B00000009000000030000000B00000009000000030000000C00000009000000030000000C00000009000000030000000D00000009000000030000000D00000009000000030000000E00000009000000030000000E00000009000000030000000F00000009000000030000000F0000000900000003000000100000000900000003000000100000000900000003000000000000000A00000003000000000000000A00000003000000010000000A00000003000000010000000A00000003000000020000000A00000003000000020000000A00000003000000030000000A00000003000000030000000A00000003000000040000000A00000003000000040000000A00000003000000050000000A00000003000000050000000A00000003000000060000000A00000003000000060000000A00000003000000070000000A00000003000000070000000A00000003000000080000000A00000003000000080000000A00000003000000090000000A00000003000000090000000A000000030000000A0000000A000000030000000A0000000A000000030000000B0000000A000000030000000B0000000A000000030000000C0000000A000000030000000C0000000A000000030000000D0000000A000000030000000D0000000A000000030000000E0000000A000000030000000E0000000A000000030000000F0000000A000000030000000F0000000A00000003000000100000000A00000003000000100000000A00000003000000000000000B00000003000000000000000B00000003000000010000000B00000003000000010000000B00000003000000020000000B00000003000000020000000B00000003000000030000000B00000003000000030000000B00000003000000040000000B00000003000000040000000B00000003000000050000000B00000003000000050000000B00000003000000060000000B00000003000000060000000B00000003000000070000000B00000003000000070000000B00000003000000080000000B00000003000000080000000B00000003000000090000000B00000003000000090000000B000000030000000A0000000B000000030000000A0000000B000000030000000B0000000B000000030000000B0000000B000000030000000C0000000B000000030000000C0000000B000000030000000D0000000B000000030000000D0000000B000000030000000E0000000B000000030000000E0000000B000000030000000F0000000B000000030000000F0000000B00000003000000100000000B00000003000000100000000B00000003000000000000000C00000003000000000000000C00000003000000010000000C00000003000000010000000C00000003000000020000000C00000003000000020000000C00000003000000030000000C00000003000000030000000C00000003000000040000000C00000003000000040000000C00000003000000050000000C00000003000000050000000C00000003000000060000000C00000003000000060000000C00000003000000070000000C00000003000000070000000C00000003000000080000000C00000003000000080000000C00000003000000090000000C00000003000000090000000C000000030000000A0000000C000000030000000A0000000C000000030000000B0000000C000000030000000B0000000C000000030000000C0000000C000000030000000C0000000C000000030000000D0000000C000000030000000D0000000C000000030000000E0000000C000000030000000E0000000C000000030000000F0000000C000000030000000F0000000C00000003000000100000000C00000003000000100000000C00000003000000000000000D00000003000000000000000D00000003000000010000000D00000003000000010000000D00000003000000020000000D00000003000000020000000D00000003000000030000000D00000003000000030000000D00000003000000040000000D00000003000000040000000D00000003000000050000000D00000003000000050000000D00000003000000060000000D00000003000000060000000D00000003000000070000000D00000003000000070000000D00000003000000080000000D00000003000000080000000D00000003000000090000000D00000003000000090000000D000000030000000A0000000D000000030000000A0000000D000000030000000B0000000D000000030000000B0000000D000000030000000C0000000D000000030000000C0000000D000000030000000D0000000D000000030000000D0000000D000000030000000E0000000D000000030000000E0000000D000000030000000F0000000D000000030000000F0000000D00000003000000100000000D00000003000000100000000D00000003000000000000000E00000003000000000000000E00000003000000010000000E00000003000000010000000E00000003000000020000000E00000003000000020000000E00000003000000030000000E00000003000000030000000E00000003000000040000000E00000003000000040000000E00000003000000050000000E00000003000000050000000E00000003000000060000000E00000003000000060000000E00000003000000070000000E00000003000000070000000E00000003000000080000000E00000003000000080000000E00000003000000090000000E00000003000000090000000E000000030000000A0000000E000000030000000A0000000E000000030000000B0000000E000000030000000B0000000E000000030000000C0000000E000000030000000C0000000E000000030000000D0000000E000000030000000D0000000E000000030000000E0000000E000000030000000E0000000E000000030000000F0000000E000000030000000F0000000E00000003000000100000000E00000003000000100000000E00000003000000000000000F00000003000000000000000F00000003000000010000000F00000003000000010000000F00000003000000020000000F00000003000000020000000F00000003000000030000000F00000003000000030000000F00000003000000040000000F00000003000000040000000F00000003000000050000000F00000003000000050000000F00000003000000060000000F00000003000000060000000F00000003000000070000000F00000003000000070000000F00000003000000080000000F00000003000000080000000F00000003000000090000000F00000003000000090000000F000000030000000A0000000F000000030000000A0000000F000000030000000B0000000F000000030000000B0000000F000000030000000C0000000F000000030000000C0000000F000000030000000D0000000F000000030000000D0000000F000000030000000E0000000F000000030000000E0000000F000000030000000F0000000F000000030000000F0000000F00000003000000100000000F00000003000000100000000F000000030000000000000010000000030000000000000010000000030000000100000010000000030000000100000010000000030000000200000010000000030000000200000010000000030000000300000010000000030000000300000010000000030000000400000010000000030000000400000010000000030000000500000010000000030000000500000010000000030000000600000010000000030000000600000010000000030000000700000010000000030000000700000010000000030000000800000010000000030000000800000010000000030000000900000010000000030000000900000010000000030000000A00000010000000030000000A00000010000000030000000B00000010000000030000000B00000010000000030000000C00000010000000030000000C00000010000000030000000D00000010000000030000000D00000010000000030000000E00000010000000030000000E00000010000000030000000F00000010000000030000000F00000010000000030000001000000010000000030000001000000010000000030000000000000000000000040000000000000000000000040000000100000000000000040000000100000000000000040000000200000000000000040000000200000000000000040000000300000000000000040000000300000000000000040000000400000000000000040000000400000000000000040000000500000000000000040000000500000000000000040000000600000000000000040000000600000000000000040000000700000000000000040000000700000000000000040000000800000000000000040000000800000000000000040000000900000000000000040000000900000000000000040000000A00000000000000040000000A00000000000000040000000B00000000000000040000000B00000000000000040000000C00000000000000040000000C00000000000000040000000D00000000000000040000000D00000000000000040000000E00000000000000040000000E00000000000000040000000F00000000000000040000000F00000000000000040000001000000000000000040000001000000000000000040000000000000001000000040000000000000001000000040000000100000001000000040000000100000001000000040000000200000001000000040000000200000001000000040000000300000001000000040000000300000001000000040000000400000001000000040000000400000001000000040000000500000001000000040000000500000001000000040000000600000001000000040000000600000001000000040000000700000001000000040000000700000001000000040000000800000001000000040000000800000001000000040000000900000001000000040000000900000001000000040000000A00000001000000040000000A00000001000000040000000B00000001000000040000000B00000001000000040000000C00000001000000040000000C00000001000000040000000D00000001000000040000000D00000001000000040000000E00000001000000040000000E00000001000000040000000F00000001000000040000000F00000001000000040000001000000001000000040000001000000001000000040000000000000002000000040000000000000002000000040000000100000002000000040000000100000002000000040000000200000002000000040000000200000002000000040000000300000002000000040000000300000002000000040000000400000002000000040000000400000002000000040000000500000002000000040000000500000002000000040000000600000002000000040000000600000002000000040000000700000002000000040000000700000002000000040000000800000002000000040000000800000002000000040000000900000002000000040000000900000002000000040000000A00000002000000040000000A00000002000000040000000B00000002000000040000000B00000002000000040000000C00000002000000040000000C00000002000000040000000D00000002000000040000000D00000002000000040000000E00000002000000040000000E00000002000000040000000F00000002000000040000000F00000002000000040000001000000002000000040000001000000002000000040000000000000003000000040000000000000003000000040000000100000003000000040000000100000003000000040000000200000003000000040000000200000003000000040000000300000003000000040000000300000003000000040000000400000003000000040000000400000003000000040000000500000003000000040000000500000003000000040000000600000003000000040000000600000003000000040000000700000003000000040000000700000003000000040000000800000003000000040000000800000003000000040000000900000003000000040000000900000003000000040000000A00000003000000040000000A00000003000000040000000B00000003000000040000000B00000003000000040000000C00000003000000040000000C00000003000000040000000D00000003000000040000000D00000003000000040000000E00000003000000040000000E00000003000000040000000F00000003000000040000000F00000003000000040000001000000003000000040000001000000003000000040000000000000004000000040000000000000004000000040000000100000004000000040000000100000004000000040000000200000004000000040000000200000004000000040000000300000004000000040000000300000004000000040000000400000004000000040000000400000004000000040000000500000004000000040000000500000004000000040000000600000004000000040000000600000004000000040000000700000004000000040000000700000004000000040000000800000004000000040000000800000004000000040000000900000004000000040000000900000004000000040000000A00000004000000040000000A00000004000000040000000B00000004000000040000000B00000004000000040000000C00000004000000040000000C00000004000000040000000D00000004000000040000000D00000004000000040000000E00000004000000040000000E00000004000000040000000F00000004000000040000000F00000004000000040000001000000004000000040000001000000004000000040000000000000005000000040000000000000005000000040000000100000005000000040000000100000005000000040000000200000005000000040000000200000005000000040000000300000005000000040000000300000005000000040000000400000005000000040000000400000005000000040000000500000005000000040000000500000005000000040000000600000005000000040000000600000005000000040000000700000005000000040000000700000005000000040000000800000005000000040000000800000005000000040000000900000005000000040000000900000005000000040000000A00000005000000040000000A00000005000000040000000B00000005000000040000000B00000005000000040000000C00000005000000040000000C00000005000000040000000D00000005000000040000000D00000005000000040000000E00000005000000040000000E00000005000000040000000F00000005000000040000000F00000005000000040000001000000005000000040000001000000005000000040000000000000006000000040000000000000006000000040000000100000006000000040000000100000006000000040000000200000006000000040000000200000006000000040000000300000006000000040000000300000006000000040000000400000006000000040000000400000006000000040000000500000006000000040000000500000006000000040000000600000006000000040000000600000006000000040000000700000006000000040000000700000006000000040000000800000006000000040000000800000006000000040000000900000006000000040000000900000006000000040000000A00000006000000040000000A00000006000000040000000B00000006000000040000000B00000006000000040000000C00000006000000040000000C00000006000000040000000D00000006000000040000000D00000006000000040000000E00000006000000040000000E00000006000000040000000F00000006000000040000000F00000006000000040000001000000006000000040000001000000006000000040000000000000007000000040000000000000007000000040000000100000007000000040000000100000007000000040000000200000007000000040000000200000007000000040000000300000007000000040000000300000007000000040000000400000007000000040000000400000007000000040000000500000007000000040000000500000007000000040000000600000007000000040000000600000007000000040000000700000007000000040000000700000007000000040000000800000007000000040000000800000007000000040000000900000007000000040000000900000007000000040000000A00000007000000040000000A00000007000000040000000B00000007000000040000000B00000007000000040000000C00000007000000040000000C00000007000000040000000D00000007000000040000000D00000007000000040000000E00000007000000040000000E00000007000000040000000F00000007000000040000000F00000007000000040000001000000007000000040000001000000007000000040000000000000008000000040000000000000008000000040000000100000008000000040000000100000008000000040000000200000008000000040000000200000008000000040000000300000008000000040000000300000008000000040000000400000008000000040000000400000008000000040000000500000008000000040000000500000008000000040000000600000008000000040000000600000008000000040000000700000008000000040000000700000008000000040000000800000008000000040000000800000008000000040000000900000008000000040000000900000008000000040000000A00000008000000040000000A00000008000000040000000B00000008000000040000000B00000008000000040000000C00000008000000040000000C00000008000000040000000D00000008000000040000000D00000008000000040000000E00000008000000040000000E00000008000000040000000F00000008000000040000000F00000008000000040000001000000008000000040000001000000008000000040000000000000009000000040000000000000009000000040000000100000009000000040000000100000009000000040000000200000009000000040000000200000009000000040000000300000009000000040000000300000009000000040000000400000009000000040000000400000009000000040000000500000009000000040000000500000009000000040000000600000009000000040000000600000009000000040000000700000009000000040000000700000009000000040000000800000009000000040000000800000009000000040000000900000009000000040000000900000009000000040000000A00000009000000040000000A00000009000000040000000B00000009000000040000000B00000009000000040000000C00000009000000040000000C00000009000000040000000D00000009000000040000000D00000009000000040000000E00000009000000040000000E00000009000000040000000F00000009000000040000000F0000000900000004000000100000000900000004000000100000000900000004000000000000000A00000004000000000000000A00000004000000010000000A00000004000000010000000A00000004000000020000000A00000004000000020000000A00000004000000030000000A00000004000000030000000A00000004000000040000000A00000004000000040000000A00000004000000050000000A00000004000000050000000A00000004000000060000000A00000004000000060000000A00000004000000070000000A00000004000000070000000A00000004000000080000000A00000004000000080000000A00000004000000090000000A00000004000000090000000A000000040000000A0000000A000000040000000A0000000A000000040000000B0000000A000000040000000B0000000A000000040000000C0000000A000000040000000C0000000A000000040000000D0000000A000000040000000D0000000A000000040000000E0000000A000000040000000E0000000A000000040000000F0000000A000000040000000F0000000A00000004000000100000000A00000004000000100000000A00000004000000000000000B00000004000000000000000B00000004000000010000000B00000004000000010000000B00000004000000020000000B00000004000000020000000B00000004000000030000000B00000004000000030000000B00000004000000040000000B00000004000000040000000B00000004000000050000000B00000004000000050000000B00000004000000060000000B00000004000000060000000B00000004000000070000000B00000004000000070000000B00000004000000080000000B00000004000000080000000B00000004000000090000000B00000004000000090000000B000000040000000A0000000B000000040000000A0000000B000000040000000B0000000B000000040000000B0000000B000000040000000C0000000B000000040000000C0000000B000000040000000D0000000B000000040000000D0000000B000000040000000E0000000B000000040000000E0000000B000000040000000F0000000B000000040000000F0000000B00000004000000100000000B00000004000000100000000B00000004000000000000000C00000004000000000000000C00000004000000010000000C00000004000000010000000C00000004000000020000000C00000004000000020000000C00000004000000030000000C00000004000000030000000C00000004000000040000000C00000004000000040000000C00000004000000050000000C00000004000000050000000C00000004000000060000000C00000004000000060000000C00000004000000070000000C00000004000000070000000C00000004000000080000000C00000004000000080000000C00000004000000090000000C00000004000000090000000C000000040000000A0000000C000000040000000A0000000C000000040000000B0000000C000000040000000B0000000C000000040000000C0000000C000000040000000C0000000C000000040000000D0000000C000000040000000D0000000C000000040000000E0000000C000000040000000E0000000C000000040000000F0000000C000000040000000F0000000C00000004000000100000000C00000004000000100000000C00000004000000000000000D00000004000000000000000D00000004000000010000000D00000004000000010000000D00000004000000020000000D00000004000000020000000D00000004000000030000000D00000004000000030000000D00000004000000040000000D00000004000000040000000D00000004000000050000000D00000004000000050000000D00000004000000060000000D00000004000000060000000D00000004000000070000000D00000004000000070000000D00000004000000080000000D00000004000000080000000D00000004000000090000000D00000004000000090000000D000000040000000A0000000D000000040000000A0000000D000000040000000B0000000D000000040000000B0000000D000000040000000C0000000D000000040000000C0000000D000000040000000D0000000D000000040000000D0000000D000000040000000E0000000D000000040000000E0000000D000000040000000F0000000D000000040000000F0000000D00000004000000100000000D00000004000000100000000D00000004000000000000000E00000004000000000000000E00000004000000010000000E00000004000000010000000E00000004000000020000000E00000004000000020000000E00000004000000030000000E00000004000000030000000E00000004000000040000000E00000004000000040000000E00000004000000050000000E00000004000000050000000E00000004000000060000000E00000004000000060000000E00000004000000070000000E00000004000000070000000E00000004000000080000000E00000004000000080000000E00000004000000090000000E00000004000000090000000E000000040000000A0000000E000000040000000A0000000E000000040000000B0000000E000000040000000B0000000E000000040000000C0000000E000000040000000C0000000E000000040000000D0000000E000000040000000D0000000E000000040000000E0000000E000000040000000E0000000E000000040000000F0000000E000000040000000F0000000E00000004000000100000000E00000004000000100000000E00000004000000000000000F00000004000000000000000F00000004000000010000000F00000004000000010000000F00000004000000020000000F00000004000000020000000F00000004000000030000000F00000004000000030000000F00000004000000040000000F00000004000000040000000F00000004000000050000000F00000004000000050000000F00000004000000060000000F00000004000000060000000F00000004000000070000000F00000004000000070000000F00000004000000080000000F00000004000000080000000F00000004000000090000000F00000004000000090000000F000000040000000A0000000F000000040000000A0000000F000000040000000B0000000F000000040000000B0000000F000000040000000C0000000F000000040000000C0000000F000000040000000D0000000F000000040000000D0000000F000000040000000E0000000F000000040000000E0000000F000000040000000F0000000F000000040000000F0000000F00000004000000100000000F00000004000000100000000F000000040000000000000010000000040000000000000010000000040000000100000010000000040000000100000010000000040000000200000010000000040000000200000010000000040000000300000010000000040000000300000010000000040000000400000010000000040000000400000010000000040000000500000010000000040000000500000010000000040000000600000010000000040000000600000010000000040000000700000010000000040000000700000010000000040000000800000010000000040000000800000010000000040000000900000010000000040000000900000010000000040000000A00000010000000040000000A00000010000000040000000B00000010000000040000000B00000010000000040000000C00000010000000040000000C00000010000000040000000D00000010000000040000000D00000010000000040000000E00000010000000040000000E00000010000000040000000F00000010000000040000000F00000010000000040000001000000010000000040000001000000010000000040000000000000000000000050000000000000000000000050000000100000000000000050000000100000000000000050000000200000000000000050000000200000000000000050000000300000000000000050000000300000000000000050000000400000000000000050000000400000000000000050000000500000000000000050000000500000000000000050000000600000000000000050000000600000000000000050000000700000000000000050000000700000000000000050000000800000000000000050000000800000000000000050000000900000000000000050000000900000000000000050000000A00000000000000050000000A00000000000000050000000B00000000000000050000000B00000000000000050000000C00000000000000050000000C00000000000000050000000D00000000000000050000000D00000000000000050000000E00000000000000050000000E00000000000000050000000F00000000000000050000000F00000000000000050000001000000000000000050000001000000000000000050000000000000001000000050000000000000001000000050000000100000001000000050000000100000001000000050000000200000001000000050000000200000001000000050000000300000001000000050000000300000001000000050000000400000001000000050000000400000001000000050000000500000001000000050000000500000001000000050000000600000001000000050000000600000001000000050000000700000001000000050000000700000001000000050000000800000001000000050000000800000001000000050000000900000001000000050000000900000001000000050000000A00000001000000050000000A00000001000000050000000B00000001000000050000000B00000001000000050000000C00000001000000050000000C00000001000000050000000D00000001000000050000000D00000001000000050000000E00000001000000050000000E00000001000000050000000F00000001000000050000000F00000001000000050000001000000001000000050000001000000001000000050000000000000002000000050000000000000002000000050000000100000002000000050000000100000002000000050000000200000002000000050000000200000002000000050000000300000002000000050000000300000002000000050000000400000002000000050000000400000002000000050000000500000002000000050000000500000002000000050000000600000002000000050000000600000002000000050000000700000002000000050000000700000002000000050000000800000002000000050000000800000002000000050000000900000002000000050000000900000002000000050000000A00000002000000050000000A00000002000000050000000B00000002000000050000000B00000002000000050000000C00000002000000050000000C00000002000000050000000D00000002000000050000000D00000002000000050000000E00000002000000050000000E00000002000000050000000F00000002000000050000000F00000002000000050000001000000002000000050000001000000002000000050000000000000003000000050000000000000003000000050000000100000003000000050000000100000003000000050000000200000003000000050000000200000003000000050000000300000003000000050000000300000003000000050000000400000003000000050000000400000003000000050000000500000003000000050000000500000003000000050000000600000003000000050000000600000003000000050000000700000003000000050000000700000003000000050000000800000003000000050000000800000003000000050000000900000003000000050000000900000003000000050000000A00000003000000050000000A00000003000000050000000B00000003000000050000000B00000003000000050000000C00000003000000050000000C00000003000000050000000D00000003000000050000000D00000003000000050000000E00000003000000050000000E00000003000000050000000F00000003000000050000000F00000003000000050000001000000003000000050000001000000003000000050000000000000004000000050000000000000004000000050000000100000004000000050000000100000004000000050000000200000004000000050000000200000004000000050000000300000004000000050000000300000004000000050000000400000004000000050000000400000004000000050000000500000004000000050000000500000004000000050000000600000004000000050000000600000004000000050000000700000004000000050000000700000004000000050000000800000004000000050000000800000004000000050000000900000004000000050000000900000004000000050000000A00000004000000050000000A00000004000000050000000B00000004000000050000000B00000004000000050000000C00000004000000050000000C00000004000000050000000D00000004000000050000000D00000004000000050000000E00000004000000050000000E00000004000000050000000F00000004000000050000000F00000004000000050000001000000004000000050000001000000004000000050000000000000005000000050000000000000005000000050000000100000005000000050000000100000005000000050000000200000005000000050000000200000005000000050000000300000005000000050000000300000005000000050000000400000005000000050000000400000005000000050000000500000005000000050000000500000005000000050000000600000005000000050000000600000005000000050000000700000005000000050000000700000005000000050000000800000005000000050000000800000005000000050000000900000005000000050000000900000005000000050000000A00000005000000050000000A00000005000000050000000B00000005000000050000000B00000005000000050000000C00000005000000050000000C00000005000000050000000D00000005000000050000000D00000005000000050000000E00000005000000050000000E00000005000000050000000F00000005000000050000000F00000005000000050000001000000005000000050000001000000005000000050000000000000006000000050000000000000006000000050000000100000006000000050000000100000006000000050000000200000006000000050000000200000006000000050000000300000006000000050000000300000006000000050000000400000006000000050000000400000006000000050000000500000006000000050000000500000006000000050000000600000006000000050000000600000006000000050000000700000006000000050000000700000006000000050000000800000006000000050000000800000006000000050000000900000006000000050000000900000006000000050000000A00000006000000050000000A00000006000000050000000B00000006000000050000000B00000006000000050000000C00000006000000050000000C00000006000000050000000D00000006000000050000000D00000006000000050000000E00000006000000050000000E00000006000000050000000F00000006000000050000000F00000006000000050000001000000006000000050000001000000006000000050000000000000007000000050000000000000007000000050000000100000007000000050000000100000007000000050000000200000007000000050000000200000007000000050000000300000007000000050000000300000007000000050000000400000007000000050000000400000007000000050000000500000007000000050000000500000007000000050000000600000007000000050000000600000007000000050000000700000007000000050000000700000007000000050000000800000007000000050000000800000007000000050000000900000007000000050000000900000007000000050000000A00000007000000050000000A00000007000000050000000B00000007000000050000000B00000007000000050000000C00000007000000050000000C00000007000000050000000D00000007000000050000000D00000007000000050000000E00000007000000050000000E00000007000000050000000F00000007000000050000000F00000007000000050000001000000007000000050000001000000007000000050000000000000008000000050000000000000008000000050000000100000008000000050000000100000008000000050000000200000008000000050000000200000008000000050000000300000008000000050000000300000008000000050000000400000008000000050000000400000008000000050000000500000008000000050000000500000008000000050000000600000008000000050000000600000008000000050000000700000008000000050000000700000008000000050000000800000008000000050000000800000008000000050000000900000008000000050000000900000008000000050000000A00000008000000050000000A00000008000000050000000B00000008000000050000000B00000008000000050000000C00000008000000050000000C00000008000000050000000D00000008000000050000000D00000008000000050000000E00000008000000050000000E00000008000000050000000F00000008000000050000000F00000008000000050000001000000008000000050000001000000008000000050000000000000009000000050000000000000009000000050000000100000009000000050000000100000009000000050000000200000009000000050000000200000009000000050000000300000009000000050000000300000009000000050000000400000009000000050000000400000009000000050000000500000009000000050000000500000009000000050000000600000009000000050000000600000009000000050000000700000009000000050000000700000009000000050000000800000009000000050000000800000009000000050000000900000009000000050000000900000009000000050000000A00000009000000050000000A00000009000000050000000B00000009000000050000000B00000009000000050000000C00000009000000050000000C00000009000000050000000D00000009000000050000000D00000009000000050000000E00000009000000050000000E00000009000000050000000F00000009000000050000000F0000000900000005000000100000000900000005000000100000000900000005000000000000000A00000005000000000000000A00000005000000010000000A00000005000000010000000A00000005000000020000000A00000005000000020000000A00000005000000030000000A00000005000000030000000A00000005000000040000000A00000005000000040000000A00000005000000050000000A00000005000000050000000A00000005000000060000000A00000005000000060000000A00000005000000070000000A00000005000000070000000A00000005000000080000000A00000005000000080000000A00000005000000090000000A00000005000000090000000A000000050000000A0000000A000000050000000A0000000A000000050000000B0000000A000000050000000B0000000A000000050000000C0000000A000000050000000C0000000A000000050000000D0000000A000000050000000D0000000A000000050000000E0000000A000000050000000E0000000A000000050000000F0000000A000000050000000F0000000A00000005000000100000000A00000005000000100000000A00000005000000000000000B00000005000000000000000B00000005000000010000000B00000005000000010000000B00000005000000020000000B00000005000000020000000B00000005000000030000000B00000005000000030000000B00000005000000040000000B00000005000000040000000B00000005000000050000000B00000005000000050000000B00000005000000060000000B00000005000000060000000B00000005000000070000000B00000005000000070000000B00000005000000080000000B00000005000000080000000B00000005000000090000000B00000005000000090000000B000000050000000A0000000B000000050000000A0000000B000000050000000B0000000B000000050000000B0000000B000000050000000C0000000B000000050000000C0000000B000000050000000D0000000B000000050000000D0000000B000000050000000E0000000B000000050000000E0000000B000000050000000F0000000B000000050000000F0000000B00000005000000100000000B00000005000000100000000B00000005000000000000000C00000005000000000000000C00000005000000010000000C00000005000000010000000C00000005000000020000000C00000005000000020000000C00000005000000030000000C00000005000000030000000C00000005000000040000000C00000005000000040000000C00000005000000050000000C00000005000000050000000C00000005000000060000000C00000005000000060000000C00000005000000070000000C00000005000000070000000C00000005000000080000000C00000005000000080000000C00000005000000090000000C00000005000000090000000C000000050000000A0000000C000000050000000A0000000C000000050000000B0000000C000000050000000B0000000C000000050000000C0000000C000000050000000C0000000C000000050000000D0000000C000000050000000D0000000C000000050000000E0000000C000000050000000E0000000C000000050000000F0000000C000000050000000F0000000C00000005000000100000000C00000005000000100000000C00000005000000000000000D00000005000000000000000D00000005000000010000000D00000005000000010000000D00000005000000020000000D00000005000000020000000D00000005000000030000000D00000005000000030000000D00000005000000040000000D00000005000000040000000D00000005000000050000000D00000005000000050000000D00000005000000060000000D00000005000000060000000D00000005000000070000000D00000005000000070000000D00000005000000080000000D00000005000000080000000D00000005000000090000000D00000005000000090000000D000000050000000A0000000D000000050000000A0000000D000000050000000B0000000D000000050000000B0000000D000000050000000C0000000D000000050000000C0000000D000000050000000D0000000D000000050000000D0000000D000000050000000E0000000D000000050000000E0000000D000000050000000F0000000D000000050000000F0000000D00000005000000100000000D00000005000000100000000D00000005000000000000000E00000005000000000000000E00000005000000010000000E00000005000000010000000E00000005000000020000000E00000005000000020000000E00000005000000030000000E00000005000000030000000E00000005000000040000000E00000005000000040000000E00000005000000050000000E00000005000000050000000E00000005000000060000000E00000005000000060000000E00000005000000070000000E00000005000000070000000E00000005000000080000000E00000005000000080000000E00000005000000090000000E00000005000000090000000E000000050000000A0000000E000000050000000A0000000E000000050000000B0000000E000000050000000B0000000E000000050000000C0000000E000000050000000C0000000E000000050000000D0000000E000000050000000D0000000E000000050000000E0000000E000000050000000E0000000E000000050000000F0000000E000000050000000F0000000E00000005000000100000000E00000005000000100000000E00000005000000000000000F00000005000000000000000F00000005000000010000000F00000005000000010000000F00000005000000020000000F00000005000000020000000F00000005000000030000000F00000005000000030000000F00000005000000040000000F00000005000000040000000F00000005000000050000000F00000005000000050000000F00000005000000060000000F00000005000000060000000F00000005000000070000000F00000005000000070000000F00000005000000080000000F00000005000000080000000F00000005000000090000000F00000005000000090000000F000000050000000A0000000F000000050000000A0000000F000000050000000B0000000F000000050000000B0000000F000000050000000C0000000F000000050000000C0000000F000000050000000D0000000F000000050000000D0000000F000000050000000E0000000F000000050000000E0000000F000000050000000F0000000F000000050000000F0000000F00000005000000100000000F00000005000000100000000F000000050000000000000010000000050000000000000010000000050000000100000010000000050000000100000010000000050000000200000010000000050000000200000010000000050000000300000010000000050000000300000010000000050000000400000010000000050000000400000010000000050000000500000010000000050000000500000010000000050000000600000010000000050000000600000010000000050000000700000010000000050000000700000010000000050000000800000010000000050000000800000010000000050000000900000010000000050000000900000010000000050000000A00000010000000050000000A00000010000000050000000B00000010000000050000000B00000010000000050000000C00000010000000050000000C00000010000000050000000D00000010000000050000000D00000010000000050000000E00000010000000050000000E00000010000000050000000F00000010000000050000000F00000010000000050000001000000010000000050000001000000010000000050000000000000000000000060000000000000000000000060000000100000000000000060000000100000000000000060000000200000000000000060000000200000000000000060000000300000000000000060000000300000000000000060000000400000000000000060000000400000000000000060000000500000000000000060000000500000000000000060000000600000000000000060000000600000000000000060000000700000000000000060000000700000000000000060000000800000000000000060000000800000000000000060000000900000000000000060000000900000000000000060000000A00000000000000060000000A00000000000000060000000B00000000000000060000000B00000000000000060000000C00000000000000060000000C00000000000000060000000D00000000000000060000000D00000000000000060000000E00000000000000060000000E00000000000000060000000F00000000000000060000000F00000000000000060000001000000000000000060000001000000000000000060000000000000001000000060000000000000001000000060000000100000001000000060000000100000001000000060000000200000001000000060000000200000001000000060000000300000001000000060000000300000001000000060000000400000001000000060000000400000001000000060000000500000001000000060000000500000001000000060000000600000001000000060000000600000001000000060000000700000001000000060000000700000001000000060000000800000001000000060000000800000001000000060000000900000001000000060000000900000001000000060000000A00000001000000060000000A00000001000000060000000B00000001000000060000000B00000001000000060000000C00000001000000060000000C00000001000000060000000D00000001000000060000000D00000001000000060000000E00000001000000060000000E00000001000000060000000F00000001000000060000000F00000001000000060000001000000001000000060000001000000001000000060000000000000002000000060000000000000002000000060000000100000002000000060000000100000002000000060000000200000002000000060000000200000002000000060000000300000002000000060000000300000002000000060000000400000002000000060000000400000002000000060000000500000002000000060000000500000002000000060000000600000002000000060000000600000002000000060000000700000002000000060000000700000002000000060000000800000002000000060000000800000002000000060000000900000002000000060000000900000002000000060000000A00000002000000060000000A00000002000000060000000B00000002000000060000000B00000002000000060000000C00000002000000060000000C00000002000000060000000D00000002000000060000000D00000002000000060000000E00000002000000060000000E00000002000000060000000F00000002000000060000000F00000002000000060000001000000002000000060000001000000002000000060000000000000003000000060000000000000003000000060000000100000003000000060000000100000003000000060000000200000003000000060000000200000003000000060000000300000003000000060000000300000003000000060000000400000003000000060000000400000003000000060000000500000003000000060000000500000003000000060000000600000003000000060000000600000003000000060000000700000003000000060000000700000003000000060000000800000003000000060000000800000003000000060000000900000003000000060000000900000003000000060000000A00000003000000060000000A00000003000000060000000B00000003000000060000000B00000003000000060000000C00000003000000060000000C00000003000000060000000D00000003000000060000000D00000003000000060000000E00000003000000060000000E00000003000000060000000F00000003000000060000000F00000003000000060000001000000003000000060000001000000003000000060000000000000004000000060000000000000004000000060000000100000004000000060000000100000004000000060000000200000004000000060000000200000004000000060000000300000004000000060000000300000004000000060000000400000004000000060000000400000004000000060000000500000004000000060000000500000004000000060000000600000004000000060000000600000004000000060000000700000004000000060000000700000004000000060000000800000004000000060000000800000004000000060000000900000004000000060000000900000004000000060000000A00000004000000060000000A00000004000000060000000B00000004000000060000000B00000004000000060000000C00000004000000060000000C00000004000000060000000D00000004000000060000000D00000004000000060000000E00000004000000060000000E00000004000000060000000F00000004000000060000000F00000004000000060000001000000004000000060000001000000004000000060000000000000005000000060000000000000005000000060000000100000005000000060000000100000005000000060000000200000005000000060000000200000005000000060000000300000005000000060000000300000005000000060000000400000005000000060000000400000005000000060000000500000005000000060000000500000005000000060000000600000005000000060000000600000005000000060000000700000005000000060000000700000005000000060000000800000005000000060000000800000005000000060000000900000005000000060000000900000005000000060000000A00000005000000060000000A00000005000000060000000B00000005000000060000000B00000005000000060000000C00000005000000060000000C00000005000000060000000D00000005000000060000000D00000005000000060000000E00000005000000060000000E00000005000000060000000F00000005000000060000000F00000005000000060000001000000005000000060000001000000005000000060000000000000006000000060000000000000006000000060000000100000006000000060000000100000006000000060000000200000006000000060000000200000006000000060000000300000006000000060000000300000006000000060000000400000006000000060000000400000006000000060000000500000006000000060000000500000006000000060000000600000006000000060000000600000006000000060000000700000006000000060000000700000006000000060000000800000006000000060000000800000006000000060000000900000006000000060000000900000006000000060000000A00000006000000060000000A00000006000000060000000B00000006000000060000000B00000006000000060000000C00000006000000060000000C00000006000000060000000D00000006000000060000000D00000006000000060000000E00000006000000060000000E00000006000000060000000F00000006000000060000000F00000006000000060000001000000006000000060000001000000006000000060000000000000007000000060000000000000007000000060000000100000007000000060000000100000007000000060000000200000007000000060000000200000007000000060000000300000007000000060000000300000007000000060000000400000007000000060000000400000007000000060000000500000007000000060000000500000007000000060000000600000007000000060000000600000007000000060000000700000007000000060000000700000007000000060000000800000007000000060000000800000007000000060000000900000007000000060000000900000007000000060000000A00000007000000060000000A00000007000000060000000B00000007000000060000000B00000007000000060000000C00000007000000060000000C00000007000000060000000D00000007000000060000000D00000007000000060000000E00000007000000060000000E00000007000000060000000F00000007000000060000000F00000007000000060000001000000007000000060000001000000007000000060000000000000008000000060000000000000008000000060000000100000008000000060000000100000008000000060000000200000008000000060000000200000008000000060000000300000008000000060000000300000008000000060000000400000008000000060000000400000008000000060000000500000008000000060000000500000008000000060000000600000008000000060000000600000008000000060000000700000008000000060000000700000008000000060000000800000008000000060000000800000008000000060000000900000008000000060000000900000008000000060000000A00000008000000060000000A00000008000000060000000B00000008000000060000000B00000008000000060000000C00000008000000060000000C00000008000000060000000D00000008000000060000000D00000008000000060000000E00000008000000060000000E00000008000000060000000F00000008000000060000000F00000008000000060000001000000008000000060000001000000008000000060000000000000009000000060000000000000009000000060000000100000009000000060000000100000009000000060000000200000009000000060000000200000009000000060000000300000009000000060000000300000009000000060000000400000009000000060000000400000009000000060000000500000009000000060000000500000009000000060000000600000009000000060000000600000009000000060000000700000009000000060000000700000009000000060000000800000009000000060000000800000009000000060000000900000009000000060000000900000009000000060000000A00000009000000060000000A00000009000000060000000B00000009000000060000000B00000009000000060000000C00000009000000060000000C00000009000000060000000D00000009000000060000000D00000009000000060000000E00000009000000060000000E00000009000000060000000F00000009000000060000000F0000000900000006000000100000000900000006000000100000000900000006000000000000000A00000006000000000000000A00000006000000010000000A00000006000000010000000A00000006000000020000000A00000006000000020000000A00000006000000030000000A00000006000000030000000A00000006000000040000000A00000006000000040000000A00000006000000050000000A00000006000000050000000A00000006000000060000000A00000006000000060000000A00000006000000070000000A00000006000000070000000A00000006000000080000000A00000006000000080000000A00000006000000090000000A00000006000000090000000A000000060000000A0000000A000000060000000A0000000A000000060000000B0000000A000000060000000B0000000A000000060000000C0000000A000000060000000C0000000A000000060000000D0000000A000000060000000D0000000A000000060000000E0000000A000000060000000E0000000A000000060000000F0000000A000000060000000F0000000A00000006000000100000000A00000006000000100000000A00000006000000000000000B00000006000000000000000B00000006000000010000000B00000006000000010000000B00000006000000020000000B00000006000000020000000B00000006000000030000000B00000006000000030000000B00000006000000040000000B00000006000000040000000B00000006000000050000000B00000006000000050000000B00000006000000060000000B00000006000000060000000B00000006000000070000000B00000006000000070000000B00000006000000080000000B00000006000000080000000B00000006000000090000000B00000006000000090000000B000000060000000A0000000B000000060000000A0000000B000000060000000B0000000B000000060000000B0000000B000000060000000C0000000B000000060000000C0000000B000000060000000D0000000B000000060000000D0000000B000000060000000E0000000B000000060000000E0000000B000000060000000F0000000B000000060000000F0000000B00000006000000100000000B00000006000000100000000B00000006000000000000000C00000006000000000000000C00000006000000010000000C00000006000000010000000C00000006000000020000000C00000006000000020000000C00000006000000030000000C00000006000000030000000C00000006000000040000000C00000006000000040000000C00000006000000050000000C00000006000000050000000C00000006000000060000000C00000006000000060000000C00000006000000070000000C00000006000000070000000C00000006000000080000000C00000006000000080000000C00000006000000090000000C00000006000000090000000C000000060000000A0000000C000000060000000A0000000C000000060000000B0000000C000000060000000B0000000C000000060000000C0000000C000000060000000C0000000C000000060000000D0000000C000000060000000D0000000C000000060000000E0000000C000000060000000E0000000C000000060000000F0000000C000000060000000F0000000C00000006000000100000000C00000006000000100000000C00000006000000000000000D00000006000000000000000D00000006000000010000000D00000006000000010000000D00000006000000020000000D00000006000000020000000D00000006000000030000000D00000006000000030000000D00000006000000040000000D00000006000000040000000D00000006000000050000000D00000006000000050000000D00000006000000060000000D00000006000000060000000D00000006000000070000000D00000006000000070000000D00000006000000080000000D00000006000000080000000D00000006000000090000000D00000006000000090000000D000000060000000A0000000D000000060000000A0000000D000000060000000B0000000D000000060000000B0000000D000000060000000C0000000D000000060000000C0000000D000000060000000D0000000D000000060000000D0000000D000000060000000E0000000D000000060000000E0000000D000000060000000F0000000D000000060000000F0000000D00000006000000100000000D00000006000000100000000D00000006000000000000000E00000006000000000000000E00000006000000010000000E00000006000000010000000E00000006000000020000000E00000006000000020000000E00000006000000030000000E00000006000000030000000E00000006000000040000000E00000006000000040000000E00000006000000050000000E00000006000000050000000E00000006000000060000000E00000006000000060000000E00000006000000070000000E00000006000000070000000E00000006000000080000000E00000006000000080000000E00000006000000090000000E00000006000000090000000E000000060000000A0000000E000000060000000A0000000E000000060000000B0000000E000000060000000B0000000E000000060000000C0000000E000000060000000C0000000E000000060000000D0000000E000000060000000D0000000E000000060000000E0000000E000000060000000E0000000E000000060000000F0000000E000000060000000F0000000E00000006000000100000000E00000006000000100000000E00000006000000000000000F00000006000000000000000F00000006000000010000000F00000006000000010000000F00000006000000020000000F00000006000000020000000F00000006000000030000000F00000006000000030000000F00000006000000040000000F00000006000000040000000F00000006000000050000000F00000006000000050000000F00000006000000060000000F00000006000000060000000F00000006000000070000000F00000006000000070000000F00000006000000080000000F00000006000000080000000F00000006000000090000000F00000006000000090000000F000000060000000A0000000F000000060000000A0000000F000000060000000B0000000F000000060000000B0000000F000000060000000C0000000F000000060000000C0000000F000000060000000D0000000F000000060000000D0000000F000000060000000E0000000F000000060000000E0000000F000000060000000F0000000F000000060000000F0000000F00000006000000100000000F00000006000000100000000F000000060000000000000010000000060000000000000010000000060000000100000010000000060000000100000010000000060000000200000010000000060000000200000010000000060000000300000010000000060000000300000010000000060000000400000010000000060000000400000010000000060000000500000010000000060000000500000010000000060000000600000010000000060000000600000010000000060000000700000010000000060000000700000010000000060000000800000010000000060000000800000010000000060000000900000010000000060000000900000010000000060000000A00000010000000060000000A00000010000000060000000B00000010000000060000000B00000010000000060000000C00000010000000060000000C00000010000000060000000D00000010000000060000000D00000010000000060000000E00000010000000060000000E00000010000000060000000F00000010000000060000000F00000010000000060000001000000010000000060000001000000010000000060000000000000000000000070000000000000000000000070000000100000000000000070000000100000000000000070000000200000000000000070000000200000000000000070000000300000000000000070000000300000000000000070000000400000000000000070000000400000000000000070000000500000000000000070000000500000000000000070000000600000000000000070000000600000000000000070000000700000000000000070000000700000000000000070000000800000000000000070000000800000000000000070000000900000000000000070000000900000000000000070000000A00000000000000070000000A00000000000000070000000B00000000000000070000000B00000000000000070000000C00000000000000070000000C00000000000000070000000D00000000000000070000000D00000000000000070000000E00000000000000070000000E00000000000000070000000F00000000000000070000000F00000000000000070000001000000000000000070000001000000000000000070000000000000001000000070000000000000001000000070000000100000001000000070000000100000001000000070000000200000001000000070000000200000001000000070000000300000001000000070000000300000001000000070000000400000001000000070000000400000001000000070000000500000001000000070000000500000001000000070000000600000001000000070000000600000001000000070000000700000001000000070000000700000001000000070000000800000001000000070000000800000001000000070000000900000001000000070000000900000001000000070000000A00000001000000070000000A00000001000000070000000B00000001000000070000000B00000001000000070000000C00000001000000070000000C00000001000000070000000D00000001000000070000000D00000001000000070000000E00000001000000070000000E00000001000000070000000F00000001000000070000000F00000001000000070000001000000001000000070000001000000001000000070000000000000002000000070000000000000002000000070000000100000002000000070000000100000002000000070000000200000002000000070000000200000002000000070000000300000002000000070000000300000002000000070000000400000002000000070000000400000002000000070000000500000002000000070000000500000002000000070000000600000002000000070000000600000002000000070000000700000002000000070000000700000002000000070000000800000002000000070000000800000002000000070000000900000002000000070000000900000002000000070000000A00000002000000070000000A00000002000000070000000B00000002000000070000000B00000002000000070000000C00000002000000070000000C00000002000000070000000D00000002000000070000000D00000002000000070000000E00000002000000070000000E00000002000000070000000F00000002000000070000000F00000002000000070000001000000002000000070000001000000002000000070000000000000003000000070000000000000003000000070000000100000003000000070000000100000003000000070000000200000003000000070000000200000003000000070000000300000003000000070000000300000003000000070000000400000003000000070000000400000003000000070000000500000003000000070000000500000003000000070000000600000003000000070000000600000003000000070000000700000003000000070000000700000003000000070000000800000003000000070000000800000003000000070000000900000003000000070000000900000003000000070000000A00000003000000070000000A00000003000000070000000B00000003000000070000000B00000003000000070000000C00000003000000070000000C00000003000000070000000D00000003000000070000000D00000003000000070000000E00000003000000070000000E00000003000000070000000F00000003000000070000000F00000003000000070000001000000003000000070000001000000003000000070000000000000004000000070000000000000004000000070000000100000004000000070000000100000004000000070000000200000004000000070000000200000004000000070000000300000004000000070000000300000004000000070000000400000004000000070000000400000004000000070000000500000004000000070000000500000004000000070000000600000004000000070000000600000004000000070000000700000004000000070000000700000004000000070000000800000004000000070000000800000004000000070000000900000004000000070000000900000004000000070000000A00000004000000070000000A00000004000000070000000B00000004000000070000000B00000004000000070000000C00000004000000070000000C00000004000000070000000D00000004000000070000000D00000004000000070000000E00000004000000070000000E00000004000000070000000F00000004000000070000000F00000004000000070000001000000004000000070000001000000004000000070000000000000005000000070000000000000005000000070000000100000005000000070000000100000005000000070000000200000005000000070000000200000005000000070000000300000005000000070000000300000005000000070000000400000005000000070000000400000005000000070000000500000005000000070000000500000005000000070000000600000005000000070000000600000005000000070000000700000005000000070000000700000005000000070000000800000005000000070000000800000005000000070000000900000005000000070000000900000005000000070000000A00000005000000070000000A00000005000000070000000B00000005000000070000000B00000005000000070000000C00000005000000070000000C00000005000000070000000D00000005000000070000000D00000005000000070000000E00000005000000070000000E00000005000000070000000F00000005000000070000000F00000005000000070000001000000005000000070000001000000005000000070000000000000006000000070000000000000006000000070000000100000006000000070000000100000006000000070000000200000006000000070000000200000006000000070000000300000006000000070000000300000006000000070000000400000006000000070000000400000006000000070000000500000006000000070000000500000006000000070000000600000006000000070000000600000006000000070000000700000006000000070000000700000006000000070000000800000006000000070000000800000006000000070000000900000006000000070000000900000006000000070000000A00000006000000070000000A00000006000000070000000B00000006000000070000000B00000006000000070000000C00000006000000070000000C00000006000000070000000D00000006000000070000000D00000006000000070000000E00000006000000070000000E00000006000000070000000F00000006000000070000000F00000006000000070000001000000006000000070000001000000006000000070000000000000007000000070000000000000007000000070000000100000007000000070000000100000007000000070000000200000007000000070000000200000007000000070000000300000007000000070000000300000007000000070000000400000007000000070000000400000007000000070000000500000007000000070000000500000007000000070000000600000007000000070000000600000007000000070000000700000007000000070000000700000007000000070000000800000007000000070000000800000007000000070000000900000007000000070000000900000007000000070000000A00000007000000070000000A00000007000000070000000B00000007000000070000000B00000007000000070000000C00000007000000070000000C00000007000000070000000D00000007000000070000000D00000007000000070000000E00000007000000070000000E00000007000000070000000F00000007000000070000000F00000007000000070000001000000007000000070000001000000007000000070000000000000008000000070000000000000008000000070000000100000008000000070000000100000008000000070000000200000008000000070000000200000008000000070000000300000008000000070000000300000008000000070000000400000008000000070000000400000008000000070000000500000008000000070000000500000008000000070000000600000008000000070000000600000008000000070000000700000008000000070000000700000008000000070000000800000008000000070000000800000008000000070000000900000008000000070000000900000008000000070000000A00000008000000070000000A00000008000000070000000B00000008000000070000000B00000008000000070000000C00000008000000070000000C00000008000000070000000D00000008000000070000000D00000008000000070000000E00000008000000070000000E00000008000000070000000F00000008000000070000000F00000008000000070000001000000008000000070000001000000008000000070000000000000009000000070000000000000009000000070000000100000009000000070000000100000009000000070000000200000009000000070000000200000009000000070000000300000009000000070000000300000009000000070000000400000009000000070000000400000009000000070000000500000009000000070000000500000009000000070000000600000009000000070000000600000009000000070000000700000009000000070000000700000009000000070000000800000009000000070000000800000009000000070000000900000009000000070000000900000009000000070000000A00000009000000070000000A00000009000000070000000B00000009000000070000000B00000009000000070000000C00000009000000070000000C00000009000000070000000D00000009000000070000000D00000009000000070000000E00000009000000070000000E00000009000000070000000F00000009000000070000000F0000000900000007000000100000000900000007000000100000000900000007000000000000000A00000007000000000000000A00000007000000010000000A00000007000000010000000A00000007000000020000000A00000007000000020000000A00000007000000030000000A00000007000000030000000A00000007000000040000000A00000007000000040000000A00000007000000050000000A00000007000000050000000A00000007000000060000000A00000007000000060000000A00000007000000070000000A00000007000000070000000A00000007000000080000000A00000007000000080000000A00000007000000090000000A00000007000000090000000A000000070000000A0000000A000000070000000A0000000A000000070000000B0000000A000000070000000B0000000A000000070000000C0000000A000000070000000C0000000A000000070000000D0000000A000000070000000D0000000A000000070000000E0000000A000000070000000E0000000A000000070000000F0000000A000000070000000F0000000A00000007000000100000000A00000007000000100000000A00000007000000000000000B00000007000000000000000B00000007000000010000000B00000007000000010000000B00000007000000020000000B00000007000000020000000B00000007000000030000000B00000007000000030000000B00000007000000040000000B00000007000000040000000B00000007000000050000000B00000007000000050000000B00000007000000060000000B00000007000000060000000B00000007000000070000000B00000007000000070000000B00000007000000080000000B00000007000000080000000B00000007000000090000000B00000007000000090000000B000000070000000A0000000B000000070000000A0000000B000000070000000B0000000B000000070000000B0000000B000000070000000C0000000B000000070000000C0000000B000000070000000D0000000B000000070000000D0000000B000000070000000E0000000B000000070000000E0000000B000000070000000F0000000B000000070000000F0000000B00000007000000100000000B00000007000000100000000B00000007000000000000000C00000007000000000000000C00000007000000010000000C00000007000000010000000C00000007000000020000000C00000007000000020000000C00000007000000030000000C00000007000000030000000C00000007000000040000000C00000007000000040000000C00000007000000050000000C00000007000000050000000C00000007000000060000000C00000007000000060000000C00000007000000070000000C00000007000000070000000C00000007000000080000000C00000007000000080000000C00000007000000090000000C00000007000000090000000C000000070000000A0000000C000000070000000A0000000C000000070000000B0000000C000000070000000B0000000C000000070000000C0000000C000000070000000C0000000C000000070000000D0000000C000000070000000D0000000C000000070000000E0000000C000000070000000E0000000C000000070000000F0000000C000000070000000F0000000C00000007000000100000000C00000007000000100000000C00000007000000000000000D00000007000000000000000D00000007000000010000000D00000007000000010000000D00000007000000020000000D00000007000000020000000D00000007000000030000000D00000007000000030000000D00000007000000040000000D00000007000000040000000D00000007000000050000000D00000007000000050000000D00000007000000060000000D00000007000000060000000D00000007000000070000000D00000007000000070000000D00000007000000080000000D00000007000000080000000D00000007000000090000000D00000007000000090000000D000000070000000A0000000D000000070000000A0000000D000000070000000B0000000D000000070000000B0000000D000000070000000C0000000D000000070000000C0000000D000000070000000D0000000D000000070000000D0000000D000000070000000E0000000D000000070000000E0000000D000000070000000F0000000D000000070000000F0000000D00000007000000100000000D00000007000000100000000D00000007000000000000000E00000007000000000000000E00000007000000010000000E00000007000000010000000E00000007000000020000000E00000007000000020000000E00000007000000030000000E00000007000000030000000E00000007000000040000000E00000007000000040000000E00000007000000050000000E00000007000000050000000E00000007000000060000000E00000007000000060000000E00000007000000070000000E00000007000000070000000E00000007000000080000000E00000007000000080000000E00000007000000090000000E00000007000000090000000E000000070000000A0000000E000000070000000A0000000E000000070000000B0000000E000000070000000B0000000E000000070000000C0000000E000000070000000C0000000E000000070000000D0000000E000000070000000D0000000E000000070000000E0000000E000000070000000E0000000E000000070000000F0000000E000000070000000F0000000E00000007000000100000000E00000007000000100000000E00000007000000000000000F00000007000000000000000F00000007000000010000000F00000007000000010000000F00000007000000020000000F00000007000000020000000F00000007000000030000000F00000007000000030000000F00000007000000040000000F00000007000000040000000F00000007000000050000000F00000007000000050000000F00000007000000060000000F00000007000000060000000F00000007000000070000000F00000007000000070000000F00000007000000080000000F00000007000000080000000F00000007000000090000000F00000007000000090000000F000000070000000A0000000F000000070000000A0000000F000000070000000B0000000F000000070000000B0000000F000000070000000C0000000F000000070000000C0000000F000000070000000D0000000F000000070000000D0000000F000000070000000E0000000F000000070000000E0000000F000000070000000F0000000F000000070000000F0000000F00000007000000100000000F00000007000000100000000F000000070000000000000010000000070000000000000010000000070000000100000010000000070000000100000010000000070000000200000010000000070000000200000010000000070000000300000010000000070000000300000010000000070000000400000010000000070000000400000010000000070000000500000010000000070000000500000010000000070000000600000010000000070000000600000010000000070000000700000010000000070000000700000010000000070000000800000010000000070000000800000010000000070000000900000010000000070000000900000010000000070000000A00000010000000070000000A00000010000000070000000B00000010000000070000000B00000010000000070000000C00000010000000070000000C00000010000000070000000D00000010000000070000000D00000010000000070000000E00000010000000070000000E00000010000000070000000F00000010000000070000000F00000010000000070000001000000010000000070000001000000010000000070000000000000000000000080000000000000000000000080000000100000000000000080000000100000000000000080000000200000000000000080000000200000000000000080000000300000000000000080000000300000000000000080000000400000000000000080000000400000000000000080000000500000000000000080000000500000000000000080000000600000000000000080000000600000000000000080000000700000000000000080000000700000000000000080000000800000000000000080000000800000000000000080000000900000000000000080000000900000000000000080000000A00000000000000080000000A00000000000000080000000B00000000000000080000000B00000000000000080000000C00000000000000080000000C00000000000000080000000D00000000000000080000000D00000000000000080000000E00000000000000080000000E00000000000000080000000F00000000000000080000000F00000000000000080000001000000000000000080000001000000000000000080000000000000001000000080000000000000001000000080000000100000001000000080000000100000001000000080000000200000001000000080000000200000001000000080000000300000001000000080000000300000001000000080000000400000001000000080000000400000001000000080000000500000001000000080000000500000001000000080000000600000001000000080000000600000001000000080000000700000001000000080000000700000001000000080000000800000001000000080000000800000001000000080000000900000001000000080000000900000001000000080000000A00000001000000080000000A00000001000000080000000B00000001000000080000000B00000001000000080000000C00000001000000080000000C00000001000000080000000D00000001000000080000000D00000001000000080000000E00000001000000080000000E00000001000000080000000F00000001000000080000000F00000001000000080000001000000001000000080000001000000001000000080000000000000002000000080000000000000002000000080000000100000002000000080000000100000002000000080000000200000002000000080000000200000002000000080000000300000002000000080000000300000002000000080000000400000002000000080000000400000002000000080000000500000002000000080000000500000002000000080000000600000002000000080000000600000002000000080000000700000002000000080000000700000002000000080000000800000002000000080000000800000002000000080000000900000002000000080000000900000002000000080000000A00000002000000080000000A00000002000000080000000B00000002000000080000000B00000002000000080000000C00000002000000080000000C00000002000000080000000D00000002000000080000000D00000002000000080000000E00000002000000080000000E00000002000000080000000F00000002000000080000000F00000002000000080000001000000002000000080000001000000002000000080000000000000003000000080000000000000003000000080000000100000003000000080000000100000003000000080000000200000003000000080000000200000003000000080000000300000003000000080000000300000003000000080000000400000003000000080000000400000003000000080000000500000003000000080000000500000003000000080000000600000003000000080000000600000003000000080000000700000003000000080000000700000003000000080000000800000003000000080000000800000003000000080000000900000003000000080000000900000003000000080000000A00000003000000080000000A00000003000000080000000B00000003000000080000000B00000003000000080000000C00000003000000080000000C00000003000000080000000D00000003000000080000000D00000003000000080000000E00000003000000080000000E00000003000000080000000F00000003000000080000000F00000003000000080000001000000003000000080000001000000003000000080000000000000004000000080000000000000004000000080000000100000004000000080000000100000004000000080000000200000004000000080000000200000004000000080000000300000004000000080000000300000004000000080000000400000004000000080000000400000004000000080000000500000004000000080000000500000004000000080000000600000004000000080000000600000004000000080000000700000004000000080000000700000004000000080000000800000004000000080000000800000004000000080000000900000004000000080000000900000004000000080000000A00000004000000080000000A00000004000000080000000B00000004000000080000000B00000004000000080000000C00000004000000080000000C00000004000000080000000D00000004000000080000000D00000004000000080000000E00000004000000080000000E00000004000000080000000F00000004000000080000000F00000004000000080000001000000004000000080000001000000004000000080000000000000005000000080000000000000005000000080000000100000005000000080000000100000005000000080000000200000005000000080000000200000005000000080000000300000005000000080000000300000005000000080000000400000005000000080000000400000005000000080000000500000005000000080000000500000005000000080000000600000005000000080000000600000005000000080000000700000005000000080000000700000005000000080000000800000005000000080000000800000005000000080000000900000005000000080000000900000005000000080000000A00000005000000080000000A00000005000000080000000B00000005000000080000000B00000005000000080000000C00000005000000080000000C00000005000000080000000D00000005000000080000000D00000005000000080000000E00000005000000080000000E00000005000000080000000F00000005000000080000000F00000005000000080000001000000005000000080000001000000005000000080000000000000006000000080000000000000006000000080000000100000006000000080000000100000006000000080000000200000006000000080000000200000006000000080000000300000006000000080000000300000006000000080000000400000006000000080000000400000006000000080000000500000006000000080000000500000006000000080000000600000006000000080000000600000006000000080000000700000006000000080000000700000006000000080000000800000006000000080000000800000006000000080000000900000006000000080000000900000006000000080000000A00000006000000080000000A00000006000000080000000B00000006000000080000000B00000006000000080000000C00000006000000080000000C00000006000000080000000D00000006000000080000000D00000006000000080000000E00000006000000080000000E00000006000000080000000F00000006000000080000000F00000006000000080000001000000006000000080000001000000006000000080000000000000007000000080000000000000007000000080000000100000007000000080000000100000007000000080000000200000007000000080000000200000007000000080000000300000007000000080000000300000007000000080000000400000007000000080000000400000007000000080000000500000007000000080000000500000007000000080000000600000007000000080000000600000007000000080000000700000007000000080000000700000007000000080000000800000007000000080000000800000007000000080000000900000007000000080000000900000007000000080000000A00000007000000080000000A00000007000000080000000B00000007000000080000000B00000007000000080000000C00000007000000080000000C00000007000000080000000D00000007000000080000000D00000007000000080000000E00000007000000080000000E00000007000000080000000F00000007000000080000000F00000007000000080000001000000007000000080000001000000007000000080000000000000008000000080000000000000008000000080000000100000008000000080000000100000008000000080000000200000008000000080000000200000008000000080000000300000008000000080000000300000008000000080000000400000008000000080000000400000008000000080000000500000008000000080000000500000008000000080000000600000008000000080000000600000008000000080000000700000008000000080000000700000008000000080000000800000008000000080000000800000008000000080000000900000008000000080000000900000008000000080000000A00000008000000080000000A00000008000000080000000B00000008000000080000000B00000008000000080000000C00000008000000080000000C00000008000000080000000D00000008000000080000000D00000008000000080000000E00000008000000080000000E00000008000000080000000F00000008000000080000000F00000008000000080000001000000008000000080000001000000008000000080000000000000009000000080000000000000009000000080000000100000009000000080000000100000009000000080000000200000009000000080000000200000009000000080000000300000009000000080000000300000009000000080000000400000009000000080000000400000009000000080000000500000009000000080000000500000009000000080000000600000009000000080000000600000009000000080000000700000009000000080000000700000009000000080000000800000009000000080000000800000009000000080000000900000009000000080000000900000009000000080000000A00000009000000080000000A00000009000000080000000B00000009000000080000000B00000009000000080000000C00000009000000080000000C00000009000000080000000D00000009000000080000000D00000009000000080000000E00000009000000080000000E00000009000000080000000F00000009000000080000000F0000000900000008000000100000000900000008000000100000000900000008000000000000000A00000008000000000000000A00000008000000010000000A00000008000000010000000A00000008000000020000000A00000008000000020000000A00000008000000030000000A00000008000000030000000A00000008000000040000000A00000008000000040000000A00000008000000050000000A00000008000000050000000A00000008000000060000000A00000008000000060000000A00000008000000070000000A00000008000000070000000A00000008000000080000000A00000008000000080000000A00000008000000090000000A00000008000000090000000A000000080000000A0000000A000000080000000A0000000A000000080000000B0000000A000000080000000B0000000A000000080000000C0000000A000000080000000C0000000A000000080000000D0000000A000000080000000D0000000A000000080000000E0000000A000000080000000E0000000A000000080000000F0000000A000000080000000F0000000A00000008000000100000000A00000008000000100000000A00000008000000000000000B00000008000000000000000B00000008000000010000000B00000008000000010000000B00000008000000020000000B00000008000000020000000B00000008000000030000000B00000008000000030000000B00000008000000040000000B00000008000000040000000B00000008000000050000000B00000008000000050000000B00000008000000060000000B00000008000000060000000B00000008000000070000000B00000008000000070000000B00000008000000080000000B00000008000000080000000B00000008000000090000000B00000008000000090000000B000000080000000A0000000B000000080000000A0000000B000000080000000B0000000B000000080000000B0000000B000000080000000C0000000B000000080000000C0000000B000000080000000D0000000B000000080000000D0000000B000000080000000E0000000B000000080000000E0000000B000000080000000F0000000B000000080000000F0000000B00000008000000100000000B00000008000000100000000B00000008000000000000000C00000008000000000000000C00000008000000010000000C00000008000000010000000C00000008000000020000000C00000008000000020000000C00000008000000030000000C00000008000000030000000C00000008000000040000000C00000008000000040000000C00000008000000050000000C00000008000000050000000C00000008000000060000000C00000008000000060000000C00000008000000070000000C00000008000000070000000C00000008000000080000000C00000008000000080000000C00000008000000090000000C00000008000000090000000C000000080000000A0000000C000000080000000A0000000C000000080000000B0000000C000000080000000B0000000C000000080000000C0000000C000000080000000C0000000C000000080000000D0000000C000000080000000D0000000C000000080000000E0000000C000000080000000E0000000C000000080000000F0000000C000000080000000F0000000C00000008000000100000000C00000008000000100000000C00000008000000000000000D00000008000000000000000D00000008000000010000000D00000008000000010000000D00000008000000020000000D00000008000000020000000D00000008000000030000000D00000008000000030000000D00000008000000040000000D00000008000000040000000D00000008000000050000000D00000008000000050000000D00000008000000060000000D00000008000000060000000D00000008000000070000000D00000008000000070000000D00000008000000080000000D00000008000000080000000D00000008000000090000000D00000008000000090000000D000000080000000A0000000D000000080000000A0000000D000000080000000B0000000D000000080000000B0000000D000000080000000C0000000D000000080000000C0000000D000000080000000D0000000D000000080000000D0000000D000000080000000E0000000D000000080000000E0000000D000000080000000F0000000D000000080000000F0000000D00000008000000100000000D00000008000000100000000D00000008000000000000000E00000008000000000000000E00000008000000010000000E00000008000000010000000E00000008000000020000000E00000008000000020000000E00000008000000030000000E00000008000000030000000E00000008000000040000000E00000008000000040000000E00000008000000050000000E00000008000000050000000E00000008000000060000000E00000008000000060000000E00000008000000070000000E00000008000000070000000E00000008000000080000000E00000008000000080000000E00000008000000090000000E00000008000000090000000E000000080000000A0000000E000000080000000A0000000E000000080000000B0000000E000000080000000B0000000E000000080000000C0000000E000000080000000C0000000E000000080000000D0000000E000000080000000D0000000E000000080000000E0000000E000000080000000E0000000E000000080000000F0000000E000000080000000F0000000E00000008000000100000000E00000008000000100000000E00000008000000000000000F00000008000000000000000F00000008000000010000000F00000008000000010000000F00000008000000020000000F00000008000000020000000F00000008000000030000000F00000008000000030000000F00000008000000040000000F00000008000000040000000F00000008000000050000000F00000008000000050000000F00000008000000060000000F00000008000000060000000F00000008000000070000000F00000008000000070000000F00000008000000080000000F00000008000000080000000F00000008000000090000000F00000008000000090000000F000000080000000A0000000F000000080000000A0000000F000000080000000B0000000F000000080000000B0000000F000000080000000C0000000F000000080000000C0000000F000000080000000D0000000F000000080000000D0000000F000000080000000E0000000F000000080000000E0000000F000000080000000F0000000F000000080000000F0000000F00000008000000100000000F00000008000000100000000F000000080000000000000010000000080000000000000010000000080000000100000010000000080000000100000010000000080000000200000010000000080000000200000010000000080000000300000010000000080000000300000010000000080000000400000010000000080000000400000010000000080000000500000010000000080000000500000010000000080000000600000010000000080000000600000010000000080000000700000010000000080000000700000010000000080000000800000010000000080000000800000010000000080000000900000010000000080000000900000010000000080000000A00000010000000080000000A00000010000000080000000B00000010000000080000000B00000010000000080000000C00000010000000080000000C00000010000000080000000D00000010000000080000000D00000010000000080000000E00000010000000080000000E00000010000000080000000F00000010000000080000000F00000010000000080000001000000010000000080000001000000010000000080000000000000000000000090000000000000000000000090000000100000000000000090000000100000000000000090000000200000000000000090000000200000000000000090000000300000000000000090000000300000000000000090000000400000000000000090000000400000000000000090000000500000000000000090000000500000000000000090000000600000000000000090000000600000000000000090000000700000000000000090000000700000000000000090000000800000000000000090000000800000000000000090000000900000000000000090000000900000000000000090000000A00000000000000090000000A00000000000000090000000B00000000000000090000000B00000000000000090000000C00000000000000090000000C00000000000000090000000D00000000000000090000000D00000000000000090000000E00000000000000090000000E00000000000000090000000F00000000000000090000000F00000000000000090000001000000000000000090000001000000000000000090000000000000001000000090000000000000001000000090000000100000001000000090000000100000001000000090000000200000001000000090000000200000001000000090000000300000001000000090000000300000001000000090000000400000001000000090000000400000001000000090000000500000001000000090000000500000001000000090000000600000001000000090000000600000001000000090000000700000001000000090000000700000001000000090000000800000001000000090000000800000001000000090000000900000001000000090000000900000001000000090000000A00000001000000090000000A00000001000000090000000B00000001000000090000000B00000001000000090000000C00000001000000090000000C00000001000000090000000D00000001000000090000000D00000001000000090000000E00000001000000090000000E00000001000000090000000F00000001000000090000000F00000001000000090000001000000001000000090000001000000001000000090000000000000002000000090000000000000002000000090000000100000002000000090000000100000002000000090000000200000002000000090000000200000002000000090000000300000002000000090000000300000002000000090000000400000002000000090000000400000002000000090000000500000002000000090000000500000002000000090000000600000002000000090000000600000002000000090000000700000002000000090000000700000002000000090000000800000002000000090000000800000002000000090000000900000002000000090000000900000002000000090000000A00000002000000090000000A00000002000000090000000B00000002000000090000000B00000002000000090000000C00000002000000090000000C00000002000000090000000D00000002000000090000000D00000002000000090000000E00000002000000090000000E00000002000000090000000F00000002000000090000000F00000002000000090000001000000002000000090000001000000002000000090000000000000003000000090000000000000003000000090000000100000003000000090000000100000003000000090000000200000003000000090000000200000003000000090000000300000003000000090000000300000003000000090000000400000003000000090000000400000003000000090000000500000003000000090000000500000003000000090000000600000003000000090000000600000003000000090000000700000003000000090000000700000003000000090000000800000003000000090000000800000003000000090000000900000003000000090000000900000003000000090000000A00000003000000090000000A00000003000000090000000B00000003000000090000000B00000003000000090000000C00000003000000090000000C00000003000000090000000D00000003000000090000000D00000003000000090000000E00000003000000090000000E00000003000000090000000F00000003000000090000000F00000003000000090000001000000003000000090000001000000003000000090000000000000004000000090000000000000004000000090000000100000004000000090000000100000004000000090000000200000004000000090000000200000004000000090000000300000004000000090000000300000004000000090000000400000004000000090000000400000004000000090000000500000004000000090000000500000004000000090000000600000004000000090000000600000004000000090000000700000004000000090000000700000004000000090000000800000004000000090000000800000004000000090000000900000004000000090000000900000004000000090000000A00000004000000090000000A00000004000000090000000B00000004000000090000000B00000004000000090000000C00000004000000090000000C00000004000000090000000D00000004000000090000000D00000004000000090000000E00000004000000090000000E00000004000000090000000F00000004000000090000000F00000004000000090000001000000004000000090000001000000004000000090000000000000005000000090000000000000005000000090000000100000005000000090000000100000005000000090000000200000005000000090000000200000005000000090000000300000005000000090000000300000005000000090000000400000005000000090000000400000005000000090000000500000005000000090000000500000005000000090000000600000005000000090000000600000005000000090000000700000005000000090000000700000005000000090000000800000005000000090000000800000005000000090000000900000005000000090000000900000005000000090000000A00000005000000090000000A00000005000000090000000B00000005000000090000000B00000005000000090000000C00000005000000090000000C00000005000000090000000D00000005000000090000000D00000005000000090000000E00000005000000090000000E00000005000000090000000F00000005000000090000000F00000005000000090000001000000005000000090000001000000005000000090000000000000006000000090000000000000006000000090000000100000006000000090000000100000006000000090000000200000006000000090000000200000006000000090000000300000006000000090000000300000006000000090000000400000006000000090000000400000006000000090000000500000006000000090000000500000006000000090000000600000006000000090000000600000006000000090000000700000006000000090000000700000006000000090000000800000006000000090000000800000006000000090000000900000006000000090000000900000006000000090000000A00000006000000090000000A00000006000000090000000B00000006000000090000000B00000006000000090000000C00000006000000090000000C00000006000000090000000D00000006000000090000000D00000006000000090000000E00000006000000090000000E00000006000000090000000F00000006000000090000000F00000006000000090000001000000006000000090000001000000006000000090000000000000007000000090000000000000007000000090000000100000007000000090000000100000007000000090000000200000007000000090000000200000007000000090000000300000007000000090000000300000007000000090000000400000007000000090000000400000007000000090000000500000007000000090000000500000007000000090000000600000007000000090000000600000007000000090000000700000007000000090000000700000007000000090000000800000007000000090000000800000007000000090000000900000007000000090000000900000007000000090000000A00000007000000090000000A00000007000000090000000B00000007000000090000000B00000007000000090000000C00000007000000090000000C00000007000000090000000D00000007000000090000000D00000007000000090000000E00000007000000090000000E00000007000000090000000F00000007000000090000000F00000007000000090000001000000007000000090000001000000007000000090000000000000008000000090000000000000008000000090000000100000008000000090000000100000008000000090000000200000008000000090000000200000008000000090000000300000008000000090000000300000008000000090000000400000008000000090000000400000008000000090000000500000008000000090000000500000008000000090000000600000008000000090000000600000008000000090000000700000008000000090000000700000008000000090000000800000008000000090000000800000008000000090000000900000008000000090000000900000008000000090000000A00000008000000090000000A00000008000000090000000B00000008000000090000000B00000008000000090000000C00000008000000090000000C00000008000000090000000D00000008000000090000000D00000008000000090000000E00000008000000090000000E00000008000000090000000F00000008000000090000000F00000008000000090000001000000008000000090000001000000008000000090000000000000009000000090000000000000009000000090000000100000009000000090000000100000009000000090000000200000009000000090000000200000009000000090000000300000009000000090000000300000009000000090000000400000009000000090000000400000009000000090000000500000009000000090000000500000009000000090000000600000009000000090000000600000009000000090000000700000009000000090000000700000009000000090000000800000009000000090000000800000009000000090000000900000009000000090000000900000009000000090000000A00000009000000090000000A00000009000000090000000B00000009000000090000000B00000009000000090000000C00000009000000090000000C00000009000000090000000D00000009000000090000000D00000009000000090000000E00000009000000090000000E00000009000000090000000F00000009000000090000000F0000000900000009000000100000000900000009000000100000000900000009000000000000000A00000009000000000000000A00000009000000010000000A00000009000000010000000A00000009000000020000000A00000009000000020000000A00000009000000030000000A00000009000000030000000A00000009000000040000000A00000009000000040000000A00000009000000050000000A00000009000000050000000A00000009000000060000000A00000009000000060000000A00000009000000070000000A00000009000000070000000A00000009000000080000000A00000009000000080000000A00000009000000090000000A00000009000000090000000A000000090000000A0000000A000000090000000A0000000A000000090000000B0000000A000000090000000B0000000A000000090000000C0000000A000000090000000C0000000A000000090000000D0000000A000000090000000D0000000A000000090000000E0000000A000000090000000E0000000A000000090000000F0000000A000000090000000F0000000A00000009000000100000000A00000009000000100000000A00000009000000000000000B00000009000000000000000B00000009000000010000000B00000009000000010000000B00000009000000020000000B00000009000000020000000B00000009000000030000000B00000009000000030000000B00000009000000040000000B00000009000000040000000B00000009000000050000000B00000009000000050000000B00000009000000060000000B00000009000000060000000B00000009000000070000000B00000009000000070000000B00000009000000080000000B00000009000000080000000B00000009000000090000000B00000009000000090000000B000000090000000A0000000B000000090000000A0000000B000000090000000B0000000B000000090000000B0000000B000000090000000C0000000B000000090000000C0000000B000000090000000D0000000B000000090000000D0000000B000000090000000E0000000B000000090000000E0000000B000000090000000F0000000B000000090000000F0000000B00000009000000100000000B00000009000000100000000B00000009000000000000000C00000009000000000000000C00000009000000010000000C00000009000000010000000C00000009000000020000000C00000009000000020000000C00000009000000030000000C00000009000000030000000C00000009000000040000000C00000009000000040000000C00000009000000050000000C00000009000000050000000C00000009000000060000000C00000009000000060000000C00000009000000070000000C00000009000000070000000C00000009000000080000000C00000009000000080000000C00000009000000090000000C00000009000000090000000C000000090000000A0000000C000000090000000A0000000C000000090000000B0000000C000000090000000B0000000C000000090000000C0000000C000000090000000C0000000C000000090000000D0000000C000000090000000D0000000C000000090000000E0000000C000000090000000E0000000C000000090000000F0000000C000000090000000F0000000C00000009000000100000000C00000009000000100000000C00000009000000000000000D00000009000000000000000D00000009000000010000000D00000009000000010000000D00000009000000020000000D00000009000000020000000D00000009000000030000000D00000009000000030000000D00000009000000040000000D00000009000000040000000D00000009000000050000000D00000009000000050000000D00000009000000060000000D00000009000000060000000D00000009000000070000000D00000009000000070000000D00000009000000080000000D00000009000000080000000D00000009000000090000000D00000009000000090000000D000000090000000A0000000D000000090000000A0000000D000000090000000B0000000D000000090000000B0000000D000000090000000C0000000D000000090000000C0000000D000000090000000D0000000D000000090000000D0000000D000000090000000E0000000D000000090000000E0000000D000000090000000F0000000D000000090000000F0000000D00000009000000100000000D00000009000000100000000D00000009000000000000000E00000009000000000000000E00000009000000010000000E00000009000000010000000E00000009000000020000000E00000009000000020000000E00000009000000030000000E00000009000000030000000E00000009000000040000000E00000009000000040000000E00000009000000050000000E00000009000000050000000E00000009000000060000000E00000009000000060000000E00000009000000070000000E00000009000000070000000E00000009000000080000000E00000009000000080000000E00000009000000090000000E00000009000000090000000E000000090000000A0000000E000000090000000A0000000E000000090000000B0000000E000000090000000B0000000E000000090000000C0000000E000000090000000C0000000E000000090000000D0000000E000000090000000D0000000E000000090000000E0000000E000000090000000E0000000E000000090000000F0000000E000000090000000F0000000E00000009000000100000000E00000009000000100000000E00000009000000000000000F00000009000000000000000F00000009000000010000000F00000009000000010000000F00000009000000020000000F00000009000000020000000F00000009000000030000000F00000009000000030000000F00000009000000040000000F00000009000000040000000F00000009000000050000000F00000009000000050000000F00000009000000060000000F00000009000000060000000F00000009000000070000000F00000009000000070000000F00000009000000080000000F00000009000000080000000F00000009000000090000000F00000009000000090000000F000000090000000A0000000F000000090000000A0000000F000000090000000B0000000F000000090000000B0000000F000000090000000C0000000F000000090000000C0000000F000000090000000D0000000F000000090000000D0000000F000000090000000E0000000F000000090000000E0000000F000000090000000F0000000F000000090000000F0000000F00000009000000100000000F00000009000000100000000F000000090000000000000010000000090000000000000010000000090000000100000010000000090000000100000010000000090000000200000010000000090000000200000010000000090000000300000010000000090000000300000010000000090000000400000010000000090000000400000010000000090000000500000010000000090000000500000010000000090000000600000010000000090000000600000010000000090000000700000010000000090000000700000010000000090000000800000010000000090000000800000010000000090000000900000010000000090000000900000010000000090000000A00000010000000090000000A00000010000000090000000B00000010000000090000000B00000010000000090000000C00000010000000090000000C00000010000000090000000D00000010000000090000000D00000010000000090000000E00000010000000090000000E00000010000000090000000F00000010000000090000000F000000100000000900000010000000100000000900000010000000100000000900000000000000000000000A00000000000000000000000A00000001000000000000000A00000001000000000000000A00000002000000000000000A00000002000000000000000A00000003000000000000000A00000003000000000000000A00000004000000000000000A00000004000000000000000A00000005000000000000000A00000005000000000000000A00000006000000000000000A00000006000000000000000A00000007000000000000000A00000007000000000000000A00000008000000000000000A00000008000000000000000A00000009000000000000000A00000009000000000000000A0000000A000000000000000A0000000A000000000000000A0000000B000000000000000A0000000B000000000000000A0000000C000000000000000A0000000C000000000000000A0000000D000000000000000A0000000D000000000000000A0000000E000000000000000A0000000E000000000000000A0000000F000000000000000A0000000F000000000000000A00000010000000000000000A00000010000000000000000A00000000000000010000000A00000000000000010000000A00000001000000010000000A00000001000000010000000A00000002000000010000000A00000002000000010000000A00000003000000010000000A00000003000000010000000A00000004000000010000000A00000004000000010000000A00000005000000010000000A00000005000000010000000A00000006000000010000000A00000006000000010000000A00000007000000010000000A00000007000000010000000A00000008000000010000000A00000008000000010000000A00000009000000010000000A00000009000000010000000A0000000A000000010000000A0000000A000000010000000A0000000B000000010000000A0000000B000000010000000A0000000C000000010000000A0000000C000000010000000A0000000D000000010000000A0000000D000000010000000A0000000E000000010000000A0000000E000000010000000A0000000F000000010000000A0000000F000000010000000A00000010000000010000000A00000010000000010000000A00000000000000020000000A00000000000000020000000A00000001000000020000000A00000001000000020000000A00000002000000020000000A00000002000000020000000A00000003000000020000000A00000003000000020000000A00000004000000020000000A00000004000000020000000A00000005000000020000000A00000005000000020000000A00000006000000020000000A00000006000000020000000A00000007000000020000000A00000007000000020000000A00000008000000020000000A00000008000000020000000A00000009000000020000000A00000009000000020000000A0000000A000000020000000A0000000A000000020000000A0000000B000000020000000A0000000B000000020000000A0000000C000000020000000A0000000C000000020000000A0000000D000000020000000A0000000D000000020000000A0000000E000000020000000A0000000E000000020000000A0000000F000000020000000A0000000F000000020000000A00000010000000020000000A00000010000000020000000A00000000000000030000000A00000000000000030000000A00000001000000030000000A00000001000000030000000A00000002000000030000000A00000002000000030000000A00000003000000030000000A00000003000000030000000A00000004000000030000000A00000004000000030000000A00000005000000030000000A00000005000000030000000A00000006000000030000000A00000006000000030000000A00000007000000030000000A00000007000000030000000A00000008000000030000000A00000008000000030000000A00000009000000030000000A00000009000000030000000A0000000A000000030000000A0000000A000000030000000A0000000B000000030000000A0000000B000000030000000A0000000C000000030000000A0000000C000000030000000A0000000D000000030000000A0000000D000000030000000A0000000E000000030000000A0000000E000000030000000A0000000F000000030000000A0000000F000000030000000A00000010000000030000000A00000010000000030000000A00000000000000040000000A00000000000000040000000A00000001000000040000000A00000001000000040000000A00000002000000040000000A00000002000000040000000A00000003000000040000000A00000003000000040000000A00000004000000040000000A00000004000000040000000A00000005000000040000000A00000005000000040000000A00000006000000040000000A00000006000000040000000A00000007000000040000000A00000007000000040000000A00000008000000040000000A00000008000000040000000A00000009000000040000000A00000009000000040000000A0000000A000000040000000A0000000A000000040000000A0000000B000000040000000A0000000B000000040000000A0000000C000000040000000A0000000C000000040000000A0000000D000000040000000A0000000D000000040000000A0000000E000000040000000A0000000E000000040000000A0000000F000000040000000A0000000F000000040000000A00000010000000040000000A00000010000000040000000A00000000000000050000000A00000000000000050000000A00000001000000050000000A00000001000000050000000A00000002000000050000000A00000002000000050000000A00000003000000050000000A00000003000000050000000A00000004000000050000000A00000004000000050000000A00000005000000050000000A00000005000000050000000A00000006000000050000000A00000006000000050000000A00000007000000050000000A00000007000000050000000A00000008000000050000000A00000008000000050000000A00000009000000050000000A00000009000000050000000A0000000A000000050000000A0000000A000000050000000A0000000B000000050000000A0000000B000000050000000A0000000C000000050000000A0000000C000000050000000A0000000D000000050000000A0000000D000000050000000A0000000E000000050000000A0000000E000000050000000A0000000F000000050000000A0000000F000000050000000A00000010000000050000000A00000010000000050000000A00000000000000060000000A00000000000000060000000A00000001000000060000000A00000001000000060000000A00000002000000060000000A00000002000000060000000A00000003000000060000000A00000003000000060000000A00000004000000060000000A00000004000000060000000A00000005000000060000000A00000005000000060000000A00000006000000060000000A00000006000000060000000A00000007000000060000000A00000007000000060000000A00000008000000060000000A00000008000000060000000A00000009000000060000000A00000009000000060000000A0000000A000000060000000A0000000A000000060000000A0000000B000000060000000A0000000B000000060000000A0000000C000000060000000A0000000C000000060000000A0000000D000000060000000A0000000D000000060000000A0000000E000000060000000A0000000E000000060000000A0000000F000000060000000A0000000F000000060000000A00000010000000060000000A00000010000000060000000A00000000000000070000000A00000000000000070000000A00000001000000070000000A00000001000000070000000A00000002000000070000000A00000002000000070000000A00000003000000070000000A00000003000000070000000A00000004000000070000000A00000004000000070000000A00000005000000070000000A00000005000000070000000A00000006000000070000000A00000006000000070000000A00000007000000070000000A00000007000000070000000A00000008000000070000000A00000008000000070000000A00000009000000070000000A00000009000000070000000A0000000A000000070000000A0000000A000000070000000A0000000B000000070000000A0000000B000000070000000A0000000C000000070000000A0000000C000000070000000A0000000D000000070000000A0000000D000000070000000A0000000E000000070000000A0000000E000000070000000A0000000F000000070000000A0000000F000000070000000A00000010000000070000000A00000010000000070000000A00000000000000080000000A00000000000000080000000A00000001000000080000000A00000001000000080000000A00000002000000080000000A00000002000000080000000A00000003000000080000000A00000003000000080000000A00000004000000080000000A00000004000000080000000A00000005000000080000000A00000005000000080000000A00000006000000080000000A00000006000000080000000A00000007000000080000000A00000007000000080000000A00000008000000080000000A00000008000000080000000A00000009000000080000000A00000009000000080000000A0000000A000000080000000A0000000A000000080000000A0000000B000000080000000A0000000B000000080000000A0000000C000000080000000A0000000C000000080000000A0000000D000000080000000A0000000D000000080000000A0000000E000000080000000A0000000E000000080000000A0000000F000000080000000A0000000F000000080000000A00000010000000080000000A00000010000000080000000A00000000000000090000000A00000000000000090000000A00000001000000090000000A00000001000000090000000A00000002000000090000000A00000002000000090000000A00000003000000090000000A00000003000000090000000A00000004000000090000000A00000004000000090000000A00000005000000090000000A00000005000000090000000A00000006000000090000000A00000006000000090000000A00000007000000090000000A00000007000000090000000A00000008000000090000000A00000008000000090000000A00000009000000090000000A00000009000000090000000A0000000A000000090000000A0000000A000000090000000A0000000B000000090000000A0000000B000000090000000A0000000C000000090000000A0000000C000000090000000A0000000D000000090000000A0000000D000000090000000A0000000E000000090000000A0000000E000000090000000A0000000F000000090000000A0000000F000000090000000A00000010000000090000000A00000010000000090000000A000000000000000A0000000A000000000000000A0000000A000000010000000A0000000A000000010000000A0000000A000000020000000A0000000A000000020000000A0000000A000000030000000A0000000A000000030000000A0000000A000000040000000A0000000A000000040000000A0000000A000000050000000A0000000A000000050000000A0000000A000000060000000A0000000A000000060000000A0000000A000000070000000A0000000A000000070000000A0000000A000000080000000A0000000A000000080000000A0000000A000000090000000A0000000A000000090000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000A000000100000000A0000000A000000100000000A0000000A000000000000000B0000000A000000000000000B0000000A000000010000000B0000000A000000010000000B0000000A000000020000000B0000000A000000020000000B0000000A000000030000000B0000000A000000030000000B0000000A000000040000000B0000000A000000040000000B0000000A000000050000000B0000000A000000050000000B0000000A000000060000000B0000000A000000060000000B0000000A000000070000000B0000000A000000070000000B0000000A000000080000000B0000000A000000080000000B0000000A000000090000000B0000000A000000090000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000A000000100000000B0000000A000000100000000B0000000A000000000000000C0000000A000000000000000C0000000A000000010000000C0000000A000000010000000C0000000A000000020000000C0000000A000000020000000C0000000A000000030000000C0000000A000000030000000C0000000A000000040000000C0000000A000000040000000C0000000A000000050000000C0000000A000000050000000C0000000A000000060000000C0000000A000000060000000C0000000A000000070000000C0000000A000000070000000C0000000A000000080000000C0000000A000000080000000C0000000A000000090000000C0000000A000000090000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000A000000100000000C0000000A000000100000000C0000000A000000000000000D0000000A000000000000000D0000000A000000010000000D0000000A000000010000000D0000000A000000020000000D0000000A000000020000000D0000000A000000030000000D0000000A000000030000000D0000000A000000040000000D0000000A000000040000000D0000000A000000050000000D0000000A000000050000000D0000000A000000060000000D0000000A000000060000000D0000000A000000070000000D0000000A000000070000000D0000000A000000080000000D0000000A000000080000000D0000000A000000090000000D0000000A000000090000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000A000000100000000D0000000A000000100000000D0000000A000000000000000E0000000A000000000000000E0000000A000000010000000E0000000A000000010000000E0000000A000000020000000E0000000A000000020000000E0000000A000000030000000E0000000A000000030000000E0000000A000000040000000E0000000A000000040000000E0000000A000000050000000E0000000A000000050000000E0000000A000000060000000E0000000A000000060000000E0000000A000000070000000E0000000A000000070000000E0000000A000000080000000E0000000A000000080000000E0000000A000000090000000E0000000A000000090000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000A000000100000000E0000000A000000100000000E0000000A000000000000000F0000000A000000000000000F0000000A000000010000000F0000000A000000010000000F0000000A000000020000000F0000000A000000020000000F0000000A000000030000000F0000000A000000030000000F0000000A000000040000000F0000000A000000040000000F0000000A000000050000000F0000000A000000050000000F0000000A000000060000000F0000000A000000060000000F0000000A000000070000000F0000000A000000070000000F0000000A000000080000000F0000000A000000080000000F0000000A000000090000000F0000000A000000090000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000A000000100000000F0000000A000000100000000F0000000A00000000000000100000000A00000000000000100000000A00000001000000100000000A00000001000000100000000A00000002000000100000000A00000002000000100000000A00000003000000100000000A00000003000000100000000A00000004000000100000000A00000004000000100000000A00000005000000100000000A00000005000000100000000A00000006000000100000000A00000006000000100000000A00000007000000100000000A00000007000000100000000A00000008000000100000000A00000008000000100000000A00000009000000100000000A00000009000000100000000A0000000A000000100000000A0000000A000000100000000A0000000B000000100000000A0000000B000000100000000A0000000C000000100000000A0000000C000000100000000A0000000D000000100000000A0000000D000000100000000A0000000E000000100000000A0000000E000000100000000A0000000F000000100000000A0000000F000000100000000A00000010000000100000000A00000010000000100000000A00000000000000000000000B00000000000000000000000B00000001000000000000000B00000001000000000000000B00000002000000000000000B00000002000000000000000B00000003000000000000000B00000003000000000000000B00000004000000000000000B00000004000000000000000B00000005000000000000000B00000005000000000000000B00000006000000000000000B00000006000000000000000B00000007000000000000000B00000007000000000000000B00000008000000000000000B00000008000000000000000B00000009000000000000000B00000009000000000000000B0000000A000000000000000B0000000A000000000000000B0000000B000000000000000B0000000B000000000000000B0000000C000000000000000B0000000C000000000000000B0000000D000000000000000B0000000D000000000000000B0000000E000000000000000B0000000E000000000000000B0000000F000000000000000B0000000F000000000000000B00000010000000000000000B00000010000000000000000B00000000000000010000000B00000000000000010000000B00000001000000010000000B00000001000000010000000B00000002000000010000000B00000002000000010000000B00000003000000010000000B00000003000000010000000B00000004000000010000000B00000004000000010000000B00000005000000010000000B00000005000000010000000B00000006000000010000000B00000006000000010000000B00000007000000010000000B00000007000000010000000B00000008000000010000000B00000008000000010000000B00000009000000010000000B00000009000000010000000B0000000A000000010000000B0000000A000000010000000B0000000B000000010000000B0000000B000000010000000B0000000C000000010000000B0000000C000000010000000B0000000D000000010000000B0000000D000000010000000B0000000E000000010000000B0000000E000000010000000B0000000F000000010000000B0000000F000000010000000B00000010000000010000000B00000010000000010000000B00000000000000020000000B00000000000000020000000B00000001000000020000000B00000001000000020000000B00000002000000020000000B00000002000000020000000B00000003000000020000000B00000003000000020000000B00000004000000020000000B00000004000000020000000B00000005000000020000000B00000005000000020000000B00000006000000020000000B00000006000000020000000B00000007000000020000000B00000007000000020000000B00000008000000020000000B00000008000000020000000B00000009000000020000000B00000009000000020000000B0000000A000000020000000B0000000A000000020000000B0000000B000000020000000B0000000B000000020000000B0000000C000000020000000B0000000C000000020000000B0000000D000000020000000B0000000D000000020000000B0000000E000000020000000B0000000E000000020000000B0000000F000000020000000B0000000F000000020000000B00000010000000020000000B00000010000000020000000B00000000000000030000000B00000000000000030000000B00000001000000030000000B00000001000000030000000B00000002000000030000000B00000002000000030000000B00000003000000030000000B00000003000000030000000B00000004000000030000000B00000004000000030000000B00000005000000030000000B00000005000000030000000B00000006000000030000000B00000006000000030000000B00000007000000030000000B00000007000000030000000B00000008000000030000000B00000008000000030000000B00000009000000030000000B00000009000000030000000B0000000A000000030000000B0000000A000000030000000B0000000B000000030000000B0000000B000000030000000B0000000C000000030000000B0000000C000000030000000B0000000D000000030000000B0000000D000000030000000B0000000E000000030000000B0000000E000000030000000B0000000F000000030000000B0000000F000000030000000B00000010000000030000000B00000010000000030000000B00000000000000040000000B00000000000000040000000B00000001000000040000000B00000001000000040000000B00000002000000040000000B00000002000000040000000B00000003000000040000000B00000003000000040000000B00000004000000040000000B00000004000000040000000B00000005000000040000000B00000005000000040000000B00000006000000040000000B00000006000000040000000B00000007000000040000000B00000007000000040000000B00000008000000040000000B00000008000000040000000B00000009000000040000000B00000009000000040000000B0000000A000000040000000B0000000A000000040000000B0000000B000000040000000B0000000B000000040000000B0000000C000000040000000B0000000C000000040000000B0000000D000000040000000B0000000D000000040000000B0000000E000000040000000B0000000E000000040000000B0000000F000000040000000B0000000F000000040000000B00000010000000040000000B00000010000000040000000B00000000000000050000000B00000000000000050000000B00000001000000050000000B00000001000000050000000B00000002000000050000000B00000002000000050000000B00000003000000050000000B00000003000000050000000B00000004000000050000000B00000004000000050000000B00000005000000050000000B00000005000000050000000B00000006000000050000000B00000006000000050000000B00000007000000050000000B00000007000000050000000B00000008000000050000000B00000008000000050000000B00000009000000050000000B00000009000000050000000B0000000A000000050000000B0000000A000000050000000B0000000B000000050000000B0000000B000000050000000B0000000C000000050000000B0000000C000000050000000B0000000D000000050000000B0000000D000000050000000B0000000E000000050000000B0000000E000000050000000B0000000F000000050000000B0000000F000000050000000B00000010000000050000000B00000010000000050000000B00000000000000060000000B00000000000000060000000B00000001000000060000000B00000001000000060000000B00000002000000060000000B00000002000000060000000B00000003000000060000000B00000003000000060000000B00000004000000060000000B00000004000000060000000B00000005000000060000000B00000005000000060000000B00000006000000060000000B00000006000000060000000B00000007000000060000000B00000007000000060000000B00000008000000060000000B00000008000000060000000B00000009000000060000000B00000009000000060000000B0000000A000000060000000B0000000A000000060000000B0000000B000000060000000B0000000B000000060000000B0000000C000000060000000B0000000C000000060000000B0000000D000000060000000B0000000D000000060000000B0000000E000000060000000B0000000E000000060000000B0000000F000000060000000B0000000F000000060000000B00000010000000060000000B00000010000000060000000B00000000000000070000000B00000000000000070000000B00000001000000070000000B00000001000000070000000B00000002000000070000000B00000002000000070000000B00000003000000070000000B00000003000000070000000B00000004000000070000000B00000004000000070000000B00000005000000070000000B00000005000000070000000B00000006000000070000000B00000006000000070000000B00000007000000070000000B00000007000000070000000B00000008000000070000000B00000008000000070000000B00000009000000070000000B00000009000000070000000B0000000A000000070000000B0000000A000000070000000B0000000B000000070000000B0000000B000000070000000B0000000C000000070000000B0000000C000000070000000B0000000D000000070000000B0000000D000000070000000B0000000E000000070000000B0000000E000000070000000B0000000F000000070000000B0000000F000000070000000B00000010000000070000000B00000010000000070000000B00000000000000080000000B00000000000000080000000B00000001000000080000000B00000001000000080000000B00000002000000080000000B00000002000000080000000B00000003000000080000000B00000003000000080000000B00000004000000080000000B00000004000000080000000B00000005000000080000000B00000005000000080000000B00000006000000080000000B00000006000000080000000B00000007000000080000000B00000007000000080000000B00000008000000080000000B00000008000000080000000B00000009000000080000000B00000009000000080000000B0000000A000000080000000B0000000A000000080000000B0000000B000000080000000B0000000B000000080000000B0000000C000000080000000B0000000C000000080000000B0000000D000000080000000B0000000D000000080000000B0000000E000000080000000B0000000E000000080000000B0000000F000000080000000B0000000F000000080000000B00000010000000080000000B00000010000000080000000B00000000000000090000000B00000000000000090000000B00000001000000090000000B00000001000000090000000B00000002000000090000000B00000002000000090000000B00000003000000090000000B00000003000000090000000B00000004000000090000000B00000004000000090000000B00000005000000090000000B00000005000000090000000B00000006000000090000000B00000006000000090000000B00000007000000090000000B00000007000000090000000B00000008000000090000000B00000008000000090000000B00000009000000090000000B00000009000000090000000B0000000A000000090000000B0000000A000000090000000B0000000B000000090000000B0000000B000000090000000B0000000C000000090000000B0000000C000000090000000B0000000D000000090000000B0000000D000000090000000B0000000E000000090000000B0000000E000000090000000B0000000F000000090000000B0000000F000000090000000B00000010000000090000000B00000010000000090000000B000000000000000A0000000B000000000000000A0000000B000000010000000A0000000B000000010000000A0000000B000000020000000A0000000B000000020000000A0000000B000000030000000A0000000B000000030000000A0000000B000000040000000A0000000B000000040000000A0000000B000000050000000A0000000B000000050000000A0000000B000000060000000A0000000B000000060000000A0000000B000000070000000A0000000B000000070000000A0000000B000000080000000A0000000B000000080000000A0000000B000000090000000A0000000B000000090000000A0000000B0000000A0000000A0000000B0000000A0000000A0000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000F0000000A0000000B0000000F0000000A0000000B000000100000000A0000000B000000100000000A0000000B000000000000000B0000000B000000000000000B0000000B000000010000000B0000000B000000010000000B0000000B000000020000000B0000000B000000020000000B0000000B000000030000000B0000000B000000030000000B0000000B000000040000000B0000000B000000040000000B0000000B000000050000000B0000000B000000050000000B0000000B000000060000000B0000000B000000060000000B0000000B000000070000000B0000000B000000070000000B0000000B000000080000000B0000000B000000080000000B0000000B000000090000000B0000000B000000090000000B0000000B0000000A0000000B0000000B0000000A0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000B000000100000000B0000000B000000100000000B0000000B000000000000000C0000000B000000000000000C0000000B000000010000000C0000000B000000010000000C0000000B000000020000000C0000000B000000020000000C0000000B000000030000000C0000000B000000030000000C0000000B000000040000000C0000000B000000040000000C0000000B000000050000000C0000000B000000050000000C0000000B000000060000000C0000000B000000060000000C0000000B000000070000000C0000000B000000070000000C0000000B000000080000000C0000000B000000080000000C0000000B000000090000000C0000000B000000090000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000B000000100000000C0000000B000000100000000C0000000B000000000000000D0000000B000000000000000D0000000B000000010000000D0000000B000000010000000D0000000B000000020000000D0000000B000000020000000D0000000B000000030000000D0000000B000000030000000D0000000B000000040000000D0000000B000000040000000D0000000B000000050000000D0000000B000000050000000D0000000B000000060000000D0000000B000000060000000D0000000B000000070000000D0000000B000000070000000D0000000B000000080000000D0000000B000000080000000D0000000B000000090000000D0000000B000000090000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000B000000100000000D0000000B000000100000000D0000000B000000000000000E0000000B000000000000000E0000000B000000010000000E0000000B000000010000000E0000000B000000020000000E0000000B000000020000000E0000000B000000030000000E0000000B000000030000000E0000000B000000040000000E0000000B000000040000000E0000000B000000050000000E0000000B000000050000000E0000000B000000060000000E0000000B000000060000000E0000000B000000070000000E0000000B000000070000000E0000000B000000080000000E0000000B000000080000000E0000000B000000090000000E0000000B000000090000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000B000000100000000E0000000B000000100000000E0000000B000000000000000F0000000B000000000000000F0000000B000000010000000F0000000B000000010000000F0000000B000000020000000F0000000B000000020000000F0000000B000000030000000F0000000B000000030000000F0000000B000000040000000F0000000B000000040000000F0000000B000000050000000F0000000B000000050000000F0000000B000000060000000F0000000B000000060000000F0000000B000000070000000F0000000B000000070000000F0000000B000000080000000F0000000B000000080000000F0000000B000000090000000F0000000B000000090000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000B000000100000000F0000000B000000100000000F0000000B00000000000000100000000B00000000000000100000000B00000001000000100000000B00000001000000100000000B00000002000000100000000B00000002000000100000000B00000003000000100000000B00000003000000100000000B00000004000000100000000B00000004000000100000000B00000005000000100000000B00000005000000100000000B00000006000000100000000B00000006000000100000000B00000007000000100000000B00000007000000100000000B00000008000000100000000B00000008000000100000000B00000009000000100000000B00000009000000100000000B0000000A000000100000000B0000000A000000100000000B0000000B000000100000000B0000000B000000100000000B0000000C000000100000000B0000000C000000100000000B0000000D000000100000000B0000000D000000100000000B0000000E000000100000000B0000000E000000100000000B0000000F000000100000000B0000000F000000100000000B00000010000000100000000B00000010000000100000000B00000000000000000000000C00000000000000000000000C00000001000000000000000C00000001000000000000000C00000002000000000000000C00000002000000000000000C00000003000000000000000C00000003000000000000000C00000004000000000000000C00000004000000000000000C00000005000000000000000C00000005000000000000000C00000006000000000000000C00000006000000000000000C00000007000000000000000C00000007000000000000000C00000008000000000000000C00000008000000000000000C00000009000000000000000C00000009000000000000000C0000000A000000000000000C0000000A000000000000000C0000000B000000000000000C0000000B000000000000000C0000000C000000000000000C0000000C000000000000000C0000000D000000000000000C0000000D000000000000000C0000000E000000000000000C0000000E000000000000000C0000000F000000000000000C0000000F000000000000000C00000010000000000000000C00000010000000000000000C00000000000000010000000C00000000000000010000000C00000001000000010000000C00000001000000010000000C00000002000000010000000C00000002000000010000000C00000003000000010000000C00000003000000010000000C00000004000000010000000C00000004000000010000000C00000005000000010000000C00000005000000010000000C00000006000000010000000C00000006000000010000000C00000007000000010000000C00000007000000010000000C00000008000000010000000C00000008000000010000000C00000009000000010000000C00000009000000010000000C0000000A000000010000000C0000000A000000010000000C0000000B000000010000000C0000000B000000010000000C0000000C000000010000000C0000000C000000010000000C0000000D000000010000000C0000000D000000010000000C0000000E000000010000000C0000000E000000010000000C0000000F000000010000000C0000000F000000010000000C00000010000000010000000C00000010000000010000000C00000000000000020000000C00000000000000020000000C00000001000000020000000C00000001000000020000000C00000002000000020000000C00000002000000020000000C00000003000000020000000C00000003000000020000000C00000004000000020000000C00000004000000020000000C00000005000000020000000C00000005000000020000000C00000006000000020000000C00000006000000020000000C00000007000000020000000C00000007000000020000000C00000008000000020000000C00000008000000020000000C00000009000000020000000C00000009000000020000000C0000000A000000020000000C0000000A000000020000000C0000000B000000020000000C0000000B000000020000000C0000000C000000020000000C0000000C000000020000000C0000000D000000020000000C0000000D000000020000000C0000000E000000020000000C0000000E000000020000000C0000000F000000020000000C0000000F000000020000000C00000010000000020000000C00000010000000020000000C00000000000000030000000C00000000000000030000000C00000001000000030000000C00000001000000030000000C00000002000000030000000C00000002000000030000000C00000003000000030000000C00000003000000030000000C00000004000000030000000C00000004000000030000000C00000005000000030000000C00000005000000030000000C00000006000000030000000C00000006000000030000000C00000007000000030000000C00000007000000030000000C00000008000000030000000C00000008000000030000000C00000009000000030000000C00000009000000030000000C0000000A000000030000000C0000000A000000030000000C0000000B000000030000000C0000000B000000030000000C0000000C000000030000000C0000000C000000030000000C0000000D000000030000000C0000000D000000030000000C0000000E000000030000000C0000000E000000030000000C0000000F000000030000000C0000000F000000030000000C00000010000000030000000C00000010000000030000000C00000000000000040000000C00000000000000040000000C00000001000000040000000C00000001000000040000000C00000002000000040000000C00000002000000040000000C00000003000000040000000C00000003000000040000000C00000004000000040000000C00000004000000040000000C00000005000000040000000C00000005000000040000000C00000006000000040000000C00000006000000040000000C00000007000000040000000C00000007000000040000000C00000008000000040000000C00000008000000040000000C00000009000000040000000C00000009000000040000000C0000000A000000040000000C0000000A000000040000000C0000000B000000040000000C0000000B000000040000000C0000000C000000040000000C0000000C000000040000000C0000000D000000040000000C0000000D000000040000000C0000000E000000040000000C0000000E000000040000000C0000000F000000040000000C0000000F000000040000000C00000010000000040000000C00000010000000040000000C00000000000000050000000C00000000000000050000000C00000001000000050000000C00000001000000050000000C00000002000000050000000C00000002000000050000000C00000003000000050000000C00000003000000050000000C00000004000000050000000C00000004000000050000000C00000005000000050000000C00000005000000050000000C00000006000000050000000C00000006000000050000000C00000007000000050000000C00000007000000050000000C00000008000000050000000C00000008000000050000000C00000009000000050000000C00000009000000050000000C0000000A000000050000000C0000000A000000050000000C0000000B000000050000000C0000000B000000050000000C0000000C000000050000000C0000000C000000050000000C0000000D000000050000000C0000000D000000050000000C0000000E000000050000000C0000000E000000050000000C0000000F000000050000000C0000000F000000050000000C00000010000000050000000C00000010000000050000000C00000000000000060000000C00000000000000060000000C00000001000000060000000C00000001000000060000000C00000002000000060000000C00000002000000060000000C00000003000000060000000C00000003000000060000000C00000004000000060000000C00000004000000060000000C00000005000000060000000C00000005000000060000000C00000006000000060000000C00000006000000060000000C00000007000000060000000C00000007000000060000000C00000008000000060000000C00000008000000060000000C00000009000000060000000C00000009000000060000000C0000000A000000060000000C0000000A000000060000000C0000000B000000060000000C0000000B000000060000000C0000000C000000060000000C0000000C000000060000000C0000000D000000060000000C0000000D000000060000000C0000000E000000060000000C0000000E000000060000000C0000000F000000060000000C0000000F000000060000000C00000010000000060000000C00000010000000060000000C00000000000000070000000C00000000000000070000000C00000001000000070000000C00000001000000070000000C00000002000000070000000C00000002000000070000000C00000003000000070000000C00000003000000070000000C00000004000000070000000C00000004000000070000000C00000005000000070000000C00000005000000070000000C00000006000000070000000C00000006000000070000000C00000007000000070000000C00000007000000070000000C00000008000000070000000C00000008000000070000000C00000009000000070000000C00000009000000070000000C0000000A000000070000000C0000000A000000070000000C0000000B000000070000000C0000000B000000070000000C0000000C000000070000000C0000000C000000070000000C0000000D000000070000000C0000000D000000070000000C0000000E000000070000000C0000000E000000070000000C0000000F000000070000000C0000000F000000070000000C00000010000000070000000C00000010000000070000000C00000000000000080000000C00000000000000080000000C00000001000000080000000C00000001000000080000000C00000002000000080000000C00000002000000080000000C00000003000000080000000C00000003000000080000000C00000004000000080000000C00000004000000080000000C00000005000000080000000C00000005000000080000000C00000006000000080000000C00000006000000080000000C00000007000000080000000C00000007000000080000000C00000008000000080000000C00000008000000080000000C00000009000000080000000C00000009000000080000000C0000000A000000080000000C0000000A000000080000000C0000000B000000080000000C0000000B000000080000000C0000000C000000080000000C0000000C000000080000000C0000000D000000080000000C0000000D000000080000000C0000000E000000080000000C0000000E000000080000000C0000000F000000080000000C0000000F000000080000000C00000010000000080000000C00000010000000080000000C00000000000000090000000C00000000000000090000000C00000001000000090000000C00000001000000090000000C00000002000000090000000C00000002000000090000000C00000003000000090000000C00000003000000090000000C00000004000000090000000C00000004000000090000000C00000005000000090000000C00000005000000090000000C00000006000000090000000C00000006000000090000000C00000007000000090000000C00000007000000090000000C00000008000000090000000C00000008000000090000000C00000009000000090000000C00000009000000090000000C0000000A000000090000000C0000000A000000090000000C0000000B000000090000000C0000000B000000090000000C0000000C000000090000000C0000000C000000090000000C0000000D000000090000000C0000000D000000090000000C0000000E000000090000000C0000000E000000090000000C0000000F000000090000000C0000000F000000090000000C00000010000000090000000C00000010000000090000000C000000000000000A0000000C000000000000000A0000000C000000010000000A0000000C000000010000000A0000000C000000020000000A0000000C000000020000000A0000000C000000030000000A0000000C000000030000000A0000000C000000040000000A0000000C000000040000000A0000000C000000050000000A0000000C000000050000000A0000000C000000060000000A0000000C000000060000000A0000000C000000070000000A0000000C000000070000000A0000000C000000080000000A0000000C000000080000000A0000000C000000090000000A0000000C000000090000000A0000000C0000000A0000000A0000000C0000000A0000000A0000000C0000000B0000000A0000000C0000000B0000000A0000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000F0000000A0000000C0000000F0000000A0000000C000000100000000A0000000C000000100000000A0000000C000000000000000B0000000C000000000000000B0000000C000000010000000B0000000C000000010000000B0000000C000000020000000B0000000C000000020000000B0000000C000000030000000B0000000C000000030000000B0000000C000000040000000B0000000C000000040000000B0000000C000000050000000B0000000C000000050000000B0000000C000000060000000B0000000C000000060000000B0000000C000000070000000B0000000C000000070000000B0000000C000000080000000B0000000C000000080000000B0000000C000000090000000B0000000C000000090000000B0000000C0000000A0000000B0000000C0000000A0000000B0000000C0000000B0000000B0000000C0000000B0000000B0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000F0000000B0000000C0000000F0000000B0000000C000000100000000B0000000C000000100000000B0000000C000000000000000C0000000C000000000000000C0000000C000000010000000C0000000C000000010000000C0000000C000000020000000C0000000C000000020000000C0000000C000000030000000C0000000C000000030000000C0000000C000000040000000C0000000C000000040000000C0000000C000000050000000C0000000C000000050000000C0000000C000000060000000C0000000C000000060000000C0000000C000000070000000C0000000C000000070000000C0000000C000000080000000C0000000C000000080000000C0000000C000000090000000C0000000C000000090000000C0000000C0000000A0000000C0000000C0000000A0000000C0000000C0000000B0000000C0000000C0000000B0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000C000000100000000C0000000C000000100000000C0000000C000000000000000D0000000C000000000000000D0000000C000000010000000D0000000C000000010000000D0000000C000000020000000D0000000C000000020000000D0000000C000000030000000D0000000C000000030000000D0000000C000000040000000D0000000C000000040000000D0000000C000000050000000D0000000C000000050000000D0000000C000000060000000D0000000C000000060000000D0000000C000000070000000D0000000C000000070000000D0000000C000000080000000D0000000C000000080000000D0000000C000000090000000D0000000C000000090000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000C000000100000000D0000000C000000100000000D0000000C000000000000000E0000000C000000000000000E0000000C000000010000000E0000000C000000010000000E0000000C000000020000000E0000000C000000020000000E0000000C000000030000000E0000000C000000030000000E0000000C000000040000000E0000000C000000040000000E0000000C000000050000000E0000000C000000050000000E0000000C000000060000000E0000000C000000060000000E0000000C000000070000000E0000000C000000070000000E0000000C000000080000000E0000000C000000080000000E0000000C000000090000000E0000000C000000090000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000C000000100000000E0000000C000000100000000E0000000C000000000000000F0000000C000000000000000F0000000C000000010000000F0000000C000000010000000F0000000C000000020000000F0000000C000000020000000F0000000C000000030000000F0000000C000000030000000F0000000C000000040000000F0000000C000000040000000F0000000C000000050000000F0000000C000000050000000F0000000C000000060000000F0000000C000000060000000F0000000C000000070000000F0000000C000000070000000F0000000C000000080000000F0000000C000000080000000F0000000C000000090000000F0000000C000000090000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000C000000100000000F0000000C000000100000000F0000000C00000000000000100000000C00000000000000100000000C00000001000000100000000C00000001000000100000000C00000002000000100000000C00000002000000100000000C00000003000000100000000C00000003000000100000000C00000004000000100000000C00000004000000100000000C00000005000000100000000C00000005000000100000000C00000006000000100000000C00000006000000100000000C00000007000000100000000C00000007000000100000000C00000008000000100000000C00000008000000100000000C00000009000000100000000C00000009000000100000000C0000000A000000100000000C0000000A000000100000000C0000000B000000100000000C0000000B000000100000000C0000000C000000100000000C0000000C000000100000000C0000000D000000100000000C0000000D000000100000000C0000000E000000100000000C0000000E000000100000000C0000000F000000100000000C0000000F000000100000000C00000010000000100000000C00000010000000100000000C00000000000000000000000D00000000000000000000000D00000001000000000000000D00000001000000000000000D00000002000000000000000D00000002000000000000000D00000003000000000000000D00000003000000000000000D00000004000000000000000D00000004000000000000000D00000005000000000000000D00000005000000000000000D00000006000000000000000D00000006000000000000000D00000007000000000000000D00000007000000000000000D00000008000000000000000D00000008000000000000000D00000009000000000000000D00000009000000000000000D0000000A000000000000000D0000000A000000000000000D0000000B000000000000000D0000000B000000000000000D0000000C000000000000000D0000000C000000000000000D0000000D000000000000000D0000000D000000000000000D0000000E000000000000000D0000000E000000000000000D0000000F000000000000000D0000000F000000000000000D00000010000000000000000D00000010000000000000000D00000000000000010000000D00000000000000010000000D00000001000000010000000D00000001000000010000000D00000002000000010000000D00000002000000010000000D00000003000000010000000D00000003000000010000000D00000004000000010000000D00000004000000010000000D00000005000000010000000D00000005000000010000000D00000006000000010000000D00000006000000010000000D00000007000000010000000D00000007000000010000000D00000008000000010000000D00000008000000010000000D00000009000000010000000D00000009000000010000000D0000000A000000010000000D0000000A000000010000000D0000000B000000010000000D0000000B000000010000000D0000000C000000010000000D0000000C000000010000000D0000000D000000010000000D0000000D000000010000000D0000000E000000010000000D0000000E000000010000000D0000000F000000010000000D0000000F000000010000000D00000010000000010000000D00000010000000010000000D00000000000000020000000D00000000000000020000000D00000001000000020000000D00000001000000020000000D00000002000000020000000D00000002000000020000000D00000003000000020000000D00000003000000020000000D00000004000000020000000D00000004000000020000000D00000005000000020000000D00000005000000020000000D00000006000000020000000D00000006000000020000000D00000007000000020000000D00000007000000020000000D00000008000000020000000D00000008000000020000000D00000009000000020000000D00000009000000020000000D0000000A000000020000000D0000000A000000020000000D0000000B000000020000000D0000000B000000020000000D0000000C000000020000000D0000000C000000020000000D0000000D000000020000000D0000000D000000020000000D0000000E000000020000000D0000000E000000020000000D0000000F000000020000000D0000000F000000020000000D00000010000000020000000D00000010000000020000000D00000000000000030000000D00000000000000030000000D00000001000000030000000D00000001000000030000000D00000002000000030000000D00000002000000030000000D00000003000000030000000D00000003000000030000000D00000004000000030000000D00000004000000030000000D00000005000000030000000D00000005000000030000000D00000006000000030000000D00000006000000030000000D00000007000000030000000D00000007000000030000000D00000008000000030000000D00000008000000030000000D00000009000000030000000D00000009000000030000000D0000000A000000030000000D0000000A000000030000000D0000000B000000030000000D0000000B000000030000000D0000000C000000030000000D0000000C000000030000000D0000000D000000030000000D0000000D000000030000000D0000000E000000030000000D0000000E000000030000000D0000000F000000030000000D0000000F000000030000000D00000010000000030000000D00000010000000030000000D00000000000000040000000D00000000000000040000000D00000001000000040000000D00000001000000040000000D00000002000000040000000D00000002000000040000000D00000003000000040000000D00000003000000040000000D00000004000000040000000D00000004000000040000000D00000005000000040000000D00000005000000040000000D00000006000000040000000D00000006000000040000000D00000007000000040000000D00000007000000040000000D00000008000000040000000D00000008000000040000000D00000009000000040000000D00000009000000040000000D0000000A000000040000000D0000000A000000040000000D0000000B000000040000000D0000000B000000040000000D0000000C000000040000000D0000000C000000040000000D0000000D000000040000000D0000000D000000040000000D0000000E000000040000000D0000000E000000040000000D0000000F000000040000000D0000000F000000040000000D00000010000000040000000D00000010000000040000000D00000000000000050000000D00000000000000050000000D00000001000000050000000D00000001000000050000000D00000002000000050000000D00000002000000050000000D00000003000000050000000D00000003000000050000000D00000004000000050000000D00000004000000050000000D00000005000000050000000D00000005000000050000000D00000006000000050000000D00000006000000050000000D00000007000000050000000D00000007000000050000000D00000008000000050000000D00000008000000050000000D00000009000000050000000D00000009000000050000000D0000000A000000050000000D0000000A000000050000000D0000000B000000050000000D0000000B000000050000000D0000000C000000050000000D0000000C000000050000000D0000000D000000050000000D0000000D000000050000000D0000000E000000050000000D0000000E000000050000000D0000000F000000050000000D0000000F000000050000000D00000010000000050000000D00000010000000050000000D00000000000000060000000D00000000000000060000000D00000001000000060000000D00000001000000060000000D00000002000000060000000D00000002000000060000000D00000003000000060000000D00000003000000060000000D00000004000000060000000D00000004000000060000000D00000005000000060000000D00000005000000060000000D00000006000000060000000D00000006000000060000000D00000007000000060000000D00000007000000060000000D00000008000000060000000D00000008000000060000000D00000009000000060000000D00000009000000060000000D0000000A000000060000000D0000000A000000060000000D0000000B000000060000000D0000000B000000060000000D0000000C000000060000000D0000000C000000060000000D0000000D000000060000000D0000000D000000060000000D0000000E000000060000000D0000000E000000060000000D0000000F000000060000000D0000000F000000060000000D00000010000000060000000D00000010000000060000000D00000000000000070000000D00000000000000070000000D00000001000000070000000D00000001000000070000000D00000002000000070000000D00000002000000070000000D00000003000000070000000D00000003000000070000000D00000004000000070000000D00000004000000070000000D00000005000000070000000D00000005000000070000000D00000006000000070000000D00000006000000070000000D00000007000000070000000D00000007000000070000000D00000008000000070000000D00000008000000070000000D00000009000000070000000D00000009000000070000000D0000000A000000070000000D0000000A000000070000000D0000000B000000070000000D0000000B000000070000000D0000000C000000070000000D0000000C000000070000000D0000000D000000070000000D0000000D000000070000000D0000000E000000070000000D0000000E000000070000000D0000000F000000070000000D0000000F000000070000000D00000010000000070000000D00000010000000070000000D00000000000000080000000D00000000000000080000000D00000001000000080000000D00000001000000080000000D00000002000000080000000D00000002000000080000000D00000003000000080000000D00000003000000080000000D00000004000000080000000D00000004000000080000000D00000005000000080000000D00000005000000080000000D00000006000000080000000D00000006000000080000000D00000007000000080000000D00000007000000080000000D00000008000000080000000D00000008000000080000000D00000009000000080000000D00000009000000080000000D0000000A000000080000000D0000000A000000080000000D0000000B000000080000000D0000000B000000080000000D0000000C000000080000000D0000000C000000080000000D0000000D000000080000000D0000000D000000080000000D0000000E000000080000000D0000000E000000080000000D0000000F000000080000000D0000000F000000080000000D00000010000000080000000D00000010000000080000000D00000000000000090000000D00000000000000090000000D00000001000000090000000D00000001000000090000000D00000002000000090000000D00000002000000090000000D00000003000000090000000D00000003000000090000000D00000004000000090000000D00000004000000090000000D00000005000000090000000D00000005000000090000000D00000006000000090000000D00000006000000090000000D00000007000000090000000D00000007000000090000000D00000008000000090000000D00000008000000090000000D00000009000000090000000D00000009000000090000000D0000000A000000090000000D0000000A000000090000000D0000000B000000090000000D0000000B000000090000000D0000000C000000090000000D0000000C000000090000000D0000000D000000090000000D0000000D000000090000000D0000000E000000090000000D0000000E000000090000000D0000000F000000090000000D0000000F000000090000000D00000010000000090000000D00000010000000090000000D000000000000000A0000000D000000000000000A0000000D000000010000000A0000000D000000010000000A0000000D000000020000000A0000000D000000020000000A0000000D000000030000000A0000000D000000030000000A0000000D000000040000000A0000000D000000040000000A0000000D000000050000000A0000000D000000050000000A0000000D000000060000000A0000000D000000060000000A0000000D000000070000000A0000000D000000070000000A0000000D000000080000000A0000000D000000080000000A0000000D000000090000000A0000000D000000090000000A0000000D0000000A0000000A0000000D0000000A0000000A0000000D0000000B0000000A0000000D0000000B0000000A0000000D0000000C0000000A0000000D0000000C0000000A0000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000F0000000A0000000D0000000F0000000A0000000D000000100000000A0000000D000000100000000A0000000D000000000000000B0000000D000000000000000B0000000D000000010000000B0000000D000000010000000B0000000D000000020000000B0000000D000000020000000B0000000D000000030000000B0000000D000000030000000B0000000D000000040000000B0000000D000000040000000B0000000D000000050000000B0000000D000000050000000B0000000D000000060000000B0000000D000000060000000B0000000D000000070000000B0000000D000000070000000B0000000D000000080000000B0000000D000000080000000B0000000D000000090000000B0000000D000000090000000B0000000D0000000A0000000B0000000D0000000A0000000B0000000D0000000B0000000B0000000D0000000B0000000B0000000D0000000C0000000B0000000D0000000C0000000B0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000F0000000B0000000D0000000F0000000B0000000D000000100000000B0000000D000000100000000B0000000D000000000000000C0000000D000000000000000C0000000D000000010000000C0000000D000000010000000C0000000D000000020000000C0000000D000000020000000C0000000D000000030000000C0000000D000000030000000C0000000D000000040000000C0000000D000000040000000C0000000D000000050000000C0000000D000000050000000C0000000D000000060000000C0000000D000000060000000C0000000D000000070000000C0000000D000000070000000C0000000D000000080000000C0000000D000000080000000C0000000D000000090000000C0000000D000000090000000C0000000D0000000A0000000C0000000D0000000A0000000C0000000D0000000B0000000C0000000D0000000B0000000C0000000D0000000C0000000C0000000D0000000C0000000C0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000F0000000C0000000D0000000F0000000C0000000D000000100000000C0000000D000000100000000C0000000D000000000000000D0000000D000000000000000D0000000D000000010000000D0000000D000000010000000D0000000D000000020000000D0000000D000000020000000D0000000D000000030000000D0000000D000000030000000D0000000D000000040000000D0000000D000000040000000D0000000D000000050000000D0000000D000000050000000D0000000D000000060000000D0000000D000000060000000D0000000D000000070000000D0000000D000000070000000D0000000D000000080000000D0000000D000000080000000D0000000D000000090000000D0000000D000000090000000D0000000D0000000A0000000D0000000D0000000A0000000D0000000D0000000B0000000D0000000D0000000B0000000D0000000D0000000C0000000D0000000D0000000C0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000D000000100000000D0000000D000000100000000D0000000D000000000000000E0000000D000000000000000E0000000D000000010000000E0000000D000000010000000E0000000D000000020000000E0000000D000000020000000E0000000D000000030000000E0000000D000000030000000E0000000D000000040000000E0000000D000000040000000E0000000D000000050000000E0000000D000000050000000E0000000D000000060000000E0000000D000000060000000E0000000D000000070000000E0000000D000000070000000E0000000D000000080000000E0000000D000000080000000E0000000D000000090000000E0000000D000000090000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000D000000100000000E0000000D000000100000000E0000000D000000000000000F0000000D000000000000000F0000000D000000010000000F0000000D000000010000000F0000000D000000020000000F0000000D000000020000000F0000000D000000030000000F0000000D000000030000000F0000000D000000040000000F0000000D000000040000000F0000000D000000050000000F0000000D000000050000000F0000000D000000060000000F0000000D000000060000000F0000000D000000070000000F0000000D000000070000000F0000000D000000080000000F0000000D000000080000000F0000000D000000090000000F0000000D000000090000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000D000000100000000F0000000D000000100000000F0000000D00000000000000100000000D00000000000000100000000D00000001000000100000000D00000001000000100000000D00000002000000100000000D00000002000000100000000D00000003000000100000000D00000003000000100000000D00000004000000100000000D00000004000000100000000D00000005000000100000000D00000005000000100000000D00000006000000100000000D00000006000000100000000D00000007000000100000000D00000007000000100000000D00000008000000100000000D00000008000000100000000D00000009000000100000000D00000009000000100000000D0000000A000000100000000D0000000A000000100000000D0000000B000000100000000D0000000B000000100000000D0000000C000000100000000D0000000C000000100000000D0000000D000000100000000D0000000D000000100000000D0000000E000000100000000D0000000E000000100000000D0000000F000000100000000D0000000F000000100000000D00000010000000100000000D00000010000000100000000D00000000000000000000000E00000000000000000000000E00000001000000000000000E00000001000000000000000E00000002000000000000000E00000002000000000000000E00000003000000000000000E00000003000000000000000E00000004000000000000000E00000004000000000000000E00000005000000000000000E00000005000000000000000E00000006000000000000000E00000006000000000000000E00000007000000000000000E00000007000000000000000E00000008000000000000000E00000008000000000000000E00000009000000000000000E00000009000000000000000E0000000A000000000000000E0000000A000000000000000E0000000B000000000000000E0000000B000000000000000E0000000C000000000000000E0000000C000000000000000E0000000D000000000000000E0000000D000000000000000E0000000E000000000000000E0000000E000000000000000E0000000F000000000000000E0000000F000000000000000E00000010000000000000000E00000010000000000000000E00000000000000010000000E00000000000000010000000E00000001000000010000000E00000001000000010000000E00000002000000010000000E00000002000000010000000E00000003000000010000000E00000003000000010000000E00000004000000010000000E00000004000000010000000E00000005000000010000000E00000005000000010000000E00000006000000010000000E00000006000000010000000E00000007000000010000000E00000007000000010000000E00000008000000010000000E00000008000000010000000E00000009000000010000000E00000009000000010000000E0000000A000000010000000E0000000A000000010000000E0000000B000000010000000E0000000B000000010000000E0000000C000000010000000E0000000C000000010000000E0000000D000000010000000E0000000D000000010000000E0000000E000000010000000E0000000E000000010000000E0000000F000000010000000E0000000F000000010000000E00000010000000010000000E00000010000000010000000E00000000000000020000000E00000000000000020000000E00000001000000020000000E00000001000000020000000E00000002000000020000000E00000002000000020000000E00000003000000020000000E00000003000000020000000E00000004000000020000000E00000004000000020000000E00000005000000020000000E00000005000000020000000E00000006000000020000000E00000006000000020000000E00000007000000020000000E00000007000000020000000E00000008000000020000000E00000008000000020000000E00000009000000020000000E00000009000000020000000E0000000A000000020000000E0000000A000000020000000E0000000B000000020000000E0000000B000000020000000E0000000C000000020000000E0000000C000000020000000E0000000D000000020000000E0000000D000000020000000E0000000E000000020000000E0000000E000000020000000E0000000F000000020000000E0000000F000000020000000E00000010000000020000000E00000010000000020000000E00000000000000030000000E00000000000000030000000E00000001000000030000000E00000001000000030000000E00000002000000030000000E00000002000000030000000E00000003000000030000000E00000003000000030000000E00000004000000030000000E00000004000000030000000E00000005000000030000000E00000005000000030000000E00000006000000030000000E00000006000000030000000E00000007000000030000000E00000007000000030000000E00000008000000030000000E00000008000000030000000E00000009000000030000000E00000009000000030000000E0000000A000000030000000E0000000A000000030000000E0000000B000000030000000E0000000B000000030000000E0000000C000000030000000E0000000C000000030000000E0000000D000000030000000E0000000D000000030000000E0000000E000000030000000E0000000E000000030000000E0000000F000000030000000E0000000F000000030000000E00000010000000030000000E00000010000000030000000E00000000000000040000000E00000000000000040000000E00000001000000040000000E00000001000000040000000E00000002000000040000000E00000002000000040000000E00000003000000040000000E00000003000000040000000E00000004000000040000000E00000004000000040000000E00000005000000040000000E00000005000000040000000E00000006000000040000000E00000006000000040000000E00000007000000040000000E00000007000000040000000E00000008000000040000000E00000008000000040000000E00000009000000040000000E00000009000000040000000E0000000A000000040000000E0000000A000000040000000E0000000B000000040000000E0000000B000000040000000E0000000C000000040000000E0000000C000000040000000E0000000D000000040000000E0000000D000000040000000E0000000E000000040000000E0000000E000000040000000E0000000F000000040000000E0000000F000000040000000E00000010000000040000000E00000010000000040000000E00000000000000050000000E00000000000000050000000E00000001000000050000000E00000001000000050000000E00000002000000050000000E00000002000000050000000E00000003000000050000000E00000003000000050000000E00000004000000050000000E00000004000000050000000E00000005000000050000000E00000005000000050000000E00000006000000050000000E00000006000000050000000E00000007000000050000000E00000007000000050000000E00000008000000050000000E00000008000000050000000E00000009000000050000000E00000009000000050000000E0000000A000000050000000E0000000A000000050000000E0000000B000000050000000E0000000B000000050000000E0000000C000000050000000E0000000C000000050000000E0000000D000000050000000E0000000D000000050000000E0000000E000000050000000E0000000E000000050000000E0000000F000000050000000E0000000F000000050000000E00000010000000050000000E00000010000000050000000E00000000000000060000000E00000000000000060000000E00000001000000060000000E00000001000000060000000E00000002000000060000000E00000002000000060000000E00000003000000060000000E00000003000000060000000E00000004000000060000000E00000004000000060000000E00000005000000060000000E00000005000000060000000E00000006000000060000000E00000006000000060000000E00000007000000060000000E00000007000000060000000E00000008000000060000000E00000008000000060000000E00000009000000060000000E00000009000000060000000E0000000A000000060000000E0000000A000000060000000E0000000B000000060000000E0000000B000000060000000E0000000C000000060000000E0000000C000000060000000E0000000D000000060000000E0000000D000000060000000E0000000E000000060000000E0000000E000000060000000E0000000F000000060000000E0000000F000000060000000E00000010000000060000000E00000010000000060000000E00000000000000070000000E00000000000000070000000E00000001000000070000000E00000001000000070000000E00000002000000070000000E00000002000000070000000E00000003000000070000000E00000003000000070000000E00000004000000070000000E00000004000000070000000E00000005000000070000000E00000005000000070000000E00000006000000070000000E00000006000000070000000E00000007000000070000000E00000007000000070000000E00000008000000070000000E00000008000000070000000E00000009000000070000000E00000009000000070000000E0000000A000000070000000E0000000A000000070000000E0000000B000000070000000E0000000B000000070000000E0000000C000000070000000E0000000C000000070000000E0000000D000000070000000E0000000D000000070000000E0000000E000000070000000E0000000E000000070000000E0000000F000000070000000E0000000F000000070000000E00000010000000070000000E00000010000000070000000E00000000000000080000000E00000000000000080000000E00000001000000080000000E00000001000000080000000E00000002000000080000000E00000002000000080000000E00000003000000080000000E00000003000000080000000E00000004000000080000000E00000004000000080000000E00000005000000080000000E00000005000000080000000E00000006000000080000000E00000006000000080000000E00000007000000080000000E00000007000000080000000E00000008000000080000000E00000008000000080000000E00000009000000080000000E00000009000000080000000E0000000A000000080000000E0000000A000000080000000E0000000B000000080000000E0000000B000000080000000E0000000C000000080000000E0000000C000000080000000E0000000D000000080000000E0000000D000000080000000E0000000E000000080000000E0000000E000000080000000E0000000F000000080000000E0000000F000000080000000E00000010000000080000000E00000010000000080000000E00000000000000090000000E00000000000000090000000E00000001000000090000000E00000001000000090000000E00000002000000090000000E00000002000000090000000E00000003000000090000000E00000003000000090000000E00000004000000090000000E00000004000000090000000E00000005000000090000000E00000005000000090000000E00000006000000090000000E00000006000000090000000E00000007000000090000000E00000007000000090000000E00000008000000090000000E00000008000000090000000E00000009000000090000000E00000009000000090000000E0000000A000000090000000E0000000A000000090000000E0000000B000000090000000E0000000B000000090000000E0000000C000000090000000E0000000C000000090000000E0000000D000000090000000E0000000D000000090000000E0000000E000000090000000E0000000E000000090000000E0000000F000000090000000E0000000F000000090000000E00000010000000090000000E00000010000000090000000E000000000000000A0000000E000000000000000A0000000E000000010000000A0000000E000000010000000A0000000E000000020000000A0000000E000000020000000A0000000E000000030000000A0000000E000000030000000A0000000E000000040000000A0000000E000000040000000A0000000E000000050000000A0000000E000000050000000A0000000E000000060000000A0000000E000000060000000A0000000E000000070000000A0000000E000000070000000A0000000E000000080000000A0000000E000000080000000A0000000E000000090000000A0000000E000000090000000A0000000E0000000A0000000A0000000E0000000A0000000A0000000E0000000B0000000A0000000E0000000B0000000A0000000E0000000C0000000A0000000E0000000C0000000A0000000E0000000D0000000A0000000E0000000D0000000A0000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000F0000000A0000000E0000000F0000000A0000000E000000100000000A0000000E000000100000000A0000000E000000000000000B0000000E000000000000000B0000000E000000010000000B0000000E000000010000000B0000000E000000020000000B0000000E000000020000000B0000000E000000030000000B0000000E000000030000000B0000000E000000040000000B0000000E000000040000000B0000000E000000050000000B0000000E000000050000000B0000000E000000060000000B0000000E000000060000000B0000000E000000070000000B0000000E000000070000000B0000000E000000080000000B0000000E000000080000000B0000000E000000090000000B0000000E000000090000000B0000000E0000000A0000000B0000000E0000000A0000000B0000000E0000000B0000000B0000000E0000000B0000000B0000000E0000000C0000000B0000000E0000000C0000000B0000000E0000000D0000000B0000000E0000000D0000000B0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000F0000000B0000000E0000000F0000000B0000000E000000100000000B0000000E000000100000000B0000000E000000000000000C0000000E000000000000000C0000000E000000010000000C0000000E000000010000000C0000000E000000020000000C0000000E000000020000000C0000000E000000030000000C0000000E000000030000000C0000000E000000040000000C0000000E000000040000000C0000000E000000050000000C0000000E000000050000000C0000000E000000060000000C0000000E000000060000000C0000000E000000070000000C0000000E000000070000000C0000000E000000080000000C0000000E000000080000000C0000000E000000090000000C0000000E000000090000000C0000000E0000000A0000000C0000000E0000000A0000000C0000000E0000000B0000000C0000000E0000000B0000000C0000000E0000000C0000000C0000000E0000000C0000000C0000000E0000000D0000000C0000000E0000000D0000000C0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000F0000000C0000000E0000000F0000000C0000000E000000100000000C0000000E000000100000000C0000000E000000000000000D0000000E000000000000000D0000000E000000010000000D0000000E000000010000000D0000000E000000020000000D0000000E000000020000000D0000000E000000030000000D0000000E000000030000000D0000000E000000040000000D0000000E000000040000000D0000000E000000050000000D0000000E000000050000000D0000000E000000060000000D0000000E000000060000000D0000000E000000070000000D0000000E000000070000000D0000000E000000080000000D0000000E000000080000000D0000000E000000090000000D0000000E000000090000000D0000000E0000000A0000000D0000000E0000000A0000000D0000000E0000000B0000000D0000000E0000000B0000000D0000000E0000000C0000000D0000000E0000000C0000000D0000000E0000000D0000000D0000000E0000000D0000000D0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000F0000000D0000000E0000000F0000000D0000000E000000100000000D0000000E000000100000000D0000000E000000000000000E0000000E000000000000000E0000000E000000010000000E0000000E000000010000000E0000000E000000020000000E0000000E000000020000000E0000000E000000030000000E0000000E000000030000000E0000000E000000040000000E0000000E000000040000000E0000000E000000050000000E0000000E000000050000000E0000000E000000060000000E0000000E000000060000000E0000000E000000070000000E0000000E000000070000000E0000000E000000080000000E0000000E000000080000000E0000000E000000090000000E0000000E000000090000000E0000000E0000000A0000000E0000000E0000000A0000000E0000000E0000000B0000000E0000000E0000000B0000000E0000000E0000000C0000000E0000000E0000000C0000000E0000000E0000000D0000000E0000000E0000000D0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000E000000100000000E0000000E000000100000000E0000000E000000000000000F0000000E000000000000000F0000000E000000010000000F0000000E000000010000000F0000000E000000020000000F0000000E000000020000000F0000000E000000030000000F0000000E000000030000000F0000000E000000040000000F0000000E000000040000000F0000000E000000050000000F0000000E000000050000000F0000000E000000060000000F0000000E000000060000000F0000000E000000070000000F0000000E000000070000000F0000000E000000080000000F0000000E000000080000000F0000000E000000090000000F0000000E000000090000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000E000000100000000F0000000E000000100000000F0000000E00000000000000100000000E00000000000000100000000E00000001000000100000000E00000001000000100000000E00000002000000100000000E00000002000000100000000E00000003000000100000000E00000003000000100000000E00000004000000100000000E00000004000000100000000E00000005000000100000000E00000005000000100000000E00000006000000100000000E00000006000000100000000E00000007000000100000000E00000007000000100000000E00000008000000100000000E00000008000000100000000E00000009000000100000000E00000009000000100000000E0000000A000000100000000E0000000A000000100000000E0000000B000000100000000E0000000B000000100000000E0000000C000000100000000E0000000C000000100000000E0000000D000000100000000E0000000D000000100000000E0000000E000000100000000E0000000E000000100000000E0000000F000000100000000E0000000F000000100000000E00000010000000100000000E00000010000000100000000E00000000000000000000000F00000000000000000000000F00000001000000000000000F00000001000000000000000F00000002000000000000000F00000002000000000000000F00000003000000000000000F00000003000000000000000F00000004000000000000000F00000004000000000000000F00000005000000000000000F00000005000000000000000F00000006000000000000000F00000006000000000000000F00000007000000000000000F00000007000000000000000F00000008000000000000000F00000008000000000000000F00000009000000000000000F00000009000000000000000F0000000A000000000000000F0000000A000000000000000F0000000B000000000000000F0000000B000000000000000F0000000C000000000000000F0000000C000000000000000F0000000D000000000000000F0000000D000000000000000F0000000E000000000000000F0000000E000000000000000F0000000F000000000000000F0000000F000000000000000F00000010000000000000000F00000010000000000000000F00000000000000010000000F00000000000000010000000F00000001000000010000000F00000001000000010000000F00000002000000010000000F00000002000000010000000F00000003000000010000000F00000003000000010000000F00000004000000010000000F00000004000000010000000F00000005000000010000000F00000005000000010000000F00000006000000010000000F00000006000000010000000F00000007000000010000000F00000007000000010000000F00000008000000010000000F00000008000000010000000F00000009000000010000000F00000009000000010000000F0000000A000000010000000F0000000A000000010000000F0000000B000000010000000F0000000B000000010000000F0000000C000000010000000F0000000C000000010000000F0000000D000000010000000F0000000D000000010000000F0000000E000000010000000F0000000E000000010000000F0000000F000000010000000F0000000F000000010000000F00000010000000010000000F00000010000000010000000F00000000000000020000000F00000000000000020000000F00000001000000020000000F00000001000000020000000F00000002000000020000000F00000002000000020000000F00000003000000020000000F00000003000000020000000F00000004000000020000000F00000004000000020000000F00000005000000020000000F00000005000000020000000F00000006000000020000000F00000006000000020000000F00000007000000020000000F00000007000000020000000F00000008000000020000000F00000008000000020000000F00000009000000020000000F00000009000000020000000F0000000A000000020000000F0000000A000000020000000F0000000B000000020000000F0000000B000000020000000F0000000C000000020000000F0000000C000000020000000F0000000D000000020000000F0000000D000000020000000F0000000E000000020000000F0000000E000000020000000F0000000F000000020000000F0000000F000000020000000F00000010000000020000000F00000010000000020000000F00000000000000030000000F00000000000000030000000F00000001000000030000000F00000001000000030000000F00000002000000030000000F00000002000000030000000F00000003000000030000000F00000003000000030000000F00000004000000030000000F00000004000000030000000F00000005000000030000000F00000005000000030000000F00000006000000030000000F00000006000000030000000F00000007000000030000000F00000007000000030000000F00000008000000030000000F00000008000000030000000F00000009000000030000000F00000009000000030000000F0000000A000000030000000F0000000A000000030000000F0000000B000000030000000F0000000B000000030000000F0000000C000000030000000F0000000C000000030000000F0000000D000000030000000F0000000D000000030000000F0000000E000000030000000F0000000E000000030000000F0000000F000000030000000F0000000F000000030000000F00000010000000030000000F00000010000000030000000F00000000000000040000000F00000000000000040000000F00000001000000040000000F00000001000000040000000F00000002000000040000000F00000002000000040000000F00000003000000040000000F00000003000000040000000F00000004000000040000000F00000004000000040000000F00000005000000040000000F00000005000000040000000F00000006000000040000000F00000006000000040000000F00000007000000040000000F00000007000000040000000F00000008000000040000000F00000008000000040000000F00000009000000040000000F00000009000000040000000F0000000A000000040000000F0000000A000000040000000F0000000B000000040000000F0000000B000000040000000F0000000C000000040000000F0000000C000000040000000F0000000D000000040000000F0000000D000000040000000F0000000E000000040000000F0000000E000000040000000F0000000F000000040000000F0000000F000000040000000F00000010000000040000000F00000010000000040000000F00000000000000050000000F00000000000000050000000F00000001000000050000000F00000001000000050000000F00000002000000050000000F00000002000000050000000F00000003000000050000000F00000003000000050000000F00000004000000050000000F00000004000000050000000F00000005000000050000000F00000005000000050000000F00000006000000050000000F00000006000000050000000F00000007000000050000000F00000007000000050000000F00000008000000050000000F00000008000000050000000F00000009000000050000000F00000009000000050000000F0000000A000000050000000F0000000A000000050000000F0000000B000000050000000F0000000B000000050000000F0000000C000000050000000F0000000C000000050000000F0000000D000000050000000F0000000D000000050000000F0000000E000000050000000F0000000E000000050000000F0000000F000000050000000F0000000F000000050000000F00000010000000050000000F00000010000000050000000F00000000000000060000000F00000000000000060000000F00000001000000060000000F00000001000000060000000F00000002000000060000000F00000002000000060000000F00000003000000060000000F00000003000000060000000F00000004000000060000000F00000004000000060000000F00000005000000060000000F00000005000000060000000F00000006000000060000000F00000006000000060000000F00000007000000060000000F00000007000000060000000F00000008000000060000000F00000008000000060000000F00000009000000060000000F00000009000000060000000F0000000A000000060000000F0000000A000000060000000F0000000B000000060000000F0000000B000000060000000F0000000C000000060000000F0000000C000000060000000F0000000D000000060000000F0000000D000000060000000F0000000E000000060000000F0000000E000000060000000F0000000F000000060000000F0000000F000000060000000F00000010000000060000000F00000010000000060000000F00000000000000070000000F00000000000000070000000F00000001000000070000000F00000001000000070000000F00000002000000070000000F00000002000000070000000F00000003000000070000000F00000003000000070000000F00000004000000070000000F00000004000000070000000F00000005000000070000000F00000005000000070000000F00000006000000070000000F00000006000000070000000F00000007000000070000000F00000007000000070000000F00000008000000070000000F00000008000000070000000F00000009000000070000000F00000009000000070000000F0000000A000000070000000F0000000A000000070000000F0000000B000000070000000F0000000B000000070000000F0000000C000000070000000F0000000C000000070000000F0000000D000000070000000F0000000D000000070000000F0000000E000000070000000F0000000E000000070000000F0000000F000000070000000F0000000F000000070000000F00000010000000070000000F00000010000000070000000F00000000000000080000000F00000000000000080000000F00000001000000080000000F00000001000000080000000F00000002000000080000000F00000002000000080000000F00000003000000080000000F00000003000000080000000F00000004000000080000000F00000004000000080000000F00000005000000080000000F00000005000000080000000F00000006000000080000000F00000006000000080000000F00000007000000080000000F00000007000000080000000F00000008000000080000000F00000008000000080000000F00000009000000080000000F00000009000000080000000F0000000A000000080000000F0000000A000000080000000F0000000B000000080000000F0000000B000000080000000F0000000C000000080000000F0000000C000000080000000F0000000D000000080000000F0000000D000000080000000F0000000E000000080000000F0000000E000000080000000F0000000F000000080000000F0000000F000000080000000F00000010000000080000000F00000010000000080000000F00000000000000090000000F00000000000000090000000F00000001000000090000000F00000001000000090000000F00000002000000090000000F00000002000000090000000F00000003000000090000000F00000003000000090000000F00000004000000090000000F00000004000000090000000F00000005000000090000000F00000005000000090000000F00000006000000090000000F00000006000000090000000F00000007000000090000000F00000007000000090000000F00000008000000090000000F00000008000000090000000F00000009000000090000000F00000009000000090000000F0000000A000000090000000F0000000A000000090000000F0000000B000000090000000F0000000B000000090000000F0000000C000000090000000F0000000C000000090000000F0000000D000000090000000F0000000D000000090000000F0000000E000000090000000F0000000E000000090000000F0000000F000000090000000F0000000F000000090000000F00000010000000090000000F00000010000000090000000F000000000000000A0000000F000000000000000A0000000F000000010000000A0000000F000000010000000A0000000F000000020000000A0000000F000000020000000A0000000F000000030000000A0000000F000000030000000A0000000F000000040000000A0000000F000000040000000A0000000F000000050000000A0000000F000000050000000A0000000F000000060000000A0000000F000000060000000A0000000F000000070000000A0000000F000000070000000A0000000F000000080000000A0000000F000000080000000A0000000F000000090000000A0000000F000000090000000A0000000F0000000A0000000A0000000F0000000A0000000A0000000F0000000B0000000A0000000F0000000B0000000A0000000F0000000C0000000A0000000F0000000C0000000A0000000F0000000D0000000A0000000F0000000D0000000A0000000F0000000E0000000A0000000F0000000E0000000A0000000F0000000F0000000A0000000F0000000F0000000A0000000F000000100000000A0000000F000000100000000A0000000F000000000000000B0000000F000000000000000B0000000F000000010000000B0000000F000000010000000B0000000F000000020000000B0000000F000000020000000B0000000F000000030000000B0000000F000000030000000B0000000F000000040000000B0000000F000000040000000B0000000F000000050000000B0000000F000000050000000B0000000F000000060000000B0000000F000000060000000B0000000F000000070000000B0000000F000000070000000B0000000F000000080000000B0000000F000000080000000B0000000F000000090000000B0000000F000000090000000B0000000F0000000A0000000B0000000F0000000A0000000B0000000F0000000B0000000B0000000F0000000B0000000B0000000F0000000C0000000B0000000F0000000C0000000B0000000F0000000D0000000B0000000F0000000D0000000B0000000F0000000E0000000B0000000F0000000E0000000B0000000F0000000F0000000B0000000F0000000F0000000B0000000F000000100000000B0000000F000000100000000B0000000F000000000000000C0000000F000000000000000C0000000F000000010000000C0000000F000000010000000C0000000F000000020000000C0000000F000000020000000C0000000F000000030000000C0000000F000000030000000C0000000F000000040000000C0000000F000000040000000C0000000F000000050000000C0000000F000000050000000C0000000F000000060000000C0000000F000000060000000C0000000F000000070000000C0000000F000000070000000C0000000F000000080000000C0000000F000000080000000C0000000F000000090000000C0000000F000000090000000C0000000F0000000A0000000C0000000F0000000A0000000C0000000F0000000B0000000C0000000F0000000B0000000C0000000F0000000C0000000C0000000F0000000C0000000C0000000F0000000D0000000C0000000F0000000D0000000C0000000F0000000E0000000C0000000F0000000E0000000C0000000F0000000F0000000C0000000F0000000F0000000C0000000F000000100000000C0000000F000000100000000C0000000F000000000000000D0000000F000000000000000D0000000F000000010000000D0000000F000000010000000D0000000F000000020000000D0000000F000000020000000D0000000F000000030000000D0000000F000000030000000D0000000F000000040000000D0000000F000000040000000D0000000F000000050000000D0000000F000000050000000D0000000F000000060000000D0000000F000000060000000D0000000F000000070000000D0000000F000000070000000D0000000F000000080000000D0000000F000000080000000D0000000F000000090000000D0000000F000000090000000D0000000F0000000A0000000D0000000F0000000A0000000D0000000F0000000B0000000D0000000F0000000B0000000D0000000F0000000C0000000D0000000F0000000C0000000D0000000F0000000D0000000D0000000F0000000D0000000D0000000F0000000E0000000D0000000F0000000E0000000D0000000F0000000F0000000D0000000F0000000F0000000D0000000F000000100000000D0000000F000000100000000D0000000F000000000000000E0000000F000000000000000E0000000F000000010000000E0000000F000000010000000E0000000F000000020000000E0000000F000000020000000E0000000F000000030000000E0000000F000000030000000E0000000F000000040000000E0000000F000000040000000E0000000F000000050000000E0000000F000000050000000E0000000F000000060000000E0000000F000000060000000E0000000F000000070000000E0000000F000000070000000E0000000F000000080000000E0000000F000000080000000E0000000F000000090000000E0000000F000000090000000E0000000F0000000A0000000E0000000F0000000A0000000E0000000F0000000B0000000E0000000F0000000B0000000E0000000F0000000C0000000E0000000F0000000C0000000E0000000F0000000D0000000E0000000F0000000D0000000E0000000F0000000E0000000E0000000F0000000E0000000E0000000F0000000F0000000E0000000F0000000F0000000E0000000F000000100000000E0000000F000000100000000E0000000F000000000000000F0000000F000000000000000F0000000F000000010000000F0000000F000000010000000F0000000F000000020000000F0000000F000000020000000F0000000F000000030000000F0000000F000000030000000F0000000F000000040000000F0000000F000000040000000F0000000F000000050000000F0000000F000000050000000F0000000F000000060000000F0000000F000000060000000F0000000F000000070000000F0000000F000000070000000F0000000F000000080000000F0000000F000000080000000F0000000F000000090000000F0000000F000000090000000F0000000F0000000A0000000F0000000F0000000A0000000F0000000F0000000B0000000F0000000F0000000B0000000F0000000F0000000C0000000F0000000F0000000C0000000F0000000F0000000D0000000F0000000F0000000D0000000F0000000F0000000E0000000F0000000F0000000E0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000100000000F0000000F000000100000000F0000000F00000000000000100000000F00000000000000100000000F00000001000000100000000F00000001000000100000000F00000002000000100000000F00000002000000100000000F00000003000000100000000F00000003000000100000000F00000004000000100000000F00000004000000100000000F00000005000000100000000F00000005000000100000000F00000006000000100000000F00000006000000100000000F00000007000000100000000F00000007000000100000000F00000008000000100000000F00000008000000100000000F00000009000000100000000F00000009000000100000000F0000000A000000100000000F0000000A000000100000000F0000000B000000100000000F0000000B000000100000000F0000000C000000100000000F0000000C000000100000000F0000000D000000100000000F0000000D000000100000000F0000000E000000100000000F0000000E000000100000000F0000000F000000100000000F0000000F000000100000000F00000010000000100000000F00000010000000100000000F0000000000000000000000100000000000000000000000100000000100000000000000100000000100000000000000100000000200000000000000100000000200000000000000100000000300000000000000100000000300000000000000100000000400000000000000100000000400000000000000100000000500000000000000100000000500000000000000100000000600000000000000100000000600000000000000100000000700000000000000100000000700000000000000100000000800000000000000100000000800000000000000100000000900000000000000100000000900000000000000100000000A00000000000000100000000A00000000000000100000000B00000000000000100000000B00000000000000100000000C00000000000000100000000C00000000000000100000000D00000000000000100000000D00000000000000100000000E00000000000000100000000E00000000000000100000000F00000000000000100000000F00000000000000100000001000000000000000100000001000000000000000100000000000000001000000100000000000000001000000100000000100000001000000100000000100000001000000100000000200000001000000100000000200000001000000100000000300000001000000100000000300000001000000100000000400000001000000100000000400000001000000100000000500000001000000100000000500000001000000100000000600000001000000100000000600000001000000100000000700000001000000100000000700000001000000100000000800000001000000100000000800000001000000100000000900000001000000100000000900000001000000100000000A00000001000000100000000A00000001000000100000000B00000001000000100000000B00000001000000100000000C00000001000000100000000C00000001000000100000000D00000001000000100000000D00000001000000100000000E00000001000000100000000E00000001000000100000000F00000001000000100000000F00000001000000100000001000000001000000100000001000000001000000100000000000000002000000100000000000000002000000100000000100000002000000100000000100000002000000100000000200000002000000100000000200000002000000100000000300000002000000100000000300000002000000100000000400000002000000100000000400000002000000100000000500000002000000100000000500000002000000100000000600000002000000100000000600000002000000100000000700000002000000100000000700000002000000100000000800000002000000100000000800000002000000100000000900000002000000100000000900000002000000100000000A00000002000000100000000A00000002000000100000000B00000002000000100000000B00000002000000100000000C00000002000000100000000C00000002000000100000000D00000002000000100000000D00000002000000100000000E00000002000000100000000E00000002000000100000000F00000002000000100000000F00000002000000100000001000000002000000100000001000000002000000100000000000000003000000100000000000000003000000100000000100000003000000100000000100000003000000100000000200000003000000100000000200000003000000100000000300000003000000100000000300000003000000100000000400000003000000100000000400000003000000100000000500000003000000100000000500000003000000100000000600000003000000100000000600000003000000100000000700000003000000100000000700000003000000100000000800000003000000100000000800000003000000100000000900000003000000100000000900000003000000100000000A00000003000000100000000A00000003000000100000000B00000003000000100000000B00000003000000100000000C00000003000000100000000C00000003000000100000000D00000003000000100000000D00000003000000100000000E00000003000000100000000E00000003000000100000000F00000003000000100000000F00000003000000100000001000000003000000100000001000000003000000100000000000000004000000100000000000000004000000100000000100000004000000100000000100000004000000100000000200000004000000100000000200000004000000100000000300000004000000100000000300000004000000100000000400000004000000100000000400000004000000100000000500000004000000100000000500000004000000100000000600000004000000100000000600000004000000100000000700000004000000100000000700000004000000100000000800000004000000100000000800000004000000100000000900000004000000100000000900000004000000100000000A00000004000000100000000A00000004000000100000000B00000004000000100000000B00000004000000100000000C00000004000000100000000C00000004000000100000000D00000004000000100000000D00000004000000100000000E00000004000000100000000E00000004000000100000000F00000004000000100000000F00000004000000100000001000000004000000100000001000000004000000100000000000000005000000100000000000000005000000100000000100000005000000100000000100000005000000100000000200000005000000100000000200000005000000100000000300000005000000100000000300000005000000100000000400000005000000100000000400000005000000100000000500000005000000100000000500000005000000100000000600000005000000100000000600000005000000100000000700000005000000100000000700000005000000100000000800000005000000100000000800000005000000100000000900000005000000100000000900000005000000100000000A00000005000000100000000A00000005000000100000000B00000005000000100000000B00000005000000100000000C00000005000000100000000C00000005000000100000000D00000005000000100000000D00000005000000100000000E00000005000000100000000E00000005000000100000000F00000005000000100000000F00000005000000100000001000000005000000100000001000000005000000100000000000000006000000100000000000000006000000100000000100000006000000100000000100000006000000100000000200000006000000100000000200000006000000100000000300000006000000100000000300000006000000100000000400000006000000100000000400000006000000100000000500000006000000100000000500000006000000100000000600000006000000100000000600000006000000100000000700000006000000100000000700000006000000100000000800000006000000100000000800000006000000100000000900000006000000100000000900000006000000100000000A00000006000000100000000A00000006000000100000000B00000006000000100000000B00000006000000100000000C00000006000000100000000C00000006000000100000000D00000006000000100000000D00000006000000100000000E00000006000000100000000E00000006000000100000000F00000006000000100000000F00000006000000100000001000000006000000100000001000000006000000100000000000000007000000100000000000000007000000100000000100000007000000100000000100000007000000100000000200000007000000100000000200000007000000100000000300000007000000100000000300000007000000100000000400000007000000100000000400000007000000100000000500000007000000100000000500000007000000100000000600000007000000100000000600000007000000100000000700000007000000100000000700000007000000100000000800000007000000100000000800000007000000100000000900000007000000100000000900000007000000100000000A00000007000000100000000A00000007000000100000000B00000007000000100000000B00000007000000100000000C00000007000000100000000C00000007000000100000000D00000007000000100000000D00000007000000100000000E00000007000000100000000E00000007000000100000000F00000007000000100000000F00000007000000100000001000000007000000100000001000000007000000100000000000000008000000100000000000000008000000100000000100000008000000100000000100000008000000100000000200000008000000100000000200000008000000100000000300000008000000100000000300000008000000100000000400000008000000100000000400000008000000100000000500000008000000100000000500000008000000100000000600000008000000100000000600000008000000100000000700000008000000100000000700000008000000100000000800000008000000100000000800000008000000100000000900000008000000100000000900000008000000100000000A00000008000000100000000A00000008000000100000000B00000008000000100000000B00000008000000100000000C00000008000000100000000C00000008000000100000000D00000008000000100000000D00000008000000100000000E00000008000000100000000E00000008000000100000000F00000008000000100000000F00000008000000100000001000000008000000100000001000000008000000100000000000000009000000100000000000000009000000100000000100000009000000100000000100000009000000100000000200000009000000100000000200000009000000100000000300000009000000100000000300000009000000100000000400000009000000100000000400000009000000100000000500000009000000100000000500000009000000100000000600000009000000100000000600000009000000100000000700000009000000100000000700000009000000100000000800000009000000100000000800000009000000100000000900000009000000100000000900000009000000100000000A00000009000000100000000A00000009000000100000000B00000009000000100000000B00000009000000100000000C00000009000000100000000C00000009000000100000000D00000009000000100000000D00000009000000100000000E00000009000000100000000E00000009000000100000000F00000009000000100000000F0000000900000010000000100000000900000010000000100000000900000010000000000000000A00000010000000000000000A00000010000000010000000A00000010000000010000000A00000010000000020000000A00000010000000020000000A00000010000000030000000A00000010000000030000000A00000010000000040000000A00000010000000040000000A00000010000000050000000A00000010000000050000000A00000010000000060000000A00000010000000060000000A00000010000000070000000A00000010000000070000000A00000010000000080000000A00000010000000080000000A00000010000000090000000A00000010000000090000000A000000100000000A0000000A000000100000000A0000000A000000100000000B0000000A000000100000000B0000000A000000100000000C0000000A000000100000000C0000000A000000100000000D0000000A000000100000000D0000000A000000100000000E0000000A000000100000000E0000000A000000100000000F0000000A000000100000000F0000000A00000010000000100000000A00000010000000100000000A00000010000000000000000B00000010000000000000000B00000010000000010000000B00000010000000010000000B00000010000000020000000B00000010000000020000000B00000010000000030000000B00000010000000030000000B00000010000000040000000B00000010000000040000000B00000010000000050000000B00000010000000050000000B00000010000000060000000B00000010000000060000000B00000010000000070000000B00000010000000070000000B00000010000000080000000B00000010000000080000000B00000010000000090000000B00000010000000090000000B000000100000000A0000000B000000100000000A0000000B000000100000000B0000000B000000100000000B0000000B000000100000000C0000000B000000100000000C0000000B000000100000000D0000000B000000100000000D0000000B000000100000000E0000000B000000100000000E0000000B000000100000000F0000000B000000100000000F0000000B00000010000000100000000B00000010000000100000000B00000010000000000000000C00000010000000000000000C00000010000000010000000C00000010000000010000000C00000010000000020000000C00000010000000020000000C00000010000000030000000C00000010000000030000000C00000010000000040000000C00000010000000040000000C00000010000000050000000C00000010000000050000000C00000010000000060000000C00000010000000060000000C00000010000000070000000C00000010000000070000000C00000010000000080000000C00000010000000080000000C00000010000000090000000C00000010000000090000000C000000100000000A0000000C000000100000000A0000000C000000100000000B0000000C000000100000000B0000000C000000100000000C0000000C000000100000000C0000000C000000100000000D0000000C000000100000000D0000000C000000100000000E0000000C000000100000000E0000000C000000100000000F0000000C000000100000000F0000000C00000010000000100000000C00000010000000100000000C00000010000000000000000D00000010000000000000000D00000010000000010000000D00000010000000010000000D00000010000000020000000D00000010000000020000000D00000010000000030000000D00000010000000030000000D00000010000000040000000D00000010000000040000000D00000010000000050000000D00000010000000050000000D00000010000000060000000D00000010000000060000000D00000010000000070000000D00000010000000070000000D00000010000000080000000D00000010000000080000000D00000010000000090000000D00000010000000090000000D000000100000000A0000000D000000100000000A0000000D000000100000000B0000000D000000100000000B0000000D000000100000000C0000000D000000100000000C0000000D000000100000000D0000000D000000100000000D0000000D000000100000000E0000000D000000100000000E0000000D000000100000000F0000000D000000100000000F0000000D00000010000000100000000D00000010000000100000000D00000010000000000000000E00000010000000000000000E00000010000000010000000E00000010000000010000000E00000010000000020000000E00000010000000020000000E00000010000000030000000E00000010000000030000000E00000010000000040000000E00000010000000040000000E00000010000000050000000E00000010000000050000000E00000010000000060000000E00000010000000060000000E00000010000000070000000E00000010000000070000000E00000010000000080000000E00000010000000080000000E00000010000000090000000E00000010000000090000000E000000100000000A0000000E000000100000000A0000000E000000100000000B0000000E000000100000000B0000000E000000100000000C0000000E000000100000000C0000000E000000100000000D0000000E000000100000000D0000000E000000100000000E0000000E000000100000000E0000000E000000100000000F0000000E000000100000000F0000000E00000010000000100000000E00000010000000100000000E00000010000000000000000F00000010000000000000000F00000010000000010000000F00000010000000010000000F00000010000000020000000F00000010000000020000000F00000010000000030000000F00000010000000030000000F00000010000000040000000F00000010000000040000000F00000010000000050000000F00000010000000050000000F00000010000000060000000F00000010000000060000000F00000010000000070000000F00000010000000070000000F00000010000000080000000F00000010000000080000000F00000010000000090000000F00000010000000090000000F000000100000000A0000000F000000100000000A0000000F000000100000000B0000000F000000100000000B0000000F000000100000000C0000000F000000100000000C0000000F000000100000000D0000000F000000100000000D0000000F000000100000000E0000000F000000100000000E0000000F000000100000000F0000000F000000100000000F0000000F00000010000000100000000F00000010000000100000000F000000100000000000000010000000100000000000000010000000100000000100000010000000100000000100000010000000100000000200000010000000100000000200000010000000100000000300000010000000100000000300000010000000100000000400000010000000100000000400000010000000100000000500000010000000100000000500000010000000100000000600000010000000100000000600000010000000100000000700000010000000100000000700000010000000100000000800000010000000100000000800000010000000100000000900000010000000100000000900000010000000100000000A00000010000000100000000A00000010000000100000000B00000010000000100000000B00000010000000100000000C00000010000000100000000C00000010000000100000000D00000010000000100000000D00000010000000100000000E00000010000000100000000E00000010000000100000000F00000010000000100000000F00000010000000100000001000000010000000100000001000000010000000100000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ </Disp_Modes>
+ <Luts NumLuts="1">
+ <Lut Type="0" NumPackets="41">ECFFFFFF0000803F936F163FDA1AB13DEDFFFFFF0000803F87501D3FB9530A3EEEFFFFFF0000803FAAEE213FD1912C3EEFFFFFFF0000803F8CBC283F8C82603EF0FFFFFF0000803F473C2D3FD1E9813EF1FFFFFF0000803F5C02343FFE0E9D3EF2FFFFFF0000803F6E6E383FE04DAF3EF3FFFFFF0000803F31093F3F3C16CB3EF4FFFFFF0000803F3960433F73BDDD3EF5FFFFFF0000803F91D5493F6519FA3EF6FFFFFF0000803F840E4E3F957E063FF7FFFFFF0000803F1B62543FCEDF143FF8FFFFFF0000803F828C583F90871E3FF9FFFFFF0000803FF2B65E3F1A182D3FFAFFFFFF0000803FE7C4623FABCE363FFBFFFFFF0000803FD7BE683F8E5A453FFCFFFFFF0000803F41B66C3FD6194F3FFDFFFFFF0000803F1E8A723F8AAC5D3FFEFFFFFF0000803F516B763F6475673FFFFFFFFF0000803F8A227C3FB41E763F000000000000803F0000803F0000803F01000000836B723F6189773F0000803F02000000BF0C6A3F484E723F0000803F03000000CD945E3F191E6B3F0000803F04000000B988573FEFAB663F0000803F0500000084D44D3F5E81603F0000803F0600000045D9473FEBAA5C3F0000803F07000000CA883F3F2651573F0000803F080000005C593A3FADFB533F0000803F09000000802D333F05514F3F0000803F0A00000083C02E3FC3624C3F0000803F0B0000005986283FE04C483F0000803F0C0000008C9D243F18B3453F0000803F0D000000431C1F3F8909423F0000803F0E000000ABB21B3FE4C03F3F0000803F0F0000003DD4163FC07A3C3F0000803F1000000009C0133FE4683A3F0000803F110000008A740F3FF27B373F0000803F1200000039B80C3FCB9D353F0000803F130000005DDE083FBAF9323F0000803F140000009467063F3448313F0000803F</Lut>
+ </Luts>
+</Calib_Data>
diff --git a/config/qdcm_calib_data_trinket_default.xml b/config/qdcm_calib_data_trinket_default.xml
new file mode 100644
index 0000000..c954946
--- /dev/null
+++ b/config/qdcm_calib_data_trinket_default.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?>
+<!--
+Copyright (c) 2019, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+-->
+<Calib_Data>
+ <Disp_Modes NumModes="1" DefaultMode="0">
+ <Mode ModeID="0" DisplayID="0" IsDefaultMode="0" IsAppMode="0" Name="native" NumOfFeatures="13" WhitePoint="0" EValue="255" BValue="100" RValue="100" DynamicRange="sdr" ColorGamut="native">
+ <Feature FeatureType="2" Disable="true" DataSize="272">00000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="7" Disable="true" DataSize="12300">00000000000100000600000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000001010000110100002101000031010000410100005101000061010000710100008101000091010000A1010000B1010000C1010000D1010000E1010000F101000002020000120200002202000032020000420200005202000062020000720200008202000092020000A2020000B2020000C2020000D2020000E2020000F202000003030000130300002303000033030000430300005303000063030000730300008303000093030000A3030000B3030000C3030000D3030000E3030000F303000004040000140400002404000034040000440400005404000064040000740400008404000094040000A4040000B4040000C4040000D4040000E4040000F404000005050000150500002505000035050000450500005505000065050000750500008505000095050000A5050000B5050000C5050000D5050000E5050000F505000006060000160600002606000036060000460600005606000066060000760600008606000096060000A6060000B6060000C6060000D6060000E6060000F606000007070000170700002707000037070000470700005707000067070000770700008707000097070000A7070000B7070000C7070000D7070000E7070000F707000008080000180800002808000038080000480800005808000068080000780800008808000098080000A8080000B8080000C8080000D8080000E8080000F808000009090000190900002909000039090000490900005909000069090000790900008909000099090000A9090000B9090000C9090000D9090000E9090000F90900000A0A00001A0A00002A0A00003A0A00004A0A00005A0A00006A0A00007A0A00008A0A00009A0A0000AA0A0000BA0A0000CA0A0000DA0A0000EA0A0000FA0A00000B0B00001B0B00002B0B00003B0B00004B0B00005B0B00006B0B00007B0B00008B0B00009B0B0000AB0B0000BB0B0000CB0B0000DB0B0000EB0B0000FB0B00000C0C00001C0C00002C0C00003C0C00004C0C00005C0C00006C0C00007C0C00008C0C00009C0C0000AC0C0000BC0C0000CC0C0000DC0C0000EC0C0000FC0C00000D0D00001D0D00002D0D00003D0D00004D0D00005D0D00006D0D00007D0D00008D0D00009D0D0000AD0D0000BD0D0000CD0D0000DD0D0000ED0D0000FD0D00000E0E00001E0E00002E0E00003E0E00004E0E00005E0E00006E0E00007E0E00008E0E00009E0E0000AE0E0000BE0E0000CE0E0000DE0E0000EE0E0000FE0E00000F0F00001F0F00002F0F00003F0F00004F0F00005F0F00006F0F00007F0F00008F0F00009F0F0000AF0F0000BF0F0000CF0F0000DF0F0000EF0F0000FF0F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="8" Disable="true" DataSize="12300">010000000004000006000000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000000000000100000002000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F000000100000001100000012000000130000001400000015000000160000001700000018000000190000001A0000001B0000001C0000001D0000001E0000001F000000200000002100000022000000230000002400000025000000260000002700000028000000290000002A0000002B0000002C0000002D0000002E0000002F000000300000003100000032000000330000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A8000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BC000000BD000000BE000000BF000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000DF000000E0000000E1000000E2000000E3000000E4000000E5000000E6000000E7000000E8000000E9000000EA000000EB000000EC000000ED000000EE000000EF000000F0000000F1000000F2000000F3000000F4000000F5000000F6000000F7000000F8000000F9000000FA000000FB000000FC000000FD000000FE000000FF000000000100000101000002010000030100000401000005010000060100000701000008010000090100000A0100000B0100000C0100000D0100000E0100000F010000100100001101000012010000130100001401000015010000160100001701000018010000190100001A0100001B0100001C0100001D0100001E0100001F010000200100002101000022010000230100002401000025010000260100002701000028010000290100002A0100002B0100002C0100002D0100002E0100002F010000300100003101000032010000330100003401000035010000360100003701000038010000390100003A0100003B0100003C0100003D0100003E0100003F010000400100004101000042010000430100004401000045010000460100004701000048010000490100004A0100004B0100004C0100004D0100004E0100004F010000500100005101000052010000530100005401000055010000560100005701000058010000590100005A0100005B0100005C0100005D0100005E0100005F010000600100006101000062010000630100006401000065010000660100006701000068010000690100006A0100006B0100006C0100006D0100006E0100006F010000700100007101000072010000730100007401000075010000760100007701000078010000790100007A0100007B0100007C0100007D0100007E0100007F010000800100008101000082010000830100008401000085010000860100008701000088010000890100008A0100008B0100008C0100008D0100008E0100008F010000900100009101000092010000930100009401000095010000960100009701000098010000990100009A0100009B0100009C0100009D0100009E0100009F010000A0010000A1010000A2010000A3010000A4010000A5010000A6010000A7010000A8010000A9010000AA010000AB010000AC010000AD010000AE010000AF010000B0010000B1010000B2010000B3010000B4010000B5010000B6010000B7010000B8010000B9010000BA010000BB010000BC010000BD010000BE010000BF010000C0010000C1010000C2010000C3010000C4010000C5010000C6010000C7010000C8010000C9010000CA010000CB010000CC010000CD010000CE010000CF010000D0010000D1010000D2010000D3010000D4010000D5010000D6010000D7010000D8010000D9010000DA010000DB010000DC010000DD010000DE010000DF010000E0010000E1010000E2010000E3010000E4010000E5010000E6010000E7010000E8010000E9010000EA010000EB010000EC010000ED010000EE010000EF010000F0010000F1010000F2010000F3010000F4010000F5010000F6010000F7010000F8010000F9010000FA010000FB010000FC010000FD010000FE010000FF010000000200000102000002020000030200000402000005020000060200000702000008020000090200000A0200000B0200000C0200000D0200000E0200000F020000100200001102000012020000130200001402000015020000160200001702000018020000190200001A0200001B0200001C0200001D0200001E0200001F020000200200002102000022020000230200002402000025020000260200002702000028020000290200002A0200002B0200002C0200002D0200002E0200002F020000300200003102000032020000330200003402000035020000360200003702000038020000390200003A0200003B0200003C0200003D0200003E0200003F020000400200004102000042020000430200004402000045020000460200004702000048020000490200004A0200004B0200004C0200004D0200004E0200004F020000500200005102000052020000530200005402000055020000560200005702000058020000590200005A0200005B0200005C0200005D0200005E0200005F020000600200006102000062020000630200006402000065020000660200006702000068020000690200006A0200006B0200006C0200006D0200006E0200006F020000700200007102000072020000730200007402000075020000760200007702000078020000790200007A0200007B0200007C0200007D0200007E0200007F020000800200008102000082020000830200008402000085020000860200008702000088020000890200008A0200008B0200008C0200008D0200008E0200008F020000900200009102000092020000930200009402000095020000960200009702000098020000990200009A0200009B0200009C0200009D0200009E0200009F020000A0020000A1020000A2020000A3020000A4020000A5020000A6020000A7020000A8020000A9020000AA020000AB020000AC020000AD020000AE020000AF020000B0020000B1020000B2020000B3020000B4020000B5020000B6020000B7020000B8020000B9020000BA020000BB020000BC020000BD020000BE020000BF020000C0020000C1020000C2020000C3020000C4020000C5020000C6020000C7020000C8020000C9020000CA020000CB020000CC020000CD020000CE020000CF020000D0020000D1020000D2020000D3020000D4020000D5020000D6020000D7020000D8020000D9020000DA020000DB020000DC020000DD020000DE020000DF020000E0020000E1020000E2020000E3020000E4020000E5020000E6020000E7020000E8020000E9020000EA020000EB020000EC020000ED020000EE020000EF020000F0020000F1020000F2020000F3020000F4020000F5020000F6020000F7020000F8020000F9020000FA020000FB020000FC020000FD020000FE020000FF020000000300000103000002030000030300000403000005030000060300000703000008030000090300000A0300000B0300000C0300000D0300000E0300000F030000100300001103000012030000130300001403000015030000160300001703000018030000190300001A0300001B0300001C0300001D0300001E0300001F030000200300002103000022030000230300002403000025030000260300002703000028030000290300002A0300002B0300002C0300002D0300002E0300002F030000300300003103000032030000330300003403000035030000360300003703000038030000390300003A0300003B0300003C0300003D0300003E0300003F030000400300004103000042030000430300004403000045030000460300004703000048030000490300004A0300004B0300004C0300004D0300004E0300004F030000500300005103000052030000530300005403000055030000560300005703000058030000590300005A0300005B0300005C0300005D0300005E0300005F030000600300006103000062030000630300006403000065030000660300006703000068030000690300006A0300006B0300006C0300006D0300006E0300006F030000700300007103000072030000730300007403000075030000760300007703000078030000790300007A0300007B0300007C0300007D0300007E0300007F030000800300008103000082030000830300008403000085030000860300008703000088030000890300008A0300008B0300008C0300008D0300008E0300008F030000900300009103000092030000930300009403000095030000960300009703000098030000990300009A0300009B0300009C0300009D0300009E0300009F030000A0030000A1030000A2030000A3030000A4030000A5030000A6030000A7030000A8030000A9030000AA030000AB030000AC030000AD030000AE030000AF030000B0030000B1030000B2030000B3030000B4030000B5030000B6030000B7030000B8030000B9030000BA030000BB030000BC030000BD030000BE030000BF030000C0030000C1030000C2030000C3030000C4030000C5030000C6030000C7030000C8030000C9030000CA030000CB030000CC030000CD030000CE030000CF030000D0030000D1030000D2030000D3030000D4030000D5030000D6030000D7030000D8030000D9030000DA030000DB030000DC030000DD030000DE030000DF030000E0030000E1030000E2030000E3030000E4030000E5030000E6030000E7030000E8030000E9030000EA030000EB030000EC030000ED030000EE030000EF030000F0030000F1030000F2030000F3030000F4030000F5030000F6030000F7030000F8030000F9030000FA030000FB030000FC030000FD030000FE030000FF030000</Feature>
+ <Feature FeatureType="14" Disable="false" DataSize="9560">00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F00000021000000210000000300000003000000000000002D00000000000000010000000000C842000000000000803F0000C842000000000000803F0100000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000FF000000C3000000010000000000C842000000000000803F0000C842000000000000803F0200000000000000000000000000000000000000000000000F0000002100000021000000030000000300000000000000870000004B000000010000000000C842000000000000803F0000C842000000000000803F0000000000000000640000000A0000000100000064000000000000000100000021000000210000000300000003000000000000000000000080010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Feature>
+ <Feature FeatureType="20" Disable="true" DataSize="88">0000000008000000080000000800000000000000100000000F000000070000000D00000005000000030000000B00000001000000090000000C000000040000000E000000060000000000000008000000020000000A000000</Feature>
+ <Feature FeatureType="22" Disable="true" DataSize="0"/>
+ </Mode>
+ </Disp_Modes>
+ <Luts NumLuts="1">
+ <Lut Type="0" NumPackets="41">ECFFFFFF0000803F936F163FDA1AB13DEDFFFFFF0000803F87501D3FB9530A3EEEFFFFFF0000803FAAEE213FD1912C3EEFFFFFFF0000803F8CBC283F8C82603EF0FFFFFF0000803F473C2D3FD1E9813EF1FFFFFF0000803F5C02343FFE0E9D3EF2FFFFFF0000803F6E6E383FE04DAF3EF3FFFFFF0000803F31093F3F3C16CB3EF4FFFFFF0000803F3960433F73BDDD3EF5FFFFFF0000803F91D5493F6519FA3EF6FFFFFF0000803F840E4E3F957E063FF7FFFFFF0000803F1B62543FCEDF143FF8FFFFFF0000803F828C583F90871E3FF9FFFFFF0000803FF2B65E3F1A182D3FFAFFFFFF0000803FE7C4623FABCE363FFBFFFFFF0000803FD7BE683F8E5A453FFCFFFFFF0000803F41B66C3FD6194F3FFDFFFFFF0000803F1E8A723F8AAC5D3FFEFFFFFF0000803F516B763F6475673FFFFFFFFF0000803F8A227C3FB41E763F000000000000803F0000803F0000803F01000000836B723F6189773F0000803F02000000BF0C6A3F484E723F0000803F03000000CD945E3F191E6B3F0000803F04000000B988573FEFAB663F0000803F0500000084D44D3F5E81603F0000803F0600000045D9473FEBAA5C3F0000803F07000000CA883F3F2651573F0000803F080000005C593A3FADFB533F0000803F09000000802D333F05514F3F0000803F0A00000083C02E3FC3624C3F0000803F0B0000005986283FE04C483F0000803F0C0000008C9D243F18B3453F0000803F0D000000431C1F3F8909423F0000803F0E000000ABB21B3FE4C03F3F0000803F0F0000003DD4163FC07A3C3F0000803F1000000009C0133FE4683A3F0000803F110000008A740F3FF27B373F0000803F1200000039B80C3FCB9D353F0000803F130000005DDE083FBAF9323F0000803F140000009467063F3448313F0000803F</Lut>
+ </Luts>
+</Calib_Data>
diff --git a/config/talos.mk b/config/talos.mk
new file mode 100644
index 0000000..3c5bace
--- /dev/null
+++ b/config/talos.mk
@@ -0,0 +1,91 @@
+#Display related packages and configuration
+
+PRODUCT_PACKAGES += \
+ android.hardware.graphics.composer@2.4-impl \
+ android.hardware.graphics.composer@2.4-service \
+ android.hardware.graphics.mapper@2.0-impl-qti-display \
+ vendor.qti.hardware.display.allocator-service \
+ android.hardware.memtrack@1.0-impl \
+ android.hardware.memtrack@1.0-service \
+ android.hardware.light@2.0-impl \
+ android.hardware.light@2.0-service \
+ gralloc.sm6150 \
+ lights.sm6150 \
+ hwcomposer.sm6150 \
+ memtrack.sm6150 \
+ libqdutils \
+ libqdMetaData \
+ libqdMetaData.system \
+ modetest
+
+#QDCM calibration xml file base on Talos panel type hx83112a
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_talos_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_hx83112a_video_mode_dsi_truly_panel.xml
+#QDCM calibration xml file base on Talos panel type td4328
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_talos_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_td4328_cmd_mode_dsi_truly_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_talos_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_td4328_video_mode_dsi_truly_panel.xml
+
+#QDCM calibration xml file base on Moorea panel type fhd+
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_sw43404_amoled_boe_fhd+_panel_with_DSC.xml
+#QDCM calibration xml file base on Moorea panel type sw43404
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_sw43404_amoled_cmd_mode_dsi_boe_panel_with_DSC.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_sw43404_amoled_cmd_mode_dsi_boe_panel_with_DSC.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_sw43404_amoled_cmd_mode_dsi_boe_panel_with_DSC.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_sw43404_amoled_video_mode_dsi_boe_panel_with_DSC.xml
+#QDCM calibration xml file base on Moorea panel type wqhd
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Dual_Sharp_WQHD_cmd_mode_dsi_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_Dual_Sharp_wqhd_video_mode_dsi_panel.xml
+
+#QDCM calibration xml file for secondary panel nt35695b
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_nt35695b_truly_fhd_command_mode_dsi_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_nt35695b_truly_fhd_video_mode_dsi_panel.xml
+
+#Enable Charging Icon
+TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888
+
+TARGET_USES_GRALLOC1 := true
+TARGET_USES_DRM_PP := true
+TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS := true
+MAX_VIRTUAL_DISPLAY_DIMENSION := 4096
+NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3
+TARGET_USES_HWC2 := true
+TARGET_USES_QCOM_DISPLAY_BSP := true
+TARGET_USES_COLOR_METADATA := true
+TARGET_USES_DISPLAY_RENDER_INTENTS := true
+TARGET_USES_QTI_MAPPER_2_0 := true
+TARGET_USES_QTI_MAPPER_EXTENSIONS_1_1 := true
+
+PRODUCT_PROPERTY_OVERRIDES += \
+ persist.demo.hdmirotationlock=false \
+ persist.sys.sf.color_saturation=1.0 \
+ debug.sf.hw=0 \
+ debug.egl.hw=0 \
+ debug.sf.latch_unsignaled=1 \
+ debug.mdpcomp.logs=0 \
+ vendor.gralloc.disable_ubwc=0 \
+ vendor.display.disable_scaler=0 \
+ vendor.display.disable_inline_rotator=1 \
+ vendor.display.disable_decimation=1 \
+ vendor.display.disable_excl_rect_partial_fb=1 \
+ vendor.display.enable_null_display=0 \
+ vendor.display.disable_excl_rect=0 \
+ vendor.display.comp_mask=0 \
+ vendor.display.enable_default_color_mode=1 \
+ vendor.display.enable_optimize_refresh=1
+
+ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
+# Recovery is enabled, logging is enabled
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.display.disable_hw_recovery_dump=0
+else
+# Recovery is enabled, logging is disabled
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.display.disable_hw_recovery_dump=1
+endif
+
+# Properties using default value:
+# vendor.display.disable_hw_recovery=0
+
+# This matrix should be in column major order, per SurfaceFlinger requirement
+# 1.0 0.0 0.0
+# 0.0 1.0 0.0
+# 0.0 0.0 1.0
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.display.dataspace_saturation_matrix=1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0
diff --git a/config/trinket.mk b/config/trinket.mk
new file mode 100644
index 0000000..f607b42
--- /dev/null
+++ b/config/trinket.mk
@@ -0,0 +1,60 @@
+#Display related packages and configuration
+
+PRODUCT_PACKAGES += \
+ android.hardware.graphics.composer@2.2-impl \
+ android.hardware.graphics.composer@2.2-service \
+ android.hardware.graphics.mapper@2.0-impl-qti-display \
+ vendor.qti.hardware.display.allocator@1.0-service \
+ android.hardware.memtrack@1.0-impl \
+ android.hardware.memtrack@1.0-service \
+ android.hardware.light@2.0-impl \
+ android.hardware.light@2.0-service \
+ gralloc.trinket \
+ lights.trinket \
+ hwcomposer.trinket \
+ memtrack.trinket \
+ libqdutils \
+ libqdMetaData \
+ libqdMetaData.system \
+ modetest
+
+#QDCM calibration xml file base on td4330
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_trinket_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_td4330_cmd_mode_dsi_truly_panel.xml
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_trinket_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_td4330_video_mode_dsi_truly_panel.xml
+#QDCM calibration xml file base on nt36672
+PRODUCT_COPY_FILES += hardware/qcom/display/config/qdcm_calib_data_trinket_default.xml:$(TARGET_COPY_OUT_VENDOR)/etc/qdcm_calib_data_nt36672_truly_fhd_video_mode_dsi_panel.xml
+
+#Enable Charging Icon
+TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888
+
+TARGET_USES_GRALLOC1 := true
+TARGET_USES_DRM_PP := true
+TARGET_FORCE_HWC_FOR_VIRTUAL_DISPLAYS := true
+MAX_VIRTUAL_DISPLAY_DIMENSION := 4096
+NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3
+TARGET_USES_HWC2 := true
+TARGET_USES_QCOM_DISPLAY_BSP := true
+TARGET_USES_COLOR_METADATA := true
+
+PRODUCT_PROPERTY_OVERRIDES += \
+ persist.demo.hdmirotationlock=false \
+ persist.sys.sf.color_saturation=1.0 \
+ debug.sf.hw=0 \
+ debug.egl.hw=0 \
+ debug.sf.latch_unsignaled=1 \
+ debug.mdpcomp.logs=0 \
+ vendor.gralloc.disable_ubwc=0 \
+ vendor.display.disable_scaler=0 \
+ vendor.display.disable_inline_rotator=1 \
+ vendor.display.disable_decimation=1 \
+ vendor.display.enable_null_display=0 \
+ vendor.display.disable_excl_rect=0 \
+ vendor.display.comp_mask=0 \
+ vendor.display.enable_default_color_mode=1
+
+# This matrix should be in column major order, per SurfaceFlinger requirement
+# 1.0 0.0 0.0
+# 0.0 1.0 0.0
+# 0.0 0.0 1.0
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.display.dataspace_saturation_matrix=1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0
diff --git a/configure.ac b/configure.ac
index 8950b21..c9de521 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,13 +1,13 @@
# -*- Autoconf -*-
-# configure.ac -- Autoconf script for display commonsys intf
+# configure.ac -- Autoconf script for sdm
#
# Process this file with autoconf to produce a configure script
# Requires autoconf tool later than 2.61
AC_PREREQ(2.61)
-# Initialize the display commonsys intf package version 1.0.0
-AC_INIT([disp-commonsys-intf],1.0.0)
+# Initialize the display package version 1.0.0
+AC_INIT([display],1.0.0)
# Does not strictly follow GNU Coding standards
AM_INIT_AUTOMAKE([foreign])
# Disables auto rebuilding of configure, Makefile.ins
@@ -15,6 +15,7 @@
# defines some macros variable to be included by source
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
+AC_SUBST([COMMON_CFLAGS], [-Wall -Werror -Wno-sign-conversion -Wconversion -DDEBUG_CALC_FPS])
AC_SUBST([AM_CPPFLAGS], [--std=c++11])
AC_ARG_WITH([core_includes],
@@ -32,6 +33,14 @@
[Specify the location of the sanitized Linux headers]),
[CPPFLAGS="$CPPFLAGS -I$withval"])
+AC_ARG_ENABLE([sdmhaldrm],
+ AC_HELP_STRING([--enable-sdmhaldrm],
+ [enable sdmhaldrm, build display-hal-linux with sdmhaldrm]),
+ [enable_sdmhaldrm="${enableval}"],
+ enable_sdmhaldrm=no)
+
+AM_CONDITIONAL([ENABLE_SDMHALDRM], [test "x${enable_sdmhaldrm}" = "xyes"])
+
# Checks for programs.
AC_PROG_CC
AM_PROG_CC_C_O
@@ -47,6 +56,11 @@
AC_SUBST([CC])
AC_CONFIG_FILES([ \
Makefile \
- libqdmetadata/Makefile
+ libqservice/Makefile \
+ libqdutils/Makefile \
+ libdebug/Makefile \
+ libdrmutils/Makefile \
+ sdm/libs/utils/Makefile \
+ sdm/libs/core/Makefile
])
AC_OUTPUT
diff --git a/display-commonsys-intf/.clang-format b/display-commonsys-intf/.clang-format
new file mode 100644
index 0000000..26ce4fe
--- /dev/null
+++ b/display-commonsys-intf/.clang-format
@@ -0,0 +1,14 @@
+---
+Language: Cpp
+BasedOnStyle: Google
+Standard : C++11
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: Inline
+AllowShortBlocksOnASingleLine: false
+ColumnLimit: 100
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
+ConstructorInitializerIndentWidth: 4
+DerivePointerAlignment: false
+PointerAlignment: Right
+#ReflowComments: false
diff --git a/display-commonsys-intf/.gitignore b/display-commonsys-intf/.gitignore
new file mode 100644
index 0000000..ad71dd6
--- /dev/null
+++ b/display-commonsys-intf/.gitignore
@@ -0,0 +1,4 @@
+CMakeLists.txt
+.idea/
+.editorconfig
+.clang-complete
diff --git a/display-commonsys-intf/Android.bp b/display-commonsys-intf/Android.bp
new file mode 100644
index 0000000..408e904
--- /dev/null
+++ b/display-commonsys-intf/Android.bp
@@ -0,0 +1,10 @@
+cc_library_headers {
+ name: "display_intf_headers",
+ vendor_available: true,
+ export_include_dirs: [
+ "gralloc",
+ "include",
+ "libqdmetadata",
+ "services",
+ ],
+}
diff --git a/display-commonsys-intf/Makefile.am b/display-commonsys-intf/Makefile.am
new file mode 100644
index 0000000..8009b42
--- /dev/null
+++ b/display-commonsys-intf/Makefile.am
@@ -0,0 +1,2 @@
+ACLOCAL_AMFLAGS = -I m4
+SUBDIRS = libqdmetadata
diff --git a/config/display-interfaces-product.mk b/display-commonsys-intf/config/display-interfaces-product.mk
similarity index 100%
rename from config/display-interfaces-product.mk
rename to display-commonsys-intf/config/display-interfaces-product.mk
diff --git a/config/display-product-system.mk b/display-commonsys-intf/config/display-product-system.mk
similarity index 100%
rename from config/display-product-system.mk
rename to display-commonsys-intf/config/display-product-system.mk
diff --git a/display-commonsys-intf/configure.ac b/display-commonsys-intf/configure.ac
new file mode 100644
index 0000000..8950b21
--- /dev/null
+++ b/display-commonsys-intf/configure.ac
@@ -0,0 +1,52 @@
+# -*- Autoconf -*-
+# configure.ac -- Autoconf script for display commonsys intf
+#
+
+# Process this file with autoconf to produce a configure script
+
+# Requires autoconf tool later than 2.61
+AC_PREREQ(2.61)
+# Initialize the display commonsys intf package version 1.0.0
+AC_INIT([disp-commonsys-intf],1.0.0)
+# Does not strictly follow GNU Coding standards
+AM_INIT_AUTOMAKE([foreign])
+# Disables auto rebuilding of configure, Makefile.ins
+AM_MAINTAINER_MODE
+# defines some macros variable to be included by source
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+AC_SUBST([AM_CPPFLAGS], [--std=c++11])
+
+AC_ARG_WITH([core_includes],
+ AC_HELP_STRING([--with-core-includes=@<:@dir@:>@],
+ [Specify the location of the core headers]),
+ [core_incdir=$withval],
+ with_core_includes=no)
+
+if test "x$with_core_includes" != "xno"; then
+ CFLAGS="${CFLAGS} -I${core_incdir}"
+fi
+
+AC_ARG_WITH(sanitized-headers,
+ AS_HELP_STRING([--with-sanitized-headers=DIR],
+ [Specify the location of the sanitized Linux headers]),
+ [CPPFLAGS="$CPPFLAGS -I$withval"])
+
+# Checks for programs.
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_CXX
+AC_PROG_LIBTOOL
+AC_PROG_AWK
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+
+AC_SUBST([CFLAGS])
+AC_SUBST([CC])
+AC_CONFIG_FILES([ \
+ Makefile \
+ libqdmetadata/Makefile
+ ])
+AC_OUTPUT
diff --git a/gralloc/Android.bp b/display-commonsys-intf/gralloc/Android.bp
similarity index 100%
rename from gralloc/Android.bp
rename to display-commonsys-intf/gralloc/Android.bp
diff --git a/gralloc/QtiGralloc.cpp b/display-commonsys-intf/gralloc/QtiGralloc.cpp
similarity index 100%
rename from gralloc/QtiGralloc.cpp
rename to display-commonsys-intf/gralloc/QtiGralloc.cpp
diff --git a/gralloc/QtiGralloc.h b/display-commonsys-intf/gralloc/QtiGralloc.h
similarity index 100%
rename from gralloc/QtiGralloc.h
rename to display-commonsys-intf/gralloc/QtiGralloc.h
diff --git a/gralloc/QtiGrallocDefs.h b/display-commonsys-intf/gralloc/QtiGrallocDefs.h
similarity index 100%
rename from gralloc/QtiGrallocDefs.h
rename to display-commonsys-intf/gralloc/QtiGrallocDefs.h
diff --git a/gralloc/QtiGrallocMetadata.h b/display-commonsys-intf/gralloc/QtiGrallocMetadata.h
similarity index 100%
rename from gralloc/QtiGrallocMetadata.h
rename to display-commonsys-intf/gralloc/QtiGrallocMetadata.h
diff --git a/gralloc/QtiGrallocPriv.h b/display-commonsys-intf/gralloc/QtiGrallocPriv.h
similarity index 100%
rename from gralloc/QtiGrallocPriv.h
rename to display-commonsys-intf/gralloc/QtiGrallocPriv.h
diff --git a/gralloc/gr_priv_handle.h b/display-commonsys-intf/gralloc/gr_priv_handle.h
similarity index 100%
rename from gralloc/gr_priv_handle.h
rename to display-commonsys-intf/gralloc/gr_priv_handle.h
diff --git a/gralloc/gralloc_priv.h b/display-commonsys-intf/gralloc/gralloc_priv.h
similarity index 100%
rename from gralloc/gralloc_priv.h
rename to display-commonsys-intf/gralloc/gralloc_priv.h
diff --git a/include/color_metadata.h b/display-commonsys-intf/include/color_metadata.h
similarity index 100%
rename from include/color_metadata.h
rename to display-commonsys-intf/include/color_metadata.h
diff --git a/include/composer_extn_intf.h b/display-commonsys-intf/include/composer_extn_intf.h
similarity index 100%
rename from include/composer_extn_intf.h
rename to display-commonsys-intf/include/composer_extn_intf.h
diff --git a/include/display_color_processing.h b/display-commonsys-intf/include/display_color_processing.h
similarity index 100%
rename from include/display_color_processing.h
rename to display-commonsys-intf/include/display_color_processing.h
diff --git a/include/display_extn_intf.h b/display-commonsys-intf/include/display_extn_intf.h
similarity index 100%
rename from include/display_extn_intf.h
rename to display-commonsys-intf/include/display_extn_intf.h
diff --git a/include/frame_extn_intf.h b/display-commonsys-intf/include/frame_extn_intf.h
similarity index 100%
rename from include/frame_extn_intf.h
rename to display-commonsys-intf/include/frame_extn_intf.h
diff --git a/include/frame_scheduler_intf.h b/display-commonsys-intf/include/frame_scheduler_intf.h
similarity index 100%
rename from include/frame_scheduler_intf.h
rename to display-commonsys-intf/include/frame_scheduler_intf.h
diff --git a/include/layer_extn_intf.h b/display-commonsys-intf/include/layer_extn_intf.h
similarity index 100%
rename from include/layer_extn_intf.h
rename to display-commonsys-intf/include/layer_extn_intf.h
diff --git a/include/smomo_config.h b/display-commonsys-intf/include/smomo_config.h
similarity index 100%
rename from include/smomo_config.h
rename to display-commonsys-intf/include/smomo_config.h
diff --git a/include/smomo_interface.h b/display-commonsys-intf/include/smomo_interface.h
similarity index 100%
rename from include/smomo_interface.h
rename to display-commonsys-intf/include/smomo_interface.h
diff --git a/libqdmetadata/Android.bp b/display-commonsys-intf/libqdmetadata/Android.bp
similarity index 100%
rename from libqdmetadata/Android.bp
rename to display-commonsys-intf/libqdmetadata/Android.bp
diff --git a/libqdmetadata/Makefile.am b/display-commonsys-intf/libqdmetadata/Makefile.am
similarity index 100%
rename from libqdmetadata/Makefile.am
rename to display-commonsys-intf/libqdmetadata/Makefile.am
diff --git a/libqdmetadata/qdMetaData.cpp b/display-commonsys-intf/libqdmetadata/qdMetaData.cpp
similarity index 100%
rename from libqdmetadata/qdMetaData.cpp
rename to display-commonsys-intf/libqdmetadata/qdMetaData.cpp
diff --git a/libqdmetadata/qdMetaData.h b/display-commonsys-intf/libqdmetadata/qdMetaData.h
similarity index 100%
rename from libqdmetadata/qdMetaData.h
rename to display-commonsys-intf/libqdmetadata/qdMetaData.h
diff --git a/libqdmetadata/qd_utils.cpp b/display-commonsys-intf/libqdmetadata/qd_utils.cpp
similarity index 100%
rename from libqdmetadata/qd_utils.cpp
rename to display-commonsys-intf/libqdmetadata/qd_utils.cpp
diff --git a/libqdmetadata/qd_utils.h b/display-commonsys-intf/libqdmetadata/qd_utils.h
similarity index 100%
copy from libqdmetadata/qd_utils.h
copy to display-commonsys-intf/libqdmetadata/qd_utils.h
diff --git a/services/config/client_interface.h b/display-commonsys-intf/services/config/client_interface.h
similarity index 100%
rename from services/config/client_interface.h
rename to display-commonsys-intf/services/config/client_interface.h
diff --git a/services/config/config_defs.h b/display-commonsys-intf/services/config/config_defs.h
similarity index 100%
rename from services/config/config_defs.h
rename to display-commonsys-intf/services/config/config_defs.h
diff --git a/services/config/device_interface.h b/display-commonsys-intf/services/config/device_interface.h
similarity index 100%
rename from services/config/device_interface.h
rename to display-commonsys-intf/services/config/device_interface.h
diff --git a/services/config/src/Android.bp b/display-commonsys-intf/services/config/src/Android.bp
similarity index 100%
rename from services/config/src/Android.bp
rename to display-commonsys-intf/services/config/src/Android.bp
diff --git a/services/config/src/client_impl.cpp b/display-commonsys-intf/services/config/src/client_impl.cpp
similarity index 100%
rename from services/config/src/client_impl.cpp
rename to display-commonsys-intf/services/config/src/client_impl.cpp
diff --git a/services/config/src/client_impl.h b/display-commonsys-intf/services/config/src/client_impl.h
similarity index 100%
rename from services/config/src/client_impl.h
rename to display-commonsys-intf/services/config/src/client_impl.h
diff --git a/services/config/src/client_interface.cpp b/display-commonsys-intf/services/config/src/client_interface.cpp
similarity index 100%
rename from services/config/src/client_interface.cpp
rename to display-commonsys-intf/services/config/src/client_interface.cpp
diff --git a/services/config/src/device_impl.cpp b/display-commonsys-intf/services/config/src/device_impl.cpp
similarity index 100%
rename from services/config/src/device_impl.cpp
rename to display-commonsys-intf/services/config/src/device_impl.cpp
diff --git a/services/config/src/device_impl.h b/display-commonsys-intf/services/config/src/device_impl.h
similarity index 100%
rename from services/config/src/device_impl.h
rename to display-commonsys-intf/services/config/src/device_impl.h
diff --git a/services/config/src/device_interface.cpp b/display-commonsys-intf/services/config/src/device_interface.cpp
similarity index 100%
rename from services/config/src/device_interface.cpp
rename to display-commonsys-intf/services/config/src/device_interface.cpp
diff --git a/services/config/src/opcode_types.h b/display-commonsys-intf/services/config/src/opcode_types.h
similarity index 100%
rename from services/config/src/opcode_types.h
rename to display-commonsys-intf/services/config/src/opcode_types.h
diff --git a/gpu_tonemapper/Android.mk b/gpu_tonemapper/Android.mk
new file mode 100644
index 0000000..fd34da9
--- /dev/null
+++ b/gpu_tonemapper/Android.mk
@@ -0,0 +1,28 @@
+LOCAL_PATH := $(call my-dir)
+include $(LOCAL_PATH)/../common.mk
+
+include $(CLEAR_VARS)
+LOCAL_COPY_HEADERS_TO := $(common_header_export_path)
+LOCAL_COPY_HEADERS := TonemapFactory.h Tonemapper.h
+LOCAL_VENDOR_MODULE := true
+include $(BUILD_COPY_HEADERS)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libgpu_tonemapper
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_TAGS := optional
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+LOCAL_SHARED_LIBRARIES := libEGL libGLESv2 libGLESv3 libui libutils liblog
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
+LOCAL_CFLAGS := $(version_flag) -Wno-missing-field-initializers -Wall \
+ -Wno-unused-parameter -DLOG_TAG=\"GPU_TONEMAPPER\"
+
+LOCAL_SRC_FILES := TonemapFactory.cpp \
+ glengine.cpp \
+ EGLImageBuffer.cpp \
+ EGLImageWrapper.cpp \
+ Tonemapper.cpp
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/gpu_tonemapper/EGLImageBuffer.cpp b/gpu_tonemapper/EGLImageBuffer.cpp
new file mode 100644
index 0000000..eeb0273
--- /dev/null
+++ b/gpu_tonemapper/EGLImageBuffer.cpp
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "EGLImageBuffer.h"
+#include <cutils/native_handle.h>
+#include <gralloc_priv.h>
+#include <ui/GraphicBuffer.h>
+#include <map>
+#include "EGLImageWrapper.h"
+#include "glengine.h"
+
+//-----------------------------------------------------------------------------
+EGLImageKHR create_eglImage(android::sp<android::GraphicBuffer> graphicBuffer)
+//-----------------------------------------------------------------------------
+{
+ bool isProtected = (graphicBuffer->getUsage() & GRALLOC_USAGE_PROTECTED);
+ EGLint attrs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE,
+ isProtected ? EGL_PROTECTED_CONTENT_EXT : EGL_NONE,
+ isProtected ? EGL_TRUE : EGL_NONE, EGL_NONE};
+
+ EGLImageKHR eglImage = eglCreateImageKHR(
+ eglGetCurrentDisplay(), (EGLContext)EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID,
+ (EGLClientBuffer)(graphicBuffer->getNativeBuffer()), attrs);
+
+ return eglImage;
+}
+
+//-----------------------------------------------------------------------------
+EGLImageBuffer::EGLImageBuffer(android::sp<android::GraphicBuffer> graphicBuffer)
+//-----------------------------------------------------------------------------
+{
+ // this->graphicBuffer = graphicBuffer;
+ this->eglImageID = create_eglImage(graphicBuffer);
+ this->width = graphicBuffer->getWidth();
+ this->height = graphicBuffer->getHeight();
+
+ textureID = 0;
+ renderbufferID = 0;
+ framebufferID = 0;
+}
+
+//-----------------------------------------------------------------------------
+EGLImageBuffer::~EGLImageBuffer()
+//-----------------------------------------------------------------------------
+{
+ if (textureID != 0) {
+ GL(glDeleteTextures(1, &textureID));
+ textureID = 0;
+ }
+
+ if (renderbufferID != 0) {
+ GL(glDeleteRenderbuffers(1, &renderbufferID));
+ renderbufferID = 0;
+ }
+
+ if (framebufferID != 0) {
+ GL(glDeleteFramebuffers(1, &framebufferID));
+ framebufferID = 0;
+ }
+
+ // Delete the eglImage
+ if (eglImageID != 0)
+ {
+ eglDestroyImageKHR(eglGetCurrentDisplay(), eglImageID);
+ eglImageID = 0;
+ }
+}
+
+//-----------------------------------------------------------------------------
+int EGLImageBuffer::getWidth()
+//-----------------------------------------------------------------------------
+{
+ return width;
+}
+
+//-----------------------------------------------------------------------------
+int EGLImageBuffer::getHeight()
+//-----------------------------------------------------------------------------
+{
+ return height;
+}
+
+//-----------------------------------------------------------------------------
+unsigned int EGLImageBuffer::getTexture()
+//-----------------------------------------------------------------------------
+{
+ if (textureID == 0) {
+ bindAsTexture();
+ }
+
+ return textureID;
+}
+
+//-----------------------------------------------------------------------------
+unsigned int EGLImageBuffer::getFramebuffer()
+//-----------------------------------------------------------------------------
+{
+ if (framebufferID == 0) {
+ bindAsFramebuffer();
+ }
+
+ return framebufferID;
+}
+
+//-----------------------------------------------------------------------------
+void EGLImageBuffer::bindAsTexture()
+//-----------------------------------------------------------------------------
+{
+ if (textureID == 0) {
+ GL(glGenTextures(1, &textureID));
+ int target = 0x8D65;
+ GL(glBindTexture(target, textureID));
+ GL(glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
+ GL(glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
+ GL(glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE));
+ GL(glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
+
+ GL(glEGLImageTargetTexture2DOES(0x8D65, eglImageID));
+ }
+
+ GL(glBindTexture(0x8D65, textureID));
+}
+
+//-----------------------------------------------------------------------------
+void EGLImageBuffer::bindAsFramebuffer()
+//-----------------------------------------------------------------------------
+{
+ if (renderbufferID == 0) {
+ GL(glGenFramebuffers(1, &framebufferID));
+ GL(glGenRenderbuffers(1, &renderbufferID));
+
+ GL(glBindRenderbuffer(GL_RENDERBUFFER, renderbufferID));
+ GL(glEGLImageTargetRenderbufferStorageOES(GL_RENDERBUFFER, eglImageID));
+
+ GL(glBindFramebuffer(GL_FRAMEBUFFER, framebufferID));
+ GL(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
+ renderbufferID));
+ GLenum result = glCheckFramebufferStatus(GL_FRAMEBUFFER);
+ if (result != GL_FRAMEBUFFER_COMPLETE) {
+ ALOGI("%s Framebuffer Invalid***************", __FUNCTION__);
+ }
+ }
+
+ GL(glBindFramebuffer(GL_FRAMEBUFFER, framebufferID));
+}
diff --git a/gpu_tonemapper/EGLImageBuffer.h b/gpu_tonemapper/EGLImageBuffer.h
new file mode 100644
index 0000000..23af573
--- /dev/null
+++ b/gpu_tonemapper/EGLImageBuffer.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __EGLIMAGE_BUFFER_H__
+#define __EGLIMAGE_BUFFER_H__
+
+#include <cutils/native_handle.h>
+#include <gralloc_priv.h>
+#include <ui/GraphicBuffer.h>
+#include "engine.h"
+
+class EGLImageBuffer {
+ // android::sp<android::GraphicBuffer> graphicBuffer;
+ void *eglImageID;
+ int width;
+ int height;
+ uint textureID;
+ uint renderbufferID;
+ uint framebufferID;
+
+ public:
+ int getWidth();
+ int getHeight();
+ EGLImageBuffer(android::sp<android::GraphicBuffer>);
+ unsigned int getTexture();
+ unsigned int getFramebuffer();
+ void bindAsTexture();
+ void bindAsFramebuffer();
+ ~EGLImageBuffer();
+ static EGLImageBuffer *from(const private_handle_t *src);
+ static void clear();
+};
+
+#endif //__EGLIMAGE_BUFFER_H__
\ No newline at end of file
diff --git a/gpu_tonemapper/EGLImageWrapper.cpp b/gpu_tonemapper/EGLImageWrapper.cpp
new file mode 100644
index 0000000..19bf093
--- /dev/null
+++ b/gpu_tonemapper/EGLImageWrapper.cpp
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "EGLImageWrapper.h"
+#include <cutils/native_handle.h>
+#include <gralloc_priv.h>
+#include <ui/GraphicBuffer.h>
+#include <fcntl.h>
+#include <string>
+#include <map>
+#include <utility>
+
+using std::string;
+using std::map;
+using std::pair;
+
+static string pidString = std::to_string(getpid());
+
+#ifndef TARGET_ION_ABI_VERSION
+//-----------------------------------------------------------------------------
+static void free_ion_cookie(int ion_fd, int cookie)
+//-----------------------------------------------------------------------------
+{
+ if (ion_fd && !ioctl(ion_fd, ION_IOC_FREE, &cookie)) {
+ } else {
+ ALOGE("ION_IOC_FREE failed: ion_fd = %d, cookie = %d", ion_fd, cookie);
+ }
+}
+
+//-----------------------------------------------------------------------------
+static int get_ion_cookie(int ion_fd, int fd)
+//-----------------------------------------------------------------------------
+{
+ int cookie = fd;
+
+ struct ion_fd_data fdData;
+ memset(&fdData, 0, sizeof(fdData));
+ fdData.fd = fd;
+
+ if (ion_fd && !ioctl(ion_fd, ION_IOC_IMPORT, &fdData)) {
+ cookie = fdData.handle;
+ } else {
+ ALOGE("ION_IOC_IMPORT failed: ion_fd = %d, fd = %d", ion_fd, fd);
+ }
+
+ return cookie;
+}
+#else
+//-----------------------------------------------------------------------------
+static string get_ion_buff_str(int buff_fd)
+//-----------------------------------------------------------------------------
+{
+ string retStr = {};
+ if (buff_fd >= 0) {
+ string fdString = std::to_string(buff_fd);
+ string symlinkPath = "/proc/"+pidString+"/fd/"+fdString;
+ char buffer[1024] = {};
+ ssize_t ret = ::readlink(symlinkPath.c_str(), buffer, sizeof(buffer) - 1);
+ if (ret != -1) {
+ buffer[ret] = '\0';
+ retStr = buffer;
+ }
+ }
+
+ return retStr;
+}
+#endif
+
+//-----------------------------------------------------------------------------
+void EGLImageWrapper::DeleteEGLImageCallback::operator()(int& buffInt, EGLImageBuffer*& eglImage)
+//-----------------------------------------------------------------------------
+{
+ if (eglImage != 0) {
+ delete eglImage;
+ }
+
+#ifndef TARGET_ION_ABI_VERSION
+ free_ion_cookie(ion_fd, buffInt /* cookie */);
+#else
+ if (!mapClearPending) {
+ for (auto it = buffStrbuffIntMapPtr->begin(); it != buffStrbuffIntMapPtr->end(); it++) {
+ if (it->second == buffInt /* counter */) {
+ buffStrbuffIntMapPtr->erase(it);
+ return;
+ }
+ }
+ }
+#endif
+}
+
+//-----------------------------------------------------------------------------
+EGLImageWrapper::EGLImageWrapper()
+//-----------------------------------------------------------------------------
+{
+ eglImageBufferCache = new android::LruCache<int, EGLImageBuffer*>(32);
+ callback = new DeleteEGLImageCallback(&buffStrbuffIntMap);
+ eglImageBufferCache->setOnEntryRemovedListener(callback);
+
+#ifndef TARGET_ION_ABI_VERSION
+ ion_fd = open("/dev/ion", O_RDONLY);
+ callback->ion_fd = ion_fd;
+#endif
+}
+
+//-----------------------------------------------------------------------------
+EGLImageWrapper::~EGLImageWrapper()
+//-----------------------------------------------------------------------------
+{
+ if (eglImageBufferCache != 0) {
+ if (callback != 0) {
+ callback->mapClearPending = true;
+ }
+ eglImageBufferCache->clear();
+ delete eglImageBufferCache;
+ eglImageBufferCache = 0;
+ buffStrbuffIntMap.clear();
+ }
+
+ if (callback != 0) {
+ delete callback;
+ callback = 0;
+ }
+
+#ifndef TARGET_ION_ABI_VERSION
+ if (ion_fd > 0) {
+ close(ion_fd);
+ ion_fd = -1;
+ }
+#endif
+}
+
+//-----------------------------------------------------------------------------
+static EGLImageBuffer* L_wrap(const private_handle_t *src)
+//-----------------------------------------------------------------------------
+{
+ EGLImageBuffer* result = 0;
+
+ native_handle_t *native_handle = const_cast<private_handle_t *>(src);
+
+ int flags = android::GraphicBuffer::USAGE_HW_TEXTURE |
+ android::GraphicBuffer::USAGE_SW_READ_NEVER |
+ android::GraphicBuffer::USAGE_SW_WRITE_NEVER;
+
+ if (src->flags & private_handle_t::PRIV_FLAGS_SECURE_BUFFER) {
+ flags |= android::GraphicBuffer::USAGE_PROTECTED;
+ }
+
+ android::sp<android::GraphicBuffer> graphicBuffer =
+ new android::GraphicBuffer(src->unaligned_width, src->unaligned_height, src->format,
+#ifndef __NOUGAT__
+ 1, // Layer count
+#endif
+ flags, src->width /*src->stride*/,
+ native_handle, false);
+
+ result = new EGLImageBuffer(graphicBuffer);
+
+ return result;
+}
+
+//-----------------------------------------------------------------------------
+EGLImageBuffer *EGLImageWrapper::wrap(const void *pvt_handle)
+//-----------------------------------------------------------------------------
+{
+ const private_handle_t *src = static_cast<const private_handle_t *>(pvt_handle);
+
+#ifndef TARGET_ION_ABI_VERSION
+ int ion_cookie = get_ion_cookie(ion_fd, src->fd);
+ EGLImageBuffer* eglImage = nullptr;
+ eglImage = eglImageBufferCache->get(ion_cookie);
+ if (eglImage == 0) {
+ eglImage = L_wrap(src);
+ eglImageBufferCache->put(ion_cookie, eglImage);
+ } else {
+ free_ion_cookie(ion_fd, ion_cookie);
+ }
+#else
+ string buffStr = get_ion_buff_str(src->fd);
+ EGLImageBuffer* eglImage = nullptr;
+ if (!buffStr.empty()) {
+ auto it = buffStrbuffIntMap.find(buffStr);
+ if (it != buffStrbuffIntMap.end()) {
+ eglImage = eglImageBufferCache->get(it->second);
+ } else {
+ eglImage = L_wrap(src);
+ buffStrbuffIntMap.insert(pair<string, int>(buffStr, buffInt));
+ eglImageBufferCache->put(buffInt, eglImage);
+ buffInt++;
+ }
+ } else {
+ ALOGE("Could not provide an eglImage for fd = %d, EGLImageWrapper = %p", src->fd, this);
+ }
+#endif
+
+ return eglImage;
+}
diff --git a/gpu_tonemapper/EGLImageWrapper.h b/gpu_tonemapper/EGLImageWrapper.h
new file mode 100644
index 0000000..296aa66
--- /dev/null
+++ b/gpu_tonemapper/EGLImageWrapper.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __TONEMAPPER_EGLIMAGEWRAPPER_H__
+#define __TONEMAPPER_EGLIMAGEWRAPPER_H__
+
+#include <utils/LruCache.h>
+#include <linux/msm_ion.h>
+#include <string>
+#include <map>
+#include "EGLImageBuffer.h"
+
+using std::string;
+using std::map;
+
+class EGLImageWrapper {
+ private:
+ class DeleteEGLImageCallback : public android::OnEntryRemoved<int, EGLImageBuffer*> {
+ public:
+ explicit DeleteEGLImageCallback(map<string, int>* mapPtr) { buffStrbuffIntMapPtr = mapPtr; }
+ void operator()(int& buffInt, EGLImageBuffer*& eglImage);
+ map<string, int>* buffStrbuffIntMapPtr = nullptr;
+ bool mapClearPending = false;
+ #ifndef TARGET_ION_ABI_VERSION
+ int ion_fd = -1;
+ #endif
+ };
+
+ android::LruCache<int, EGLImageBuffer *>* eglImageBufferCache;
+ map<string, int> buffStrbuffIntMap = {};
+ DeleteEGLImageCallback* callback = 0;
+ #ifndef TARGET_ION_ABI_VERSION
+ int ion_fd = -1;
+ #else
+ uint64_t buffInt = 0;
+ #endif
+
+ public:
+ EGLImageWrapper();
+ ~EGLImageWrapper();
+ EGLImageBuffer* wrap(const void *pvt_handle);
+};
+
+#endif // __TONEMAPPER_EGLIMAGEWRAPPER_H__
diff --git a/gpu_tonemapper/TonemapFactory.cpp b/gpu_tonemapper/TonemapFactory.cpp
new file mode 100644
index 0000000..db4b8be
--- /dev/null
+++ b/gpu_tonemapper/TonemapFactory.cpp
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "TonemapFactory.h"
+#include <log/log.h>
+#include "Tonemapper.h"
+#include "engine.h"
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------
+Tonemapper *TonemapperFactory_GetInstance(int type, void *colorMap, int colorMapSize,
+ void *lutXform, int lutXformSize, bool isSecure)
+//----------------------------------------------------------------------------------------------------------------------------------------------------------
+{
+ // build the tonemapper
+ Tonemapper *tonemapper = Tonemapper::build(type, colorMap, colorMapSize, lutXform, lutXformSize, isSecure);
+
+ return tonemapper;
+}
diff --git a/gpu_tonemapper/TonemapFactory.h b/gpu_tonemapper/TonemapFactory.h
new file mode 100644
index 0000000..17cad40
--- /dev/null
+++ b/gpu_tonemapper/TonemapFactory.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __TONEMAPPER_TONEMAPPERFACTORY_H__
+#define __TONEMAPPER_TONEMAPPERFACTORY_H__
+
+#include "Tonemapper.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// returns an instance of Tonemapper
+Tonemapper *TonemapperFactory_GetInstance(int type, void *colorMap, int colorMapSize,
+ void *lutXform, int lutXformSize, bool isSecure);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //__TONEMAPPER_TONEMAPPERFACTORY_H__
diff --git a/gpu_tonemapper/Tonemapper.cpp b/gpu_tonemapper/Tonemapper.cpp
new file mode 100644
index 0000000..2605c7f
--- /dev/null
+++ b/gpu_tonemapper/Tonemapper.cpp
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <utils/Log.h>
+
+#include "EGLImageWrapper.h"
+#include "Tonemapper.h"
+#include "engine.h"
+#include "forward_tonemap.inl"
+#include "fullscreen_vertex_shader.inl"
+#include "rgba_inverse_tonemap.inl"
+
+//-----------------------------------------------------------------------------
+Tonemapper::Tonemapper()
+//-----------------------------------------------------------------------------
+{
+ tonemapTexture = 0;
+ lutXformTexture = 0;
+ programID = 0;
+ eglImageWrapper = new EGLImageWrapper();
+
+ lutXformScaleOffset[0] = 1.0f;
+ lutXformScaleOffset[1] = 0.0f;
+
+ tonemapScaleOffset[0] = 1.0f;
+ tonemapScaleOffset[1] = 0.0f;
+}
+
+//-----------------------------------------------------------------------------
+Tonemapper::~Tonemapper()
+//-----------------------------------------------------------------------------
+{
+ engine_bind(engineContext);
+ engine_deleteInputBuffer(tonemapTexture);
+ engine_deleteInputBuffer(lutXformTexture);
+ engine_deleteProgram(programID);
+
+ // clear EGLImage mappings
+ if (eglImageWrapper != 0) {
+ delete eglImageWrapper;
+ eglImageWrapper = 0;
+ }
+
+ engine_shutdown(engineContext);
+}
+
+//-----------------------------------------------------------------------------
+Tonemapper *Tonemapper::build(int type, void *colorMap, int colorMapSize, void *lutXform,
+ int lutXformSize, bool isSecure)
+//-----------------------------------------------------------------------------
+{
+ if (colorMapSize <= 0) {
+ ALOGE("Invalid Color Map size = %d", colorMapSize);
+ return NULL;
+ }
+
+ // build new tonemapper
+ Tonemapper *tonemapper = new Tonemapper();
+
+ tonemapper->engineContext = engine_initialize(isSecure);
+
+ engine_bind(tonemapper->engineContext);
+
+ // load the 3d lut
+ tonemapper->tonemapTexture = engine_load3DTexture(colorMap, colorMapSize, 0);
+ tonemapper->tonemapScaleOffset[0] = ((float)(colorMapSize-1))/((float)(colorMapSize));
+ tonemapper->tonemapScaleOffset[1] = 1.0f/(2.0f*colorMapSize);
+
+ // load the non-uniform xform
+ tonemapper->lutXformTexture = engine_load1DTexture(lutXform, lutXformSize, 0);
+ bool bUseXform = (tonemapper->lutXformTexture != 0) && (lutXformSize != 0);
+ if( bUseXform )
+ {
+ tonemapper->lutXformScaleOffset[0] = ((float)(lutXformSize-1))/((float)(lutXformSize));
+ tonemapper->lutXformScaleOffset[1] = 1.0f/(2.0f*lutXformSize);
+ }
+
+ // create the program
+ const char *fragmentShaders[3];
+ int fragmentShaderCount = 0;
+ const char *version = "#version 300 es\n";
+ const char *define = "#define USE_NONUNIFORM_SAMPLING\n";
+
+ fragmentShaders[fragmentShaderCount++] = version;
+
+ // non-uniform sampling
+ if (bUseXform) {
+ fragmentShaders[fragmentShaderCount++] = define;
+ }
+
+ if (type == TONEMAP_INVERSE) { // inverse tonemapping
+ fragmentShaders[fragmentShaderCount++] = rgba_inverse_tonemap_shader;
+ } else { // forward tonemapping
+ fragmentShaders[fragmentShaderCount++] = forward_tonemap_shader;
+ }
+
+ tonemapper->programID =
+ engine_loadProgram(1, &fullscreen_vertex_shader, fragmentShaderCount, fragmentShaders);
+
+ return tonemapper;
+}
+
+//-----------------------------------------------------------------------------
+int Tonemapper::blit(const void *dst, const void *src, int srcFenceFd)
+//-----------------------------------------------------------------------------
+{
+ // make current
+ engine_bind(engineContext);
+
+ // create eglimages if required
+ EGLImageBuffer *dst_buffer = eglImageWrapper->wrap(dst);
+ EGLImageBuffer *src_buffer = eglImageWrapper->wrap(src);
+
+ // bind the program
+ engine_setProgram(programID);
+
+ engine_setData2f(3, tonemapScaleOffset);
+ bool bUseXform = (lutXformTexture != 0);
+ if( bUseXform )
+ {
+ engine_setData2f(4, lutXformScaleOffset);
+ }
+
+ // set destination
+ if (dst_buffer) {
+ engine_setDestination(dst_buffer->getFramebuffer(), 0, 0, dst_buffer->getWidth(),
+ dst_buffer->getHeight());
+ }
+ // set source
+ if (src_buffer) {
+ engine_setExternalInputBuffer(0, src_buffer->getTexture());
+ }
+ // set 3d lut
+ engine_set3DInputBuffer(1, tonemapTexture);
+ // set non-uniform xform
+ engine_set2DInputBuffer(2, lutXformTexture);
+
+ // perform
+ int fenceFD = engine_blit(srcFenceFd);
+
+ return fenceFD;
+}
diff --git a/gpu_tonemapper/Tonemapper.h b/gpu_tonemapper/Tonemapper.h
new file mode 100644
index 0000000..707cdfe
--- /dev/null
+++ b/gpu_tonemapper/Tonemapper.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __TONEMAPPER_TONEMAP_H__
+#define __TONEMAPPER_TONEMAP_H__
+
+#define TONEMAP_FORWARD 0
+#define TONEMAP_INVERSE 1
+
+#include "EGLImageWrapper.h"
+#include "engine.h"
+
+class Tonemapper {
+ private:
+ void* engineContext;
+ unsigned int tonemapTexture;
+ unsigned int lutXformTexture;
+ unsigned int programID;
+ float lutXformScaleOffset[2];
+ float tonemapScaleOffset[2];
+ EGLImageWrapper* eglImageWrapper;
+ Tonemapper();
+
+ public:
+ ~Tonemapper();
+ static Tonemapper *build(int type, void *colorMap, int colorMapSize, void *lutXform,
+ int lutXformSize, bool isSecure);
+ int blit(const void *dst, const void *src, int srcFenceFd);
+};
+
+#endif //__TONEMAPPER_TONEMAP_H__
diff --git a/gpu_tonemapper/engine.h b/gpu_tonemapper/engine.h
new file mode 100644
index 0000000..8fb9452
--- /dev/null
+++ b/gpu_tonemapper/engine.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __TONEMAPPER_ENGINE_H__
+#define __TONEMAPPER_ENGINE_H__
+
+void* engine_initialize(bool isSecure);
+void engine_bind(void*);
+void engine_shutdown(void*);
+
+unsigned int engine_loadProgram(int, const char **, int, const char **);
+void engine_setProgram(int);
+void engine_deleteProgram(unsigned int);
+
+unsigned int engine_load3DTexture(void *data, int sz, int format);
+unsigned int engine_load1DTexture(void *xform, int xformSize, int format);
+void engine_deleteInputBuffer(unsigned int);
+
+void engine_set2DInputBuffer(int binding, unsigned int textureID);
+void engine_set3DInputBuffer(int binding, unsigned int textureID);
+void engine_setExternalInputBuffer(int binding, unsigned int textureID);
+void engine_setDestination(int id, int x, int y, int w, int h);
+void engine_setData2f(int loc, float* data);
+
+int engine_blit(int);
+
+#endif //__TONEMAPPER_ENGINE_H__
diff --git a/gpu_tonemapper/forward_tonemap.inl b/gpu_tonemapper/forward_tonemap.inl
new file mode 100644
index 0000000..0d89a9e
--- /dev/null
+++ b/gpu_tonemapper/forward_tonemap.inl
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+const char* forward_tonemap_shader = ""
+ "#extension GL_OES_EGL_image_external_essl3 : require \n"
+ "precision highp float; \n"
+ "precision highp sampler2D; \n"
+ "layout(binding = 0) uniform samplerExternalOES externalTexture; \n"
+ "layout(binding = 1) uniform sampler3D tonemapper; \n"
+ "layout(binding = 2) uniform sampler2D xform; \n"
+ "layout(location = 3) uniform vec2 tSO; \n"
+ "#ifdef USE_NONUNIFORM_SAMPLING \n"
+ "layout(location = 4) uniform vec2 xSO; \n"
+ "#endif \n"
+ "in vec2 uv; \n"
+ "out vec4 fs_color; \n"
+ " \n"
+ "vec3 ScaleOffset(in vec3 samplePt, in vec2 so) \n"
+ "{ \n"
+ " vec3 adjPt = so.x * samplePt + so.y; \n"
+ " return adjPt; \n"
+ "} \n"
+ " \n"
+ "void main() \n"
+ "{ \n"
+ "vec2 flipped = vec2(uv.x, 1.0f - uv.y); \n"
+ "vec4 rgb = texture(externalTexture, flipped); \n"
+ "#ifdef USE_NONUNIFORM_SAMPLING \n"
+ "vec3 adj = ScaleOffset(rgb.xyz, xSO); \n"
+ "float r = texture(xform, vec2(adj.r, 0.5f)).r; \n"
+ "float g = texture(xform, vec2(adj.g, 0.5f)).g; \n"
+ "float b = texture(xform, vec2(adj.b, 0.5f)).b; \n"
+ "#else \n"
+ "float r = rgb.r; \n"
+ "float g = rgb.g; \n"
+ "float b = rgb.b; \n"
+ "#endif \n"
+ "fs_color.rgb = texture(tonemapper, ScaleOffset(vec3(r, g, b), tSO)).rgb; \n"
+ "} \n";
diff --git a/gpu_tonemapper/fullscreen_vertex_shader.inl b/gpu_tonemapper/fullscreen_vertex_shader.inl
new file mode 100644
index 0000000..9a70c2b
--- /dev/null
+++ b/gpu_tonemapper/fullscreen_vertex_shader.inl
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+const char* fullscreen_vertex_shader = " "
+"#version 300 es \n"
+"precision highp float; \n"
+"layout(location = 0) in vec2 iUV; \n"
+"out vec2 uv; \n"
+"void main() \n"
+"{ \n"
+" vec2 positions[3]; \n"
+" positions[0] = vec2(-1.0f, 3.0f); \n"
+" positions[1] = vec2(-1.0f, -1.0f); \n"
+" positions[2] = vec2(3.0f, -1.0f); \n"
+" vec2 uvs[3]; \n"
+" uvs[0] = vec2(0.0f, -1.0f); \n"
+" uvs[1] = vec2(0.0f, 1.0f); \n"
+" uvs[2] = vec2(2.0f, 1.0f); \n"
+" gl_Position = vec4(positions[gl_VertexID], -1.0f, 1.0f); \n"
+" uv = uvs[gl_VertexID]; \n"
+"} \n";
diff --git a/gpu_tonemapper/glengine.cpp b/gpu_tonemapper/glengine.cpp
new file mode 100644
index 0000000..35e1932
--- /dev/null
+++ b/gpu_tonemapper/glengine.cpp
@@ -0,0 +1,415 @@
+/*
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "glengine.h"
+#include <log/log.h>
+#include "engine.h"
+
+void checkGlError(const char *, int);
+void checkEglError(const char *, int);
+
+class EngineContext {
+ public:
+ EGLDisplay eglDisplay;
+ EGLContext eglContext;
+ EGLSurface eglSurface;
+ EngineContext()
+ {
+ eglDisplay = EGL_NO_DISPLAY;
+ eglContext = EGL_NO_CONTEXT;
+ eglSurface = EGL_NO_SURFACE;
+ }
+};
+
+//-----------------------------------------------------------------------------
+// Make Current
+void engine_bind(void* context)
+//-----------------------------------------------------------------------------
+{
+ EngineContext* engineContext = (EngineContext*)(context);
+ EGL(eglMakeCurrent(engineContext->eglDisplay, engineContext->eglSurface, engineContext->eglSurface, engineContext->eglContext));
+}
+
+//-----------------------------------------------------------------------------
+// initialize GL
+//
+void* engine_initialize(bool isSecure)
+//-----------------------------------------------------------------------------
+{
+ EngineContext* engineContext = new EngineContext();
+
+ // display
+ engineContext->eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+ EGL(eglBindAPI(EGL_OPENGL_ES_API));
+
+ // initialize
+ EGL(eglInitialize(engineContext->eglDisplay, 0, 0));
+
+ // config
+ EGLConfig eglConfig;
+ EGLint eglConfigAttribList[] = {EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
+ EGL_RED_SIZE, 8,
+ EGL_GREEN_SIZE, 8,
+ EGL_BLUE_SIZE, 8,
+ EGL_ALPHA_SIZE, 8,
+ EGL_NONE};
+ int numConfig = 0;
+ EGL(eglChooseConfig(engineContext->eglDisplay, eglConfigAttribList, &eglConfig, 1, &numConfig));
+
+ // context
+ EGLint eglContextAttribList[] = {EGL_CONTEXT_CLIENT_VERSION, 3,
+ isSecure ? EGL_PROTECTED_CONTENT_EXT : EGL_NONE,
+ isSecure ? EGL_TRUE : EGL_NONE,
+ EGL_NONE};
+ engineContext->eglContext = eglCreateContext(engineContext->eglDisplay, eglConfig, NULL, eglContextAttribList);
+
+ // surface
+ EGLint eglSurfaceAttribList[] = {EGL_WIDTH, 1,
+ EGL_HEIGHT, 1,
+ isSecure ? EGL_PROTECTED_CONTENT_EXT : EGL_NONE,
+ isSecure ? EGL_TRUE : EGL_NONE,
+ EGL_NONE};
+ engineContext->eglSurface = eglCreatePbufferSurface(engineContext->eglDisplay, eglConfig, eglSurfaceAttribList);
+
+ eglMakeCurrent(engineContext->eglDisplay, engineContext->eglSurface, engineContext->eglSurface, engineContext->eglContext);
+
+ ALOGI("In %s context = %p", __FUNCTION__, (void *)(engineContext->eglContext));
+
+ return (void*)(engineContext);
+}
+
+//-----------------------------------------------------------------------------
+// Shutdown.
+void engine_shutdown(void* context)
+//-----------------------------------------------------------------------------
+{
+ EngineContext* engineContext = (EngineContext*)context;
+ EGL(eglMakeCurrent(engineContext->eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
+ EGL(eglDestroySurface(engineContext->eglDisplay, engineContext->eglSurface));
+ EGL(eglDestroyContext(engineContext->eglDisplay, engineContext->eglContext));
+ EGL(eglTerminate(engineContext->eglDisplay));
+ engineContext->eglDisplay = EGL_NO_DISPLAY;
+ engineContext->eglContext = EGL_NO_CONTEXT;
+ engineContext->eglSurface = EGL_NO_SURFACE;
+}
+
+//-----------------------------------------------------------------------------
+void engine_deleteInputBuffer(unsigned int id)
+//-----------------------------------------------------------------------------
+{
+ if (id != 0) {
+ GL(glDeleteTextures(1, &id));
+ }
+}
+
+//-----------------------------------------------------------------------------
+void engine_deleteProgram(unsigned int id)
+//-----------------------------------------------------------------------------
+{
+ if (id != 0) {
+ GL(glDeleteProgram(id));
+ }
+}
+
+//-----------------------------------------------------------------------------
+void engine_setData2f(int location, float* data)
+//-----------------------------------------------------------------------------
+{
+ GL(glUniform2f(location, data[0], data[1]));
+}
+
+//-----------------------------------------------------------------------------
+unsigned int engine_load3DTexture(void *colorMapData, int sz, int format)
+//-----------------------------------------------------------------------------
+{
+ GLuint texture = 0;
+ GL(glGenTextures(1, &texture));
+ GL(glBindTexture(GL_TEXTURE_3D, texture));
+ GL(glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE));
+ GL(glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
+ GL(glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE));
+ GL(glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
+ GL(glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
+
+ GL(glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB10_A2, sz, sz, sz, 0, GL_RGBA,
+ GL_UNSIGNED_INT_2_10_10_10_REV, colorMapData));
+
+ return texture;
+}
+//-----------------------------------------------------------------------------
+unsigned int engine_load1DTexture(void *data, int sz, int format)
+//-----------------------------------------------------------------------------
+{
+ GLuint texture = 0;
+ if ((data != 0) && (sz != 0)) {
+ GL(glGenTextures(1, &texture));
+ GL(glBindTexture(GL_TEXTURE_2D, texture));
+ GL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE));
+ GL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
+ GL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
+ GL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
+
+ GL(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB10_A2, sz, 1, 0, GL_RGBA,
+ GL_UNSIGNED_INT_2_10_10_10_REV, data));
+ }
+ return texture;
+}
+
+//-----------------------------------------------------------------------------
+void dumpShaderLog(int shader)
+//-----------------------------------------------------------------------------
+{
+ int success = 0;
+ GLchar infoLog[512];
+ GL(glGetShaderiv(shader, GL_COMPILE_STATUS, &success));
+ if (!success) {
+ glGetShaderInfoLog(shader, 512, NULL, infoLog);
+ ALOGI("Shader Failed to compile: %s\n", infoLog);
+ }
+}
+
+//-----------------------------------------------------------------------------
+GLuint engine_loadProgram(int vertexEntries, const char **vertex, int fragmentEntries,
+ const char **fragment)
+//-----------------------------------------------------------------------------
+{
+ GLuint progId = glCreateProgram();
+
+ int vertId = glCreateShader(GL_VERTEX_SHADER);
+ int fragId = glCreateShader(GL_FRAGMENT_SHADER);
+
+ GL(glShaderSource(vertId, vertexEntries, vertex, 0));
+ GL(glCompileShader(vertId));
+ dumpShaderLog(vertId);
+
+ GL(glShaderSource(fragId, fragmentEntries, fragment, 0));
+ GL(glCompileShader(fragId));
+ dumpShaderLog(fragId);
+
+ GL(glAttachShader(progId, vertId));
+ GL(glAttachShader(progId, fragId));
+
+ GL(glLinkProgram(progId));
+
+ GL(glDetachShader(progId, vertId));
+ GL(glDetachShader(progId, fragId));
+
+ GL(glDeleteShader(vertId));
+ GL(glDeleteShader(fragId));
+
+ return progId;
+}
+
+//-----------------------------------------------------------------------------
+void WaitOnNativeFence(int fd)
+//-----------------------------------------------------------------------------
+{
+ if (fd != -1) {
+ EGLint attribs[] = {EGL_SYNC_NATIVE_FENCE_FD_ANDROID, fd, EGL_NONE};
+
+ EGLSyncKHR sync = eglCreateSyncKHR(eglGetCurrentDisplay(), EGL_SYNC_NATIVE_FENCE_ANDROID, attribs);
+
+ if (sync == EGL_NO_SYNC_KHR) {
+ ALOGE("%s - Failed to Create sync from source fd", __FUNCTION__);
+ } else {
+ // the gpu will wait for this sync - not this cpu thread.
+ EGL(eglWaitSyncKHR(eglGetCurrentDisplay(), sync, 0));
+ EGL(eglDestroySyncKHR(eglGetCurrentDisplay(), sync));
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+int CreateNativeFence()
+//-----------------------------------------------------------------------------
+{
+ int fd = -1;
+
+ EGLSyncKHR sync = eglCreateSyncKHR(eglGetCurrentDisplay(), EGL_SYNC_NATIVE_FENCE_ANDROID, NULL);
+ GL(glFlush());
+ if (sync == EGL_NO_SYNC_KHR) {
+ ALOGE("%s - Failed to Create Native Fence sync", __FUNCTION__);
+ } else {
+ fd = eglDupNativeFenceFDANDROID(eglGetCurrentDisplay(), sync);
+ if (fd == EGL_NO_NATIVE_FENCE_FD_ANDROID) {
+ ALOGE("%s - Failed to dup sync", __FUNCTION__);
+ }
+ EGL(eglDestroySyncKHR(eglGetCurrentDisplay(), sync));
+ }
+
+ return fd;
+}
+
+//-----------------------------------------------------------------------------
+void engine_setDestination(int id, int x, int y, int w, int h)
+//-----------------------------------------------------------------------------
+{
+ GL(glBindFramebuffer(GL_FRAMEBUFFER, id));
+ GL(glViewport(x, y, w, h));
+}
+
+//-----------------------------------------------------------------------------
+void engine_setProgram(int id)
+//-----------------------------------------------------------------------------
+{
+ GL(glUseProgram(id));
+}
+
+//-----------------------------------------------------------------------------
+void engine_set2DInputBuffer(int binding, unsigned int id)
+//-----------------------------------------------------------------------------
+{
+ GL(glActiveTexture(GL_TEXTURE0 + binding));
+ GL(glBindTexture(GL_TEXTURE_2D, id));
+}
+
+//-----------------------------------------------------------------------------
+void engine_set3DInputBuffer(int binding, unsigned int id)
+//-----------------------------------------------------------------------------
+{
+ GL(glActiveTexture(GL_TEXTURE0 + binding));
+ GL(glBindTexture(GL_TEXTURE_3D, id));
+}
+
+//-----------------------------------------------------------------------------
+void engine_setExternalInputBuffer(int binding, unsigned int id)
+//-----------------------------------------------------------------------------
+{
+ GL(glActiveTexture(GL_TEXTURE0 + binding));
+ GL(glBindTexture(0x8D65, id));
+}
+
+//-----------------------------------------------------------------------------
+int engine_blit(int srcFenceFd)
+//-----------------------------------------------------------------------------
+{
+ int fd = -1;
+ WaitOnNativeFence(srcFenceFd);
+ float fullscreen_vertices[]{0.0f, 2.0f, 0.0f, 0.0f, 2.0f, 0.0f};
+ GL(glEnableVertexAttribArray(0));
+ GL(glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, fullscreen_vertices));
+ GL(glDrawArrays(GL_TRIANGLES, 0, 3));
+ fd = CreateNativeFence();
+ GL(glFlush());
+ return fd;
+}
+
+//-----------------------------------------------------------------------------
+void checkGlError(const char *file, int line)
+//-----------------------------------------------------------------------------
+{
+ for (GLint error = glGetError(); error; error = glGetError()) {
+ char *pError;
+ switch (error) {
+ case GL_NO_ERROR:
+ pError = (char *)"GL_NO_ERROR";
+ break;
+ case GL_INVALID_ENUM:
+ pError = (char *)"GL_INVALID_ENUM";
+ break;
+ case GL_INVALID_VALUE:
+ pError = (char *)"GL_INVALID_VALUE";
+ break;
+ case GL_INVALID_OPERATION:
+ pError = (char *)"GL_INVALID_OPERATION";
+ break;
+ case GL_OUT_OF_MEMORY:
+ pError = (char *)"GL_OUT_OF_MEMORY";
+ break;
+ case GL_INVALID_FRAMEBUFFER_OPERATION:
+ pError = (char *)"GL_INVALID_FRAMEBUFFER_OPERATION";
+ break;
+
+ default:
+ ALOGE("glError (0x%x) %s:%d\n", error, file, line);
+ return;
+ }
+
+ ALOGE("glError (%s) %s:%d\n", pError, file, line);
+ return;
+ }
+ return;
+}
+
+//-----------------------------------------------------------------------------
+void checkEglError(const char *file, int line)
+//-----------------------------------------------------------------------------
+{
+ for (int i = 0; i < 5; i++) {
+ const EGLint error = eglGetError();
+ if (error == EGL_SUCCESS) {
+ break;
+ }
+
+ char *pError;
+ switch (error) {
+ case EGL_SUCCESS:
+ pError = (char *)"EGL_SUCCESS";
+ break;
+ case EGL_NOT_INITIALIZED:
+ pError = (char *)"EGL_NOT_INITIALIZED";
+ break;
+ case EGL_BAD_ACCESS:
+ pError = (char *)"EGL_BAD_ACCESS";
+ break;
+ case EGL_BAD_ALLOC:
+ pError = (char *)"EGL_BAD_ALLOC";
+ break;
+ case EGL_BAD_ATTRIBUTE:
+ pError = (char *)"EGL_BAD_ATTRIBUTE";
+ break;
+ case EGL_BAD_CONTEXT:
+ pError = (char *)"EGL_BAD_CONTEXT";
+ break;
+ case EGL_BAD_CONFIG:
+ pError = (char *)"EGL_BAD_CONFIG";
+ break;
+ case EGL_BAD_CURRENT_SURFACE:
+ pError = (char *)"EGL_BAD_CURRENT_SURFACE";
+ break;
+ case EGL_BAD_DISPLAY:
+ pError = (char *)"EGL_BAD_DISPLAY";
+ break;
+ case EGL_BAD_SURFACE:
+ pError = (char *)"EGL_BAD_SURFACE";
+ break;
+ case EGL_BAD_MATCH:
+ pError = (char *)"EGL_BAD_MATCH";
+ break;
+ case EGL_BAD_PARAMETER:
+ pError = (char *)"EGL_BAD_PARAMETER";
+ break;
+ case EGL_BAD_NATIVE_PIXMAP:
+ pError = (char *)"EGL_BAD_NATIVE_PIXMAP";
+ break;
+ case EGL_BAD_NATIVE_WINDOW:
+ pError = (char *)"EGL_BAD_NATIVE_WINDOW";
+ break;
+ case EGL_CONTEXT_LOST:
+ pError = (char *)"EGL_CONTEXT_LOST";
+ break;
+ default:
+ ALOGE("eglError (0x%x) %s:%d\n", error, file, line);
+ return;
+ }
+ ALOGE("eglError (%s) %s:%d\n", pError, file, line);
+ return;
+ }
+ return;
+}
diff --git a/gpu_tonemapper/glengine.h b/gpu_tonemapper/glengine.h
new file mode 100644
index 0000000..f6aeec8
--- /dev/null
+++ b/gpu_tonemapper/glengine.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __TONEMAPPER_GLENGINE_H__
+#define __TONEMAPPER_GLENGINE_H__
+#include <EGL/egl.h>
+#define EGL_EGLEXT_PROTOTYPES
+#include <EGL/eglext.h>
+#include <GLES3/gl31.h>
+#define GL_GLEXT_PROTOTYPES
+#include <GLES2/gl2ext.h>
+#include <GLES3/gl3ext.h>
+
+#if defined(CHECK_GL_ERRORS)
+#define GL(func) func;
+#define EGL(func) func;
+#else
+#define GL(func) \
+ func; \
+ checkGlError(__FILE__, __LINE__);
+#define EGL(func) \
+ func; \
+ checkEglError(__FILE__, __LINE__);
+#endif
+
+#define EGL_PROTECTED_CONTENT_EXT 0x32C0
+
+void checkGlError(const char *file, int line);
+void checkEglError(const char *file, int line);
+
+#endif //__TONEMAPPER_GLENGINE_H__
diff --git a/gpu_tonemapper/rgba_inverse_tonemap.inl b/gpu_tonemapper/rgba_inverse_tonemap.inl
new file mode 100644
index 0000000..2865fbe
--- /dev/null
+++ b/gpu_tonemapper/rgba_inverse_tonemap.inl
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+const char* rgba_inverse_tonemap_shader = ""
+ "#extension GL_OES_EGL_image_external_essl3 : require \n"
+ "precision highp float; \n"
+ "precision highp sampler2D; \n"
+ "layout(binding = 0) uniform samplerExternalOES externalTexture; \n"
+ "layout(binding = 1) uniform sampler3D tonemapper; \n"
+ "layout(binding = 2) uniform sampler2D xform; \n"
+ "layout(location = 3) uniform vec2 tSO; \n"
+ "#if defined(USE_NONUNIFORM_SAMPLING) \n"
+ "layout(location = 4) uniform vec2 xSO; \n"
+ "#endif \n"
+ "in vec2 uv; \n"
+ "out vec4 fs_color; \n"
+ " \n"
+ "vec3 ScaleOffset(in vec3 samplePt, in vec2 so) \n"
+ "{ \n"
+ " vec3 adjPt = so.x * samplePt + so.y; \n"
+ " return adjPt; \n"
+ "} \n"
+ " \n"
+ "void main() \n"
+ "{ \n"
+ "vec2 flipped = vec2(uv.x, 1.0f - uv.y); \n"
+ "vec4 rgb_premulalpha = texture(externalTexture, flipped); \n"
+ "fs_color = rgb_premulalpha; \n"
+ "if( rgb_premulalpha.a > 0.0 ) { \n"
+ "vec3 rgb = rgb_premulalpha.rgb/rgb_premulalpha.a; \n"
+ "#if defined(USE_NONUNIFORM_SAMPLING) \n"
+ "vec3 adj = ScaleOffset(rgb.xyz, xSO); \n"
+ "float r = texture(xform, vec2(adj.r, 0.5f)).r; \n"
+ "float g = texture(xform, vec2(adj.g, 0.5f)).g; \n"
+ "float b = texture(xform, vec2(adj.b, 0.5f)).b; \n"
+ "#else \n"
+ "float r = rgb.r; \n"
+ "float g = rgb.g; \n"
+ "float b = rgb.b; \n"
+ "#endif \n"
+ "fs_color.rgb = texture(tonemapper, ScaleOffset(vec3(r, g, b), tSO)).rgb * rgb_premulalpha.a; \n"
+ "fs_color.a = rgb_premulalpha.a; \n"
+ "} \n"
+ "} \n";
diff --git a/gralloc/Android.mk b/gralloc/Android.mk
new file mode 100644
index 0000000..ebb3cd4
--- /dev/null
+++ b/gralloc/Android.mk
@@ -0,0 +1,166 @@
+# Gralloc module
+LOCAL_PATH := $(call my-dir)
+include $(LOCAL_PATH)/../common.mk
+include $(LIBION_HEADER_PATH_WRAPPER)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := gralloc.$(TARGET_BOARD_PLATFORM)
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes)
+
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_SHARED_LIBRARIES := $(common_libs) libqdMetaData libsync libgrallocutils \
+ libgralloccore \
+ android.hardware.graphics.mapper@2.0 \
+ android.hardware.graphics.mapper@2.1 \
+ android.hardware.graphics.mapper@3.0 \
+ android.hardware.graphics.mapper@4.0
+LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wall -Werror \
+ -D__QTI_DISPLAY_GRALLOC__
+LOCAL_CLANG := true
+LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_SRC_FILES := gr_device_impl.cpp
+include $(BUILD_SHARED_LIBRARY)
+
+#libgrallocutils
+include $(CLEAR_VARS)
+LOCAL_MODULE := libgrallocutils
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes)
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_SHARED_LIBRARIES := $(common_libs) libqdMetaData libdl \
+ android.hardware.graphics.common@1.2 \
+ android.hardware.graphics.mapper@2.0 \
+ android.hardware.graphics.mapper@2.1 \
+ android.hardware.graphics.mapper@3.0 \
+ android.hardware.graphics.mapper@4.0
+LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion \
+ -D__QTI_DISPLAY_GRALLOC__
+LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_SRC_FILES := gr_utils.cpp gr_adreno_info.cpp
+include $(BUILD_SHARED_LIBRARY)
+
+#libgralloccore
+include $(CLEAR_VARS)
+LOCAL_MODULE := libgralloccore
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := $(common_includes) \
+ $(LIBION_HEADER_PATHS) \
+ $(kernel_includes)
+
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_SHARED_LIBRARIES := $(common_libs) libqdMetaData libdl libgrallocutils libion libgralloctypes \
+ libgralloc.qti libhidlbase \
+ android.hardware.graphics.mapper@2.1 \
+ android.hardware.graphics.mapper@3.0 \
+ android.hardware.graphics.mapper@4.0
+LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion \
+ -D__QTI_DISPLAY_GRALLOC__
+ifeq ($(ENABLE_HYP),true)
+LOCAL_CFLAGS += -DHYPERVISOR
+endif
+
+ifneq ($(TARGET_USES_GRALLOC4),false)
+LOCAL_CFLAGS += -DTARGET_USES_GRALLOC4
+endif
+LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_SRC_FILES := gr_allocator.cpp gr_buf_mgr.cpp gr_ion_alloc.cpp
+include $(BUILD_SHARED_LIBRARY)
+
+#mapper
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.graphics.mapper@3.0-impl-qti-display
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes)
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_SHARED_LIBRARIES := $(common_libs) \
+ libhidlbase \
+ libqdMetaData \
+ libgrallocutils \
+ libgralloccore \
+ libsync \
+ vendor.qti.hardware.display.mapper@3.0 \
+ vendor.qti.hardware.display.mapperextensions@1.0 \
+ android.hardware.graphics.mapper@2.0 \
+ android.hardware.graphics.mapper@2.1 \
+ vendor.qti.hardware.display.mapperextensions@1.1 \
+ android.hardware.graphics.mapper@3.0
+LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion \
+ -D__QTI_DISPLAY_GRALLOC__
+LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_SRC_FILES := QtiMapper.cpp QtiMapperExtensions.cpp
+LOCAL_VINTF_FRAGMENTS := android.hardware.graphics.mapper-impl-qti-display.xml
+include $(BUILD_SHARED_LIBRARY)
+
+ifneq ($(TARGET_USES_GRALLOC4),false)
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.graphics.mapper@4.0-impl-qti-display
+LOCAL_SANITIZE := integer_overflow
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes)
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_SHARED_LIBRARIES := $(common_libs) \
+ libhidlbase \
+ libhidltransport \
+ libqdMetaData \
+ libgrallocutils \
+ libgralloccore \
+ libsync \
+ libgralloctypes \
+ vendor.qti.hardware.display.mapper@4.0 \
+ vendor.qti.hardware.display.mapperextensions@1.0 \
+ android.hardware.graphics.mapper@2.0 \
+ android.hardware.graphics.mapper@2.1 \
+ vendor.qti.hardware.display.mapperextensions@1.1 \
+ android.hardware.graphics.mapper@3.0 \
+ android.hardware.graphics.mapper@4.0
+LOCAL_CFLAGS := $(common_flags) $(qmaa_flags) -DLOG_TAG=\"qdgralloc\" -Wno-sign-conversion \
+ -D__QTI_DISPLAY_GRALLOC__
+LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_SRC_FILES := QtiMapper4.cpp QtiMapperExtensions.cpp
+LOCAL_VINTF_FRAGMENTS := android.hardware.graphics.mapper-impl-qti-display.xml
+include $(BUILD_SHARED_LIBRARY)
+endif
+
+#allocator
+include $(CLEAR_VARS)
+LOCAL_MODULE := vendor.qti.hardware.display.allocator-service
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_MODULE_TAGS := optional
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_SHARED_LIBRARIES := $(common_libs) \
+ libhidlbase \
+ libqdMetaData \
+ libgrallocutils \
+ libgralloccore \
+ libgralloctypes \
+ vendor.qti.hardware.display.allocator@4.0 \
+ vendor.qti.hardware.display.allocator@3.0 \
+ vendor.qti.hardware.display.mapper@4.0 \
+ vendor.qti.hardware.display.mapper@3.0 \
+ android.hardware.graphics.mapper@4.0 \
+ android.hardware.graphics.mapper@3.0 \
+ android.hardware.graphics.mapper@2.1 \
+ android.hardware.graphics.allocator@4.0 \
+ android.hardware.graphics.allocator@3.0 \
+ vendor.qti.hardware.display.mapperextensions@1.0 \
+ vendor.qti.hardware.display.mapperextensions@1.1
+LOCAL_CFLAGS := -DLOG_TAG=\"qdgralloc\" $(common_flags)
+ifneq ($(TARGET_USES_GRALLOC4),false)
+LOCAL_CFLAGS += -DTARGET_USES_GRALLOC4
+endif
+LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes)
+LOCAL_SRC_FILES := QtiAllocator.cpp service.cpp
+LOCAL_INIT_RC := vendor.qti.hardware.display.allocator-service.rc
+LOCAL_VINTF_FRAGMENTS := vendor.qti.hardware.display.allocator-service.xml
+include $(BUILD_EXECUTABLE)
diff --git a/gralloc/QtiAllocator.cpp b/gralloc/QtiAllocator.cpp
new file mode 100644
index 0000000..35145dc
--- /dev/null
+++ b/gralloc/QtiAllocator.cpp
@@ -0,0 +1,195 @@
+/*
+ * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#define DEBUG 0
+#include "QtiAllocator.h"
+
+#include <cutils/properties.h>
+#include <log/log.h>
+#include <vendor/qti/hardware/display/mapper/3.0/IQtiMapper.h>
+#include <vendor/qti/hardware/display/mapper/4.0/IQtiMapper.h>
+
+#include <vector>
+
+#include "QtiMapper.h"
+#include "QtiMapper4.h"
+#include "gr_utils.h"
+
+static void get_properties(gralloc::GrallocProperties *props) {
+ props->use_system_heap_for_sensors =
+ property_get_bool("vendor.gralloc.use_system_heap_for_sensors", 1);
+
+ props->ubwc_disable = property_get_bool("vendor.gralloc.disable_ubwc", 0);
+
+ props->ahardware_buffer_disable = property_get_bool("vendor.gralloc.disable_ahardware_buffer", 0);
+}
+
+namespace vendor {
+namespace qti {
+namespace hardware {
+namespace display {
+namespace allocator {
+namespace V3_0 {
+namespace implementation {
+
+using android::hardware::hidl_handle;
+using gralloc::BufferDescriptor;
+using IMapper_3_0_Error = android::hardware::graphics::mapper::V3_0::Error;
+using gralloc::Error;
+
+QtiAllocator::QtiAllocator() {
+ gralloc::GrallocProperties properties;
+ get_properties(&properties);
+ buf_mgr_ = BufferManager::GetInstance();
+ buf_mgr_->SetGrallocDebugProperties(properties);
+}
+
+// Methods from ::android::hardware::graphics::allocator::V2_0::IAllocator follow.
+Return<void> QtiAllocator::dumpDebugInfo(dumpDebugInfo_cb hidl_cb) {
+ std::ostringstream os;
+ buf_mgr_->Dump(&os);
+ hidl_string reply;
+ reply.setToExternal(os.str().c_str(), os.str().length());
+ hidl_cb(reply);
+ return Void();
+}
+
+Return<void> QtiAllocator::allocate(const hidl_vec<uint32_t> &descriptor, uint32_t count,
+ allocate_cb hidl_cb) {
+ ALOGD_IF(DEBUG, "Allocating buffers count: %d", count);
+ gralloc::BufferDescriptor desc;
+
+ auto err = ::vendor::qti::hardware::display::mapper::V3_0::implementation::QtiMapper::Decode(
+ descriptor, &desc);
+ if (err != Error::NONE) {
+ hidl_cb(static_cast<IMapper_3_0_Error>(err), 0, hidl_vec<hidl_handle>());
+ return Void();
+ }
+
+ std::vector<hidl_handle> buffers;
+ buffers.reserve(count);
+ for (uint32_t i = 0; i < count; i++) {
+ buffer_handle_t buffer;
+ ALOGD_IF(DEBUG, "buffer: %p", &buffer);
+ err = buf_mgr_->AllocateBuffer(desc, &buffer);
+ if (err != Error::NONE) {
+ break;
+ }
+ buffers.emplace_back(hidl_handle(buffer));
+ }
+
+ uint32_t stride = 0;
+ hidl_vec<hidl_handle> hidl_buffers;
+ if (err == Error::NONE && buffers.size() > 0) {
+ stride = static_cast<uint32_t>(PRIV_HANDLE_CONST(buffers[0].getNativeHandle())->width);
+ hidl_buffers.setToExternal(buffers.data(), buffers.size());
+ }
+ hidl_cb(static_cast<IMapper_3_0_Error>(err), stride, hidl_buffers);
+
+ for (const auto &b : buffers) {
+ buf_mgr_->ReleaseBuffer(PRIV_HANDLE_CONST(b.getNativeHandle()));
+ }
+
+ return Void();
+}
+
+} // namespace implementation
+} // namespace V3_0
+} // namespace allocator
+} // namespace display
+} // namespace hardware
+} // namespace qti
+} // namespace vendor
+
+namespace vendor {
+namespace qti {
+namespace hardware {
+namespace display {
+namespace allocator {
+namespace V4_0 {
+namespace implementation {
+
+using android::hardware::hidl_handle;
+using gralloc::BufferDescriptor;
+using IMapper_4_0_Error = android::hardware::graphics::mapper::V4_0::Error;
+using gralloc::Error;
+
+QtiAllocator::QtiAllocator() {
+ gralloc::GrallocProperties properties;
+ get_properties(&properties);
+ buf_mgr_ = BufferManager::GetInstance();
+ buf_mgr_->SetGrallocDebugProperties(properties);
+}
+
+Return<void> QtiAllocator::allocate(const hidl_vec<uint8_t> &descriptor, uint32_t count,
+ allocate_cb hidl_cb) {
+ ALOGD_IF(DEBUG, "Allocating buffers count: %d", count);
+ gralloc::BufferDescriptor desc;
+
+ auto err = ::vendor::qti::hardware::display::mapper::V4_0::implementation::QtiMapper::Decode(
+ descriptor, &desc);
+ if (err != Error::NONE) {
+ hidl_cb(static_cast<IMapper_4_0_Error>(err), 0, hidl_vec<hidl_handle>());
+ return Void();
+ }
+
+ std::vector<hidl_handle> buffers;
+ buffers.reserve(count);
+ for (uint32_t i = 0; i < count; i++) {
+ buffer_handle_t buffer;
+ ALOGD_IF(DEBUG, "buffer: %p", &buffer);
+ err = buf_mgr_->AllocateBuffer(desc, &buffer);
+ if (err != Error::NONE) {
+ break;
+ }
+ buffers.emplace_back(hidl_handle(buffer));
+ }
+
+ uint32_t stride = 0;
+ hidl_vec<hidl_handle> hidl_buffers;
+ if (err == Error::NONE && buffers.size() > 0) {
+ stride = static_cast<uint32_t>(PRIV_HANDLE_CONST(buffers[0].getNativeHandle())->width);
+ hidl_buffers.setToExternal(buffers.data(), buffers.size());
+ }
+ hidl_cb(static_cast<IMapper_4_0_Error>(err), stride, hidl_buffers);
+
+ for (const auto &b : buffers) {
+ buf_mgr_->ReleaseBuffer(PRIV_HANDLE_CONST(b.getNativeHandle()));
+ }
+
+ return Void();
+}
+
+} // namespace implementation
+} // namespace V4_0
+} // namespace allocator
+} // namespace display
+} // namespace hardware
+} // namespace qti
+} // namespace vendor
diff --git a/gralloc/QtiAllocator.h b/gralloc/QtiAllocator.h
new file mode 100644
index 0000000..918c6b9
--- /dev/null
+++ b/gralloc/QtiAllocator.h
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __QTIALLOCATOR_H__
+#define __QTIALLOCATOR_H__
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/qti/hardware/display/allocator/3.0/IQtiAllocator.h>
+#include <vendor/qti/hardware/display/allocator/4.0/IQtiAllocator.h>
+
+#include "gr_buf_mgr.h"
+#include "gr_utils.h"
+
+namespace vendor {
+namespace qti {
+namespace hardware {
+namespace display {
+namespace allocator {
+namespace V3_0 {
+namespace implementation {
+
+using ::android::sp;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using android::hardware::graphics::allocator::V3_0::IAllocator;
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using gralloc::BufferManager;
+using vendor::qti::hardware::display::allocator::V3_0::IQtiAllocator;
+
+class QtiAllocator : public IQtiAllocator {
+ public:
+ QtiAllocator();
+
+ // Methods from ::android::hardware::graphics::allocator::V2_0::IAllocator follow.
+ Return<void> dumpDebugInfo(dumpDebugInfo_cb _hidl_cb) override;
+ Return<void> allocate(const hidl_vec<uint32_t> &descriptor, uint32_t count,
+ allocate_cb _hidl_cb) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+ private:
+ BufferManager *buf_mgr_ = nullptr;
+};
+
+} // namespace implementation
+} // namespace V3_0
+} // namespace allocator
+} // namespace display
+} // namespace hardware
+} // namespace qti
+} // namespace vendor
+
+namespace vendor {
+namespace qti {
+namespace hardware {
+namespace display {
+namespace allocator {
+namespace V4_0 {
+namespace implementation {
+
+using ::android::sp;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using android::hardware::graphics::allocator::V4_0::IAllocator;
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using gralloc::BufferManager;
+using vendor::qti::hardware::display::allocator::V4_0::IQtiAllocator;
+
+class QtiAllocator : public IQtiAllocator {
+ public:
+ QtiAllocator();
+
+ // Methods from ::android::hardware::graphics::allocator::V4_0::IAllocator follow.
+ Return<void> allocate(const hidl_vec<uint8_t> &descriptor, uint32_t count,
+ allocate_cb _hidl_cb) override;
+
+ // Methods from ::android::hidl::base::V1_0::IBase follow.
+ private:
+ BufferManager *buf_mgr_ = nullptr;
+};
+
+} // namespace implementation
+} // namespace V4_0
+} // namespace allocator
+} // namespace display
+} // namespace hardware
+} // namespace qti
+} // namespace vendor
+
+#endif // __QTIALLOCATOR_H__
diff --git a/gralloc/QtiMapper.cpp b/gralloc/QtiMapper.cpp
new file mode 100644
index 0000000..d8dd675
--- /dev/null
+++ b/gralloc/QtiMapper.cpp
@@ -0,0 +1,322 @@
+/*
+ * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#define ATRACE_TAG (ATRACE_TAG_GRAPHICS | ATRACE_TAG_HAL)
+#define DEBUG 0
+#include "QtiMapper.h"
+#include <cutils/trace.h>
+#include <qdMetaData.h>
+#include <sync/sync.h>
+#include "gr_utils.h"
+
+namespace vendor {
+namespace qti {
+namespace hardware {
+namespace display {
+namespace mapper {
+namespace V3_0 {
+namespace implementation {
+
+using gralloc::BufferInfo;
+
+QtiMapper::QtiMapper() {
+ extensions_ = new QtiMapperExtensions();
+ buf_mgr_ = BufferManager::GetInstance();
+ ALOGD_IF(DEBUG, "Created QtiMapper instance");
+}
+
+bool QtiMapper::ValidDescriptor(const BufferDescriptorInfo_3_0 &bd) {
+ if (bd.width == 0 || bd.height == 0 || (static_cast<int32_t>(bd.format) <= 0) ||
+ bd.layerCount <= 0) {
+ return false;
+ }
+
+ return true;
+}
+
+Error QtiMapper::CreateDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info,
+ IMapperBufferDescriptor *descriptor) {
+ ALOGD_IF(DEBUG,
+ "BufferDescriptorInfo: wxh: %dx%d usage: 0x%" PRIu64 " format: %d layer_count: %d",
+ descriptor_info.width, descriptor_info.height, descriptor_info.usage,
+ static_cast<uint32_t>(descriptor_info.format), descriptor_info.layerCount);
+
+ if (ValidDescriptor(descriptor_info)) {
+ auto vec = Encode(descriptor_info);
+ *descriptor = vec;
+ return Error::NONE;
+ } else {
+ return Error::BAD_VALUE;
+ }
+}
+
+// Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow.
+Return<void> QtiMapper::createDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info,
+ createDescriptor_cb hidl_cb) {
+ IMapperBufferDescriptor descriptor;
+ auto info_3_0 = BufferDescriptorInfo_3_0{
+ descriptor_info.width,
+ descriptor_info.height,
+ descriptor_info.layerCount,
+ static_cast<PixelFormat>(descriptor_info.format),
+ descriptor_info.usage,
+ };
+ auto err = CreateDescriptor(info_3_0, &descriptor);
+ hidl_cb(err, descriptor);
+ return Void();
+}
+
+Return<void> QtiMapper::importBuffer(const hidl_handle &raw_handle, importBuffer_cb hidl_cb) {
+ if (!raw_handle.getNativeHandle()) {
+ ALOGE("%s: Unable to import handle", __FUNCTION__);
+ hidl_cb(Error::BAD_BUFFER, nullptr);
+ return Void();
+ }
+
+ native_handle_t *buffer_handle = native_handle_clone(raw_handle.getNativeHandle());
+ if (!buffer_handle) {
+ ALOGE("%s: Unable to clone handle", __FUNCTION__);
+ hidl_cb(Error::NO_RESOURCES, nullptr);
+ return Void();
+ }
+
+ auto error =
+ static_cast<IMapper_3_0_Error>(buf_mgr_->RetainBuffer(PRIV_HANDLE_CONST(buffer_handle)));
+ if (error != Error::NONE) {
+ ALOGE("%s: Unable to retain handle: %p", __FUNCTION__, buffer_handle);
+ native_handle_close(buffer_handle);
+ native_handle_delete(buffer_handle);
+
+ hidl_cb(error, nullptr);
+ return Void();
+ }
+ ALOGD_IF(DEBUG, "Imported handle: %p id: %" PRIu64, buffer_handle,
+ PRIV_HANDLE_CONST(buffer_handle)->id);
+ hidl_cb(Error::NONE, buffer_handle);
+ return Void();
+}
+
+Return<Error> QtiMapper::freeBuffer(void *buffer) {
+ if (!buffer) {
+ return Error::BAD_BUFFER;
+ }
+ return static_cast<IMapper_3_0_Error>(buf_mgr_->ReleaseBuffer(PRIV_HANDLE_CONST(buffer)));
+}
+
+bool QtiMapper::GetFenceFd(const hidl_handle &fence_handle, int *outFenceFd) {
+ auto handle = fence_handle.getNativeHandle();
+ if (handle && handle->numFds > 1) {
+ ALOGE("invalid fence handle with %d fds", handle->numFds);
+ return false;
+ }
+
+ *outFenceFd = (handle && handle->numFds == 1) ? handle->data[0] : -1;
+ return true;
+}
+
+void QtiMapper::WaitFenceFd(int fence_fd) {
+ if (fence_fd < 0) {
+ return;
+ }
+
+ const int timeout = 3000;
+ ATRACE_BEGIN("fence wait");
+ const int error = sync_wait(fence_fd, timeout);
+ ATRACE_END();
+ if (error < 0) {
+ ALOGE("QtiMapper: lock fence %d didn't signal in %u ms - error: %s", fence_fd, timeout,
+ strerror(errno));
+ }
+}
+
+Error QtiMapper::LockBuffer(void *buffer, uint64_t usage, const hidl_handle &acquire_fence) {
+ if (!buffer) {
+ return Error::BAD_BUFFER;
+ }
+
+ int fence_fd;
+ if (!GetFenceFd(acquire_fence, &fence_fd)) {
+ return Error::BAD_VALUE;
+ }
+
+ if (fence_fd > 0) {
+ WaitFenceFd(fence_fd);
+ }
+
+ auto hnd = PRIV_HANDLE_CONST(buffer);
+
+ return static_cast<IMapper_3_0_Error>(buf_mgr_->LockBuffer(hnd, usage));
+}
+
+Return<void> QtiMapper::lock(void *buffer, uint64_t cpu_usage,
+ const IMapper::Rect & /*access_region*/,
+ const hidl_handle &acquire_fence, lock_cb hidl_cb) {
+ auto err = LockBuffer(buffer, cpu_usage, acquire_fence);
+ if (err != Error::NONE) {
+ hidl_cb(err, nullptr, -1, -1);
+ return Void();
+ }
+
+ auto hnd = PRIV_HANDLE_CONST(buffer);
+ auto *out_data = reinterpret_cast<void *>(hnd->base);
+ hidl_cb(err, out_data, gralloc::GetBpp(hnd->format),
+ (hnd->width) * (gralloc::GetBpp(hnd->format)));
+ return Void();
+}
+
+Return<void> QtiMapper::lockYCbCr(void *buffer, uint64_t cpu_usage,
+ const IMapper::Rect & /*access_region*/,
+ const hidl_handle &acquire_fence, lockYCbCr_cb hidl_cb) {
+ YCbCrLayout layout = {};
+ auto err = LockBuffer(buffer, cpu_usage, acquire_fence);
+ if (err != Error::NONE) {
+ hidl_cb(err, layout);
+ return Void();
+ }
+
+ auto hnd = PRIV_HANDLE_CONST(buffer);
+ android_ycbcr yuv_plane_info[2];
+ if (gralloc::GetYUVPlaneInfo(hnd, yuv_plane_info) != 0) {
+ hidl_cb(Error::BAD_VALUE, layout);
+ }
+ layout.y = yuv_plane_info[0].y;
+ layout.cr = yuv_plane_info[0].cr;
+ layout.cb = yuv_plane_info[0].cb;
+ layout.yStride = static_cast<uint32_t>(yuv_plane_info[0].ystride);
+ layout.cStride = static_cast<uint32_t>(yuv_plane_info[0].cstride);
+ layout.chromaStep = static_cast<uint32_t>(yuv_plane_info[0].chroma_step);
+ hidl_cb(Error::NONE, layout);
+ return Void();
+}
+
+Return<void> QtiMapper::unlock(void *buffer, unlock_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ if (buffer != nullptr) {
+ err = static_cast<IMapper_3_0_Error>(buf_mgr_->UnlockBuffer(PRIV_HANDLE_CONST(buffer)));
+ }
+ // We don't have a release fence
+ hidl_cb(err, hidl_handle(nullptr));
+ return Void();
+}
+
+Return<Error> QtiMapper::validateBufferSize(void *buffer,
+ const BufferDescriptorInfo_3_0 &descriptor_info,
+ uint32_t /*stride*/) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (static_cast<IMapper_3_0_Error>(buf_mgr_->IsBufferImported(hnd)) != Error::NONE) {
+ return Error::BAD_BUFFER;
+ }
+ auto info = gralloc::BufferInfo(descriptor_info.width, descriptor_info.height,
+ static_cast<uint32_t>(descriptor_info.format),
+ static_cast<uint64_t>(descriptor_info.usage));
+ info.layer_count = descriptor_info.layerCount;
+ err = static_cast<IMapper_3_0_Error>(buf_mgr_->ValidateBufferSize(hnd, info));
+ }
+ return err;
+}
+
+Return<void> QtiMapper::getTransportSize(void *buffer, IMapper_3_0::getTransportSize_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ uint32_t num_fds = 0, num_ints = 0;
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (static_cast<IMapper_3_0_Error>(buf_mgr_->IsBufferImported(hnd)) != Error::NONE) {
+ hidl_cb(err, num_fds, num_ints);
+ return Void();
+ }
+ num_fds = 2;
+ // TODO(user): reduce to transported values;
+ num_ints = static_cast<uint32_t >(hnd->numInts);
+ err = Error::NONE;
+ }
+ ALOGD_IF(DEBUG, "GetTransportSize: num fds: %d num ints: %d err:%d", num_fds, num_ints, err);
+ hidl_cb(err, num_fds, num_ints);
+ return Void();
+}
+
+Return<void> QtiMapper::isSupported(const BufferDescriptorInfo_3_0 &descriptor_info,
+ IMapper_3_0::isSupported_cb hidl_cb) {
+ IMapperBufferDescriptor descriptor;
+ auto err = CreateDescriptor(descriptor_info, &descriptor);
+ if (err != Error::NONE) {
+ hidl_cb(err, false);
+ return Void();
+ }
+
+ gralloc::BufferDescriptor desc;
+ err = static_cast<IMapper_3_0_Error>(Decode(descriptor, &desc));
+ if (err != Error::NONE) {
+ hidl_cb(err, false);
+ return Void();
+ }
+
+ buffer_handle_t buffer;
+ err = static_cast<IMapper_3_0_Error>(buf_mgr_->AllocateBuffer(desc, &buffer, 0, true));
+ if (err != Error::NONE) {
+ hidl_cb(err, false);
+ } else {
+ hidl_cb(err, true);
+ }
+
+ return Void();
+}
+
+Return<void> QtiMapper::getMapperExtensions(QtiMapper::getMapperExtensions_cb hidl_cb) {
+ if (extensions_ != nullptr) {
+ hidl_cb(Error::NONE, extensions_);
+ } else {
+ hidl_cb(Error::UNSUPPORTED, extensions_);
+ }
+ return Void();
+}
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+// When we are in passthrough mode, this method is used
+// by hidl to obtain the SP HAL object
+extern "C" IMapper_3_0 *HIDL_FETCH_IMapper(const char * /* name */) {
+ ALOGD_IF(DEBUG, "Fetching IMapper from QtiMapper");
+ auto mapper = new QtiMapper();
+ return static_cast<IMapper_3_0 *>(mapper);
+}
+
+extern "C" IQtiMapper *HIDL_FETCH_IQtiMapper(const char * /* name */) {
+ ALOGD_IF(DEBUG, "Fetching QtiMapper");
+ return new QtiMapper();
+}
+
+} // namespace implementation
+} // namespace V3_0
+} // namespace mapper
+} // namespace display
+} // namespace hardware
+} // namespace qti
+} // namespace vendor
diff --git a/gralloc/QtiMapper.h b/gralloc/QtiMapper.h
new file mode 100644
index 0000000..0c191f5
--- /dev/null
+++ b/gralloc/QtiMapper.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __QTIMAPPER_H__
+#define __QTIMAPPER_H__
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/qti/hardware/display/mapper/3.0/IQtiMapper.h>
+
+#include "QtiMapperExtensions.h"
+#include "gr_buf_mgr.h"
+#include "gr_utils.h"
+
+namespace vendor {
+namespace qti {
+namespace hardware {
+namespace display {
+namespace mapper {
+namespace V3_0 {
+namespace implementation {
+
+using ::android::sp;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_handle;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::graphics::common::V1_2::PixelFormat;
+using ::android::hardware::graphics::mapper::V3_0::Error;
+using ::android::hardware::graphics::mapper::V3_0::IMapper;
+using ::android::hardware::graphics::mapper::V3_0::YCbCrLayout;
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using gralloc::BufferManager;
+using ::vendor::qti::hardware::display::mapperextensions::V1_1::IQtiMapperExtensions;
+using ::vendor::qti::hardware::display::mapperextensions::V1_1::implementation::QtiMapperExtensions;
+using ::vendor::qti::hardware::display::mapper::V3_0::IQtiMapper;
+
+using IMapper_3_0 = android::hardware::graphics::mapper::V3_0::IMapper;
+using BufferDescriptorInfo_3_0 =
+ android::hardware::graphics::mapper::V3_0::IMapper::BufferDescriptorInfo;
+using IMapperBufferDescriptor = android::hardware::graphics::mapper::V3_0::BufferDescriptor;
+using IMapper_3_0_Error = ::android::hardware::graphics::mapper::V3_0::Error;
+
+class QtiMapper : public IQtiMapper {
+ public:
+ QtiMapper();
+ // Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow.
+ Return<void> createDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info,
+ createDescriptor_cb hidl_cb) override;
+ Return<void> importBuffer(const hidl_handle &raw_handle, importBuffer_cb hidl_cb) override;
+ Return<Error> freeBuffer(void *buffer) override;
+ Return<void> lock(void *buffer, uint64_t cpu_usage, const IMapper::Rect &access_region,
+ const hidl_handle &acquire_fence, lock_cb hidl_cb) override;
+ Return<void> lockYCbCr(void *buffer, uint64_t cpu_usage, const IMapper::Rect &access_region,
+ const hidl_handle &acquire_fence, lockYCbCr_cb hidl_cb) override;
+ Return<void> unlock(void *buffer, unlock_cb hidl_cb) override;
+
+ // Methods from ::android::hardware::graphics::mapper::V2_1::IMapper follow.
+ Return<Error> validateBufferSize(void *buffer, const BufferDescriptorInfo_3_0 &descriptorInfo,
+ uint32_t stride) override;
+ Return<void> getTransportSize(void *buffer, IMapper_3_0::getTransportSize_cb hidl_cb) override;
+
+ Return<void> isSupported(const BufferDescriptorInfo_3_0 &descriptor_info,
+ IMapper_3_0::isSupported_cb hidl_cb) override;
+
+ Return<void> getMapperExtensions(getMapperExtensions_cb hidl_cb);
+ sp<mapperextensions::V1_1::IQtiMapperExtensions> extensions_ = nullptr;
+ hidl_vec<uint32_t> Encode(const IMapper_3_0::BufferDescriptorInfo &bd_info) {
+ hidl_vec<uint32_t> out;
+ out.resize(gralloc::kBufferDescriptorSize);
+ out[0] = gralloc::kMagicVersion;
+ out[1] = bd_info.width;
+ out[2] = bd_info.height;
+ out[3] = bd_info.layerCount;
+ out[4] = static_cast<uint32_t>(bd_info.format);
+ out[5] = static_cast<uint32_t>(bd_info.usage);
+ out[6] = static_cast<uint32_t>(bd_info.usage >> 32);
+ return out;
+ }
+ static gralloc::Error Decode(const hidl_vec<uint32_t> &in,
+ gralloc::BufferDescriptor *buf_descriptor) {
+ if (in.size() != gralloc::kBufferDescriptorSize || in[0] != gralloc::kMagicVersion) {
+ return gralloc::Error::BAD_DESCRIPTOR;
+ }
+ int32_t width = static_cast<int32_t>(in[1]);
+ int32_t height = static_cast<int32_t>(in[2]);
+ buf_descriptor->SetDimensions(width, height);
+ uint32_t layer_count = in[3];
+ buf_descriptor->SetLayerCount(layer_count);
+ int32_t format = static_cast<int32_t>(in[4]);
+ buf_descriptor->SetColorFormat(format);
+ uint64_t usage = static_cast<uint64_t>(in[6]) << 32 | in[5];
+ buf_descriptor->SetUsage(usage);
+ return gralloc::Error::NONE;
+ }
+
+ private:
+ BufferManager *buf_mgr_ = nullptr;
+ Error CreateDescriptor(const BufferDescriptorInfo_3_0 &descriptor_info,
+ IMapperBufferDescriptor *descriptor);
+ bool ValidDescriptor(const IMapper::BufferDescriptorInfo &bd);
+ bool GetFenceFd(const hidl_handle &fence_handle, int *outFenceFd);
+ void WaitFenceFd(int fence_fd);
+ Error LockBuffer(void *buffer, uint64_t usage, const hidl_handle &acquire_fence);
+};
+
+} // namespace implementation
+} // namespace V3_0
+} // namespace mapper
+} // namespace display
+} // namespace hardware
+} // namespace qti
+} // namespace vendor
+
+#endif // __QTIMAPPER_H__
diff --git a/gralloc/QtiMapper4.cpp b/gralloc/QtiMapper4.cpp
new file mode 100644
index 0000000..fe12dd0
--- /dev/null
+++ b/gralloc/QtiMapper4.cpp
@@ -0,0 +1,495 @@
+/*
+ * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#define ATRACE_TAG (ATRACE_TAG_GRAPHICS | ATRACE_TAG_HAL)
+#define DEBUG 0
+#include "QtiMapper4.h"
+
+#include <cutils/trace.h>
+#include <qdMetaData.h>
+#include <sync/sync.h>
+
+#include <vector>
+
+#include "gr_utils.h"
+
+namespace vendor {
+namespace qti {
+namespace hardware {
+namespace display {
+namespace mapper {
+namespace V4_0 {
+namespace implementation {
+
+using gralloc::BufferInfo;
+
+using aidl::android::hardware::graphics::common::StandardMetadataType;
+QtiMapper::QtiMapper() {
+ extensions_ = new QtiMapperExtensions();
+ buf_mgr_ = BufferManager::GetInstance();
+ ALOGD_IF(DEBUG, "Created QtiMapper instance");
+}
+
+bool QtiMapper::ValidDescriptor(const BufferDescriptorInfo_4_0 &bd) {
+ if (bd.width == 0 || bd.height == 0 || (static_cast<int32_t>(bd.format) <= 0) ||
+ bd.layerCount <= 0) {
+ return false;
+ }
+
+ return true;
+}
+
+Error QtiMapper::CreateDescriptor(const BufferDescriptorInfo_4_0 &descriptor_info,
+ IMapperBufferDescriptor *descriptor) {
+ ALOGD_IF(DEBUG,
+ "BufferDescriptorInfo: name %s wxh: %dx%d usage: 0x%" PRIu64
+ " format: %d layer_count: %d",
+ descriptor_info.name.c_str(), descriptor_info.width, descriptor_info.height,
+ descriptor_info.usage, static_cast<uint32_t>(descriptor_info.format),
+ descriptor_info.layerCount);
+
+ if (ValidDescriptor(descriptor_info)) {
+ auto vec = Encode(descriptor_info);
+ *descriptor = vec;
+ return Error::NONE;
+ } else {
+ return Error::BAD_VALUE;
+ }
+}
+
+// Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow.
+Return<void> QtiMapper::createDescriptor(const BufferDescriptorInfo_4_0 &descriptor_info,
+ createDescriptor_cb hidl_cb) {
+ IMapperBufferDescriptor descriptor;
+ auto info_4_0 = BufferDescriptorInfo_4_0{descriptor_info.name,
+ descriptor_info.width,
+ descriptor_info.height,
+ descriptor_info.layerCount,
+ static_cast<PixelFormat>(descriptor_info.format),
+ descriptor_info.usage,
+ descriptor_info.reservedSize};
+ auto err = CreateDescriptor(info_4_0, &descriptor);
+ hidl_cb(err, descriptor);
+ return Void();
+}
+
+Return<void> QtiMapper::importBuffer(const hidl_handle &raw_handle, importBuffer_cb hidl_cb) {
+ if (!raw_handle.getNativeHandle()) {
+ ALOGE("%s: Unable to import handle", __FUNCTION__);
+ hidl_cb(Error::BAD_BUFFER, nullptr);
+ return Void();
+ }
+
+ native_handle_t *buffer_handle = native_handle_clone(raw_handle.getNativeHandle());
+ if (!buffer_handle) {
+ ALOGE("%s: Unable to clone handle", __FUNCTION__);
+ hidl_cb(Error::NO_RESOURCES, nullptr);
+ return Void();
+ }
+
+ auto error =
+ static_cast<IMapper_4_0_Error>(buf_mgr_->RetainBuffer(PRIV_HANDLE_CONST(buffer_handle)));
+ if (error != Error::NONE) {
+ ALOGE("%s: Unable to retain handle: %p", __FUNCTION__, buffer_handle);
+ native_handle_close(buffer_handle);
+ native_handle_delete(buffer_handle);
+
+ hidl_cb(error, nullptr);
+ return Void();
+ }
+ ALOGD_IF(DEBUG, "Imported handle: %p id: %" PRIu64, buffer_handle,
+ PRIV_HANDLE_CONST(buffer_handle)->id);
+ hidl_cb(Error::NONE, buffer_handle);
+ return Void();
+}
+
+Return<Error> QtiMapper::freeBuffer(void *buffer) {
+ if (!buffer) {
+ return Error::BAD_BUFFER;
+ }
+ return static_cast<IMapper_4_0_Error>(buf_mgr_->ReleaseBuffer(PRIV_HANDLE_CONST(buffer)));
+}
+
+bool QtiMapper::GetFenceFd(const hidl_handle &fence_handle, int *outFenceFd) {
+ auto handle = fence_handle.getNativeHandle();
+ if (handle && handle->numFds > 1) {
+ ALOGE("invalid fence handle with %d fds", handle->numFds);
+ return false;
+ }
+
+ *outFenceFd = (handle && handle->numFds == 1) ? handle->data[0] : -1;
+ return true;
+}
+
+void QtiMapper::WaitFenceFd(int fence_fd) {
+ if (fence_fd < 0) {
+ return;
+ }
+
+ const int timeout = 3000;
+ ATRACE_BEGIN("fence wait");
+ const int error = sync_wait(fence_fd, timeout);
+ ATRACE_END();
+ if (error < 0) {
+ ALOGE("QtiMapper: lock fence %d didn't signal in %u ms - error: %s", fence_fd, timeout,
+ strerror(errno));
+ }
+}
+
+Error QtiMapper::LockBuffer(void *buffer, uint64_t usage, const hidl_handle &acquire_fence,
+ const IMapper::Rect &access_region) {
+ if (!buffer) {
+ return Error::BAD_BUFFER;
+ }
+
+ int fence_fd;
+ if (!GetFenceFd(acquire_fence, &fence_fd)) {
+ return Error::BAD_VALUE;
+ }
+
+ if (fence_fd > 0) {
+ WaitFenceFd(fence_fd);
+ }
+
+ auto hnd = PRIV_HANDLE_CONST(buffer);
+
+ if (access_region.top < 0 || access_region.left < 0 || access_region.width < 0 ||
+ access_region.height < 0 || access_region.width > hnd->width ||
+ access_region.height > hnd->height) {
+ return Error::BAD_VALUE;
+ }
+ return static_cast<IMapper_4_0_Error>(buf_mgr_->LockBuffer(hnd, usage));
+}
+
+Return<void> QtiMapper::lock(void *buffer, uint64_t cpu_usage, const IMapper::Rect &access_region,
+ const hidl_handle &acquire_fence, lock_cb hidl_cb) {
+ auto err = LockBuffer(buffer, cpu_usage, acquire_fence, access_region);
+ if (err != Error::NONE) {
+ hidl_cb(err, nullptr);
+ return Void();
+ }
+
+ auto hnd = PRIV_HANDLE_CONST(buffer);
+ auto *out_data = reinterpret_cast<void *>(hnd->base);
+
+ hidl_cb(err, out_data);
+ return Void();
+}
+
+Return<void> QtiMapper::unlock(void *buffer, unlock_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ if (buffer != nullptr) {
+ err = static_cast<IMapper_4_0_Error>(buf_mgr_->UnlockBuffer(PRIV_HANDLE_CONST(buffer)));
+ }
+ // We don't have a release fence
+ hidl_cb(err, hidl_handle(nullptr));
+ return Void();
+}
+
+Return<Error> QtiMapper::validateBufferSize(void *buffer,
+ const BufferDescriptorInfo_4_0 &descriptor_info,
+ uint32_t /*stride*/) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (static_cast<IMapper_4_0_Error>(buf_mgr_->IsBufferImported(hnd)) != Error::NONE) {
+ return Error::BAD_BUFFER;
+ }
+ auto info = gralloc::BufferInfo(descriptor_info.width, descriptor_info.height,
+ static_cast<uint32_t>(descriptor_info.format),
+ static_cast<uint64_t>(descriptor_info.usage));
+ info.layer_count = descriptor_info.layerCount;
+ err = static_cast<IMapper_4_0_Error>(buf_mgr_->ValidateBufferSize(hnd, info));
+ }
+ return err;
+}
+
+Return<void> QtiMapper::getTransportSize(void *buffer, getTransportSize_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ uint32_t num_fds = 0, num_ints = 0;
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (static_cast<IMapper_4_0_Error>(buf_mgr_->IsBufferImported(hnd)) != Error::NONE) {
+ hidl_cb(err, num_fds, num_ints);
+ return Void();
+ }
+ num_fds = 2;
+ // TODO(user): reduce to transported values;
+ num_ints = static_cast<uint32_t>(hnd->numInts);
+ err = Error::NONE;
+ }
+ ALOGD_IF(DEBUG, "GetTransportSize: num fds: %d num ints: %d err:%d", num_fds, num_ints, err);
+ hidl_cb(err, num_fds, num_ints);
+ return Void();
+}
+
+Return<void> QtiMapper::get(void *buffer, const MetadataType &metadataType, get_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ hidl_vec<uint8_t> metadata;
+ if (buffer != nullptr) {
+ if (metadataType.name != GRALLOC4_STANDARD_METADATA_TYPE &&
+ metadataType.name != qtigralloc::VENDOR_QTI) {
+ hidl_cb(Error::UNSUPPORTED, metadata);
+ return Void();
+ }
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ err = static_cast<IMapper_4_0_Error>(buf_mgr_->GetMetadata(hnd, metadataType.value, &metadata));
+ }
+ hidl_cb(err, metadata);
+ return Void();
+}
+
+Return<Error> QtiMapper::set(void *buffer, const MetadataType &metadataType,
+ const hidl_vec<uint8_t> &metadata) {
+ auto err = Error::BAD_BUFFER;
+ if (buffer != nullptr) {
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ err = static_cast<IMapper_4_0_Error>(buf_mgr_->SetMetadata(hnd, metadataType.value, metadata));
+ }
+ return err;
+}
+
+Return<void> QtiMapper::getFromBufferDescriptorInfo(const BufferDescriptorInfo &description,
+ const MetadataType &metadataType,
+ getFromBufferDescriptorInfo_cb hidl_cb) {
+ hidl_vec<uint8_t> out;
+ auto err = Error::UNSUPPORTED;
+ switch (metadataType.value) {
+ case static_cast<int64_t>(StandardMetadataType::NAME):
+ err = static_cast<IMapper_4_0_Error>(android::gralloc4::encodeName(description.name, &out));
+ break;
+ case static_cast<int64_t>(StandardMetadataType::WIDTH):
+ err = static_cast<IMapper_4_0_Error>(android::gralloc4::encodeWidth(description.width, &out));
+ break;
+ case static_cast<int64_t>(StandardMetadataType::HEIGHT):
+ err =
+ static_cast<IMapper_4_0_Error>(android::gralloc4::encodeHeight(description.height, &out));
+ break;
+ case static_cast<int64_t>(StandardMetadataType::LAYER_COUNT):
+ err = static_cast<IMapper_4_0_Error>(
+ android::gralloc4::encodeLayerCount(description.layerCount, &out));
+ break;
+ case static_cast<int64_t>(StandardMetadataType::PIXEL_FORMAT_REQUESTED):
+ err = static_cast<IMapper_4_0_Error>(
+ android::gralloc4::encodePixelFormatRequested(description.format, &out));
+ break;
+ case static_cast<int64_t>(StandardMetadataType::USAGE):
+ err = static_cast<IMapper_4_0_Error>(android::gralloc4::encodeUsage(description.usage, &out));
+ break;
+ case static_cast<int64_t>(StandardMetadataType::COMPRESSION): {
+ int format =
+ gralloc::GetImplDefinedFormat(description.usage, static_cast<int>(description.format));
+ if (gralloc::IsUBwcEnabled(format, description.usage)) {
+ err = static_cast<IMapper_4_0_Error>(
+ android::gralloc4::encodeCompression(qtigralloc::Compression_QtiUBWC, &out));
+ } else {
+ err = static_cast<IMapper_4_0_Error>(
+ android::gralloc4::encodeCompression(android::gralloc4::Compression_None, &out));
+ }
+ break;
+ }
+ case static_cast<int64_t>(StandardMetadataType::PROTECTED_CONTENT): {
+ uint64_t protected_content = 0;
+ if (description.usage & GRALLOC_USAGE_PROTECTED &&
+ !(description.usage & GRALLOC_USAGE_SW_READ_MASK) &&
+ !(description.usage & GRALLOC_USAGE_SW_WRITE_MASK)) {
+ protected_content = 1;
+ }
+ err = static_cast<IMapper_4_0_Error>(
+ android::gralloc4::encodeProtectedContent(protected_content, &out));
+ break;
+ }
+ case static_cast<int64_t>(StandardMetadataType::PIXEL_FORMAT_FOURCC):
+ case static_cast<int64_t>(StandardMetadataType::PIXEL_FORMAT_MODIFIER): {
+ int format =
+ gralloc::GetImplDefinedFormat(description.usage, static_cast<int>(description.format));
+ uint32_t drm_format;
+ uint64_t drm_format_modifier;
+ if (gralloc::IsUBwcEnabled(format, description.usage)) {
+ gralloc::GetDRMFormat(format, private_handle_t::PRIV_FLAGS_UBWC_ALIGNED, &drm_format,
+ &drm_format_modifier);
+ } else {
+ gralloc::GetDRMFormat(format, 0, &drm_format, &drm_format_modifier);
+ }
+ if (metadataType.value == static_cast<int64_t>(StandardMetadataType::PIXEL_FORMAT_FOURCC)) {
+ err = static_cast<IMapper_4_0_Error>(
+ android::gralloc4::encodePixelFormatFourCC(drm_format, &out));
+ } else {
+ err = static_cast<IMapper_4_0_Error>(
+ android::gralloc4::encodePixelFormatModifier(drm_format_modifier, &out));
+ }
+ break;
+ }
+ default:
+ break;
+ }
+
+ hidl_cb(err, out);
+ return Void();
+}
+Return<void> QtiMapper::flushLockedBuffer(void *buffer, flushLockedBuffer_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ if (buffer != nullptr) {
+ err = static_cast<IMapper_4_0_Error>(buf_mgr_->FlushBuffer(PRIV_HANDLE_CONST(buffer)));
+ }
+ // We don't have a release fence
+ hidl_cb(err, hidl_handle(nullptr));
+ return Void();
+}
+
+Return<Error> QtiMapper::rereadLockedBuffer(void *buffer) {
+ auto err = Error::BAD_BUFFER;
+ if (buffer != nullptr) {
+ err = static_cast<IMapper_4_0_Error>(buf_mgr_->RereadBuffer(PRIV_HANDLE_CONST(buffer)));
+ }
+ return err;
+}
+
+Return<void> QtiMapper::getReservedRegion(void *buffer, getReservedRegion_cb hidl_cb) {
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ void *reserved_region = nullptr;
+ uint64_t reserved_size = 0;
+ if (static_cast<IMapper_4_0_Error>(buf_mgr_->IsBufferImported(hnd)) != Error::NONE) {
+ hidl_cb(Error::BAD_BUFFER, reserved_region, reserved_size);
+ }
+ auto err = static_cast<IMapper_4_0_Error>(
+ buf_mgr_->GetReservedRegion(hnd, &reserved_region, &reserved_size));
+
+ hidl_cb(err, reserved_region, reserved_size);
+ return Void();
+}
+
+Error QtiMapper::DumpBufferMetadata(const private_handle_t *buffer, BufferDump *outBufferDump) {
+ outBufferDump->metadataDump.resize(metadata_type_descriptions_.size());
+ for (int i = 0; i < static_cast<int>(metadata_type_descriptions_.size()); i++) {
+ auto type = metadata_type_descriptions_[i].metadataType;
+ hidl_vec<uint8_t> metadata;
+ if (static_cast<IMapper_4_0_Error>(buf_mgr_->GetMetadata(
+ const_cast<private_handle_t *>(buffer), type.value, &metadata)) == Error::BAD_BUFFER) {
+ // If buffer is deleted during metadata dump, return BAD_BUFFER
+ return Error::BAD_BUFFER;
+ }
+ MetadataDump metadata_dump = {type, metadata};
+ outBufferDump->metadataDump[i] = metadata_dump;
+ }
+ return Error::NONE;
+}
+Return<void> QtiMapper::dumpBuffer(void *buffer, dumpBuffer_cb hidl_cb) {
+ BufferDump buffer_dump;
+ auto hnd = PRIV_HANDLE_CONST(buffer);
+ if (buffer != nullptr) {
+ if (DumpBufferMetadata(hnd, &buffer_dump) == Error::NONE) {
+ hidl_cb(Error::NONE, buffer_dump);
+ return Void();
+ }
+ }
+ hidl_cb(Error::BAD_BUFFER, buffer_dump);
+ return Void();
+}
+Return<void> QtiMapper::dumpBuffers(dumpBuffers_cb hidl_cb) {
+ hidl_vec<BufferDump> buffers_dump;
+ std::vector<const private_handle_t *> handle_list;
+ if (static_cast<IMapper_4_0_Error>(buf_mgr_->GetAllHandles(&handle_list)) != Error::NONE) {
+ hidl_cb(Error::NO_RESOURCES, buffers_dump);
+ }
+ buffers_dump.resize(handle_list.size());
+ for (int i = 0; i < handle_list.size(); i++) {
+ BufferDump buffer_dump;
+ if (DumpBufferMetadata(handle_list[i], &buffer_dump) != Error::NONE) {
+ continue;
+ }
+ buffers_dump[i] = buffer_dump;
+ }
+ hidl_cb(Error::NONE, buffers_dump);
+ return Void();
+}
+
+Return<void> QtiMapper::listSupportedMetadataTypes(listSupportedMetadataTypes_cb hidl_cb) {
+ hidl_cb(Error::NONE, metadata_type_descriptions_);
+ return Void();
+}
+
+Return<void> QtiMapper::isSupported(const BufferDescriptorInfo_4_0 &descriptor_info,
+ isSupported_cb hidl_cb) {
+ IMapperBufferDescriptor descriptor;
+ auto err = CreateDescriptor(descriptor_info, &descriptor);
+ if (err != Error::NONE) {
+ hidl_cb(err, false);
+ return Void();
+ }
+
+ gralloc::BufferDescriptor desc;
+ err = static_cast<Error>(Decode(descriptor, &desc));
+ if (err != Error::NONE) {
+ hidl_cb(err, false);
+ return Void();
+ }
+
+ buffer_handle_t buffer;
+ err = static_cast<IMapper_4_0_Error>(buf_mgr_->AllocateBuffer(desc, &buffer, 0, true));
+ if (err != Error::NONE) {
+ hidl_cb(err, false);
+ } else {
+ hidl_cb(err, true);
+ }
+
+ return Void();
+}
+
+Return<void> QtiMapper::getMapperExtensions(QtiMapper::getMapperExtensions_cb hidl_cb) {
+ if (extensions_ != nullptr) {
+ hidl_cb(Error::NONE, extensions_);
+ } else {
+ hidl_cb(Error::UNSUPPORTED, extensions_);
+ }
+ return Void();
+}
+
+// Methods from ::android::hidl::base::V1_0::IBase follow.
+
+// When we are in passthrough mode, this method is used
+// by hidl to obtain the SP HAL object
+extern "C" IMapper *HIDL_FETCH_IMapper(const char * /* name */) {
+ ALOGD_IF(DEBUG, "Fetching IMapper from QtiMapper");
+ auto mapper = new QtiMapper();
+ return static_cast<IMapper *>(mapper);
+}
+
+extern "C" IQtiMapper *HIDL_FETCH_IQtiMapper(const char * /* name */) {
+ ALOGD_IF(DEBUG, "Fetching QtiMapper");
+ return new QtiMapper();
+}
+
+} // namespace implementation
+} // namespace V4_0
+} // namespace mapper
+} // namespace display
+} // namespace hardware
+} // namespace qti
+} // namespace vendor
diff --git a/gralloc/QtiMapper4.h b/gralloc/QtiMapper4.h
new file mode 100644
index 0000000..936393d
--- /dev/null
+++ b/gralloc/QtiMapper4.h
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __QTIMAPPER4_H__
+#define __QTIMAPPER4_H__
+
+#include <QtiGralloc.h>
+#include <gralloctypes/Gralloc4.h>
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/qti/hardware/display/mapper/4.0/IQtiMapper.h>
+
+#include <algorithm>
+#include <string>
+
+#include "QtiMapperExtensions.h"
+#include "gr_buf_mgr.h"
+namespace vendor {
+namespace qti {
+namespace hardware {
+namespace display {
+namespace mapper {
+namespace V4_0 {
+namespace implementation {
+
+using ::android::sp;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_handle;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::graphics::common::V1_2::PixelFormat;
+using ::android::hardware::graphics::mapper::V4_0::Error;
+using ::android::hardware::graphics::mapper::V4_0::IMapper;
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using gralloc::BufferManager;
+using ::vendor::qti::hardware::display::mapper::V4_0::IQtiMapper;
+using ::vendor::qti::hardware::display::mapperextensions::V1_1::IQtiMapperExtensions;
+using ::vendor::qti::hardware::display::mapperextensions::V1_1::implementation::QtiMapperExtensions;
+
+using android::hardware::graphics::mapper::V4_0::IMapper;
+using BufferDescriptorInfo_4_0 =
+ android::hardware::graphics::mapper::V4_0::IMapper::BufferDescriptorInfo;
+using IMapperBufferDescriptor = android::hardware::graphics::mapper::V4_0::BufferDescriptor;
+using MetadataType = ::android::hardware::graphics::mapper::V4_0::IMapper::MetadataType;
+using MetadataTypeDescription =
+ ::android::hardware::graphics::mapper::V4_0::IMapper::MetadataTypeDescription;
+using IMapper_4_0_Error = ::android::hardware::graphics::mapper::V4_0::Error;
+
+class QtiMapper : public IQtiMapper {
+ public:
+ QtiMapper();
+ // Methods from ::android::hardware::graphics::mapper::V2_0::IMapper follow.
+ Return<void> createDescriptor(const BufferDescriptorInfo_4_0 &descriptor_info,
+ createDescriptor_cb hidl_cb) override;
+ Return<void> importBuffer(const hidl_handle &raw_handle, importBuffer_cb hidl_cb) override;
+ Return<Error> freeBuffer(void *buffer) override;
+ Return<void> lock(void *buffer, uint64_t cpu_usage, const IMapper::Rect &access_region,
+ const hidl_handle &acquire_fence, lock_cb hidl_cb) override;
+ Return<void> unlock(void *buffer, unlock_cb hidl_cb) override;
+
+ // Methods from ::android::hardware::graphics::mapper::V2_1::IMapper follow.
+ Return<Error> validateBufferSize(void *buffer, const BufferDescriptorInfo_4_0 &descriptorInfo,
+ uint32_t stride) override;
+ Return<void> getTransportSize(void *buffer, getTransportSize_cb hidl_cb) override;
+
+ Return<void> isSupported(const BufferDescriptorInfo_4_0 &descriptor_info,
+ isSupported_cb hidl_cb) override;
+
+ Return<void> getMapperExtensions(getMapperExtensions_cb hidl_cb);
+ sp<mapperextensions::V1_1::IQtiMapperExtensions> extensions_ = nullptr;
+
+ // Methods from ::android::hardware::graphics::mapper::V4:0::IMapper follow.
+ Return<void> get(void *buffer, const MetadataType &metadataType, get_cb hidl_cb) override;
+ Return<Error> set(void *buffer, const MetadataType &metadataType,
+ const hidl_vec<uint8_t> &metadata) override;
+ Return<void> getFromBufferDescriptorInfo(const BufferDescriptorInfo &description,
+ const MetadataType &metadataType,
+ getFromBufferDescriptorInfo_cb hidl_cb) override;
+ Return<void> flushLockedBuffer(void *buffer, flushLockedBuffer_cb hidl_cb);
+ Return<Error> rereadLockedBuffer(void *buffer);
+ Return<void> listSupportedMetadataTypes(listSupportedMetadataTypes_cb hidl_cb);
+ Return<void> getReservedRegion(void *buffer, getReservedRegion_cb _hidl_cb);
+ Return<void> dumpBuffer(void *buffer, dumpBuffer_cb _hidl_cb);
+ Return<void> dumpBuffers(dumpBuffers_cb _hidl_cb);
+
+ hidl_vec<uint8_t> Encode(const BufferDescriptorInfo_4_0 &bd_info) {
+ hidl_vec<uint8_t> out;
+
+ uint64_t name_size = bd_info.name.size();
+
+ /* Name length is variable, need to store string prepended with size
+ * The rest of the packet size is constant
+ */
+ out.resize(gralloc::kBufferDescriptorSizeV4 + sizeof(name_size) +
+ static_cast<size_t>(name_size));
+
+ size_t index = 0;
+ uint32_t magic_version = gralloc::kMagicVersion;
+ std::memcpy(&out[index], &magic_version, sizeof(magic_version));
+ index += sizeof(magic_version);
+
+ std::memcpy(&out[index], &name_size, sizeof(name_size));
+ index += sizeof(name_size);
+
+ std::memcpy(&out[index], bd_info.name.c_str(), bd_info.name.size());
+ index += name_size;
+
+ std::memcpy(&out[index], &bd_info.width, sizeof(bd_info.width));
+ index += sizeof(bd_info.width);
+
+ std::memcpy(&out[index], &bd_info.height, sizeof(bd_info.height));
+ index += sizeof(bd_info.height);
+
+ std::memcpy(&out[index], &bd_info.layerCount, sizeof(bd_info.layerCount));
+ index += sizeof(bd_info.layerCount);
+
+ std::memcpy(&out[index], &bd_info.format, sizeof(bd_info.format));
+ index += sizeof(bd_info.format);
+
+ std::memcpy(&out[index], &bd_info.usage, sizeof(bd_info.usage));
+ index += sizeof(bd_info.usage);
+
+ std::memcpy(&out[index], &bd_info.reservedSize, sizeof(bd_info.reservedSize));
+
+ return out;
+ }
+ static gralloc::Error Decode(const hidl_vec<uint8_t> &in,
+ gralloc::BufferDescriptor *buf_descriptor) {
+ // First check is to avoid dereferencing if the vector is too short
+ if (in.size() < gralloc::kBufferDescriptorSizeV4) {
+ return gralloc::Error::BAD_DESCRIPTOR;
+ }
+
+ size_t index = 0;
+ uint32_t magic_version;
+ std::memcpy(&magic_version, &in[index], sizeof(magic_version));
+ index += sizeof(magic_version);
+
+ uint64_t name_size;
+ std::memcpy(&name_size, &in[index], sizeof(name_size));
+ index += sizeof(name_size);
+
+ // The second check validates that the size and magic version are correct
+ if (in.size() != (gralloc::kBufferDescriptorSizeV4 + name_size + sizeof(name_size)) ||
+ magic_version != gralloc::kMagicVersion) {
+ return gralloc::Error::BAD_DESCRIPTOR;
+ }
+
+ std::string name;
+
+ name.resize(static_cast<size_t>(name_size));
+ std::memcpy(name.data(), &in[index], name.size());
+ index += name_size;
+ buf_descriptor->SetName(name);
+
+ int32_t width, height;
+ std::memcpy(&width, &in[index], sizeof(width));
+
+ index += sizeof(width);
+ std::memcpy(&height, &in[index], sizeof(height));
+ index += sizeof(height);
+ buf_descriptor->SetDimensions(width, height);
+
+ uint32_t layer_count;
+ std::memcpy(&layer_count, &in[index], sizeof(layer_count));
+ index += sizeof(layer_count);
+ buf_descriptor->SetLayerCount(layer_count);
+
+ int32_t format;
+ std::memcpy(&format, &in[index], sizeof(format));
+ index += sizeof(format);
+ buf_descriptor->SetColorFormat(format);
+
+ uint64_t usage;
+ std::memcpy(&usage, &in[index], sizeof(usage));
+ index += sizeof(usage);
+ buf_descriptor->SetUsage(usage);
+
+ uint64_t reserved_size;
+ std::memcpy(&reserved_size, &in[index], sizeof(reserved_size));
+ index += sizeof(reserved_size);
+
+ buf_descriptor->SetReservedSize(reserved_size);
+ return gralloc::Error::NONE;
+ }
+
+ private:
+ BufferManager *buf_mgr_ = nullptr;
+ Error CreateDescriptor(const BufferDescriptorInfo_4_0 &descriptor_info,
+ IMapperBufferDescriptor *descriptor);
+ bool ValidDescriptor(const IMapper::BufferDescriptorInfo &bd);
+ bool GetFenceFd(const hidl_handle &fence_handle, int *outFenceFd);
+ void WaitFenceFd(int fence_fd);
+ Error LockBuffer(void *buffer, uint64_t usage, const hidl_handle &acquire_fence,
+ const IMapper::Rect &access_region);
+
+ Error DumpBufferMetadata(const private_handle_t *buffer, BufferDump *outBufferDump);
+
+ hidl_vec<MetadataTypeDescription> metadata_type_descriptions_ = {
+ // MetadataType, description, gettable, settable
+ {android::gralloc4::MetadataType_BufferId, "", true, false},
+ {android::gralloc4::MetadataType_Name, "", true, false},
+ {android::gralloc4::MetadataType_Width, "", true, false},
+ {android::gralloc4::MetadataType_Height, "", true, false},
+ {android::gralloc4::MetadataType_LayerCount, "", true, false},
+ {android::gralloc4::MetadataType_PixelFormatRequested, "", true, false},
+ {android::gralloc4::MetadataType_PixelFormatFourCC, "", true, false},
+ {android::gralloc4::MetadataType_PixelFormatModifier, "", true, false},
+ {android::gralloc4::MetadataType_Usage, "", true, false},
+ {android::gralloc4::MetadataType_AllocationSize, "", true, false},
+ {android::gralloc4::MetadataType_ProtectedContent, "", true, false},
+ {android::gralloc4::MetadataType_ChromaSiting, "", true, false},
+ {android::gralloc4::MetadataType_Compression, "", true, false},
+ {android::gralloc4::MetadataType_Interlaced, "", true, false},
+ {android::gralloc4::MetadataType_PlaneLayouts, "", true, false},
+ {android::gralloc4::MetadataType_Dataspace, "", true, true},
+ {android::gralloc4::MetadataType_BlendMode, "", true, true},
+ {android::gralloc4::MetadataType_Smpte2086, "", true, true},
+ {android::gralloc4::MetadataType_Cta861_3, "", true, true},
+ {android::gralloc4::MetadataType_Smpte2094_40, "", true, true},
+ {android::gralloc4::MetadataType_Crop, "", true, true},
+ {qtigralloc::MetadataType_VTTimestamp, "VT Timestamp", true, true},
+ {qtigralloc::MetadataType_ColorMetadata, "Color metadata", true, true},
+ {qtigralloc::MetadataType_PPParamInterlaced, "Interlaced", true, true},
+ {qtigralloc::MetadataType_VideoPerfMode, "Video perf mode", true, true},
+ {qtigralloc::MetadataType_GraphicsMetadata, "Graphics metadata", true, true},
+ {qtigralloc::MetadataType_UBWCCRStatsInfo, "UBWC stats", true, true},
+ {qtigralloc::MetadataType_RefreshRate, "Refresh rate", true, true},
+ {qtigralloc::MetadataType_MapSecureBuffer, "Secure buffer mappable", true, true},
+ {qtigralloc::MetadataType_LinearFormat, "Linear format", true, true},
+ {qtigralloc::MetadataType_SingleBufferMode, "Single buffer mode flag", true, true},
+ {qtigralloc::MetadataType_CVPMetadata, "CVP metadata", true, true},
+ {qtigralloc::MetadataType_VideoHistogramStats, "Video histogram stats", true, true},
+ {qtigralloc::MetadataType_FD, "fd from private_handle_t", true, false},
+ {qtigralloc::MetadataType_PrivateFlags, "Flags in private_handle_t", true, false},
+ {qtigralloc::MetadataType_AlignedWidthInPixels, "width in private_handle_t", true, false},
+ {qtigralloc::MetadataType_AlignedHeightInPixels, "height in private_handle_t", true, false},
+#ifdef METADATA_V2
+ {qtigralloc::MetadataType_StandardMetadataStatus, "Is standard metadata set", true, false},
+ {qtigralloc::MetadataType_VendorMetadataStatus, "Is vendor metadata set", true, false},
+#endif
+#ifdef QTI_BUFFER_TYPE
+ {qtigralloc::MetadataType_BufferType, "Buffer type from private_handle_t", true, false},
+#endif
+ };
+};
+
+} // namespace implementation
+} // namespace V4_0
+} // namespace mapper
+} // namespace display
+} // namespace hardware
+} // namespace qti
+} // namespace vendor
+
+#endif // __QTIMAPPER4_H__
diff --git a/gralloc/QtiMapperExtensions.cpp b/gralloc/QtiMapperExtensions.cpp
new file mode 100644
index 0000000..33cd23d
--- /dev/null
+++ b/gralloc/QtiMapperExtensions.cpp
@@ -0,0 +1,417 @@
+/*
+ * Copyright (c) 2019 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#define ATRACE_TAG (ATRACE_TAG_GRAPHICS | ATRACE_TAG_HAL)
+#define DEBUG 0
+#include "QtiMapperExtensions.h"
+#include <cutils/trace.h>
+#include <qdMetaData.h>
+#include <sync/sync.h>
+#include "gr_utils.h"
+
+namespace vendor {
+namespace qti {
+namespace hardware {
+namespace display {
+namespace mapperextensions {
+namespace V1_1 {
+namespace implementation {
+
+using gralloc::BufferInfo;
+
+QtiMapperExtensions::QtiMapperExtensions() {}
+
+Return<void> QtiMapperExtensions::getMapSecureBufferFlag(void *buffer,
+ getMapSecureBufferFlag_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ int map_secure_buffer = 0;
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (getMetaData(hnd, GET_MAP_SECURE_BUFFER, &map_secure_buffer) != 0) {
+ map_secure_buffer = 0;
+ } else {
+ err = Error::NONE;
+ }
+ }
+ hidl_cb(err, map_secure_buffer != 0);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getInterlacedFlag(void *buffer, getInterlacedFlag_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ int interlaced_flag = 0;
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (getMetaData(hnd, GET_PP_PARAM_INTERLACED, &interlaced_flag) != 0) {
+ interlaced_flag = 0;
+ } else {
+ err = Error::NONE;
+ }
+ }
+ hidl_cb(err, interlaced_flag != 0);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getCustomDimensions(void *buffer,
+ getCustomDimensions_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ int stride = 0;
+ int height = 0;
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ stride = hnd->width;
+ height = hnd->height;
+ gralloc::GetCustomDimensions(hnd, &stride, &height);
+ err = Error::NONE;
+ }
+ hidl_cb(err, stride, height);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getRgbDataAddress(void *buffer, getRgbDataAddress_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ void *rgb_data = nullptr;
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (gralloc::GetRgbDataAddress(hnd, &rgb_data) == 0) {
+ err = Error::NONE;
+ }
+ }
+ hidl_cb(err, rgb_data);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::calculateBufferAttributes(int32_t width, int32_t height,
+ int32_t format, uint64_t usage,
+ calculateBufferAttributes_cb hidl_cb) {
+ unsigned int alignedw, alignedh;
+ BufferInfo info(width, height, format, usage);
+ gralloc::GetAlignedWidthAndHeight(info, &alignedw, &alignedh);
+ bool ubwc_enabled = gralloc::IsUBwcEnabled(format, usage);
+ hidl_cb(Error::NONE, alignedw, alignedh, ubwc_enabled);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getCustomFormatFlags(int32_t format, uint64_t usage,
+ getCustomFormatFlags_cb hidl_cb) {
+ uint64_t priv_flags = 0;
+ auto err = Error::NONE;
+ int32_t custom_format = format;
+ if (gralloc::GetCustomFormatFlags(format, usage, &custom_format, &priv_flags) != 0) {
+ err = Error::UNSUPPORTED;
+ }
+ hidl_cb(err, custom_format, priv_flags);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getColorSpace(void *buffer, getColorSpace_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ int color_space = 0;
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ gralloc::GetColorSpaceFromMetadata(hnd, &color_space);
+ err = Error::NONE;
+ }
+ hidl_cb(err, color_space);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getYuvPlaneInfo(void *buffer, getYuvPlaneInfo_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ hidl_vec<YCbCrLayout> layout;
+ layout.resize(2);
+ android_ycbcr yuv_plane_info[2];
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (gralloc::GetYUVPlaneInfo(hnd, yuv_plane_info) == 0) {
+ err = Error::NONE;
+ for (int i = 0; i < 2; i++) {
+ layout[i].y = yuv_plane_info[i].y;
+ layout[i].cr = yuv_plane_info[i].cr;
+ layout[i].cb = yuv_plane_info[i].cb;
+ layout[i].yStride = static_cast<uint32_t>(yuv_plane_info[i].ystride);
+ layout[i].cStride = static_cast<uint32_t>(yuv_plane_info[i].cstride);
+ layout[i].chromaStep = static_cast<uint32_t>(yuv_plane_info[i].chroma_step);
+ }
+ }
+ }
+ hidl_cb(err, layout);
+ return Void();
+}
+
+Return<Error> QtiMapperExtensions::setSingleBufferMode(void *buffer, bool enable) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (setMetaData(hnd, SET_SINGLE_BUFFER_MODE, &enable) != 0) {
+ err = Error::UNSUPPORTED;
+ } else {
+ err = Error::NONE;
+ }
+ }
+ return err;
+}
+
+Return<void> QtiMapperExtensions::getFd(void *buffer, getFd_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ int fd = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ fd = hnd->fd;
+ }
+ hidl_cb(err, fd);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getWidth(void *buffer, getWidth_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ int width = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ width = hnd->width;
+ }
+ hidl_cb(err, width);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getHeight(void *buffer, getHeight_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ int height = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ height = hnd->height;
+ }
+ hidl_cb(err, height);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getFormat(void *buffer, getFormat_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ int format = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ format = hnd->format;
+ }
+ hidl_cb(err, format);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getPrivateFlags(void *buffer, getPrivateFlags_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ int flags = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ flags = hnd->flags;
+ }
+ hidl_cb(err, flags);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getUnalignedWidth(void *buffer, getUnalignedWidth_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ int unaligned_width = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ unaligned_width = hnd->unaligned_width;
+ }
+ hidl_cb(err, unaligned_width);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getUnalignedHeight(void *buffer, getUnalignedHeight_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ int unaligned_height = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ unaligned_height = hnd->unaligned_height;
+ }
+ hidl_cb(err, unaligned_height);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getLayerCount(void *buffer, getLayerCount_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ unsigned int layer_count = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ layer_count = hnd->layer_count;
+ }
+ hidl_cb(err, layer_count);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getId(void *buffer, getId_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ uint64_t id = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ id = hnd->id;
+ }
+ hidl_cb(err, id);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getUsageFlags(void *buffer, getUsageFlags_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ uint64_t usage = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ usage = hnd->usage;
+ }
+ hidl_cb(err, usage);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getSize(void *buffer, getSize_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ unsigned int size = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ size = hnd->size;
+ }
+ hidl_cb(err, size);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getOffset(void *buffer, getOffset_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ unsigned int offset = 0;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ err = Error::NONE;
+ offset = hnd->offset;
+ }
+ hidl_cb(err, offset);
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getSurfaceMetadata(void *buffer, getSurfaceMetadata_cb hidl_cb) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ GraphicsMetadata surface_metadata;
+ if (buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (getMetaData(hnd, GET_GRAPHICS_METADATA, &surface_metadata) == 0) {
+ err = Error::NONE;
+ }
+ }
+ if (err != Error::NONE) {
+ hidl_cb(err, nullptr);
+ } else {
+ hidl_cb(err, &surface_metadata);
+ }
+ return Void();
+}
+
+Return<void> QtiMapperExtensions::getFormatLayout(int32_t format, uint64_t usage, int32_t flags,
+ int32_t width, int32_t height,
+ getFormatLayout_cb hidl_cb) {
+ ALOGD_IF(DEBUG, "%s: Input parameters - wxh: %dx%d usage: 0x%" PRIu64 " format: %d", __FUNCTION__,
+ width, height, usage, format);
+ auto err = Error::NONE;
+ hidl_vec<PlaneLayout> plane_info;
+ unsigned int alignedw = 0, alignedh = 0;
+ int plane_count = 0;
+ uint64_t size = 0;
+ int custom_format = gralloc::GetImplDefinedFormat(usage, format);
+ BufferInfo info(width, height, custom_format, usage);
+ gralloc::GetAlignedWidthAndHeight(info, &alignedw, &alignedh);
+ size = gralloc::GetSize(info, alignedw, alignedh);
+ gralloc::PlaneLayoutInfo plane_layout[8] = {};
+ ALOGD_IF(DEBUG, "%s: Aligned width and height - wxh: %ux%u custom_format = %d", __FUNCTION__,
+ alignedw, alignedh, custom_format);
+ if (gralloc::IsYuvFormat(custom_format)) {
+ gralloc::GetYUVPlaneInfo(info, custom_format, alignedw, alignedh, flags, &plane_count,
+ plane_layout);
+ } else if (gralloc::IsUncompressedRGBFormat(custom_format) ||
+ gralloc::IsCompressedRGBFormat(custom_format)) {
+ gralloc::GetRGBPlaneInfo(info, custom_format, alignedw, alignedh, flags, &plane_count,
+ plane_layout);
+ } else {
+ err = Error::BAD_BUFFER;
+ hidl_cb(err, size, plane_info);
+ return Void();
+ }
+ ALOGD_IF(DEBUG, "%s: Number of plane - %d, custom_format - %d", __FUNCTION__, plane_count,
+ custom_format);
+ plane_info.resize(plane_count);
+ for (int i = 0; i < plane_count; i++) {
+ plane_info[i].component = plane_layout[i].component;
+ plane_info[i].h_subsampling = plane_layout[i].h_subsampling;
+ plane_info[i].v_subsampling = plane_layout[i].v_subsampling;
+ plane_info[i].offset = plane_layout[i].offset;
+ plane_info[i].pixel_increment = plane_layout[i].step;
+ plane_info[i].stride = plane_layout[i].stride;
+ plane_info[i].stride_bytes = plane_layout[i].stride_bytes;
+ plane_info[i].scanlines = plane_layout[i].scanlines;
+ plane_info[i].size = plane_layout[i].size;
+ ALOGD_IF(DEBUG, "%s: plane info: component - %d", __FUNCTION__, plane_info[i].component);
+ ALOGD_IF(DEBUG, "h_subsampling - %u, v_subsampling - %u, offset - %u, pixel_increment - %d",
+ plane_info[i].h_subsampling, plane_info[i].v_subsampling, plane_info[i].offset,
+ plane_info[i].pixel_increment);
+ ALOGD_IF(DEBUG, "stride_pixel - %d, stride_bytes - %d, scanlines - %d, size - %u",
+ plane_info[i].stride, plane_info[i].stride_bytes, plane_info[i].scanlines,
+ plane_info[i].size);
+ }
+ hidl_cb(err, size, plane_info);
+ return Void();
+}
+
+Return<Error> QtiMapperExtensions::getSurfaceMetadata_V1(void *buffer, void *metadata) {
+ auto err = Error::BAD_BUFFER;
+ auto hnd = static_cast<private_handle_t *>(buffer);
+ if (metadata != nullptr && buffer != nullptr && private_handle_t::validate(hnd) == 0) {
+ if (getMetaData(hnd, GET_GRAPHICS_METADATA, metadata) == 0) {
+ err = Error::NONE;
+ } else {
+ err = Error::UNSUPPORTED;
+ }
+ } else {
+ ALOGE("%s: buffer pointer: %p, metadata pointer: %p ", __FUNCTION__, buffer, metadata);
+ }
+ return err;
+}
+
+} // namespace implementation
+} // namespace V1_1
+} // namespace mapperextensions
+} // namespace display
+} // namespace hardware
+} // namespace qti
+} // namespace vendor
diff --git a/gralloc/QtiMapperExtensions.h b/gralloc/QtiMapperExtensions.h
new file mode 100644
index 0000000..5f1df06
--- /dev/null
+++ b/gralloc/QtiMapperExtensions.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2019 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __QTIMAPPEREXTENSIONS_H__
+#define __QTIMAPPEREXTENSIONS_H__
+
+#include <hidl/MQDescriptor.h>
+#include <hidl/Status.h>
+#include <vendor/qti/hardware/display/mapperextensions/1.1/IQtiMapperExtensions.h>
+
+#include "gr_buf_mgr.h"
+namespace vendor {
+namespace qti {
+namespace hardware {
+namespace display {
+namespace mapperextensions {
+namespace V1_1 {
+namespace implementation {
+
+using ::android::sp;
+using ::android::hardware::hidl_array;
+using ::android::hardware::hidl_handle;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::graphics::common::V1_2::PixelFormat;
+using ::android::hidl::base::V1_0::DebugInfo;
+using ::android::hidl::base::V1_0::IBase;
+using gralloc::BufferManager;
+using ::vendor::qti::hardware::display::mapperextensions::V1_1::IQtiMapperExtensions;
+using ::vendor::qti::hardware::display::mapperextensions::V1_0::Error;
+using ::vendor::qti::hardware::display::mapperextensions::V1_0::PlaneLayout;
+using ::vendor::qti::hardware::display::mapperextensions::V1_0::YCbCrLayout;
+
+class QtiMapperExtensions : public IQtiMapperExtensions {
+ public:
+ QtiMapperExtensions();
+ Return<void> getMapSecureBufferFlag(void *buffer, getMapSecureBufferFlag_cb _hidl_cb) override;
+ Return<void> getInterlacedFlag(void *buffer, getInterlacedFlag_cb _hidl_cb) override;
+ Return<void> getCustomDimensions(void *buffer, getCustomDimensions_cb _hidl_cb) override;
+ Return<void> getRgbDataAddress(void *buffer, getRgbDataAddress_cb _hidl_cb) override;
+ Return<void> calculateBufferAttributes(int32_t width, int32_t height, int32_t format,
+ uint64_t usage,
+ calculateBufferAttributes_cb _hidl_cb) override;
+ Return<void> getCustomFormatFlags(int32_t format, uint64_t usage,
+ getCustomFormatFlags_cb _hidl_cb) override;
+ Return<void> getColorSpace(void *buffer, getColorSpace_cb _hidl_cb) override;
+ Return<void> getYuvPlaneInfo(void *buffer, getYuvPlaneInfo_cb _hidl_cb) override;
+ Return<Error> setSingleBufferMode(void *buffer, bool enable) override;
+ Return<void> getFd(void *buffer, getFd_cb _hidl_cb) override;
+ Return<void> getWidth(void *buffer, getWidth_cb _hidl_cb) override;
+ Return<void> getHeight(void *buffer, getHeight_cb _hidl_cb) override;
+ Return<void> getOffset(void *buffer, getOffset_cb _hidl_cb) override;
+ Return<void> getSize(void *buffer, getSize_cb _hidl_cb) override;
+ Return<void> getFormat(void *buffer, getFormat_cb _hidl_cb) override;
+ Return<void> getPrivateFlags(void *buffer, getPrivateFlags_cb _hidl_cb) override;
+ Return<void> getUnalignedWidth(void *buffer, getUnalignedWidth_cb _hidl_cb) override;
+ Return<void> getUnalignedHeight(void *buffer, getUnalignedHeight_cb _hidl_cb) override;
+ Return<void> getLayerCount(void *buffer, getLayerCount_cb _hidl_cb) override;
+ Return<void> getId(void *buffer, getId_cb _hidl_cb) override;
+ Return<void> getUsageFlags(void *buffer, getUsageFlags_cb _hidl_cb) override;
+ Return<void> getSurfaceMetadata(void *buffer, getSurfaceMetadata_cb _hidl_cb) override;
+ Return<void> getFormatLayout(int32_t format, uint64_t usage, int32_t flags, int32_t width,
+ int32_t height, getFormatLayout_cb hidl_cb) override;
+ Return<Error> getSurfaceMetadata_V1(void *buffer, void *metadata) override;
+};
+
+} // namespace implementation
+} // namespace V1_1
+} // namespace mapperextensions
+} // namespace display
+} // namespace hardware
+} // namespace qti
+} // namespace vendor
+
+#endif // __QTIMAPPEREXTENSIONS_H__
diff --git a/gralloc/android.hardware.graphics.mapper-impl-qti-display.xml b/gralloc/android.hardware.graphics.mapper-impl-qti-display.xml
new file mode 100644
index 0000000..4e5c3ad
--- /dev/null
+++ b/gralloc/android.hardware.graphics.mapper-impl-qti-display.xml
@@ -0,0 +1,52 @@
+<!--
+Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+-->
+<manifest version="1.0" type="device">
+ <hal format="hidl">
+ <name>vendor.qti.hardware.display.mapper</name>
+ <transport arch="32+64">passthrough</transport>
+ <version>3.0</version>
+ <version>4.0</version>
+ <interface>
+ <name>IQtiMapper</name>
+ <instance>default</instance>
+ </interface>
+ </hal>
+ <hal format="hidl">
+ <name>android.hardware.graphics.mapper</name>
+ <transport arch="32+64">passthrough</transport>
+ <version>3.0</version>
+ <version>4.0</version>
+ <interface>
+ <name>IMapper</name>
+ <instance>default</instance>
+ </interface>
+ </hal>
+</manifest>
+
+
diff --git a/gralloc/gr_adreno_info.cpp b/gralloc/gr_adreno_info.cpp
new file mode 100644
index 0000000..924020a
--- /dev/null
+++ b/gralloc/gr_adreno_info.cpp
@@ -0,0 +1,333 @@
+/*
+ * Copyright (c) 2011-2020, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#include <log/log.h>
+#include <cutils/properties.h>
+#include <dlfcn.h>
+#include <mutex>
+
+#include "gr_adreno_info.h"
+#include "gr_utils.h"
+#include "gralloc_priv.h"
+
+using std::lock_guard;
+using std::mutex;
+
+namespace gralloc {
+
+AdrenoMemInfo *AdrenoMemInfo::s_instance = nullptr;
+
+AdrenoMemInfo *AdrenoMemInfo::GetInstance() {
+ static mutex s_lock;
+ lock_guard<mutex> obj(s_lock);
+ if (!s_instance) {
+ s_instance = new AdrenoMemInfo();
+ }
+
+ return s_instance;
+}
+
+AdrenoMemInfo::AdrenoMemInfo() {
+ libadreno_utils_ = ::dlopen("libadreno_utils.so", RTLD_NOW);
+ if (libadreno_utils_) {
+ *reinterpret_cast<void **>(&LINK_adreno_compute_aligned_width_and_height) =
+ ::dlsym(libadreno_utils_, "compute_aligned_width_and_height");
+ *reinterpret_cast<void **>(&LINK_adreno_compute_fmt_aligned_width_and_height) =
+ ::dlsym(libadreno_utils_, "compute_fmt_aligned_width_and_height");
+ *reinterpret_cast<void **>(&LINK_adreno_compute_padding) =
+ ::dlsym(libadreno_utils_, "compute_surface_padding");
+ *reinterpret_cast<void **>(&LINK_adreno_compute_compressedfmt_aligned_width_and_height) =
+ ::dlsym(libadreno_utils_, "compute_compressedfmt_aligned_width_and_height");
+ *reinterpret_cast<void **>(&LINK_adreno_isUBWCSupportedByGpu) =
+ ::dlsym(libadreno_utils_, "isUBWCSupportedByGpu");
+ *reinterpret_cast<void **>(&LINK_adreno_get_gpu_pixel_alignment) =
+ ::dlsym(libadreno_utils_, "get_gpu_pixel_alignment");
+ *reinterpret_cast<void **>(&LINK_adreno_get_metadata_blob_size) =
+ ::dlsym(libadreno_utils_, "adreno_get_metadata_blob_size");
+ *reinterpret_cast<void **>(&LINK_adreno_init_memory_layout) =
+ ::dlsym(libadreno_utils_, "adreno_init_memory_layout");
+ *reinterpret_cast<void **>(&LINK_adreno_get_aligned_gpu_buffer_size) =
+ ::dlsym(libadreno_utils_, "adreno_get_aligned_gpu_buffer_size");
+ } else {
+ ALOGE(" Failed to load libadreno_utils.so");
+ }
+}
+
+AdrenoMemInfo::~AdrenoMemInfo() {
+ if (libadreno_utils_) {
+ ::dlclose(libadreno_utils_);
+ }
+}
+
+void AdrenoMemInfo::AdrenoSetProperties(gralloc::GrallocProperties props) {
+ gfx_ubwc_disable_ = props.ubwc_disable;
+ gfx_ahardware_buffer_disable_ = props.ahardware_buffer_disable;
+}
+
+void AdrenoMemInfo::AlignUnCompressedRGB(int width, int height, int format, int tile_enabled,
+ unsigned int *aligned_w, unsigned int *aligned_h) {
+ *aligned_w = (unsigned int)ALIGN(width, 32);
+ *aligned_h = (unsigned int)ALIGN(height, 32);
+
+ int bpp = 4;
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RGB_888:
+ case HAL_PIXEL_FORMAT_BGR_888:
+ bpp = 3;
+ break;
+ case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ case HAL_PIXEL_FORMAT_RGBA_4444:
+ bpp = 2;
+ break;
+ default:
+ break;
+ }
+
+ int raster_mode = 0; // Adreno unknown raster mode.
+ int padding_threshold = 512; // Threshold for padding surfaces.
+ // the function below computes aligned width and aligned height
+ // based on linear or macro tile mode selected.
+ if (LINK_adreno_compute_fmt_aligned_width_and_height) {
+ // We call into adreno_utils only for RGB formats. So plane_id is 0 and
+ // num_samples is 1 always. We may have to add uitility function to
+ // find out these if there is a need to call this API for YUV formats.
+ LINK_adreno_compute_fmt_aligned_width_and_height(
+ width, height, 0 /*plane_id*/, GetGpuPixelFormat(format), 1 /*num_samples*/, tile_enabled,
+ raster_mode, padding_threshold, reinterpret_cast<int *>(aligned_w),
+ reinterpret_cast<int *>(aligned_h));
+ } else if (LINK_adreno_compute_aligned_width_and_height) {
+ LINK_adreno_compute_aligned_width_and_height(
+ width, height, bpp, tile_enabled, raster_mode, padding_threshold,
+ reinterpret_cast<int *>(aligned_w), reinterpret_cast<int *>(aligned_h));
+ } else if (LINK_adreno_compute_padding) {
+ int surface_tile_height = 1; // Linear surface
+ *aligned_w = UINT(LINK_adreno_compute_padding(width, bpp, surface_tile_height, raster_mode,
+ padding_threshold));
+ ALOGW("%s: Warning!! Old GFX API is used to calculate stride", __FUNCTION__);
+ } else {
+ ALOGW(
+ "%s: Warning!! Symbols compute_surface_padding and "
+ "compute_fmt_aligned_width_and_height and "
+ "compute_aligned_width_and_height not found",
+ __FUNCTION__);
+ }
+}
+
+void AdrenoMemInfo::AlignCompressedRGB(int width, int height, int format, unsigned int *aligned_w,
+ unsigned int *aligned_h) {
+ if (LINK_adreno_compute_compressedfmt_aligned_width_and_height) {
+ int bytesPerPixel = 0;
+ int raster_mode = 0; // Adreno unknown raster mode.
+ int padding_threshold = 512; // Threshold for padding
+ // surfaces.
+
+ LINK_adreno_compute_compressedfmt_aligned_width_and_height(
+ width, height, format, 0, raster_mode, padding_threshold,
+ reinterpret_cast<int *>(aligned_w), reinterpret_cast<int *>(aligned_h), &bytesPerPixel);
+ } else {
+ *aligned_w = (unsigned int)ALIGN(width, 32);
+ *aligned_h = (unsigned int)ALIGN(height, 32);
+ ALOGW("%s: Warning!! compute_compressedfmt_aligned_width_and_height not found", __FUNCTION__);
+ }
+}
+
+bool AdrenoMemInfo::IsUBWCSupportedByGPU(int format) {
+ if (!gfx_ubwc_disable_ && LINK_adreno_isUBWCSupportedByGpu) {
+ ADRENOPIXELFORMAT gpu_format = GetGpuPixelFormat(format);
+ return LINK_adreno_isUBWCSupportedByGpu(gpu_format);
+ }
+
+ return false;
+}
+
+uint32_t AdrenoMemInfo::GetGpuPixelAlignment() {
+ if (LINK_adreno_get_gpu_pixel_alignment) {
+ return LINK_adreno_get_gpu_pixel_alignment();
+ }
+
+ return 1;
+}
+
+ADRENOPIXELFORMAT AdrenoMemInfo::GetGpuPixelFormat(int hal_format) {
+ switch (hal_format) {
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ return ADRENO_PIXELFORMAT_R8G8B8A8;
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ return ADRENO_PIXELFORMAT_R8G8B8X8;
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ return ADRENO_PIXELFORMAT_B8G8R8A8_UNORM;
+ case HAL_PIXEL_FORMAT_RGB_888:
+ return ADRENO_PIXELFORMAT_R8G8B8;
+ case HAL_PIXEL_FORMAT_RGB_565:
+ return ADRENO_PIXELFORMAT_B5G6R5;
+ case HAL_PIXEL_FORMAT_BGR_565:
+ return ADRENO_PIXELFORMAT_R5G6B5;
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ return ADRENO_PIXELFORMAT_R5G5B5A1;
+ case HAL_PIXEL_FORMAT_RGBA_4444:
+ return ADRENO_PIXELFORMAT_R4G4B4A4;
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ return ADRENO_PIXELFORMAT_R10G10B10A2_UNORM;
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ return ADRENO_PIXELFORMAT_R10G10B10X2_UNORM;
+ case HAL_PIXEL_FORMAT_ABGR_2101010:
+ return ADRENO_PIXELFORMAT_A2B10G10R10_UNORM;
+ case HAL_PIXEL_FORMAT_RGBA_FP16:
+ return ADRENO_PIXELFORMAT_R16G16B16A16_FLOAT;
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ return ADRENO_PIXELFORMAT_NV12;
+ case HAL_PIXEL_FORMAT_NV21_ENCODEABLE:
+ return ADRENO_PIXELFORMAT_NV21;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ return ADRENO_PIXELFORMAT_NV12_EXT;
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ return ADRENO_PIXELFORMAT_TP10;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ return ADRENO_PIXELFORMAT_P010;
+ case HAL_PIXEL_FORMAT_DEPTH_16:
+ return ADRENO_PIXELFORMAT_D16_UNORM;
+ case HAL_PIXEL_FORMAT_DEPTH_24:
+ return ADRENO_PIXELFORMAT_D24_UNORM_X8_UINT;
+ case HAL_PIXEL_FORMAT_DEPTH_24_STENCIL_8:
+ return ADRENO_PIXELFORMAT_D24_UNORM_S8_UINT;
+ case HAL_PIXEL_FORMAT_DEPTH_32F:
+ return ADRENO_PIXELFORMAT_D32_FLOAT;
+ case HAL_PIXEL_FORMAT_STENCIL_8:
+ return ADRENO_PIXELFORMAT_S8_UINT;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_4x4_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_4X4;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_4X4_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x4_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_5X4;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_5X4_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x5_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_5X5;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_5X5_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x5_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_6X5;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_6X5_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x6_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_6X6;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_6X6_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x5_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_8X5;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_8X5_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x6_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_8X6;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_8X6_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x8_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_8X8;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_8X8_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x5_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_10X5;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_10X5_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x6_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_10X6;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_10X6_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x8_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_10X8;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_10X8_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x10_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_10X10;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_10X10_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x10_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_12X10;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_12X10_SRGB;
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x12_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_12X12;
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
+ return ADRENO_PIXELFORMAT_ASTC_12X12_SRGB;
+ default:
+ ALOGE("%s: No map for format: 0x%x", __FUNCTION__, hal_format);
+ break;
+ }
+
+ return ADRENO_PIXELFORMAT_UNKNOWN;
+}
+
+uint32_t AdrenoMemInfo::AdrenoGetMetadataBlobSize() {
+ if (LINK_adreno_get_metadata_blob_size) {
+ return LINK_adreno_get_metadata_blob_size();
+ }
+ return 0;
+}
+
+int AdrenoMemInfo::AdrenoInitMemoryLayout(void *metadata_blob, int width, int height, int depth,
+ int format, int num_samples, int isUBWC, uint64_t usage, uint32_t num_planes) {
+ if (LINK_adreno_init_memory_layout) {
+ surface_tile_mode_t tile_mode = static_cast<surface_tile_mode_t> (isUBWC);
+ return LINK_adreno_init_memory_layout(metadata_blob, width, height, depth,
+ GetGpuPixelFormat(format), num_samples,
+ tile_mode, usage, num_planes);
+ }
+ return -1;
+}
+
+uint32_t AdrenoMemInfo::AdrenoGetAlignedGpuBufferSize(void *metadata_blob) {
+ if (LINK_adreno_get_aligned_gpu_buffer_size) {
+ return LINK_adreno_get_aligned_gpu_buffer_size(metadata_blob);
+ }
+ return -1;
+}
+
+bool AdrenoMemInfo::AdrenoSizeAPIAvaliable() {
+ if (gfx_ahardware_buffer_disable_) {
+ return false;
+ }
+
+ return (LINK_adreno_get_metadata_blob_size && LINK_adreno_init_memory_layout &&
+ LINK_adreno_get_aligned_gpu_buffer_size);
+}
+
+bool AdrenoMemInfo::IsPISupportedByGPU(int format, uint64_t usage) {
+ if (LINK_adreno_isPISupportedByGpu) {
+ return LINK_adreno_isPISupportedByGpu(format, usage);
+ }
+ return false;
+}
+
+} // namespace gralloc
diff --git a/gralloc/gr_adreno_info.h b/gralloc/gr_adreno_info.h
new file mode 100644
index 0000000..6c9c3e3
--- /dev/null
+++ b/gralloc/gr_adreno_info.h
@@ -0,0 +1,236 @@
+/*
+ * Copyright (c) 2011-2020, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __GR_ADRENO_INFO_H__
+#define __GR_ADRENO_INFO_H__
+
+#include <media/msm_media_info.h>
+
+#include "gr_utils.h"
+
+namespace gralloc {
+
+// Adreno Pixel Formats
+typedef enum {
+ ADRENO_PIXELFORMAT_UNKNOWN = 0,
+ ADRENO_PIXELFORMAT_R16G16B16A16_FLOAT = 10,
+ ADRENO_PIXELFORMAT_R10G10B10A2_UNORM = 24, // Vertex, Normalized GL_UNSIGNED_INT_10_10_10_2_OES
+ ADRENO_PIXELFORMAT_R8G8B8A8 = 28,
+ ADRENO_PIXELFORMAT_R8G8B8A8_SRGB = 29,
+ ADRENO_PIXELFORMAT_D32_FLOAT = 40,
+ ADRENO_PIXELFORMAT_D24_UNORM_S8_UINT = 45,
+ ADRENO_PIXELFORMAT_D16_UNORM = 55,
+ ADRENO_PIXELFORMAT_B5G6R5 = 85,
+ ADRENO_PIXELFORMAT_B5G5R5A1 = 86,
+ ADRENO_PIXELFORMAT_B8G8R8A8_UNORM = 87,
+ ADRENO_PIXELFORMAT_B8G8R8A8 = 90,
+ ADRENO_PIXELFORMAT_B8G8R8A8_SRGB = 91,
+ ADRENO_PIXELFORMAT_B8G8R8X8_SRGB = 93,
+ ADRENO_PIXELFORMAT_NV12 = 103,
+ ADRENO_PIXELFORMAT_P010 = 104,
+ ADRENO_PIXELFORMAT_YUY2 = 107,
+ ADRENO_PIXELFORMAT_B4G4R4A4 = 115,
+ ADRENO_PIXELFORMAT_NV12_EXT = 506, // NV12 with non-std alignment and offsets
+ ADRENO_PIXELFORMAT_R8G8B8X8 = 507, // GL_RGB8 (Internal)
+ ADRENO_PIXELFORMAT_R8G8B8 = 508, // GL_RGB8
+ ADRENO_PIXELFORMAT_A1B5G5R5 = 519, // GL_RGB5_A1
+ ADRENO_PIXELFORMAT_R8G8B8X8_SRGB = 520, // GL_SRGB8
+ ADRENO_PIXELFORMAT_R8G8B8_SRGB = 521, // GL_SRGB8
+ ADRENO_PIXELFORMAT_A2B10G10R10_UNORM = 532,
+ // Vertex, Normalized GL_UNSIGNED_INT_10_10_10_2_OES
+ ADRENO_PIXELFORMAT_R10G10B10X2_UNORM = 537,
+ ADRENO_PIXELFORMAT_D24_UNORM_X8_UINT = 548,
+ ADRENO_PIXELFORMAT_D24_UNORM = 549,
+ ADRENO_PIXELFORMAT_D32_FLOAT_X24S8_UINT = 551,
+ ADRENO_PIXELFORMAT_S8_UINT = 552,
+ ADRENO_PIXELFORMAT_ASTC_4X4 = 568, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_5X4 = 569, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_5X5 = 570, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_6X5 = 571, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_6X6 = 572, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_8X5 = 573, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_8X6 = 574, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_8X8 = 575, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_10X5 = 576, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_10X6 = 577, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_10X8 = 578, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_10X10 = 579, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_12X10 = 580, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_12X12 = 581, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_4X4_SRGB = 582, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_5X4_SRGB = 583, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_5X5_SRGB = 584, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_6X5_SRGB = 585, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_6X6_SRGB = 586, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_8X5_SRGB = 587, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_8X6_SRGB = 588, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_8X8_SRGB = 589, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_10X5_SRGB = 590, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_10X6_SRGB = 591, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_10X8_SRGB = 592, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_10X10_SRGB = 593, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_12X10_SRGB = 594, // ASTC Compressed
+ ADRENO_PIXELFORMAT_ASTC_12X12_SRGB = 595, // ASTC Compressed
+ // Vertex, Normalized GL_UNSIGNED_INT_10_10_10_2_OES
+ ADRENO_PIXELFORMAT_R5G6B5 = 610, // RGBA version of B5G6R5
+ ADRENO_PIXELFORMAT_R5G5B5A1 = 611, // RGBA version of B5G5R5A1
+ ADRENO_PIXELFORMAT_R4G4B4A4 = 612, // RGBA version of B4G4R4A4
+ ADRENO_PIXELFORMAT_UYVY = 614, // YUV 4:2:2 packed progressive (1 plane)
+ ADRENO_PIXELFORMAT_NV21 = 619,
+ ADRENO_PIXELFORMAT_Y8U8V8A8 = 620, // YUV 4:4:4 packed (1 plane)
+ ADRENO_PIXELFORMAT_Y8 = 625, // Single 8-bit luma only channel YUV format
+ ADRENO_PIXELFORMAT_TP10 = 654, // YUV 4:2:0 planar 10 bits/comp (2 planes)
+} ADRENOPIXELFORMAT;
+
+typedef enum {
+ SURFACE_TILE_MODE_DISABLE = 0x0, // used for linear surface
+ SURFACE_TILE_MODE_ENABLE = 0x1 // used for tiled surface
+} surface_tile_mode_t;
+
+class AdrenoMemInfo {
+ public:
+ /*
+ * Function to compute aligned width and aligned height based on
+ * width, height, format and usage flags.
+ *
+ * @return aligned width, aligned height
+ */
+ void GetAlignedWidthAndHeight(int width, int height, int format, int usage,
+ unsigned int *aligned_w, unsigned int *aligned_h, bool ubwc_enabled,
+ bool tile_enabled);
+
+ /*
+ * Function to compute the adreno aligned width and aligned height
+ * based on the width and format.
+ *
+ * @return aligned width, aligned height
+ */
+ void AlignUnCompressedRGB(int width, int height, int format, int tileEnabled,
+ unsigned int *aligned_w, unsigned int *aligned_h);
+
+ /*
+ * Function to compute the adreno aligned width and aligned height
+ * based on the width and format.
+ *
+ * @return aligned width, aligned height
+ */
+ void AlignCompressedRGB(int width, int height, int format, unsigned int *aligned_w,
+ unsigned int *aligned_h);
+
+ /*
+ * Function to compute the pixel alignment requirement.
+ *
+ * @return alignment
+ */
+ uint32_t GetGpuPixelAlignment();
+
+ /*
+ * Function to query whether GPU supports UBWC for given HAL format
+ * @return > 0 : supported
+ * 0 : not supported
+ */
+ bool IsUBWCSupportedByGPU(int format);
+
+ /*
+ * Function to check if GPU supports PI or not
+ */
+ bool IsPISupportedByGPU(int format, uint64_t usage);
+ /*
+ * Function to get the corresponding Adreno format for given HAL format
+ */
+ ADRENOPIXELFORMAT GetGpuPixelFormat(int hal_format);
+
+ /*
+ * Function to get graphics metadata blob size
+ * @return graphics metadata size
+ */
+ uint32_t AdrenoGetMetadataBlobSize();
+
+ /*
+ * Function to populate the graphics metadata blob
+ * @return 1 : Successful
+ * 2 : Unsuccessful
+ */
+ int AdrenoInitMemoryLayout(void *metadata_blob, int width, int height, int depth, int format,
+ int num_samples, int isUBWC, uint64_t usage, uint32_t num_planes);
+ /*
+ * Function to get buffer size for based on graphcis metadata
+ * @return buffer size
+ */
+ uint32_t AdrenoGetAlignedGpuBufferSize(void *metadata_blob);
+
+ /*
+ * Function to check if adreno size calculation APIs are avaliable
+ * @return true : Avaliable
+ * false : Unavaliable
+ */
+ bool AdrenoSizeAPIAvaliable();
+
+ void AdrenoSetProperties(gralloc::GrallocProperties props);
+
+ static AdrenoMemInfo *GetInstance();
+
+ private:
+ AdrenoMemInfo();
+ ~AdrenoMemInfo();
+ // link(s)to adreno surface padding library.
+ int (*LINK_adreno_compute_padding)(int width, int bpp, int surface_tile_height,
+ int screen_tile_height, int padding_threshold) = NULL;
+ void (*LINK_adreno_compute_aligned_width_and_height)(int width, int height, int bpp,
+ int tile_mode, int raster_mode,
+ int padding_threshold, int *aligned_w,
+ int *aligned_h) = NULL;
+ void (*LINK_adreno_compute_fmt_aligned_width_and_height)(int width, int height, int plane_id,
+ int format, int num_samples,
+ int tile_mode, int raster_mode,
+ int padding_threshold, int *aligned_w,
+ int *aligned_h) = NULL;
+ void (*LINK_adreno_compute_compressedfmt_aligned_width_and_height)(
+ int width, int height, int format, int tile_mode, int raster_mode, int padding_threshold,
+ int *aligned_w, int *aligned_h, int *bpp) = NULL;
+ int (*LINK_adreno_isUBWCSupportedByGpu)(ADRENOPIXELFORMAT format) = NULL;
+ unsigned int (*LINK_adreno_get_gpu_pixel_alignment)() = NULL;
+
+ uint32_t (*LINK_adreno_get_metadata_blob_size)() = NULL;
+ int (*LINK_adreno_init_memory_layout)(void* metadata_blob, int width, int height, int depth,
+ ADRENOPIXELFORMAT format, int num_samples, surface_tile_mode_t tile_mode,
+ uint64_t usage, uint32_t num_planes) = NULL;
+ uint32_t (*LINK_adreno_get_aligned_gpu_buffer_size)(void* metadata_blob) = NULL;
+ int (*LINK_adreno_isPISupportedByGpu)(int format, uint64_t usage) = NULL;
+
+ bool gfx_ubwc_disable_ = false;
+ bool gfx_ahardware_buffer_disable_ = false;
+ void *libadreno_utils_ = NULL;
+
+ static AdrenoMemInfo *s_instance;
+};
+
+} // namespace gralloc
+
+#endif // __GR_ADRENO_INFO_H__
diff --git a/gralloc/gr_allocator.cpp b/gralloc/gr_allocator.cpp
new file mode 100644
index 0000000..a807319
--- /dev/null
+++ b/gralloc/gr_allocator.cpp
@@ -0,0 +1,258 @@
+/*
+ * Copyright (c) 2011-2020, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#include <log/log.h>
+#include <cutils/properties.h>
+#include <algorithm>
+#include <vector>
+
+#include "gr_allocator.h"
+#include "gr_utils.h"
+#include "gralloc_priv.h"
+
+#include "qd_utils.h"
+
+#ifndef ION_FLAG_CP_PIXEL
+#define ION_FLAG_CP_PIXEL 0
+#endif
+
+#ifndef ION_FLAG_ALLOW_NON_CONTIG
+#define ION_FLAG_ALLOW_NON_CONTIG 0
+#endif
+
+#ifndef ION_FLAG_CP_CAMERA_PREVIEW
+#define ION_FLAG_CP_CAMERA_PREVIEW 0
+#endif
+
+#ifndef ION_SECURE
+#define ION_SECURE ION_FLAG_SECURE
+#endif
+
+#ifndef ION_FLAG_CP_CDSP
+#define ION_FLAG_CP_CDSP 0
+#endif
+
+#ifdef SLAVE_SIDE_CP
+#define CP_HEAP_ID ION_CP_MM_HEAP_ID
+#define SD_HEAP_ID CP_HEAP_ID
+#define ION_CP_FLAGS (ION_SECURE | ION_FLAG_ALLOW_NON_CONTIG)
+#define ION_SD_FLAGS ION_SECURE
+#define ION_SC_FLAGS ION_SECURE
+#define ION_SC_PREVIEW_FLAGS ION_SECURE
+#else // MASTER_SIDE_CP
+#ifdef HYPERVISOR
+#define CP_HEAP_ID ION_SECURE_DISPLAY_HEAP_ID
+#else
+#define CP_HEAP_ID ION_SECURE_HEAP_ID
+#endif
+#define SD_HEAP_ID ION_SECURE_DISPLAY_HEAP_ID
+#define ION_CP_FLAGS (ION_SECURE | ION_FLAG_CP_PIXEL)
+#define ION_SD_FLAGS (ION_SECURE | ION_FLAG_CP_SEC_DISPLAY)
+#define ION_SC_FLAGS (ION_SECURE | ION_FLAG_CP_CAMERA)
+#define ION_SC_PREVIEW_FLAGS (ION_SECURE | ION_FLAG_CP_CAMERA_PREVIEW)
+#endif
+
+using std::shared_ptr;
+using std::vector;
+
+namespace gralloc {
+
+static BufferInfo GetBufferInfo(const BufferDescriptor &descriptor) {
+ return BufferInfo(descriptor.GetWidth(), descriptor.GetHeight(), descriptor.GetFormat(),
+ descriptor.GetUsage());
+}
+
+Allocator::Allocator() : ion_allocator_(nullptr) {}
+
+bool Allocator::Init() {
+ ion_allocator_ = new IonAlloc();
+
+ if (!ion_allocator_->Init()) {
+ return false;
+ }
+
+ return true;
+}
+
+Allocator::~Allocator() {
+ if (ion_allocator_) {
+ delete ion_allocator_;
+ }
+}
+
+void Allocator::SetProperties(gralloc::GrallocProperties props) {
+ use_system_heap_for_sensors_ = props.use_system_heap_for_sensors;
+}
+
+int Allocator::AllocateMem(AllocData *alloc_data, uint64_t usage, int format) {
+ int ret;
+ alloc_data->uncached = UseUncached(format, usage);
+
+ // After this point we should have the right heap set, there is no fallback
+ GetIonHeapInfo(usage, &alloc_data->heap_id, &alloc_data->alloc_type, &alloc_data->flags);
+
+ ret = ion_allocator_->AllocBuffer(alloc_data);
+ if (ret >= 0) {
+ alloc_data->alloc_type |= private_handle_t::PRIV_FLAGS_USES_ION;
+ } else {
+ ALOGE("%s: Failed to allocate buffer - heap: 0x%x flags: 0x%x", __FUNCTION__,
+ alloc_data->heap_id, alloc_data->flags);
+ }
+
+ return ret;
+}
+
+int Allocator::MapBuffer(void **base, unsigned int size, unsigned int offset, int fd) {
+ if (ion_allocator_) {
+ return ion_allocator_->MapBuffer(base, size, offset, fd);
+ }
+
+ return -EINVAL;
+}
+
+int Allocator::ImportBuffer(int fd) {
+ if (ion_allocator_) {
+ return ion_allocator_->ImportBuffer(fd);
+ }
+ return -EINVAL;
+}
+
+int Allocator::FreeBuffer(void *base, unsigned int size, unsigned int offset, int fd, int handle) {
+ if (ion_allocator_) {
+ return ion_allocator_->FreeBuffer(base, size, offset, fd, handle);
+ }
+
+ return -EINVAL;
+}
+
+int Allocator::CleanBuffer(void *base, unsigned int size, unsigned int offset, int handle, int op,
+ int fd) {
+ if (ion_allocator_) {
+ return ion_allocator_->CleanBuffer(base, size, offset, handle, op, fd);
+ }
+
+ return -EINVAL;
+}
+
+bool Allocator::CheckForBufferSharing(uint32_t num_descriptors,
+ const vector<shared_ptr<BufferDescriptor>> &descriptors,
+ ssize_t *max_index) {
+ unsigned int cur_heap_id = 0, prev_heap_id = 0;
+ unsigned int cur_alloc_type = 0, prev_alloc_type = 0;
+ unsigned int cur_ion_flags = 0, prev_ion_flags = 0;
+ bool cur_uncached = false, prev_uncached = false;
+ unsigned int alignedw, alignedh;
+ unsigned int max_size = 0;
+
+ *max_index = -1;
+ for (uint32_t i = 0; i < num_descriptors; i++) {
+ // Check Cached vs non-cached and all the ION flags
+ cur_uncached = UseUncached(descriptors[i]->GetFormat(), descriptors[i]->GetUsage());
+ GetIonHeapInfo(descriptors[i]->GetUsage(), &cur_heap_id, &cur_alloc_type, &cur_ion_flags);
+
+ if (i > 0 && (cur_heap_id != prev_heap_id || cur_alloc_type != prev_alloc_type ||
+ cur_ion_flags != prev_ion_flags)) {
+ return false;
+ }
+
+ // For same format type, find the descriptor with bigger size
+ GetAlignedWidthAndHeight(GetBufferInfo(*descriptors[i]), &alignedw, &alignedh);
+ unsigned int size = GetSize(GetBufferInfo(*descriptors[i]), alignedw, alignedh);
+ if (max_size < size) {
+ *max_index = INT(i);
+ max_size = size;
+ }
+
+ prev_heap_id = cur_heap_id;
+ prev_uncached = cur_uncached;
+ prev_ion_flags = cur_ion_flags;
+ prev_alloc_type = cur_alloc_type;
+ }
+
+ return true;
+}
+
+void Allocator::GetIonHeapInfo(uint64_t usage, unsigned int *ion_heap_id, unsigned int *alloc_type,
+ unsigned int *ion_flags) {
+ unsigned int heap_id = 0;
+ unsigned int type = 0;
+ uint32_t flags = 0;
+ if (usage & GRALLOC_USAGE_PROTECTED) {
+ if (usage & GRALLOC_USAGE_PRIVATE_SECURE_DISPLAY) {
+ heap_id = ION_HEAP(SD_HEAP_ID);
+ /*
+ * There is currently no flag in ION for Secure Display
+ * VM. Please add it to the define once available.
+ */
+ flags |= UINT(ION_SD_FLAGS);
+ } else if (usage & BufferUsage::CAMERA_OUTPUT) {
+ heap_id = ION_HEAP(SD_HEAP_ID);
+ if (usage & GRALLOC_USAGE_PRIVATE_CDSP) {
+ flags |= UINT(ION_SECURE | ION_FLAG_CP_CDSP);
+ }
+ if (usage & BufferUsage::COMPOSER_OVERLAY) {
+ flags |= UINT(ION_SC_PREVIEW_FLAGS);
+ } else {
+ flags |= UINT(ION_SC_FLAGS);
+ }
+ } else if (usage & GRALLOC_USAGE_PRIVATE_CDSP) {
+ heap_id = ION_HEAP(ION_SECURE_CARVEOUT_HEAP_ID);
+ flags |= UINT(ION_SECURE | ION_FLAG_CP_CDSP);
+ } else {
+ heap_id = ION_HEAP(CP_HEAP_ID);
+ flags |= UINT(ION_CP_FLAGS);
+ }
+ }
+
+ if (usage & BufferUsage::SENSOR_DIRECT_DATA) {
+ if (use_system_heap_for_sensors_) {
+ ALOGI("gralloc::sns_direct_data with system_heap");
+ heap_id |= ION_HEAP(ION_SYSTEM_HEAP_ID);
+ } else {
+ ALOGI("gralloc::sns_direct_data with adsp_heap");
+ heap_id |= ION_HEAP(ION_ADSP_HEAP_ID);
+ }
+ }
+
+ if (flags & UINT(ION_SECURE)) {
+ type |= private_handle_t::PRIV_FLAGS_SECURE_BUFFER;
+ }
+
+ // if no ion heap flags are set, default to system heap
+ if (!heap_id) {
+ heap_id = ION_HEAP(ION_SYSTEM_HEAP_ID);
+ }
+
+ *alloc_type = type;
+ *ion_flags = flags;
+ *ion_heap_id = heap_id;
+
+ return;
+}
+} // namespace gralloc
diff --git a/gralloc/gr_allocator.h b/gralloc/gr_allocator.h
new file mode 100644
index 0000000..8a9ba64
--- /dev/null
+++ b/gralloc/gr_allocator.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2011-2018, 2020, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __GR_ALLOCATOR_H__
+#define __GR_ALLOCATOR_H__
+
+#include <vector>
+
+#include "gr_buf_descriptor.h"
+#include "gr_ion_alloc.h"
+#include "gr_utils.h"
+#include "gralloc_priv.h"
+
+namespace gralloc {
+
+class Allocator {
+ public:
+ Allocator();
+ ~Allocator();
+ bool Init();
+ void SetProperties(gralloc::GrallocProperties props);
+ int MapBuffer(void **base, unsigned int size, unsigned int offset, int fd);
+ int ImportBuffer(int fd);
+ int FreeBuffer(void *base, unsigned int size, unsigned int offset, int fd, int handle);
+ int CleanBuffer(void *base, unsigned int size, unsigned int offset, int handle, int op, int fd);
+ int AllocateMem(AllocData *data, uint64_t usage, int format);
+ // @return : index of the descriptor with maximum buffer size req
+ bool CheckForBufferSharing(uint32_t num_descriptors,
+ const std::vector<std::shared_ptr<BufferDescriptor>> &descriptors,
+ ssize_t *max_index);
+ private:
+ void GetIonHeapInfo(uint64_t usage, unsigned int *ion_heap_id, unsigned int *alloc_type,
+ unsigned int *ion_flags);
+
+ IonAlloc *ion_allocator_ = NULL;
+
+ bool use_system_heap_for_sensors_ = true;
+};
+
+} // namespace gralloc
+
+#endif // __GR_ALLOCATOR_H__
diff --git a/gralloc/gr_buf_descriptor.h b/gralloc/gr_buf_descriptor.h
new file mode 100644
index 0000000..bd50259
--- /dev/null
+++ b/gralloc/gr_buf_descriptor.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2016-2018, 2020, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __GR_BUF_DESCRIPTOR_H__
+#define __GR_BUF_DESCRIPTOR_H__
+
+#include <atomic>
+#include <string>
+
+#include "gr_utils.h"
+
+namespace gralloc {
+using android::hardware::hidl_vec;
+const uint32_t kBufferDescriptorSize = 7;
+const uint32_t kBufferDescriptorSizeV4 = 42;
+const uint32_t kMagicVersion = 0x76312E30; // v1.0
+
+class BufferDescriptor {
+ public:
+ BufferDescriptor() {}
+ explicit BufferDescriptor(uint64_t id) : id_(id) {}
+ void SetUsage(uint64_t usage) { usage_ |= usage; }
+
+ void SetDimensions(int w, int h) {
+ width_ = w;
+ height_ = h;
+ }
+
+ void SetColorFormat(int format) { format_ = format; }
+
+ void SetLayerCount(uint32_t layer_count) { layer_count_ = layer_count; }
+
+ void SetName(std::string name) { name_ = name; }
+
+ void SetReservedSize(uint64_t reserved_size) { reserved_size_ = reserved_size; }
+
+ uint64_t GetUsage() const { return usage_; }
+
+ int GetWidth() const { return width_; }
+
+ int GetHeight() const { return height_; }
+
+ int GetFormat() const { return format_; }
+
+ uint32_t GetLayerCount() const { return layer_count_; }
+
+ uint64_t GetId() const { return id_; }
+
+ uint64_t GetReservedSize() const { return reserved_size_; }
+
+ std::string GetName() const { return name_; }
+
+ private:
+ std::string name_ = "";
+ int width_ = -1;
+ int height_ = -1;
+ int format_ = -1;
+ uint32_t layer_count_ = 1;
+ uint64_t usage_ = 0;
+ const uint64_t id_ = 0;
+ uint64_t reserved_size_ = 0;
+};
+}; // namespace gralloc
+#endif // __GR_BUF_DESCRIPTOR_H__
diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp
new file mode 100644
index 0000000..825d20b
--- /dev/null
+++ b/gralloc/gr_buf_mgr.cpp
@@ -0,0 +1,1620 @@
+/*
+ * Copyright (c) 2011-2018, 2020 The Linux Foundation. All rights reserved.
+ * Not a Contribution
+ *
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define DEBUG 0
+
+#include "gr_buf_mgr.h"
+
+#include <QtiGralloc.h>
+#include <QtiGrallocPriv.h>
+#include <gralloctypes/Gralloc4.h>
+#include <sys/mman.h>
+
+#include <iomanip>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "gr_adreno_info.h"
+#include "gr_buf_descriptor.h"
+#include "gr_priv_handle.h"
+#include "gr_utils.h"
+#include "qdMetaData.h"
+#include "qd_utils.h"
+
+namespace gralloc {
+
+using aidl::android::hardware::graphics::common::BlendMode;
+using aidl::android::hardware::graphics::common::Cta861_3;
+using aidl::android::hardware::graphics::common::Dataspace;
+using aidl::android::hardware::graphics::common::PlaneLayout;
+using aidl::android::hardware::graphics::common::PlaneLayoutComponent;
+using aidl::android::hardware::graphics::common::Rect;
+using aidl::android::hardware::graphics::common::Smpte2086;
+using aidl::android::hardware::graphics::common::StandardMetadataType;
+using aidl::android::hardware::graphics::common::XyColor;
+using ::android::hardware::graphics::common::V1_2::PixelFormat;
+
+static BufferInfo GetBufferInfo(const BufferDescriptor &descriptor) {
+ return BufferInfo(descriptor.GetWidth(), descriptor.GetHeight(), descriptor.GetFormat(),
+ descriptor.GetUsage());
+}
+
+static uint64_t getMetaDataSize(uint64_t reserved_region_size) {
+// Only include the reserved region size when using Metadata_t V2
+#ifndef METADATA_V2
+ reserved_region_size = 0;
+#endif
+ return static_cast<uint64_t>(ROUND_UP_PAGESIZE(sizeof(MetaData_t) +
+ static_cast<uint32_t>(reserved_region_size)));
+}
+
+static void unmapAndReset(private_handle_t *handle, uint64_t reserved_region_size = 0) {
+ if (private_handle_t::validate(handle) == 0 && handle->base_metadata) {
+ munmap(reinterpret_cast<void *>(handle->base_metadata),
+ static_cast<uint32_t>(getMetaDataSize(reserved_region_size)));
+ handle->base_metadata = 0;
+ }
+}
+
+static int validateAndMap(private_handle_t *handle, uint64_t reserved_region_size = 0) {
+ if (private_handle_t::validate(handle)) {
+ ALOGE("%s: Private handle is invalid - handle:%p", __func__, handle);
+ return -1;
+ }
+ if (handle->fd_metadata < 0) {
+ // Silently return, metadata cannot be used
+ return -1;
+ }
+
+ if (!handle->base_metadata) {
+ uint64_t size = getMetaDataSize(reserved_region_size);
+ void *base = mmap(NULL, static_cast<uint32_t>(size), PROT_READ | PROT_WRITE,
+ MAP_SHARED, handle->fd_metadata, 0);
+ if (base == reinterpret_cast<void *>(MAP_FAILED)) {
+ ALOGE("%s: metadata mmap failed - handle:%p fd: %d err: %s", __func__, handle,
+ handle->fd_metadata, strerror(errno));
+ return -1;
+ }
+ handle->base_metadata = (uintptr_t)base;
+#ifdef METADATA_V2
+ // The allocator process gets the reserved region size from the BufferDescriptor.
+ // When importing to another process, the reserved size is unknown until mapping the metadata,
+ // hence the re-mapping below
+ auto metadata = reinterpret_cast<MetaData_t *>(handle->base_metadata);
+ if (reserved_region_size == 0 && metadata->reservedSize) {
+ size = getMetaDataSize(metadata->reservedSize);
+ unmapAndReset(handle);
+ void *new_base = mmap(NULL, static_cast<uint32_t>(size), PROT_READ | PROT_WRITE, MAP_SHARED, handle->fd_metadata, 0);
+ if (new_base == reinterpret_cast<void *>(MAP_FAILED)) {
+ ALOGE("%s: metadata mmap failed - handle:%p fd: %d err: %s", __func__, handle,
+ handle->fd_metadata, strerror(errno));
+ return -1;
+ }
+ handle->base_metadata = (uintptr_t)new_base;
+ }
+#endif
+ }
+ return 0;
+}
+
+static Error dataspaceToColorMetadata(Dataspace dataspace, ColorMetaData *color_metadata) {
+ ColorMetaData out;
+ uint32_t primaries = (uint32_t)dataspace & (uint32_t)Dataspace::STANDARD_MASK;
+ uint32_t transfer = (uint32_t)dataspace & (uint32_t)Dataspace::TRANSFER_MASK;
+ uint32_t range = (uint32_t)dataspace & (uint32_t)Dataspace::RANGE_MASK;
+
+ switch (primaries) {
+ case (uint32_t)Dataspace::STANDARD_BT709:
+ out.colorPrimaries = ColorPrimaries_BT709_5;
+ break;
+ // TODO(tbalacha): verify this is equivalent
+ case (uint32_t)Dataspace::STANDARD_BT470M:
+ out.colorPrimaries = ColorPrimaries_BT470_6M;
+ break;
+ case (uint32_t)Dataspace::STANDARD_BT601_625:
+ case (uint32_t)Dataspace::STANDARD_BT601_625_UNADJUSTED:
+ out.colorPrimaries = ColorPrimaries_BT601_6_625;
+ break;
+ case (uint32_t)Dataspace::STANDARD_BT601_525:
+ case (uint32_t)Dataspace::STANDARD_BT601_525_UNADJUSTED:
+ out.colorPrimaries = ColorPrimaries_BT601_6_525;
+ break;
+ case (uint32_t)Dataspace::STANDARD_FILM:
+ out.colorPrimaries = ColorPrimaries_GenericFilm;
+ break;
+ case (uint32_t)Dataspace::STANDARD_BT2020:
+ out.colorPrimaries = ColorPrimaries_BT2020;
+ break;
+ case (uint32_t)Dataspace::STANDARD_ADOBE_RGB:
+ out.colorPrimaries = ColorPrimaries_AdobeRGB;
+ break;
+ case (uint32_t)Dataspace::STANDARD_DCI_P3:
+ out.colorPrimaries = ColorPrimaries_DCIP3;
+ break;
+ default:
+ return Error::UNSUPPORTED;
+ /*
+ ColorPrimaries_SMPTE_240M;
+ ColorPrimaries_SMPTE_ST428;
+ ColorPrimaries_EBU3213;
+ */
+ }
+
+ switch (transfer) {
+ case (uint32_t)Dataspace::TRANSFER_SRGB:
+ out.transfer = Transfer_sRGB;
+ break;
+ case (uint32_t)Dataspace::TRANSFER_GAMMA2_2:
+ out.transfer = Transfer_Gamma2_2;
+ break;
+ case (uint32_t)Dataspace::TRANSFER_GAMMA2_8:
+ out.transfer = Transfer_Gamma2_8;
+ break;
+ case (uint32_t)Dataspace::TRANSFER_SMPTE_170M:
+ out.transfer = Transfer_SMPTE_170M;
+ break;
+ case (uint32_t)Dataspace::TRANSFER_LINEAR:
+ out.transfer = Transfer_Linear;
+ break;
+ case (uint32_t)Dataspace::TRANSFER_HLG:
+ out.transfer = Transfer_HLG;
+ break;
+ default:
+ return Error::UNSUPPORTED;
+ /*
+ Transfer_SMPTE_240M
+ Transfer_Log
+ Transfer_Log_Sqrt
+ Transfer_XvYCC
+ Transfer_BT1361
+ Transfer_sYCC
+ Transfer_BT2020_2_1
+ Transfer_BT2020_2_2
+ Transfer_SMPTE_ST2084
+ Transfer_ST_428
+ */
+ }
+
+ switch (range) {
+ case (uint32_t)Dataspace::RANGE_FULL:
+ out.range = Range_Full;
+ break;
+ case (uint32_t)Dataspace::RANGE_LIMITED:
+ out.range = Range_Limited;
+ break;
+ case (uint32_t)Dataspace::RANGE_EXTENDED:
+ out.range = Range_Extended;
+ break;
+ default:
+ return Error::UNSUPPORTED;
+ }
+
+ color_metadata->colorPrimaries = out.colorPrimaries;
+ color_metadata->transfer = out.transfer;
+ color_metadata->range = out.range;
+ return Error::NONE;
+}
+static Error colorMetadataToDataspace(ColorMetaData color_metadata, Dataspace *dataspace) {
+ Dataspace primaries, transfer, range = Dataspace::UNKNOWN;
+
+ switch (color_metadata.colorPrimaries) {
+ case ColorPrimaries_BT709_5:
+ primaries = Dataspace::STANDARD_BT709;
+ break;
+ // TODO(tbalacha): verify this is equivalent
+ case ColorPrimaries_BT470_6M:
+ primaries = Dataspace::STANDARD_BT470M;
+ break;
+ case ColorPrimaries_BT601_6_625:
+ primaries = Dataspace::STANDARD_BT601_625;
+ break;
+ case ColorPrimaries_BT601_6_525:
+ primaries = Dataspace::STANDARD_BT601_525;
+ break;
+ case ColorPrimaries_GenericFilm:
+ primaries = Dataspace::STANDARD_FILM;
+ break;
+ case ColorPrimaries_BT2020:
+ primaries = Dataspace::STANDARD_BT2020;
+ break;
+ case ColorPrimaries_AdobeRGB:
+ primaries = Dataspace::STANDARD_ADOBE_RGB;
+ break;
+ case ColorPrimaries_DCIP3:
+ primaries = Dataspace::STANDARD_DCI_P3;
+ break;
+ default:
+ return Error::UNSUPPORTED;
+ /*
+ ColorPrimaries_SMPTE_240M;
+ ColorPrimaries_SMPTE_ST428;
+ ColorPrimaries_EBU3213;
+ */
+ }
+
+ switch (color_metadata.transfer) {
+ case Transfer_sRGB:
+ transfer = Dataspace::TRANSFER_SRGB;
+ break;
+ case Transfer_Gamma2_2:
+ transfer = Dataspace::TRANSFER_GAMMA2_2;
+ break;
+ case Transfer_Gamma2_8:
+ transfer = Dataspace::TRANSFER_GAMMA2_8;
+ break;
+ case Transfer_SMPTE_170M:
+ transfer = Dataspace::TRANSFER_SMPTE_170M;
+ break;
+ case Transfer_Linear:
+ transfer = Dataspace::TRANSFER_LINEAR;
+ break;
+ case Transfer_HLG:
+ transfer = Dataspace::TRANSFER_HLG;
+ break;
+ default:
+ return Error::UNSUPPORTED;
+ /*
+ Transfer_SMPTE_240M
+ Transfer_Log
+ Transfer_Log_Sqrt
+ Transfer_XvYCC
+ Transfer_BT1361
+ Transfer_sYCC
+ Transfer_BT2020_2_1
+ Transfer_BT2020_2_2
+ Transfer_SMPTE_ST2084
+ Transfer_ST_428
+ */
+ }
+
+ switch (color_metadata.range) {
+ case Range_Full:
+ range = Dataspace::RANGE_FULL;
+ break;
+ case Range_Limited:
+ range = Dataspace::RANGE_LIMITED;
+ break;
+ case Range_Extended:
+ range = Dataspace::RANGE_EXTENDED;
+ break;
+ default:
+ return Error::UNSUPPORTED;
+ }
+
+ *dataspace = (Dataspace)((uint32_t)primaries | (uint32_t)transfer | (uint32_t)range);
+ return Error::NONE;
+}
+
+static Error getComponentSizeAndOffset(int32_t format, PlaneLayoutComponent &comp) {
+ switch (format) {
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBA_8888):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBX_8888):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGB_888):
+ comp.sizeInBits = 8;
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.offsetInBits = 0;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.offsetInBits = 8;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.offsetInBits = 16;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value &&
+ format != HAL_PIXEL_FORMAT_RGB_888) {
+ comp.offsetInBits = 24;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGB_565):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.offsetInBits = 0;
+ comp.sizeInBits = 5;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.offsetInBits = 5;
+ comp.sizeInBits = 6;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.offsetInBits = 11;
+ comp.sizeInBits = 5;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_BGR_565):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.offsetInBits = 11;
+ comp.sizeInBits = 5;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.offsetInBits = 5;
+ comp.sizeInBits = 6;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.offsetInBits = 0;
+ comp.sizeInBits = 5;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_BGRA_8888):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_BGRX_8888):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_BGR_888):
+ comp.sizeInBits = 8;
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.offsetInBits = 16;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.offsetInBits = 8;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.offsetInBits = 0;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value &&
+ format != HAL_PIXEL_FORMAT_BGR_888) {
+ comp.offsetInBits = 24;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBA_5551):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.sizeInBits = 5;
+ comp.offsetInBits = 0;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.sizeInBits = 5;
+ comp.offsetInBits = 5;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.sizeInBits = 5;
+ comp.offsetInBits = 10;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
+ comp.sizeInBits = 1;
+ comp.offsetInBits = 15;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBA_4444):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.sizeInBits = 4;
+ comp.offsetInBits = 0;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.sizeInBits = 4;
+ comp.offsetInBits = 4;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.sizeInBits = 4;
+ comp.offsetInBits = 8;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
+ comp.sizeInBits = 4;
+ comp.offsetInBits = 12;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_R_8):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RG_88):
+ comp.sizeInBits = 8;
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.offsetInBits = 0;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value &&
+ format != HAL_PIXEL_FORMAT_R_8) {
+ comp.offsetInBits = 8;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBA_1010102):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBX_1010102):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 0;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 10;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 20;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
+ comp.sizeInBits = 2;
+ comp.offsetInBits = 30;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_ARGB_2101010):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_XRGB_2101010):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 2;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 12;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 22;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
+ comp.sizeInBits = 2;
+ comp.offsetInBits = 0;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_BGRA_1010102):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_BGRX_1010102):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 20;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 10;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 0;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
+ comp.sizeInBits = 2;
+ comp.offsetInBits = 30;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_ABGR_2101010):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_XBGR_2101010):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 22;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 12;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.sizeInBits = 10;
+ comp.offsetInBits = 2;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
+ comp.sizeInBits = 2;
+ comp.offsetInBits = 0;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RGBA_FP16):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_R.value) {
+ comp.sizeInBits = 16;
+ comp.offsetInBits = 0;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_G.value) {
+ comp.sizeInBits = 16;
+ comp.offsetInBits = 16;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_B.value) {
+ comp.sizeInBits = 16;
+ comp.offsetInBits = 32;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_A.value) {
+ comp.sizeInBits = 16;
+ comp.offsetInBits = 48;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCbCr_420_SP):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCbCr_422_SP):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_NV12_ENCODEABLE):
+ comp.sizeInBits = 8;
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_Y.value ||
+ comp.type.value == android::gralloc4::PlaneLayoutComponentType_CB.value) {
+ comp.offsetInBits = 0;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_CR.value) {
+ comp.offsetInBits = 8;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCrCb_420_SP):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCrCb_422_SP):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_NV21_ZSL):
+ comp.sizeInBits = 8;
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_Y.value ||
+ comp.type.value == android::gralloc4::PlaneLayoutComponentType_CR.value) {
+ comp.offsetInBits = 0;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_CB.value) {
+ comp.offsetInBits = 8;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_Y16):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_Y.value) {
+ comp.offsetInBits = 0;
+ comp.sizeInBits = 16;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_YV12):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_Y.value ||
+ comp.type.value == android::gralloc4::PlaneLayoutComponentType_CB.value ||
+ comp.type.value == android::gralloc4::PlaneLayoutComponentType_CR.value) {
+ comp.offsetInBits = 0;
+ comp.sizeInBits = 8;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_Y8):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_Y.value) {
+ comp.offsetInBits = 0;
+ comp.sizeInBits = 8;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCbCr_420_P010):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_Y.value ||
+ comp.type.value == android::gralloc4::PlaneLayoutComponentType_CB.value ||
+ comp.type.value == android::gralloc4::PlaneLayoutComponentType_CR.value) {
+ comp.offsetInBits = 0;
+ comp.sizeInBits = 10;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RAW16):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_RAW.value) {
+ comp.offsetInBits = 0;
+ comp.sizeInBits = 16;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RAW12):
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RAW10):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_RAW.value) {
+ comp.offsetInBits = 0;
+ comp.sizeInBits = -1;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_RAW8):
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_RAW.value) {
+ comp.offsetInBits = 0;
+ comp.sizeInBits = 8;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ default:
+ ALOGI_IF(DEBUG, "Offset and size in bits unknown for format %d", format);
+ return Error::UNSUPPORTED;
+ }
+ return Error::NONE;
+}
+
+static void grallocToStandardPlaneLayoutComponentType(uint32_t in,
+ std::vector<PlaneLayoutComponent> *components,
+ int32_t format) {
+ PlaneLayoutComponent comp;
+ comp.offsetInBits = -1;
+ comp.sizeInBits = -1;
+
+ if (in & PLANE_COMPONENT_Y) {
+ comp.type = android::gralloc4::PlaneLayoutComponentType_Y;
+ if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+ components->push_back(comp);
+ }
+
+ if (in & PLANE_COMPONENT_Cb) {
+ comp.type = android::gralloc4::PlaneLayoutComponentType_CB;
+ if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+ components->push_back(comp);
+ }
+
+ if (in & PLANE_COMPONENT_Cr) {
+ comp.type = android::gralloc4::PlaneLayoutComponentType_CR;
+ if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+ components->push_back(comp);
+ }
+
+ if (in & PLANE_COMPONENT_R) {
+ comp.type = android::gralloc4::PlaneLayoutComponentType_R;
+ if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+ components->push_back(comp);
+ }
+
+ if (in & PLANE_COMPONENT_G) {
+ comp.type = android::gralloc4::PlaneLayoutComponentType_G;
+ if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+ components->push_back(comp);
+ }
+
+ if (in & PLANE_COMPONENT_B) {
+ comp.type = android::gralloc4::PlaneLayoutComponentType_B;
+ if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+ components->push_back(comp);
+ }
+
+ if (in & PLANE_COMPONENT_A) {
+ comp.type = android::gralloc4::PlaneLayoutComponentType_A;
+ if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+ components->push_back(comp);
+ }
+
+ if (in & PLANE_COMPONENT_RAW) {
+ comp.type = android::gralloc4::PlaneLayoutComponentType_RAW;
+ if (getComponentSizeAndOffset(format, comp) == Error::NONE)
+ components->push_back(comp);
+ }
+
+ if (in & PLANE_COMPONENT_META) {
+ comp.type = qtigralloc::PlaneLayoutComponentType_Meta;
+ components->push_back(comp);
+ }
+}
+
+static Error getFormatLayout(private_handle_t *handle, std::vector<PlaneLayout> *out) {
+ std::vector<PlaneLayout> plane_info;
+ int plane_count = 0;
+ BufferInfo info(handle->unaligned_width, handle->unaligned_height, handle->format, handle->usage);
+
+ gralloc::PlaneLayoutInfo plane_layout[8] = {};
+ if (gralloc::IsYuvFormat(handle->format)) {
+ gralloc::GetYUVPlaneInfo(info, handle->format, handle->width, handle->height, handle->flags,
+ &plane_count, plane_layout);
+ } else if (gralloc::IsUncompressedRGBFormat(handle->format) ||
+ gralloc::IsCompressedRGBFormat(handle->format)) {
+ gralloc::GetRGBPlaneInfo(info, handle->format, handle->width, handle->height, handle->flags,
+ &plane_count, plane_layout);
+ } else {
+ return Error::BAD_BUFFER;
+ }
+ plane_info.resize(plane_count);
+ for (int i = 0; i < plane_count; i++) {
+ std::vector<PlaneLayoutComponent> components;
+ grallocToStandardPlaneLayoutComponentType(plane_layout[i].component, &plane_info[i].components,
+ handle->format);
+ plane_info[i].horizontalSubsampling = (1ull << plane_layout[i].h_subsampling);
+ plane_info[i].verticalSubsampling = (1ull << plane_layout[i].v_subsampling);
+ plane_info[i].offsetInBytes = static_cast<int64_t>(plane_layout[i].offset);
+ plane_info[i].sampleIncrementInBits = static_cast<int64_t>(plane_layout[i].step * 8);
+ plane_info[i].strideInBytes = static_cast<int64_t>(plane_layout[i].stride_bytes);
+ plane_info[i].totalSizeInBytes = static_cast<int64_t>(plane_layout[i].size);
+ plane_info[i].widthInSamples = handle->unaligned_width >> plane_layout[i].h_subsampling;
+ plane_info[i].heightInSamples = handle->unaligned_height >> plane_layout[i].v_subsampling;
+ }
+ *out = plane_info;
+ return Error::NONE;
+}
+
+BufferManager::BufferManager() : next_id_(0) {
+ handles_map_.clear();
+ allocator_ = new Allocator();
+ allocator_->Init();
+}
+
+BufferManager *BufferManager::GetInstance() {
+ static BufferManager *instance = new BufferManager();
+ return instance;
+}
+
+BufferManager::~BufferManager() {
+ if (allocator_) {
+ delete allocator_;
+ }
+}
+
+void BufferManager::SetGrallocDebugProperties(gralloc::GrallocProperties props) {
+ allocator_->SetProperties(props);
+ AdrenoMemInfo::GetInstance()->AdrenoSetProperties(props);
+}
+
+Error BufferManager::FreeBuffer(std::shared_ptr<Buffer> buf) {
+ auto hnd = buf->handle;
+ ALOGD_IF(DEBUG, "FreeBuffer handle:%p", hnd);
+
+ if (private_handle_t::validate(hnd) != 0) {
+ ALOGE("FreeBuffer: Invalid handle: %p", hnd);
+ return Error::BAD_BUFFER;
+ }
+
+ auto meta_size = getMetaDataSize(buf->reserved_size);
+
+ if (allocator_->FreeBuffer(reinterpret_cast<void *>(hnd->base), hnd->size, hnd->offset, hnd->fd,
+ buf->ion_handle_main) != 0) {
+ return Error::BAD_BUFFER;
+ }
+
+ if (allocator_->FreeBuffer(reinterpret_cast<void *>(hnd->base_metadata),
+ static_cast<uint32_t>(meta_size), hnd->offset_metadata,
+ hnd->fd_metadata, buf->ion_handle_meta) != 0) {
+ return Error::BAD_BUFFER;
+ }
+
+ private_handle_t *handle = const_cast<private_handle_t *>(hnd);
+ handle->fd = -1;
+ handle->fd_metadata = -1;
+ if (!(handle->flags & private_handle_t::PRIV_FLAGS_CLIENT_ALLOCATED)) {
+ delete handle;
+ }
+ return Error::NONE;
+}
+
+Error BufferManager::ValidateBufferSize(private_handle_t const *hnd, BufferInfo info) {
+ unsigned int size, alignedw, alignedh;
+ info.format = GetImplDefinedFormat(info.usage, info.format);
+ int ret = GetBufferSizeAndDimensions(info, &size, &alignedw, &alignedh);
+ if (ret < 0) {
+ return Error::BAD_BUFFER;
+ }
+ auto ion_fd_size = static_cast<unsigned int>(lseek(hnd->fd, 0, SEEK_END));
+ if (size != ion_fd_size) {
+ return Error::BAD_VALUE;
+ }
+ return Error::NONE;
+}
+
+void BufferManager::RegisterHandleLocked(const private_handle_t *hnd, int ion_handle,
+ int ion_handle_meta) {
+ auto buffer = std::make_shared<Buffer>(hnd, ion_handle, ion_handle_meta);
+
+ if (hnd->base_metadata) {
+ auto metadata = reinterpret_cast<MetaData_t *>(hnd->base_metadata);
+#ifdef METADATA_V2
+ buffer->reserved_size = metadata->reservedSize;
+ if (buffer->reserved_size > 0) {
+ buffer->reserved_region_ptr =
+ reinterpret_cast<void *>(hnd->base_metadata + sizeof(MetaData_t));
+ } else {
+ buffer->reserved_region_ptr = nullptr;
+ }
+#else
+ buffer->reserved_region_ptr = reinterpret_cast<void *>(&(metadata->reservedRegion.data));
+ buffer->reserved_size = metadata->reservedRegion.size;
+#endif
+ }
+
+ handles_map_.emplace(std::make_pair(hnd, buffer));
+}
+
+Error BufferManager::ImportHandleLocked(private_handle_t *hnd) {
+ if (private_handle_t::validate(hnd) != 0) {
+ ALOGE("ImportHandleLocked: Invalid handle: %p", hnd);
+ return Error::BAD_BUFFER;
+ }
+ ALOGD_IF(DEBUG, "Importing handle:%p id: %" PRIu64, hnd, hnd->id);
+ int ion_handle = allocator_->ImportBuffer(hnd->fd);
+ if (ion_handle < 0) {
+ ALOGE("Failed to import ion buffer: hnd: %p, fd:%d, id:%" PRIu64, hnd, hnd->fd, hnd->id);
+ return Error::BAD_BUFFER;
+ }
+ int ion_handle_meta = allocator_->ImportBuffer(hnd->fd_metadata);
+ if (ion_handle_meta < 0) {
+ ALOGE("Failed to import ion metadata buffer: hnd: %p, fd:%d, id:%" PRIu64, hnd, hnd->fd,
+ hnd->id);
+ return Error::BAD_BUFFER;
+ }
+ // Initialize members that aren't transported
+ hnd->size = static_cast<unsigned int>(lseek(hnd->fd, 0, SEEK_END));
+ hnd->offset = 0;
+ hnd->offset_metadata = 0;
+ hnd->base = 0;
+ hnd->base_metadata = 0;
+ hnd->gpuaddr = 0;
+
+ if (validateAndMap(hnd)) {
+ ALOGE("Failed to map metadata: hnd: %p, fd:%d, id:%" PRIu64, hnd, hnd->fd, hnd->id);
+ return Error::BAD_BUFFER;
+ }
+
+ RegisterHandleLocked(hnd, ion_handle, ion_handle_meta);
+ return Error::NONE;
+}
+
+std::shared_ptr<BufferManager::Buffer> BufferManager::GetBufferFromHandleLocked(
+ const private_handle_t *hnd) {
+ auto it = handles_map_.find(hnd);
+ if (it != handles_map_.end()) {
+ return it->second;
+ } else {
+ return nullptr;
+ }
+}
+
+Error BufferManager::MapBuffer(private_handle_t const *handle) {
+ private_handle_t *hnd = const_cast<private_handle_t *>(handle);
+ ALOGD_IF(DEBUG, "Map buffer handle:%p id: %" PRIu64, hnd, hnd->id);
+
+ hnd->base = 0;
+ if (allocator_->MapBuffer(reinterpret_cast<void **>(&hnd->base), hnd->size, hnd->offset,
+ hnd->fd) != 0) {
+ return Error::BAD_BUFFER;
+ }
+ return Error::NONE;
+}
+
+Error BufferManager::IsBufferImported(const private_handle_t *hnd) {
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ auto buf = GetBufferFromHandleLocked(hnd);
+ if (buf != nullptr) {
+ return Error::NONE;
+ }
+ return Error::BAD_BUFFER;
+}
+
+Error BufferManager::RetainBuffer(private_handle_t const *hnd) {
+ ALOGD_IF(DEBUG, "Retain buffer handle:%p id: %" PRIu64, hnd, hnd->id);
+ auto err = Error::NONE;
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ auto buf = GetBufferFromHandleLocked(hnd);
+ if (buf != nullptr) {
+ buf->IncRef();
+ } else {
+ private_handle_t *handle = const_cast<private_handle_t *>(hnd);
+ err = ImportHandleLocked(handle);
+ }
+ return err;
+}
+
+Error BufferManager::ReleaseBuffer(private_handle_t const *hnd) {
+ ALOGD_IF(DEBUG, "Release buffer handle:%p", hnd);
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ auto buf = GetBufferFromHandleLocked(hnd);
+ if (buf == nullptr) {
+ ALOGE("Could not find handle: %p id: %" PRIu64, hnd, hnd->id);
+ return Error::BAD_BUFFER;
+ } else {
+ if (buf->DecRef()) {
+ handles_map_.erase(hnd);
+ // Unmap, close ion handle and close fd
+ FreeBuffer(buf);
+ }
+ }
+ return Error::NONE;
+}
+
+Error BufferManager::LockBuffer(const private_handle_t *hnd, uint64_t usage) {
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ auto err = Error::NONE;
+ ALOGD_IF(DEBUG, "LockBuffer buffer handle:%p id: %" PRIu64, hnd, hnd->id);
+
+ // If buffer is not meant for CPU return err
+ if (!CpuCanAccess(usage)) {
+ return Error::BAD_VALUE;
+ }
+
+ auto buf = GetBufferFromHandleLocked(hnd);
+ if (buf == nullptr) {
+ return Error::BAD_BUFFER;
+ }
+
+ if (hnd->base == 0) {
+ // we need to map for real
+ err = MapBuffer(hnd);
+ }
+
+ // Invalidate if CPU reads in software and there are non-CPU
+ // writers. No need to do this for the metadata buffer as it is
+ // only read/written in software.
+
+ // todo use handle here
+ if (err == Error::NONE && (hnd->flags & private_handle_t::PRIV_FLAGS_USES_ION) &&
+ (hnd->flags & private_handle_t::PRIV_FLAGS_CACHED)) {
+ if (allocator_->CleanBuffer(reinterpret_cast<void *>(hnd->base), hnd->size, hnd->offset,
+ buf->ion_handle_main, CACHE_INVALIDATE, hnd->fd)) {
+ return Error::BAD_BUFFER;
+ }
+ }
+
+ // Mark the buffer to be flushed after CPU write.
+ if (err == Error::NONE && CpuCanWrite(usage)) {
+ private_handle_t *handle = const_cast<private_handle_t *>(hnd);
+ handle->flags |= private_handle_t::PRIV_FLAGS_NEEDS_FLUSH;
+ }
+
+ return err;
+}
+
+Error BufferManager::FlushBuffer(const private_handle_t *handle) {
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ auto status = Error::NONE;
+
+ private_handle_t *hnd = const_cast<private_handle_t *>(handle);
+ auto buf = GetBufferFromHandleLocked(hnd);
+ if (buf == nullptr) {
+ return Error::BAD_BUFFER;
+ }
+
+ if (allocator_->CleanBuffer(reinterpret_cast<void *>(hnd->base), hnd->size, hnd->offset,
+ buf->ion_handle_main, CACHE_CLEAN, hnd->fd) != 0) {
+ status = Error::BAD_BUFFER;
+ }
+
+ return status;
+}
+
+Error BufferManager::RereadBuffer(const private_handle_t *handle) {
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ auto status = Error::NONE;
+
+ private_handle_t *hnd = const_cast<private_handle_t *>(handle);
+ auto buf = GetBufferFromHandleLocked(hnd);
+ if (buf == nullptr) {
+ return Error::BAD_BUFFER;
+ }
+
+ if (allocator_->CleanBuffer(reinterpret_cast<void *>(hnd->base), hnd->size, hnd->offset,
+ buf->ion_handle_main, CACHE_INVALIDATE, hnd->fd) != 0) {
+ status = Error::BAD_BUFFER;
+ }
+
+ return status;
+}
+
+Error BufferManager::UnlockBuffer(const private_handle_t *handle) {
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ auto status = Error::NONE;
+
+ private_handle_t *hnd = const_cast<private_handle_t *>(handle);
+ auto buf = GetBufferFromHandleLocked(hnd);
+ if (buf == nullptr) {
+ return Error::BAD_BUFFER;
+ }
+
+ if (hnd->flags & private_handle_t::PRIV_FLAGS_NEEDS_FLUSH) {
+ if (allocator_->CleanBuffer(reinterpret_cast<void *>(hnd->base), hnd->size, hnd->offset,
+ buf->ion_handle_main, CACHE_CLEAN, hnd->fd) != 0) {
+ status = Error::BAD_BUFFER;
+ }
+ hnd->flags &= ~private_handle_t::PRIV_FLAGS_NEEDS_FLUSH;
+ } else {
+ if (allocator_->CleanBuffer(reinterpret_cast<void *>(hnd->base), hnd->size, hnd->offset,
+ buf->ion_handle_main, CACHE_READ_DONE, hnd->fd) != 0) {
+ status = Error::BAD_BUFFER;
+ }
+ }
+
+ return status;
+}
+
+Error BufferManager::AllocateBuffer(const BufferDescriptor &descriptor, buffer_handle_t *handle,
+ unsigned int bufferSize, bool testAlloc) {
+ if (!handle)
+ return Error::BAD_BUFFER;
+ std::lock_guard<std::mutex> buffer_lock(buffer_lock_);
+
+ uint64_t usage = descriptor.GetUsage();
+ int format = GetImplDefinedFormat(usage, descriptor.GetFormat());
+ uint32_t layer_count = descriptor.GetLayerCount();
+
+ unsigned int size;
+ unsigned int alignedw, alignedh;
+ int err = 0;
+
+ int buffer_type = GetBufferType(format);
+ BufferInfo info = GetBufferInfo(descriptor);
+ info.format = format;
+ info.layer_count = layer_count;
+
+ GraphicsMetadata graphics_metadata = {};
+ err = GetBufferSizeAndDimensions(info, &size, &alignedw, &alignedh, &graphics_metadata);
+ if (err < 0) {
+ return Error::BAD_DESCRIPTOR;
+ }
+
+ if (testAlloc) {
+ return Error::NONE;
+ }
+
+ size = (bufferSize >= size) ? bufferSize : size;
+ uint64_t flags = 0;
+ auto page_size = UINT(getpagesize());
+ AllocData data;
+ data.align = GetDataAlignment(format, usage);
+ data.size = size;
+ data.handle = (uintptr_t)handle;
+ data.uncached = UseUncached(format, usage);
+
+ // Allocate buffer memory
+ err = allocator_->AllocateMem(&data, usage, format);
+ if (err) {
+ ALOGE("gralloc failed to allocate err=%s format %d size %d WxH %dx%d usage %" PRIu64,
+ strerror(-err), format, size, alignedw, alignedh, usage);
+ return Error::NO_RESOURCES;
+ }
+
+ // Allocate memory for MetaData
+ AllocData e_data;
+ e_data.size = static_cast<unsigned int>(getMetaDataSize(descriptor.GetReservedSize()));
+ e_data.handle = data.handle;
+ e_data.align = page_size;
+
+ err = allocator_->AllocateMem(&e_data, 0, 0);
+ if (err) {
+ ALOGE("gralloc failed to allocate metadata error=%s", strerror(-err));
+ return Error::NO_RESOURCES;
+ }
+
+ flags = GetHandleFlags(format, usage);
+ flags |= data.alloc_type;
+
+ // Create handle
+ private_handle_t *hnd = new private_handle_t(
+ data.fd, e_data.fd, INT(flags), INT(alignedw), INT(alignedh), descriptor.GetWidth(),
+ descriptor.GetHeight(), format, buffer_type, data.size, usage);
+
+ hnd->id = ++next_id_;
+ hnd->base = 0;
+ hnd->base_metadata = 0;
+ hnd->layer_count = layer_count;
+
+ bool use_adreno_for_size = CanUseAdrenoForSize(buffer_type, usage);
+ if (use_adreno_for_size) {
+ setMetaDataAndUnmap(hnd, SET_GRAPHICS_METADATA, reinterpret_cast<void *>(&graphics_metadata));
+ }
+
+#ifdef METADATA_V2
+ auto error = validateAndMap(hnd, descriptor.GetReservedSize());
+#else
+ auto error = validateAndMap(hnd);
+#endif
+
+ if (error != 0) {
+ ALOGE("validateAndMap failed");
+ return Error::BAD_BUFFER;
+ }
+ auto metadata = reinterpret_cast<MetaData_t *>(hnd->base_metadata);
+ auto nameLength = std::min(descriptor.GetName().size(), size_t(MAX_NAME_LEN - 1));
+ nameLength = descriptor.GetName().copy(metadata->name, nameLength);
+ metadata->name[nameLength] = '\0';
+
+#ifdef METADATA_V2
+ metadata->reservedSize = descriptor.GetReservedSize();
+#else
+ metadata->reservedRegion.size =
+ static_cast<uint32_t>(std::min(descriptor.GetReservedSize(), (uint64_t)RESERVED_REGION_SIZE));
+#endif
+ metadata->crop.top = 0;
+ metadata->crop.left = 0;
+ metadata->crop.right = hnd->width;
+ metadata->crop.bottom = hnd->height;
+
+ unmapAndReset(hnd, descriptor.GetReservedSize());
+
+ *handle = hnd;
+
+ RegisterHandleLocked(hnd, data.ion_handle, e_data.ion_handle);
+ ALOGD_IF(DEBUG, "Allocated buffer handle: %p id: %" PRIu64, hnd, hnd->id);
+ if (DEBUG) {
+ private_handle_t::Dump(hnd);
+ }
+ return Error::NONE;
+}
+
+Error BufferManager::Dump(std::ostringstream *os) {
+ std::lock_guard<std::mutex> buffer_lock(buffer_lock_);
+ for (auto it : handles_map_) {
+ auto buf = it.second;
+ auto hnd = buf->handle;
+ *os << "handle id: " << std::setw(4) << hnd->id;
+ *os << " fd: " << std::setw(3) << hnd->fd;
+ *os << " fd_meta: " << std::setw(3) << hnd->fd_metadata;
+ *os << " wxh: " << std::setw(4) << hnd->width << " x " << std::setw(4) << hnd->height;
+ *os << " uwxuh: " << std::setw(4) << hnd->unaligned_width << " x ";
+ *os << std::setw(4) << hnd->unaligned_height;
+ *os << " size: " << std::setw(9) << hnd->size;
+ *os << std::hex << std::setfill('0');
+ *os << " priv_flags: "
+ << "0x" << std::setw(8) << hnd->flags;
+ *os << " usage: "
+ << "0x" << std::setw(8) << hnd->usage;
+ // TODO(user): get format string from qdutils
+ *os << " format: "
+ << "0x" << std::setw(8) << hnd->format;
+ *os << std::dec << std::setfill(' ') << std::endl;
+ }
+ return Error::NONE;
+}
+
+// Get list of private handles in handles_map_
+Error BufferManager::GetAllHandles(std::vector<const private_handle_t *> *out_handle_list) {
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ if (handles_map_.empty()) {
+ return Error::NO_RESOURCES;
+ }
+ out_handle_list->reserve(handles_map_.size());
+ for (auto handle : handles_map_) {
+ out_handle_list->push_back(handle.first);
+ }
+ return Error::NONE;
+}
+
+Error BufferManager::GetReservedRegion(private_handle_t *handle, void **reserved_region,
+ uint64_t *reserved_region_size) {
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ if (!handle)
+ return Error::BAD_BUFFER;
+
+ auto buf = GetBufferFromHandleLocked(handle);
+ if (buf == nullptr)
+ return Error::BAD_BUFFER;
+ if (!handle->base_metadata) {
+ return Error::BAD_BUFFER;
+ }
+
+ *reserved_region = buf->reserved_region_ptr;
+ *reserved_region_size = buf->reserved_size;
+
+ return Error::NONE;
+}
+
+Error BufferManager::GetMetadata(private_handle_t *handle, int64_t metadatatype_value,
+ hidl_vec<uint8_t> *out) {
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ if (!handle)
+ return Error::BAD_BUFFER;
+ auto buf = GetBufferFromHandleLocked(handle);
+ if (buf == nullptr)
+ return Error::BAD_BUFFER;
+
+ if (!handle->base_metadata) {
+ return Error::BAD_BUFFER;
+ }
+
+ auto metadata = reinterpret_cast<MetaData_t *>(handle->base_metadata);
+
+ Error error = Error::NONE;
+ switch (metadatatype_value) {
+ case (int64_t)StandardMetadataType::BUFFER_ID:
+ android::gralloc4::encodeBufferId((uint64_t)handle->id, out);
+ break;
+ case (int64_t)StandardMetadataType::NAME: {
+ std::string name(metadata->name);
+ android::gralloc4::encodeName(name, out);
+ break;
+ }
+ case (int64_t)StandardMetadataType::WIDTH:
+ android::gralloc4::encodeWidth((uint64_t)handle->unaligned_width, out);
+ break;
+ case (int64_t)StandardMetadataType::HEIGHT:
+ android::gralloc4::encodeHeight((uint64_t)handle->unaligned_height, out);
+ break;
+ case (int64_t)StandardMetadataType::LAYER_COUNT:
+ android::gralloc4::encodeLayerCount((uint64_t)handle->layer_count, out);
+ break;
+ case (int64_t)StandardMetadataType::PIXEL_FORMAT_REQUESTED:
+ // TODO(tbalacha): need to return IMPLEMENTATION_DEFINED,
+ // which wouldn't be known from private_handle_t
+ android::gralloc4::encodePixelFormatRequested((PixelFormat)handle->format, out);
+ break;
+ case (int64_t)StandardMetadataType::PIXEL_FORMAT_FOURCC: {
+ uint32_t drm_format = 0;
+ uint64_t drm_format_modifier = 0;
+ GetDRMFormat(handle->format, handle->flags, &drm_format, &drm_format_modifier);
+ android::gralloc4::encodePixelFormatFourCC(drm_format, out);
+ break;
+ }
+ case (int64_t)StandardMetadataType::PIXEL_FORMAT_MODIFIER: {
+ uint32_t drm_format = 0;
+ uint64_t drm_format_modifier = 0;
+ GetDRMFormat(handle->format, handle->flags, &drm_format, &drm_format_modifier);
+ android::gralloc4::encodePixelFormatModifier(drm_format_modifier, out);
+ break;
+ }
+ case (int64_t)StandardMetadataType::USAGE:
+ android::gralloc4::encodeUsage((uint64_t)handle->usage, out);
+ break;
+ case (int64_t)StandardMetadataType::ALLOCATION_SIZE:
+ android::gralloc4::encodeAllocationSize((uint64_t)handle->size, out);
+ break;
+ case (int64_t)StandardMetadataType::PROTECTED_CONTENT: {
+ uint64_t protected_content = (handle->flags & qtigralloc::PRIV_FLAGS_SECURE_BUFFER) ? 1 : 0;
+ android::gralloc4::encodeProtectedContent(protected_content, out);
+ break;
+ }
+ case (int64_t)StandardMetadataType::CHROMA_SITING:
+ android::gralloc4::encodeChromaSiting(android::gralloc4::ChromaSiting_None, out);
+ break;
+ case (int64_t)StandardMetadataType::DATASPACE:
+#ifdef METADATA_V2
+ if (metadata->isStandardMetadataSet[GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value)]) {
+#endif
+ Dataspace dataspace;
+ colorMetadataToDataspace(metadata->color, &dataspace);
+ android::gralloc4::encodeDataspace(dataspace, out);
+#ifdef METADATA_V2
+ } else {
+ android::gralloc4::encodeDataspace(Dataspace::UNKNOWN, out);
+ }
+#endif
+ break;
+ case (int64_t)StandardMetadataType::INTERLACED:
+ if (metadata->interlaced > 0) {
+ android::gralloc4::encodeInterlaced(qtigralloc::Interlaced_Qti, out);
+ } else {
+ android::gralloc4::encodeInterlaced(android::gralloc4::Interlaced_None, out);
+ }
+ break;
+ case (int64_t)StandardMetadataType::COMPRESSION:
+ if (handle->flags & qtigralloc::PRIV_FLAGS_UBWC_ALIGNED ||
+ handle->flags & qtigralloc::PRIV_FLAGS_UBWC_ALIGNED_PI) {
+ android::gralloc4::encodeCompression(qtigralloc::Compression_QtiUBWC, out);
+ } else {
+ android::gralloc4::encodeCompression(android::gralloc4::Compression_None, out);
+ }
+ break;
+ case (int64_t)StandardMetadataType::PLANE_LAYOUTS: {
+ std::vector<PlaneLayout> plane_layouts;
+ getFormatLayout(handle, &plane_layouts);
+ android::gralloc4::encodePlaneLayouts(plane_layouts, out);
+ break;
+ }
+ case (int64_t)StandardMetadataType::BLEND_MODE:
+ android::gralloc4::encodeBlendMode((BlendMode)metadata->blendMode, out);
+ break;
+ case (int64_t)StandardMetadataType::SMPTE2086: {
+ if (metadata->color.masteringDisplayInfo.colorVolumeSEIEnabled) {
+ Smpte2086 mastering_display_values;
+ mastering_display_values.primaryRed = {
+ static_cast<float>(metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[0][0]) /
+ 50000.0f,
+ static_cast<float>(metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[0][1]) /
+ 50000.0f};
+ mastering_display_values.primaryGreen = {
+ static_cast<float>(metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[1][0]) /
+ 50000.0f,
+ static_cast<float>(metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[1][1]) /
+ 50000.0f};
+ mastering_display_values.primaryBlue = {
+ static_cast<float>(metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[2][0]) /
+ 50000.0f,
+ static_cast<float>(metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[2][1]) /
+ 50000.0f};
+ mastering_display_values.whitePoint = {
+ static_cast<float>(metadata->color.masteringDisplayInfo.primaries.whitePoint[0]) /
+ 50000.0f,
+ static_cast<float>(metadata->color.masteringDisplayInfo.primaries.whitePoint[1]) /
+ 50000.0f};
+ mastering_display_values.maxLuminance =
+ static_cast<float>(metadata->color.masteringDisplayInfo.maxDisplayLuminance);
+ mastering_display_values.minLuminance =
+ static_cast<float>(metadata->color.masteringDisplayInfo.minDisplayLuminance) / 10000.0f;
+ android::gralloc4::encodeSmpte2086(mastering_display_values, out);
+ } else {
+ android::gralloc4::encodeSmpte2086(std::nullopt, out);
+ }
+ break;
+ }
+ case (int64_t)StandardMetadataType::CTA861_3: {
+ if (metadata->color.contentLightLevel.lightLevelSEIEnabled) {
+ Cta861_3 content_light_level;
+ content_light_level.maxContentLightLevel =
+ static_cast<float>(metadata->color.contentLightLevel.maxContentLightLevel);
+ content_light_level.maxFrameAverageLightLevel =
+ static_cast<float>(metadata->color.contentLightLevel.minPicAverageLightLevel) /
+ 10000.0f;
+ android::gralloc4::encodeCta861_3(content_light_level, out);
+ } else {
+ android::gralloc4::encodeCta861_3(std::nullopt, out);
+ }
+ break;
+ }
+ case (int64_t)StandardMetadataType::SMPTE2094_40: {
+ if (metadata->color.dynamicMetaDataValid &&
+ metadata->color.dynamicMetaDataLen <= HDR_DYNAMIC_META_DATA_SZ) {
+ std::vector<uint8_t> dynamic_metadata_payload;
+ dynamic_metadata_payload.resize(metadata->color.dynamicMetaDataLen);
+ dynamic_metadata_payload.assign(
+ metadata->color.dynamicMetaDataPayload,
+ metadata->color.dynamicMetaDataPayload + metadata->color.dynamicMetaDataLen);
+ android::gralloc4::encodeSmpte2094_40(dynamic_metadata_payload, out);
+ } else {
+ android::gralloc4::encodeSmpte2094_40(std::nullopt, out);
+ }
+ break;
+ }
+ case (int64_t)StandardMetadataType::CROP: {
+ // Crop is the same for all planes
+ std::vector<Rect> out_crop = {{metadata->crop.left, metadata->crop.top, metadata->crop.right,
+ metadata->crop.bottom}};
+ android::gralloc4::encodeCrop(out_crop, out);
+ break;
+ }
+ case QTI_VT_TIMESTAMP:
+ android::gralloc4::encodeUint64(qtigralloc::MetadataType_VTTimestamp, metadata->vtTimeStamp,
+ out);
+ break;
+ case QTI_COLOR_METADATA:
+ qtigralloc::encodeColorMetadata(metadata->color, out);
+ break;
+ case QTI_PP_PARAM_INTERLACED:
+ android::gralloc4::encodeInt32(qtigralloc::MetadataType_PPParamInterlaced,
+ metadata->interlaced, out);
+ break;
+ case QTI_VIDEO_PERF_MODE:
+ android::gralloc4::encodeUint32(qtigralloc::MetadataType_VideoPerfMode,
+ metadata->isVideoPerfMode, out);
+ break;
+ case QTI_GRAPHICS_METADATA:
+ qtigralloc::encodeGraphicsMetadata(metadata->graphics_metadata, out);
+ break;
+ case QTI_UBWC_CR_STATS_INFO:
+ qtigralloc::encodeUBWCStats(metadata->ubwcCRStats, out);
+ break;
+ case QTI_REFRESH_RATE:
+ android::gralloc4::encodeFloat(qtigralloc::MetadataType_RefreshRate, metadata->refreshrate,
+ out);
+ break;
+ case QTI_MAP_SECURE_BUFFER:
+ android::gralloc4::encodeInt32(qtigralloc::MetadataType_MapSecureBuffer,
+ metadata->mapSecureBuffer, out);
+ break;
+ case QTI_LINEAR_FORMAT:
+ android::gralloc4::encodeUint32(qtigralloc::MetadataType_LinearFormat, metadata->linearFormat,
+ out);
+ break;
+ case QTI_SINGLE_BUFFER_MODE:
+ android::gralloc4::encodeUint32(qtigralloc::MetadataType_SingleBufferMode,
+ metadata->isSingleBufferMode, out);
+ break;
+ case QTI_CVP_METADATA:
+ qtigralloc::encodeCVPMetadata(metadata->cvpMetadata, out);
+ break;
+ case QTI_VIDEO_HISTOGRAM_STATS:
+ qtigralloc::encodeVideoHistogramMetadata(metadata->video_histogram_stats, out);
+ break;
+ case QTI_FD:
+ android::gralloc4::encodeInt32(qtigralloc::MetadataType_FD, handle->fd, out);
+ break;
+ case QTI_PRIVATE_FLAGS:
+ android::gralloc4::encodeInt32(qtigralloc::MetadataType_PrivateFlags, handle->flags, out);
+ break;
+ case QTI_ALIGNED_WIDTH_IN_PIXELS:
+ android::gralloc4::encodeUint32(qtigralloc::MetadataType_AlignedWidthInPixels, handle->width,
+ out);
+ break;
+ case QTI_ALIGNED_HEIGHT_IN_PIXELS:
+ android::gralloc4::encodeUint32(qtigralloc::MetadataType_AlignedHeightInPixels,
+ handle->height, out);
+ break;
+#ifdef METADATA_V2
+ case QTI_STANDARD_METADATA_STATUS:
+ qtigralloc::encodeMetadataState(metadata->isStandardMetadataSet, out);
+ break;
+ case QTI_VENDOR_METADATA_STATUS:
+ qtigralloc::encodeMetadataState(metadata->isVendorMetadataSet, out);
+ break;
+#endif
+#ifdef QTI_BUFFER_TYPE
+ case QTI_BUFFER_TYPE:
+ android::gralloc4::encodeUint32(qtigralloc::MetadataType_BufferType, handle->buffer_type,
+ out);
+ break;
+#endif
+ default:
+ error = Error::UNSUPPORTED;
+ }
+
+ return error;
+}
+
+Error BufferManager::SetMetadata(private_handle_t *handle, int64_t metadatatype_value,
+ hidl_vec<uint8_t> in) {
+ std::lock_guard<std::mutex> lock(buffer_lock_);
+ if (!handle)
+ return Error::BAD_BUFFER;
+
+ auto buf = GetBufferFromHandleLocked(handle);
+ if (buf == nullptr)
+ return Error::BAD_BUFFER;
+
+ if (!handle->base_metadata) {
+ return Error::BAD_BUFFER;
+ }
+ if (in.size() == 0) {
+ return Error::UNSUPPORTED;
+ }
+
+ auto metadata = reinterpret_cast<MetaData_t *>(handle->base_metadata);
+
+#ifdef METADATA_V2
+ // By default, set these to true
+ // Reset to false for special cases below
+ if (IS_VENDOR_METADATA_TYPE(metadatatype_value)) {
+ metadata->isVendorMetadataSet[GET_VENDOR_METADATA_STATUS_INDEX(metadatatype_value)] = true;
+ } else if (GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value) < METADATA_SET_SIZE) {
+ metadata->isStandardMetadataSet[GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value)] = true;
+ }
+#endif
+
+ switch (metadatatype_value) {
+ // These are constant (unchanged after allocation)
+ case (int64_t)StandardMetadataType::BUFFER_ID:
+ case (int64_t)StandardMetadataType::NAME:
+ case (int64_t)StandardMetadataType::WIDTH:
+ case (int64_t)StandardMetadataType::HEIGHT:
+ case (int64_t)StandardMetadataType::LAYER_COUNT:
+ case (int64_t)StandardMetadataType::PIXEL_FORMAT_REQUESTED:
+ case (int64_t)StandardMetadataType::USAGE:
+ return Error::BAD_VALUE;
+ case (int64_t)StandardMetadataType::PIXEL_FORMAT_FOURCC:
+ case (int64_t)StandardMetadataType::PIXEL_FORMAT_MODIFIER:
+ case (int64_t)StandardMetadataType::PROTECTED_CONTENT:
+ case (int64_t)StandardMetadataType::ALLOCATION_SIZE:
+ case (int64_t)StandardMetadataType::PLANE_LAYOUTS:
+ case (int64_t)StandardMetadataType::CHROMA_SITING:
+ case (int64_t)StandardMetadataType::INTERLACED:
+ case (int64_t)StandardMetadataType::COMPRESSION:
+ case QTI_FD:
+ case QTI_PRIVATE_FLAGS:
+ case QTI_ALIGNED_WIDTH_IN_PIXELS:
+ case QTI_ALIGNED_HEIGHT_IN_PIXELS:
+ return Error::UNSUPPORTED;
+ case (int64_t)StandardMetadataType::DATASPACE:
+ Dataspace dataspace;
+ android::gralloc4::decodeDataspace(in, &dataspace);
+ dataspaceToColorMetadata(dataspace, &metadata->color);
+ break;
+ case (int64_t)StandardMetadataType::BLEND_MODE:
+ BlendMode mode;
+ android::gralloc4::decodeBlendMode(in, &mode);
+ metadata->blendMode = (int32_t)mode;
+ break;
+ case (int64_t)StandardMetadataType::SMPTE2086: {
+ std::optional<Smpte2086> mastering_display_values;
+ android::gralloc4::decodeSmpte2086(in, &mastering_display_values);
+ if (mastering_display_values != std::nullopt) {
+ metadata->color.masteringDisplayInfo.colorVolumeSEIEnabled = true;
+
+ metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[0][0] =
+ static_cast<uint32_t>(mastering_display_values->primaryRed.x * 50000.0f);
+ metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[0][1] =
+ static_cast<uint32_t>(mastering_display_values->primaryRed.y * 50000.0f);
+
+ metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[1][0] =
+ static_cast<uint32_t>(mastering_display_values->primaryGreen.x * 50000.0f);
+ metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[1][1] =
+ static_cast<uint32_t>(mastering_display_values->primaryGreen.y * 50000.0f);
+
+ metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[2][0] =
+ static_cast<uint32_t>(mastering_display_values->primaryBlue.x * 50000.0f);
+ metadata->color.masteringDisplayInfo.primaries.rgbPrimaries[2][1] =
+ static_cast<uint32_t>(mastering_display_values->primaryBlue.y * 50000.0f);
+
+ metadata->color.masteringDisplayInfo.primaries.whitePoint[0] =
+ static_cast<uint32_t>(mastering_display_values->whitePoint.x * 50000.0f);
+ metadata->color.masteringDisplayInfo.primaries.whitePoint[1] =
+ static_cast<uint32_t>(mastering_display_values->whitePoint.y * 50000.0f);
+
+ metadata->color.masteringDisplayInfo.maxDisplayLuminance =
+ static_cast<uint32_t>(mastering_display_values->maxLuminance);
+ metadata->color.masteringDisplayInfo.minDisplayLuminance =
+ static_cast<uint32_t>(mastering_display_values->minLuminance * 10000.0f);
+ } else {
+#ifdef METADATA_V2
+ metadata->isStandardMetadataSet[GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value)] =
+ false;
+#endif
+ metadata->color.masteringDisplayInfo.colorVolumeSEIEnabled = false;
+ }
+ break;
+ }
+ case (int64_t)StandardMetadataType::CTA861_3: {
+ std::optional<Cta861_3> content_light_level;
+ android::gralloc4::decodeCta861_3(in, &content_light_level);
+ if (content_light_level != std::nullopt) {
+ metadata->color.contentLightLevel.lightLevelSEIEnabled = true;
+ metadata->color.contentLightLevel.maxContentLightLevel =
+ static_cast<uint32_t>(content_light_level->maxContentLightLevel);
+ metadata->color.contentLightLevel.minPicAverageLightLevel =
+ static_cast<uint32_t>(content_light_level->maxFrameAverageLightLevel * 10000.0f);
+ } else {
+#ifdef METADATA_V2
+ metadata->isStandardMetadataSet[GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value)] =
+ false;
+#endif
+ metadata->color.contentLightLevel.lightLevelSEIEnabled = false;
+ }
+ break;
+ }
+ case (int64_t)StandardMetadataType::SMPTE2094_40: {
+ std::optional<std::vector<uint8_t>> dynamic_metadata_payload;
+ android::gralloc4::decodeSmpte2094_40(in, &dynamic_metadata_payload);
+ if (dynamic_metadata_payload != std::nullopt) {
+ if (dynamic_metadata_payload->size() > HDR_DYNAMIC_META_DATA_SZ)
+ return Error::BAD_VALUE;
+
+ metadata->color.dynamicMetaDataLen = static_cast<uint32_t>(dynamic_metadata_payload->size());
+ std::copy(dynamic_metadata_payload->begin(), dynamic_metadata_payload->end(),
+ metadata->color.dynamicMetaDataPayload);
+ metadata->color.dynamicMetaDataValid = true;
+ } else {
+ // Reset metadata by passing in std::nullopt
+#ifdef METADATA_V2
+ metadata->isStandardMetadataSet[GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value)] =
+ false;
+#endif
+ metadata->color.dynamicMetaDataValid = false;
+ }
+ break;
+ }
+ case (int64_t)StandardMetadataType::CROP: {
+ std::vector<Rect> in_crop;
+ android::gralloc4::decodeCrop(in, &in_crop);
+ if (in_crop.size() != 1)
+ return Error::UNSUPPORTED;
+
+ metadata->crop.left = in_crop[0].left;
+ metadata->crop.top = in_crop[0].top;
+ metadata->crop.right = in_crop[0].right;
+ metadata->crop.bottom = in_crop[0].bottom;
+ break;
+ }
+ case QTI_VT_TIMESTAMP:
+ android::gralloc4::decodeUint64(qtigralloc::MetadataType_VTTimestamp, in,
+ &metadata->vtTimeStamp);
+ break;
+ case QTI_COLOR_METADATA:
+ ColorMetaData color;
+ qtigralloc::decodeColorMetadata(in, &color);
+ metadata->color = color;
+ break;
+ case QTI_PP_PARAM_INTERLACED:
+ android::gralloc4::decodeInt32(qtigralloc::MetadataType_PPParamInterlaced, in,
+ &metadata->interlaced);
+ break;
+ case QTI_VIDEO_PERF_MODE:
+ android::gralloc4::decodeUint32(qtigralloc::MetadataType_VideoPerfMode, in,
+ &metadata->isVideoPerfMode);
+ break;
+ case QTI_GRAPHICS_METADATA:
+ qtigralloc::decodeGraphicsMetadata(in, &metadata->graphics_metadata);
+ break;
+ case QTI_UBWC_CR_STATS_INFO:
+ qtigralloc::decodeUBWCStats(in, &metadata->ubwcCRStats[0]);
+ break;
+ case QTI_REFRESH_RATE:
+ android::gralloc4::decodeFloat(qtigralloc::MetadataType_RefreshRate, in,
+ &metadata->refreshrate);
+ break;
+ case QTI_MAP_SECURE_BUFFER:
+ android::gralloc4::decodeInt32(qtigralloc::MetadataType_MapSecureBuffer, in,
+ &metadata->mapSecureBuffer);
+ break;
+ case QTI_LINEAR_FORMAT:
+ android::gralloc4::decodeUint32(qtigralloc::MetadataType_LinearFormat, in,
+ &metadata->linearFormat);
+ break;
+ case QTI_SINGLE_BUFFER_MODE:
+ android::gralloc4::decodeUint32(qtigralloc::MetadataType_SingleBufferMode, in,
+ &metadata->isSingleBufferMode);
+ break;
+ case QTI_CVP_METADATA:
+ qtigralloc::decodeCVPMetadata(in, &metadata->cvpMetadata);
+ break;
+ case QTI_VIDEO_HISTOGRAM_STATS:
+ qtigralloc::decodeVideoHistogramMetadata(in, &metadata->video_histogram_stats);
+ break;
+ default:
+#ifdef METADATA_V2
+ if (IS_VENDOR_METADATA_TYPE(metadatatype_value)) {
+ metadata->isVendorMetadataSet[GET_VENDOR_METADATA_STATUS_INDEX(metadatatype_value)] = false;
+ } else if (GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value) < METADATA_SET_SIZE) {
+ metadata->isStandardMetadataSet[GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value)] =
+ false;
+ }
+#endif
+ return Error::BAD_VALUE;
+ }
+
+ return Error::NONE;
+}
+
+} // namespace gralloc
diff --git a/gralloc/gr_buf_mgr.h b/gralloc/gr_buf_mgr.h
new file mode 100644
index 0000000..a3a8c43
--- /dev/null
+++ b/gralloc/gr_buf_mgr.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2011-2018, 2020 The Linux Foundation. All rights reserved.
+ * Not a Contribution
+ *
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __GR_BUF_MGR_H__
+#define __GR_BUF_MGR_H__
+
+#include <pthread.h>
+
+#include <mutex>
+#include <unordered_map>
+#include <unordered_set>
+#include <utility>
+#include <vector>
+
+#include "gr_allocator.h"
+#include "gr_buf_descriptor.h"
+#include "gr_utils.h"
+#include "gralloc_priv.h"
+
+namespace gralloc {
+using gralloc::Error;
+class BufferManager {
+ public:
+ ~BufferManager();
+
+ Error AllocateBuffer(const BufferDescriptor &descriptor, buffer_handle_t *handle,
+ unsigned int bufferSize = 0, bool testAlloc = false);
+ Error RetainBuffer(private_handle_t const *hnd);
+ Error ReleaseBuffer(private_handle_t const *hnd);
+ Error LockBuffer(const private_handle_t *hnd, uint64_t usage);
+ Error UnlockBuffer(const private_handle_t *hnd);
+ Error Dump(std::ostringstream *os);
+ Error ValidateBufferSize(private_handle_t const *hnd, BufferInfo info);
+ Error IsBufferImported(const private_handle_t *hnd);
+ static BufferManager *GetInstance();
+ Error GetMetadata(private_handle_t *handle, int64_t metadatatype_value, hidl_vec<uint8_t> *out);
+ Error SetMetadata(private_handle_t *handle, int64_t metadatatype_value, hidl_vec<uint8_t> in);
+ Error GetReservedRegion(private_handle_t *handle, void **reserved_region,
+ uint64_t *reserved_region_size);
+ Error FlushBuffer(const private_handle_t *handle);
+ Error RereadBuffer(const private_handle_t *handle);
+ Error GetAllHandles(std::vector<const private_handle_t *> *out_handle_list);
+ void SetGrallocDebugProperties(gralloc::GrallocProperties props);
+
+ private:
+ BufferManager();
+ Error MapBuffer(private_handle_t const *hnd);
+
+ // Imports the ion fds into the current process. Returns an error for invalid handles
+ Error ImportHandleLocked(private_handle_t *hnd);
+
+ // Creates a Buffer from the valid private handle and adds it to the map
+ void RegisterHandleLocked(const private_handle_t *hnd, int ion_handle, int ion_handle_meta);
+
+ // Wrapper structure over private handle
+ // Values associated with the private handle
+ // that do not need to go over IPC can be placed here
+ // This structure is also not expected to be ABI stable
+ // unlike private_handle_t
+ struct Buffer {
+ const private_handle_t *handle = nullptr;
+ int ref_count = 1;
+ // Hold the main and metadata ion handles
+ // Freed from the allocator process
+ // and unused in the mapping process
+ int ion_handle_main = -1;
+ int ion_handle_meta = -1;
+
+ Buffer() = delete;
+ explicit Buffer(const private_handle_t *h, int ih_main = -1, int ih_meta = -1)
+ : handle(h), ion_handle_main(ih_main), ion_handle_meta(ih_meta) {}
+ void IncRef() { ++ref_count; }
+ bool DecRef() { return --ref_count == 0; }
+ uint64_t reserved_size = 0;
+ void *reserved_region_ptr = nullptr;
+ };
+
+ Error FreeBuffer(std::shared_ptr<Buffer> buf);
+
+ // Get the wrapper Buffer object from the handle, returns nullptr if handle is not found
+ std::shared_ptr<Buffer> GetBufferFromHandleLocked(const private_handle_t *hnd);
+ Allocator *allocator_ = NULL;
+ std::mutex buffer_lock_;
+ std::unordered_map<const private_handle_t *, std::shared_ptr<Buffer>> handles_map_ = {};
+ std::atomic<uint64_t> next_id_;
+};
+
+} // namespace gralloc
+
+#endif // __GR_BUF_MGR_H__
diff --git a/gralloc/gr_device_impl.cpp b/gralloc/gr_device_impl.cpp
new file mode 100644
index 0000000..625749d
--- /dev/null
+++ b/gralloc/gr_device_impl.cpp
@@ -0,0 +1,903 @@
+/*
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#define ATRACE_TAG (ATRACE_TAG_GRAPHICS | ATRACE_TAG_HAL)
+#include <log/log.h>
+#include <cutils/trace.h>
+#include <sync/sync.h>
+#include <utils/Trace.h>
+#include <algorithm>
+#include <sstream>
+#include <string>
+
+#include "gr_buf_descriptor.h"
+#include "gr_device_impl.h"
+#include "gr_utils.h"
+#include "gralloc_priv.h"
+#include "qdMetaData.h"
+#include "qd_utils.h"
+
+int gralloc_device_open(const struct hw_module_t *module, const char *name, hw_device_t **device);
+
+int gralloc_device_close(struct hw_device_t *device);
+
+static struct hw_module_methods_t gralloc_module_methods = {.open = gralloc_device_open};
+
+struct gralloc_module_t HAL_MODULE_INFO_SYM = {
+ // clang-format off
+ .common = {
+ .tag = HARDWARE_MODULE_TAG,
+ .module_api_version = GRALLOC_MODULE_API_VERSION_1_0,
+ .hal_api_version = HARDWARE_HAL_API_VERSION,
+ .id = GRALLOC_HARDWARE_MODULE_ID,
+ .name = "Graphics Memory Module",
+ .author = "Code Aurora Forum",
+ .methods = &gralloc_module_methods,
+ .dso = 0,
+ .reserved = {0},
+ },
+ // clang-format on
+};
+
+int gralloc_device_open(const struct hw_module_t *module, const char *name, hw_device_t **device) {
+ int status = -EINVAL;
+ if (module && device && !strcmp(name, GRALLOC_HARDWARE_MODULE_ID)) {
+ gralloc::GrallocImpl * /*gralloc1_device_t*/ dev = gralloc::GrallocImpl::GetInstance(module);
+ *device = reinterpret_cast<hw_device_t *>(dev);
+ if (dev) {
+ status = 0;
+ } else {
+ ALOGE("Fatal error opening gralloc1 device");
+ }
+ }
+ return status;
+}
+
+namespace gralloc {
+
+std::atomic<uint64_t> GrallocImpl::next_descriptor_id_(1);
+
+GrallocImpl::GrallocImpl(const hw_module_t *module) {
+ common.tag = HARDWARE_DEVICE_TAG;
+ common.version = GRALLOC_MODULE_API_VERSION_1_0;
+ common.module = const_cast<hw_module_t *>(module);
+ common.close = CloseDevice;
+ getFunction = GetFunction;
+ getCapabilities = GetCapabilities;
+
+ initialized_ = Init();
+}
+
+inline gralloc1_error_t ToError(Error error) {
+ switch (error) {
+ case Error::NONE:
+ return GRALLOC1_ERROR_NONE;
+ case Error::BAD_DESCRIPTOR:
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ case Error::BAD_BUFFER:
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ case Error::BAD_VALUE:
+ return GRALLOC1_ERROR_BAD_VALUE;
+ case Error::NO_RESOURCES:
+ return GRALLOC1_ERROR_NO_RESOURCES;
+ case Error::UNSUPPORTED:
+ default:
+ return GRALLOC1_ERROR_UNSUPPORTED;
+ }
+}
+
+static uint64_t ProducerUsageToBufferUsage(gralloc1_producer_usage_t producer_usage) {
+ uint64_t usage = producer_usage & ~(GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN |
+ GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN);
+ if ((producer_usage & GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN) ==
+ GRALLOC1_PRODUCER_USAGE_CPU_READ_OFTEN) {
+ usage |= BufferUsage::CPU_READ_OFTEN;
+ } else if ((producer_usage & GRALLOC1_PRODUCER_USAGE_CPU_READ) ==
+ GRALLOC1_PRODUCER_USAGE_CPU_READ) {
+ usage |= BufferUsage::CPU_READ_RARELY;
+ }
+
+ if ((producer_usage & GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN) ==
+ GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN) {
+ usage |= BufferUsage::CPU_WRITE_OFTEN;
+ } else if ((producer_usage & GRALLOC1_PRODUCER_USAGE_CPU_WRITE) ==
+ GRALLOC1_PRODUCER_USAGE_CPU_WRITE) {
+ usage |= BufferUsage::CPU_WRITE_RARELY;
+ }
+ return usage;
+}
+
+static uint64_t ConsumerUsageToBufferUsage(gralloc1_consumer_usage_t consumer_usage) {
+ uint64_t usage = consumer_usage & ~(GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN);
+ if ((consumer_usage & GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN) ==
+ GRALLOC1_CONSUMER_USAGE_CPU_READ_OFTEN) {
+ usage |= BufferUsage::CPU_READ_OFTEN;
+ } else if ((consumer_usage & GRALLOC1_CONSUMER_USAGE_CPU_READ) ==
+ GRALLOC1_CONSUMER_USAGE_CPU_READ) {
+ usage |= BufferUsage::CPU_READ_RARELY;
+ }
+ return usage;
+}
+
+bool GrallocImpl::Init() {
+ buf_mgr_ = BufferManager::GetInstance();
+ return buf_mgr_ != nullptr;
+}
+
+GrallocImpl::~GrallocImpl() {}
+
+gralloc1_error_t GrallocImpl::CreateBufferDescriptorLocked(
+ gralloc1_buffer_descriptor_t *descriptor_id) {
+ std::lock_guard<std::mutex> lock(descriptor_lock_);
+ auto descriptor = std::make_shared<BufferDescriptor>(next_descriptor_id_++);
+ *descriptor_id = static_cast<gralloc1_buffer_descriptor_t>(descriptor->GetId());
+ descriptors_map_.emplace(*descriptor_id, descriptor);
+ return GRALLOC1_ERROR_NONE;
+}
+
+gralloc1_error_t GrallocImpl::DestroyBufferDescriptorLocked(
+ gralloc1_buffer_descriptor_t descriptor_id) {
+ std::lock_guard<std::mutex> lock(descriptor_lock_);
+ const auto descriptor = descriptors_map_.find(descriptor_id);
+ if (descriptor == descriptors_map_.end()) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ }
+ descriptors_map_.erase(descriptor);
+ return GRALLOC1_ERROR_NONE;
+}
+
+int GrallocImpl::CloseDevice(hw_device_t *device __unused) {
+ // No-op since the gralloc device is a singleton
+ return 0;
+}
+
+void GrallocImpl::GetCapabilities(struct gralloc1_device *device, uint32_t *out_count,
+ int32_t /*gralloc1_capability_t*/ *out_capabilities) {
+ if (device != nullptr && out_count != nullptr) {
+ if (out_capabilities != nullptr && *out_count >= 3) {
+ out_capabilities[0] = GRALLOC1_CAPABILITY_TEST_ALLOCATE;
+ out_capabilities[1] = GRALLOC1_CAPABILITY_LAYERED_BUFFERS;
+ out_capabilities[2] = GRALLOC1_CAPABILITY_RELEASE_IMPLY_DELETE;
+ }
+ *out_count = 3;
+ }
+ return;
+}
+
+gralloc1_function_pointer_t GrallocImpl::GetFunction(gralloc1_device_t *device, int32_t function) {
+ if (!device) {
+ return NULL;
+ }
+
+ switch (function) {
+ case GRALLOC1_FUNCTION_DUMP:
+ return reinterpret_cast<gralloc1_function_pointer_t>(Dump);
+ case GRALLOC1_FUNCTION_CREATE_DESCRIPTOR:
+ return reinterpret_cast<gralloc1_function_pointer_t>(CreateBufferDescriptor);
+ case GRALLOC1_FUNCTION_DESTROY_DESCRIPTOR:
+ return reinterpret_cast<gralloc1_function_pointer_t>(DestroyBufferDescriptor);
+ case GRALLOC1_FUNCTION_SET_CONSUMER_USAGE:
+ return reinterpret_cast<gralloc1_function_pointer_t>(SetConsumerUsage);
+ case GRALLOC1_FUNCTION_SET_DIMENSIONS:
+ return reinterpret_cast<gralloc1_function_pointer_t>(SetBufferDimensions);
+ case GRALLOC1_FUNCTION_SET_FORMAT:
+ return reinterpret_cast<gralloc1_function_pointer_t>(SetColorFormat);
+ case GRALLOC1_FUNCTION_SET_LAYER_COUNT:
+ return reinterpret_cast<gralloc1_function_pointer_t>(SetLayerCount);
+ case GRALLOC1_FUNCTION_SET_PRODUCER_USAGE:
+ return reinterpret_cast<gralloc1_function_pointer_t>(SetProducerUsage);
+ case GRALLOC1_FUNCTION_GET_BACKING_STORE:
+ return reinterpret_cast<gralloc1_function_pointer_t>(GetBackingStore);
+ case GRALLOC1_FUNCTION_GET_CONSUMER_USAGE:
+ return reinterpret_cast<gralloc1_function_pointer_t>(GetConsumerUsage);
+ case GRALLOC1_FUNCTION_GET_DIMENSIONS:
+ return reinterpret_cast<gralloc1_function_pointer_t>(GetBufferDimensions);
+ case GRALLOC1_FUNCTION_GET_FORMAT:
+ return reinterpret_cast<gralloc1_function_pointer_t>(GetColorFormat);
+ case GRALLOC1_FUNCTION_GET_LAYER_COUNT:
+ return reinterpret_cast<gralloc1_function_pointer_t>(GetLayerCount);
+ case GRALLOC1_FUNCTION_GET_PRODUCER_USAGE:
+ return reinterpret_cast<gralloc1_function_pointer_t>(GetProducerUsage);
+ case GRALLOC1_FUNCTION_GET_STRIDE:
+ return reinterpret_cast<gralloc1_function_pointer_t>(GetBufferStride);
+ case GRALLOC1_FUNCTION_ALLOCATE:
+ return reinterpret_cast<gralloc1_function_pointer_t>(AllocateBuffers);
+ case GRALLOC1_FUNCTION_RETAIN:
+ return reinterpret_cast<gralloc1_function_pointer_t>(RetainBuffer);
+ case GRALLOC1_FUNCTION_RELEASE:
+ return reinterpret_cast<gralloc1_function_pointer_t>(ReleaseBuffer);
+ case GRALLOC1_FUNCTION_GET_NUM_FLEX_PLANES:
+ return reinterpret_cast<gralloc1_function_pointer_t>(GetNumFlexPlanes);
+ case GRALLOC1_FUNCTION_LOCK:
+ return reinterpret_cast<gralloc1_function_pointer_t>(LockBuffer);
+ case GRALLOC1_FUNCTION_LOCK_FLEX:
+ return reinterpret_cast<gralloc1_function_pointer_t>(LockFlex);
+ case GRALLOC1_FUNCTION_UNLOCK:
+ return reinterpret_cast<gralloc1_function_pointer_t>(UnlockBuffer);
+ case GRALLOC1_FUNCTION_PERFORM:
+ return reinterpret_cast<gralloc1_function_pointer_t>(Gralloc1Perform);
+ default:
+ ALOGE("%s:Gralloc Error. Client Requested for unsupported function", __FUNCTION__);
+ return NULL;
+ }
+
+ return NULL;
+}
+
+gralloc1_error_t GrallocImpl::Dump(gralloc1_device_t *device, uint32_t *out_size,
+ char *out_buffer) {
+ if (!device || !out_size) {
+ ALOGE("Gralloc Error : device=%p", (void *)device);
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ }
+ const size_t max_dump_size = 8192;
+ if (out_buffer == nullptr) {
+ *out_size = max_dump_size;
+ } else {
+ std::ostringstream os;
+ os << "-------------------------------" << std::endl;
+ os << "QTI gralloc dump:" << std::endl;
+ os << "-------------------------------" << std::endl;
+ GrallocImpl const *dev = GRALLOC_IMPL(device);
+ dev->buf_mgr_->Dump(&os);
+ os << "-------------------------------" << std::endl;
+ auto copied = os.str().copy(out_buffer, std::min(os.str().size(), max_dump_size), 0);
+ *out_size = UINT(copied);
+ }
+
+ return GRALLOC1_ERROR_NONE;
+}
+
+gralloc1_error_t GrallocImpl::CheckDeviceAndHandle(gralloc1_device_t *device,
+ buffer_handle_t buffer) {
+ const private_handle_t *hnd = PRIV_HANDLE_CONST(buffer);
+ if (!device || (private_handle_t::validate(hnd) != 0)) {
+ ALOGE("Gralloc Error : device= %p, buffer-handle=%p", (void *)device, (void *)buffer);
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ return GRALLOC1_ERROR_NONE;
+}
+
+gralloc1_error_t GrallocImpl::CreateBufferDescriptor(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t *out_descriptor) {
+ if (!device || !out_descriptor) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ }
+ auto *dev = reinterpret_cast<GrallocImpl *>(device);
+ return dev->CreateBufferDescriptorLocked(out_descriptor);
+}
+
+gralloc1_error_t GrallocImpl::DestroyBufferDescriptor(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor) {
+ if (!device) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ }
+ auto *dev = reinterpret_cast<GrallocImpl *>(device);
+ return dev->DestroyBufferDescriptorLocked(descriptor);
+}
+
+gralloc1_error_t GrallocImpl::SetConsumerUsage(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor,
+ gralloc1_consumer_usage_t usage) {
+ if (!device) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ } else {
+ auto *dev = reinterpret_cast<GrallocImpl *>(device);
+ return dev->CallBufferDescriptorFunction(descriptor, &BufferDescriptor::SetUsage,
+ ConsumerUsageToBufferUsage(usage));
+ }
+}
+
+gralloc1_error_t GrallocImpl::SetBufferDimensions(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor,
+ uint32_t width, uint32_t height) {
+ if (!device) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ } else {
+ auto *dev = reinterpret_cast<GrallocImpl *>(device);
+ return dev->CallBufferDescriptorFunction(descriptor, &BufferDescriptor::SetDimensions,
+ INT(width), INT(height));
+ }
+}
+
+gralloc1_error_t GrallocImpl::SetColorFormat(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor,
+ int32_t format) {
+ if (!device) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ } else {
+ auto *dev = reinterpret_cast<GrallocImpl *>(device);
+ return dev->CallBufferDescriptorFunction(descriptor, &BufferDescriptor::SetColorFormat, format);
+ }
+}
+
+gralloc1_error_t GrallocImpl::SetLayerCount(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor,
+ uint32_t layer_count) {
+ if (!device) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ } else {
+ auto *dev = reinterpret_cast<GrallocImpl *>(device);
+ return dev->CallBufferDescriptorFunction(descriptor, &BufferDescriptor::SetLayerCount,
+ layer_count);
+ }
+}
+
+gralloc1_error_t GrallocImpl::SetProducerUsage(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor,
+ gralloc1_producer_usage_t usage) {
+ if (!device) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ } else {
+ auto *dev = reinterpret_cast<GrallocImpl *>(device);
+ return dev->CallBufferDescriptorFunction(descriptor, &BufferDescriptor::SetUsage,
+ ProducerUsageToBufferUsage(usage));
+ }
+}
+
+gralloc1_error_t GrallocImpl::GetBackingStore(gralloc1_device_t *device, buffer_handle_t buffer,
+ gralloc1_backing_store_t *out_backstore) {
+ if (!out_backstore) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status == GRALLOC1_ERROR_NONE) {
+ *out_backstore =
+ static_cast<gralloc1_backing_store_t>(PRIV_HANDLE_CONST(buffer)->GetBackingstore());
+ }
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::GetConsumerUsage(gralloc1_device_t *device, buffer_handle_t buffer,
+ gralloc1_consumer_usage_t *outUsage) {
+ if (!outUsage) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status == GRALLOC1_ERROR_NONE) {
+ *outUsage = static_cast<gralloc1_consumer_usage_t>(PRIV_HANDLE_CONST(buffer)->GetUsage());
+ }
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::GetBufferDimensions(gralloc1_device_t *device, buffer_handle_t buffer,
+ uint32_t *outWidth, uint32_t *outHeight) {
+ if (!outWidth || !outHeight) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status == GRALLOC1_ERROR_NONE) {
+ const private_handle_t *hnd = PRIV_HANDLE_CONST(buffer);
+ *outWidth = UINT(hnd->GetUnalignedWidth());
+ *outHeight = UINT(hnd->GetUnalignedHeight());
+ }
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::GetColorFormat(gralloc1_device_t *device, buffer_handle_t buffer,
+ int32_t *outFormat) {
+ if (!outFormat) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status == GRALLOC1_ERROR_NONE) {
+ *outFormat = PRIV_HANDLE_CONST(buffer)->GetColorFormat();
+ }
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::GetLayerCount(gralloc1_device_t *device, buffer_handle_t buffer,
+ uint32_t *outLayerCount) {
+ if (!outLayerCount) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status == GRALLOC1_ERROR_NONE) {
+ *outLayerCount = PRIV_HANDLE_CONST(buffer)->GetLayerCount();
+ }
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::GetProducerUsage(gralloc1_device_t *device, buffer_handle_t buffer,
+ gralloc1_producer_usage_t *outUsage) {
+ if (!outUsage) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status == GRALLOC1_ERROR_NONE) {
+ *outUsage = static_cast<gralloc1_producer_usage_t>(PRIV_HANDLE_CONST(buffer)->GetUsage());
+ }
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::GetBufferStride(gralloc1_device_t *device, buffer_handle_t buffer,
+ uint32_t *outStride) {
+ if (!outStride) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status == GRALLOC1_ERROR_NONE) {
+ *outStride = UINT(PRIV_HANDLE_CONST(buffer)->GetStride());
+ }
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::AllocateBuffer(const gralloc1_buffer_descriptor_t *descriptor_ids,
+ buffer_handle_t *out_buffers) {
+ gralloc1_error_t status = GRALLOC1_ERROR_NONE;
+
+ // Validate descriptor
+ std::lock_guard<std::mutex> descriptor_lock(descriptor_lock_);
+ std::shared_ptr<gralloc::BufferDescriptor> descriptor;
+ const auto map_descriptor = descriptors_map_.find(descriptor_ids[0]);
+ if (map_descriptor == descriptors_map_.end()) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ } else {
+ descriptor = map_descriptor->second;
+ }
+
+ // Allocate separate buffer for each descriptor
+ if (buf_mgr_->AllocateBuffer(*descriptor, &out_buffers[0]) != Error::NONE) {
+ return GRALLOC1_ERROR_NO_RESOURCES;
+ }
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::AllocateBuffers(gralloc1_device_t *device, uint32_t num_descriptors,
+ const gralloc1_buffer_descriptor_t *descriptors,
+ buffer_handle_t *out_buffers) {
+ if (!num_descriptors || !descriptors) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ }
+
+ if (!device) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ if (num_descriptors != 1) {
+ return GRALLOC1_ERROR_UNSUPPORTED;
+ }
+
+ auto *dev = reinterpret_cast<GrallocImpl *>(device);
+ gralloc1_error_t status = dev->AllocateBuffer(descriptors, out_buffers);
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::RetainBuffer(gralloc1_device_t *device, buffer_handle_t buffer) {
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status == GRALLOC1_ERROR_NONE) {
+ const private_handle_t *hnd = PRIV_HANDLE_CONST(buffer);
+ GrallocImpl const *dev = GRALLOC_IMPL(device);
+ status = ToError(dev->buf_mgr_->RetainBuffer(hnd));
+ }
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::ReleaseBuffer(gralloc1_device_t *device, buffer_handle_t buffer) {
+ if (!device || !buffer) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ }
+
+ const private_handle_t *hnd = PRIV_HANDLE_CONST(buffer);
+ GrallocImpl const *dev = GRALLOC_IMPL(device);
+ return ToError(dev->buf_mgr_->ReleaseBuffer(hnd));
+}
+
+gralloc1_error_t GrallocImpl::GetFlexLayout(const private_handle_t *hnd,
+ struct android_flex_layout *layout) {
+ if (!IsYuvFormat(hnd->format)) {
+ return GRALLOC1_ERROR_UNSUPPORTED;
+ }
+
+ android_ycbcr yuvPlaneInfo[2];
+ int err = GetYUVPlaneInfo(hnd, yuvPlaneInfo);
+
+ if (err != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ layout->format = FLEX_FORMAT_YCbCr;
+ layout->num_planes = 3;
+
+ for (uint32_t i = 0; i < layout->num_planes; i++) {
+ layout->planes[i].bits_per_component = 8;
+ layout->planes[i].bits_used = 8;
+ layout->planes[i].h_increment = 1;
+ layout->planes[i].v_increment = 1;
+ layout->planes[i].h_subsampling = 2;
+ layout->planes[i].v_subsampling = 2;
+ }
+
+ // We are only returning flex layout for progressive or single field formats.
+ struct android_ycbcr ycbcr = yuvPlaneInfo[0];
+ layout->planes[0].top_left = static_cast<uint8_t *>(ycbcr.y);
+ layout->planes[0].component = FLEX_COMPONENT_Y;
+ layout->planes[0].v_increment = static_cast<int32_t>(ycbcr.ystride);
+
+ layout->planes[1].top_left = static_cast<uint8_t *>(ycbcr.cb);
+ layout->planes[1].component = FLEX_COMPONENT_Cb;
+ layout->planes[1].h_increment = static_cast<int32_t>(ycbcr.chroma_step);
+ layout->planes[1].v_increment = static_cast<int32_t>(ycbcr.cstride);
+
+ layout->planes[2].top_left = static_cast<uint8_t *>(ycbcr.cr);
+ layout->planes[2].component = FLEX_COMPONENT_Cr;
+ layout->planes[2].h_increment = static_cast<int32_t>(ycbcr.chroma_step);
+ layout->planes[2].v_increment = static_cast<int32_t>(ycbcr.cstride);
+ return GRALLOC1_ERROR_NONE;
+}
+
+gralloc1_error_t GrallocImpl::GetNumFlexPlanes(gralloc1_device_t *device, buffer_handle_t buffer,
+ uint32_t *out_num_planes) {
+ if (!out_num_planes) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status == GRALLOC1_ERROR_NONE) {
+ const private_handle_t *hnd = PRIV_HANDLE_CONST(buffer);
+ if (!IsYuvFormat(hnd->format)) {
+ status = GRALLOC1_ERROR_UNSUPPORTED;
+ } else {
+ *out_num_planes = 3;
+ }
+ }
+ return status;
+}
+
+static inline void CloseFdIfValid(int fd) {
+ if (fd > 0) {
+ close(fd);
+ }
+}
+
+gralloc1_error_t GrallocImpl::LockBuffer(gralloc1_device_t *device, buffer_handle_t buffer,
+ gralloc1_producer_usage_t prod_usage,
+ gralloc1_consumer_usage_t cons_usage,
+ const gralloc1_rect_t *region, void **out_data,
+ int32_t acquire_fence) {
+ ATRACE_CALL();
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status != GRALLOC1_ERROR_NONE || !out_data ||
+ !region) { // currently we ignore the region/rect client wants to lock
+ CloseFdIfValid(acquire_fence);
+ return status;
+ }
+
+ if (acquire_fence > 0) {
+ ATRACE_BEGIN("fence wait");
+ int error = sync_wait(acquire_fence, 1000);
+ ATRACE_END();
+ CloseFdIfValid(acquire_fence);
+ if (error < 0) {
+ ALOGE("%s: sync_wait timedout! error = %s", __FUNCTION__, strerror(errno));
+ return GRALLOC1_ERROR_UNDEFINED;
+ }
+ }
+
+ const private_handle_t *hnd = PRIV_HANDLE_CONST(buffer);
+ GrallocImpl const *dev = GRALLOC_IMPL(device);
+
+ // Either producer usage or consumer usage must be *_USAGE_NONE
+ if ((prod_usage != GRALLOC1_PRODUCER_USAGE_NONE) &&
+ (cons_usage != GRALLOC1_CONSUMER_USAGE_NONE)) {
+ // Current gralloc1 clients do not satisfy this restriction.
+ // See b/33588773 for details
+ // return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ status = ToError(dev->buf_mgr_->LockBuffer(
+ hnd, ProducerUsageToBufferUsage(prod_usage) | ConsumerUsageToBufferUsage(cons_usage)));
+ *out_data = reinterpret_cast<void *>(hnd->base);
+
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::LockFlex(gralloc1_device_t *device, buffer_handle_t buffer,
+ gralloc1_producer_usage_t prod_usage,
+ gralloc1_consumer_usage_t cons_usage,
+ const gralloc1_rect_t *region,
+ struct android_flex_layout *out_flex_layout,
+ int32_t acquire_fence) {
+ if (!out_flex_layout) {
+ CloseFdIfValid(acquire_fence);
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ void *out_data{};
+ gralloc1_error_t status = GrallocImpl::LockBuffer(device, buffer, prod_usage, cons_usage, region,
+ &out_data, acquire_fence);
+ if (status != GRALLOC1_ERROR_NONE) {
+ return status;
+ }
+
+ auto *dev = reinterpret_cast<GrallocImpl *>(device);
+ const private_handle_t *hnd = PRIV_HANDLE_CONST(buffer);
+ dev->GetFlexLayout(hnd, out_flex_layout);
+ return status;
+}
+
+gralloc1_error_t GrallocImpl::UnlockBuffer(gralloc1_device_t *device, buffer_handle_t buffer,
+ int32_t *release_fence) {
+ gralloc1_error_t status = CheckDeviceAndHandle(device, buffer);
+ if (status != GRALLOC1_ERROR_NONE) {
+ return status;
+ }
+
+ if (!release_fence) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ const private_handle_t *hnd = PRIV_HANDLE_CONST(buffer);
+ GrallocImpl const *dev = GRALLOC_IMPL(device);
+
+ *release_fence = -1;
+
+ return ToError(dev->buf_mgr_->UnlockBuffer(hnd));
+}
+
+static gralloc1_error_t Perform(int operation, va_list args) {
+ switch (operation) {
+ case GRALLOC_MODULE_PERFORM_GET_STRIDE: {
+ int width = va_arg(args, int);
+ int format = va_arg(args, int);
+ int *stride = va_arg(args, int *);
+ unsigned int alignedw = 0, alignedh = 0;
+
+ if (!stride) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ BufferInfo info(width, width, format);
+ GetAlignedWidthAndHeight(info, &alignedw, &alignedh);
+ *stride = INT(alignedw);
+ } break;
+
+ case GRALLOC_MODULE_PERFORM_GET_CUSTOM_STRIDE_FROM_HANDLE: {
+ private_handle_t *hnd = va_arg(args, private_handle_t *);
+ int *stride = va_arg(args, int *);
+ if (private_handle_t::validate(hnd) != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ if (!stride) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ BufferDim_t buffer_dim;
+ if (getMetaData(hnd, GET_BUFFER_GEOMETRY, &buffer_dim) == 0) {
+ *stride = buffer_dim.sliceWidth;
+ } else {
+ *stride = hnd->width;
+ }
+ } break;
+
+ case GRALLOC_MODULE_PERFORM_GET_CUSTOM_STRIDE_AND_HEIGHT_FROM_HANDLE: {
+ private_handle_t *hnd = va_arg(args, private_handle_t *);
+ int *stride = va_arg(args, int *);
+ int *height = va_arg(args, int *);
+ if (private_handle_t::validate(hnd) != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ if (!stride || !height) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ GetCustomDimensions(hnd, stride, height);
+ } break;
+
+ case GRALLOC_MODULE_PERFORM_GET_ATTRIBUTES: {
+ int width = va_arg(args, int);
+ int height = va_arg(args, int);
+ int format = va_arg(args, int);
+ uint64_t usage = va_arg(args, uint64_t);
+ usage |= va_arg(args, uint64_t);
+
+ int *aligned_width = va_arg(args, int *);
+ int *aligned_height = va_arg(args, int *);
+ int *tile_enabled = va_arg(args, int *);
+ if (!aligned_width || !aligned_height || !tile_enabled) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ unsigned int alignedw, alignedh;
+ BufferInfo info(width, height, format, usage);
+ *tile_enabled = IsUBwcEnabled(format, usage);
+ GetAlignedWidthAndHeight(info, &alignedw, &alignedh);
+ *aligned_width = INT(alignedw);
+ *aligned_height = INT(alignedh);
+ } break;
+
+ case GRALLOC_MODULE_PERFORM_GET_COLOR_SPACE_FROM_HANDLE: {
+ private_handle_t *hnd = va_arg(args, private_handle_t *);
+ int *color_space = va_arg(args, int *);
+
+ if (private_handle_t::validate(hnd) != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ if (!color_space) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ *color_space = 0;
+ GetColorSpaceFromMetadata(hnd, color_space);
+ } break;
+ case GRALLOC_MODULE_PERFORM_GET_YUV_PLANE_INFO: {
+ private_handle_t *hnd = va_arg(args, private_handle_t *);
+ android_ycbcr *ycbcr = va_arg(args, struct android_ycbcr *);
+ if (private_handle_t::validate(hnd) != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ if (!ycbcr) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ if (GetYUVPlaneInfo(hnd, ycbcr)) {
+ return GRALLOC1_ERROR_UNDEFINED;
+ }
+ } break;
+
+ case GRALLOC_MODULE_PERFORM_GET_MAP_SECURE_BUFFER_INFO: {
+ private_handle_t *hnd = va_arg(args, private_handle_t *);
+ int *map_secure_buffer = va_arg(args, int *);
+
+ if (private_handle_t::validate(hnd) != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ if (!map_secure_buffer) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ if (getMetaData(hnd, GET_MAP_SECURE_BUFFER, map_secure_buffer) != 0) {
+ *map_secure_buffer = 0;
+ }
+ } break;
+
+ case GRALLOC_MODULE_PERFORM_GET_UBWC_FLAG: {
+ private_handle_t *hnd = va_arg(args, private_handle_t *);
+ int *flag = va_arg(args, int *);
+
+ if (private_handle_t::validate(hnd) != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ if (!flag) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ *flag = hnd->flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED;
+ int linear_format = 0;
+ if (getMetaData(hnd, GET_LINEAR_FORMAT, &linear_format) == 0) {
+ if (linear_format) {
+ *flag = 0;
+ }
+ }
+ } break;
+
+ case GRALLOC_MODULE_PERFORM_GET_RGB_DATA_ADDRESS: {
+ private_handle_t *hnd = va_arg(args, private_handle_t *);
+ void **rgb_data = va_arg(args, void **);
+
+ if (private_handle_t::validate(hnd) != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ if (!rgb_data) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ if (GetRgbDataAddress(hnd, rgb_data)) {
+ return GRALLOC1_ERROR_UNDEFINED;
+ }
+ } break;
+
+ case GRALLOC1_MODULE_PERFORM_GET_INTERLACE_FLAG: {
+ private_handle_t *hnd = va_arg(args, private_handle_t *);
+ int *flag = va_arg(args, int *);
+
+ if (private_handle_t::validate(hnd) != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ if (!flag) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ if (getMetaData(hnd, GET_PP_PARAM_INTERLACED, flag) != 0) {
+ *flag = 0;
+ }
+ } break;
+
+ case GRALLOC_MODULE_PERFORM_SET_SINGLE_BUFFER_MODE: {
+ private_handle_t *hnd = va_arg(args, private_handle_t *);
+ uint32_t *enable = va_arg(args, uint32_t *);
+ if (private_handle_t::validate(hnd) != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+ if (setMetaData(hnd, SET_SINGLE_BUFFER_MODE, enable) != 0) {
+ return GRALLOC1_ERROR_UNSUPPORTED;
+ }
+ } break;
+
+ case GRALLOC_MODULE_PERFORM_GET_GRAPHICS_METADATA: {
+ private_handle_t* hnd = va_arg(args, private_handle_t *);
+
+ if (private_handle_t::validate(hnd) != 0) {
+ return GRALLOC1_ERROR_BAD_HANDLE;
+ }
+
+ void* graphic_metadata = va_arg(args, void*);
+
+ if (getMetaData(hnd, GET_GRAPHICS_METADATA, graphic_metadata) != 0) {
+ graphic_metadata = NULL;
+ return GRALLOC1_ERROR_UNSUPPORTED;
+ }
+ } break;
+
+ default:
+ break;
+ }
+ return GRALLOC1_ERROR_NONE;
+}
+
+gralloc1_error_t GrallocImpl::Gralloc1Perform(gralloc1_device_t *device, int operation, ...) {
+ if (!device) {
+ return GRALLOC1_ERROR_BAD_VALUE;
+ }
+
+ va_list args;
+ va_start(args, operation);
+ gralloc1_error_t err = Perform(operation, args);
+ va_end(args);
+
+ return err;
+}
+
+} // namespace gralloc
diff --git a/gralloc/gr_device_impl.h b/gralloc/gr_device_impl.h
new file mode 100644
index 0000000..82e9e71
--- /dev/null
+++ b/gralloc/gr_device_impl.h
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __GR_DEVICE_IMPL_H__
+#define __GR_DEVICE_IMPL_H__
+
+#include <hardware/gralloc1.h>
+#include <hardware/hardware.h>
+#include "gr_buf_mgr.h"
+
+struct private_module_t {
+ hw_module_t base;
+};
+
+#define GRALLOC_IMPL(exp) reinterpret_cast<GrallocImpl const *>(exp)
+
+namespace gralloc {
+
+class GrallocImpl : public gralloc1_device_t {
+ public:
+ static int CloseDevice(hw_device_t *device);
+ static void GetCapabilities(struct gralloc1_device *device, uint32_t *out_count,
+ int32_t * /*gralloc1_capability_t*/ out_capabilities);
+ static gralloc1_function_pointer_t GetFunction(
+ struct gralloc1_device *device, int32_t /*gralloc1_function_descriptor_t*/ descriptor);
+
+ static GrallocImpl *GetInstance(const struct hw_module_t *module) {
+ static GrallocImpl *instance = new GrallocImpl(module);
+ if (instance->IsInitialized()) {
+ return instance;
+ } else {
+ return nullptr;
+ }
+ }
+
+ private:
+ static inline gralloc1_error_t Dump(gralloc1_device_t *device, uint32_t *out_size,
+ char *out_buffer);
+ static inline gralloc1_error_t CheckDeviceAndHandle(gralloc1_device_t *device,
+ buffer_handle_t buffer);
+ static gralloc1_error_t CreateBufferDescriptor(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t *out_descriptor);
+ static gralloc1_error_t DestroyBufferDescriptor(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor);
+ static gralloc1_error_t SetConsumerUsage(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor,
+ gralloc1_consumer_usage_t usage);
+ static gralloc1_error_t SetBufferDimensions(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor,
+ uint32_t width, uint32_t height);
+ static gralloc1_error_t SetColorFormat(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor, int32_t format);
+ static gralloc1_error_t SetLayerCount(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor,
+ uint32_t layer_count);
+ static gralloc1_error_t SetProducerUsage(gralloc1_device_t *device,
+ gralloc1_buffer_descriptor_t descriptor,
+ gralloc1_producer_usage_t usage);
+ static gralloc1_error_t GetBackingStore(gralloc1_device_t *device, buffer_handle_t buffer,
+ gralloc1_backing_store_t *out_store);
+ static gralloc1_error_t GetConsumerUsage(gralloc1_device_t *device, buffer_handle_t buffer,
+ gralloc1_consumer_usage_t *out_usage);
+ static gralloc1_error_t GetBufferDimensions(gralloc1_device_t *device, buffer_handle_t buffer,
+ uint32_t *out_width, uint32_t *out_height);
+ static gralloc1_error_t GetColorFormat(gralloc1_device_t *device, buffer_handle_t descriptor,
+ int32_t *outFormat);
+ static gralloc1_error_t GetLayerCount(gralloc1_device_t *device, buffer_handle_t buffer,
+ uint32_t *out_layer_count);
+ static gralloc1_error_t GetProducerUsage(gralloc1_device_t *device, buffer_handle_t buffer,
+ gralloc1_producer_usage_t *out_usage);
+ static gralloc1_error_t GetBufferStride(gralloc1_device_t *device, buffer_handle_t buffer,
+ uint32_t *out_stride);
+ static gralloc1_error_t AllocateBuffers(gralloc1_device_t *device, uint32_t num_dptors,
+ const gralloc1_buffer_descriptor_t *descriptors,
+ buffer_handle_t *out_buffers);
+ static gralloc1_error_t RetainBuffer(gralloc1_device_t *device, buffer_handle_t buffer);
+ static gralloc1_error_t ReleaseBuffer(gralloc1_device_t *device, buffer_handle_t buffer);
+ static gralloc1_error_t GetNumFlexPlanes(gralloc1_device_t *device, buffer_handle_t buffer,
+ uint32_t *out_num_planes);
+ static gralloc1_error_t LockBuffer(gralloc1_device_t *device, buffer_handle_t buffer,
+ gralloc1_producer_usage_t prod_usage,
+ gralloc1_consumer_usage_t cons_usage,
+ const gralloc1_rect_t *region, void **out_data,
+ int32_t acquire_fence);
+ static gralloc1_error_t LockFlex(gralloc1_device_t *device, buffer_handle_t buffer,
+ gralloc1_producer_usage_t prod_usage,
+ gralloc1_consumer_usage_t cons_usage,
+ const gralloc1_rect_t *region,
+ struct android_flex_layout *out_flex_layout,
+ int32_t acquire_fence);
+
+ static gralloc1_error_t UnlockBuffer(gralloc1_device_t *device, buffer_handle_t buffer,
+ int32_t *release_fence);
+ static gralloc1_error_t Gralloc1Perform(gralloc1_device_t *device, int operation, ...);
+
+ gralloc1_error_t CreateBufferDescriptorLocked(gralloc1_buffer_descriptor_t *descriptor_id);
+ gralloc1_error_t DestroyBufferDescriptorLocked(gralloc1_buffer_descriptor_t descriptor_id);
+ gralloc1_error_t AllocateBuffer(const gralloc1_buffer_descriptor_t *descriptor_ids,
+ buffer_handle_t *out_buffers);
+ gralloc1_error_t GetFlexLayout(const private_handle_t *hnd, struct android_flex_layout *layout);
+
+ template <typename... Args>
+ gralloc1_error_t CallBufferDescriptorFunction(gralloc1_buffer_descriptor_t descriptor_id,
+ void (BufferDescriptor::*member)(Args...),
+ Args... args) {
+ std::lock_guard<std::mutex> lock(descriptor_lock_);
+ const auto map_descriptor = descriptors_map_.find(descriptor_id);
+ if (map_descriptor == descriptors_map_.end()) {
+ return GRALLOC1_ERROR_BAD_DESCRIPTOR;
+ }
+ const auto descriptor = map_descriptor->second;
+ (descriptor.get()->*member)(std::forward<Args>(args)...);
+ return GRALLOC1_ERROR_NONE;
+ }
+
+ explicit GrallocImpl(const hw_module_t *module);
+ ~GrallocImpl();
+ bool Init();
+ bool IsInitialized() const { return initialized_; }
+
+ BufferManager *buf_mgr_ = NULL;
+ bool initialized_ = false;
+ std::mutex descriptor_lock_;
+ std::unordered_map<gralloc1_buffer_descriptor_t, std::shared_ptr<gralloc::BufferDescriptor>>
+ descriptors_map_ = {};
+ static std::atomic<uint64_t> next_descriptor_id_;
+};
+
+} // namespace gralloc
+
+#endif // __GR_DEVICE_IMPL_H__
diff --git a/gralloc/gr_ion_alloc.cpp b/gralloc/gr_ion_alloc.cpp
new file mode 100644
index 0000000..a9e06da
--- /dev/null
+++ b/gralloc/gr_ion_alloc.cpp
@@ -0,0 +1,353 @@
+/*
+ * Copyright (c) 2011-2018, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#define DEBUG 0
+#define ATRACE_TAG (ATRACE_TAG_GRAPHICS | ATRACE_TAG_HAL)
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <linux/msm_ion.h>
+#if TARGET_ION_ABI_VERSION >= 2
+#include <linux/dma-buf.h>
+#include <ion/ion.h>
+#endif
+#include <stdlib.h>
+#include <fcntl.h>
+#include <log/log.h>
+#include <cutils/trace.h>
+#include <errno.h>
+#include <utils/Trace.h>
+#include <string>
+
+#include "gr_utils.h"
+#include "gralloc_priv.h"
+#include "gr_ion_alloc.h"
+
+namespace gralloc {
+
+bool IonAlloc::Init() {
+ if (ion_dev_fd_ == FD_INIT) {
+ ion_dev_fd_ = OpenIonDevice();
+ }
+
+ if (ion_dev_fd_ < 0) {
+ ALOGE("%s: Failed to open ion device - %s", __FUNCTION__, strerror(errno));
+ ion_dev_fd_ = FD_INIT;
+ return false;
+ }
+
+ return true;
+}
+
+#if TARGET_ION_ABI_VERSION >= 2 // Use libion APIs for new ion
+
+int IonAlloc::OpenIonDevice() {
+ return ion_open();
+}
+
+void IonAlloc::CloseIonDevice() {
+ if (ion_dev_fd_ > FD_INIT) {
+ ion_close(ion_dev_fd_);
+ }
+
+ ion_dev_fd_ = FD_INIT;
+}
+
+int IonAlloc::AllocBuffer(AllocData *data) {
+ ATRACE_CALL();
+ int err = 0;
+ int fd = -1;
+ unsigned int flags = data->flags;
+
+ flags |= data->uncached ? 0 : ION_FLAG_CACHED;
+
+ std::string tag_name{};
+ if (ATRACE_ENABLED()) {
+ tag_name = "libion alloc size: " + std::to_string(data->size);
+ }
+
+ ATRACE_BEGIN(tag_name.c_str());
+ err = ion_alloc_fd(ion_dev_fd_, data->size, data->align, data->heap_id, flags, &fd);
+ ATRACE_END();
+ if (err) {
+ ALOGE("libion alloc failed ion_fd %d size %d align %d heap_id %x flags %x",
+ ion_dev_fd_, data->size, data->align, data->heap_id, flags);
+ return err;
+ }
+
+ data->fd = fd;
+ data->ion_handle = fd; // For new ion api ion_handle does not exists so reusing fd for now
+ ALOGD_IF(DEBUG, "libion: Allocated buffer size:%u fd:%d", data->size, data->fd);
+
+ return 0;
+}
+
+int IonAlloc::FreeBuffer(void *base, unsigned int size, unsigned int offset, int fd,
+ int /*ion_handle*/) {
+ ATRACE_CALL();
+ int err = 0;
+ ALOGD_IF(DEBUG, "libion: Freeing buffer base:%p size:%u fd:%d", base, size, fd);
+
+ if (base) {
+ err = UnmapBuffer(base, size, offset);
+ }
+
+ close(fd);
+ return err;
+}
+
+int IonAlloc::ImportBuffer(int fd) {
+ // For new ion api ion_handle does not exists so reusing fd for now
+ return fd;
+}
+
+int IonAlloc::CleanBuffer(void */*base*/, unsigned int /*size*/, unsigned int /*offset*/,
+ int /*handle*/, int op, int dma_buf_fd) {
+ ATRACE_CALL();
+ ATRACE_INT("operation id", op);
+
+ struct dma_buf_sync sync;
+ int err = 0;
+
+ switch (op) {
+ case CACHE_CLEAN:
+ sync.flags = DMA_BUF_SYNC_END | DMA_BUF_SYNC_RW;
+ break;
+ case CACHE_INVALIDATE:
+ sync.flags = DMA_BUF_SYNC_START | DMA_BUF_SYNC_RW;
+ break;
+ case CACHE_READ_DONE:
+ sync.flags = DMA_BUF_SYNC_END | DMA_BUF_SYNC_READ;
+ break;
+ default:
+ ALOGE("%s: Invalid operation %d", __FUNCTION__, op);
+ return -1;
+ }
+
+ if (ioctl(dma_buf_fd, INT(DMA_BUF_IOCTL_SYNC), &sync)) {
+ err = -errno;
+ ALOGE("%s: DMA_BUF_IOCTL_SYNC failed with error - %s", __FUNCTION__, strerror(errno));
+ return err;
+ }
+
+ return 0;
+}
+
+#else
+#ifndef TARGET_ION_ABI_VERSION // Use old ion apis directly
+
+int IonAlloc::OpenIonDevice() {
+ return open(kIonDevice, O_RDONLY);
+}
+
+void IonAlloc::CloseIonDevice() {
+ if (ion_dev_fd_ > FD_INIT) {
+ close(ion_dev_fd_);
+ }
+
+ ion_dev_fd_ = FD_INIT;
+}
+
+int IonAlloc::AllocBuffer(AllocData *data) {
+ ATRACE_CALL();
+ int err = 0;
+ struct ion_handle_data handle_data;
+ struct ion_fd_data fd_data;
+ struct ion_allocation_data ion_alloc_data;
+
+ ion_alloc_data.len = data->size;
+ ion_alloc_data.align = data->align;
+ ion_alloc_data.heap_id_mask = data->heap_id;
+ ion_alloc_data.flags = data->flags;
+ ion_alloc_data.flags |= data->uncached ? 0 : ION_FLAG_CACHED;
+ std::string tag_name{};
+ if (ATRACE_ENABLED()) {
+ tag_name = "ION_IOC_ALLOC size: " + std::to_string(data->size);
+ }
+
+ ATRACE_BEGIN(tag_name.c_str());
+ if (ioctl(ion_dev_fd_, INT(ION_IOC_ALLOC), &ion_alloc_data)) {
+ err = -errno;
+ ALOGE("ION_IOC_ALLOC failed with error - %s", strerror(errno));
+ return err;
+ }
+ ATRACE_END();
+
+ fd_data.handle = ion_alloc_data.handle;
+ handle_data.handle = ion_alloc_data.handle;
+ ATRACE_BEGIN("ION_IOC_MAP");
+ if (ioctl(ion_dev_fd_, INT(ION_IOC_MAP), &fd_data)) {
+ err = -errno;
+ ALOGE("%s: ION_IOC_MAP failed with error - %s", __FUNCTION__, strerror(errno));
+ ioctl(ion_dev_fd_, INT(ION_IOC_FREE), &handle_data);
+ return err;
+ }
+ ATRACE_END();
+
+ data->fd = fd_data.fd;
+ data->ion_handle = handle_data.handle;
+ ALOGD_IF(DEBUG, "ion: Allocated buffer size:%zu fd:%d handle:0x%x", ion_alloc_data.len, data->fd,
+ data->ion_handle);
+
+ return 0;
+}
+
+int IonAlloc::FreeBuffer(void *base, unsigned int size, unsigned int offset, int fd,
+ int ion_handle) {
+ ATRACE_CALL();
+ int err = 0;
+ ALOGD_IF(DEBUG, "ion: Freeing buffer base:%p size:%u fd:%d handle:0x%x", base, size, fd,
+ ion_handle);
+
+ if (base) {
+ err = UnmapBuffer(base, size, offset);
+ }
+
+ if (ion_handle > 0) {
+ struct ion_handle_data handle_data;
+ handle_data.handle = ion_handle;
+ ioctl(ion_dev_fd_, INT(ION_IOC_FREE), &handle_data);
+ }
+ close(fd);
+ return err;
+}
+
+int IonAlloc::ImportBuffer(int fd) {
+ struct ion_fd_data fd_data;
+ int err = 0;
+ fd_data.fd = fd;
+ if (ioctl(ion_dev_fd_, INT(ION_IOC_IMPORT), &fd_data)) {
+ err = -errno;
+ ALOGE("%s: ION_IOC_IMPORT failed with error - %s", __FUNCTION__, strerror(errno));
+ return err;
+ }
+ return fd_data.handle;
+}
+
+int IonAlloc::CleanBuffer(void *base, unsigned int size, unsigned int offset, int handle, int op,
+ int /*fd*/) {
+ if (op == CACHE_READ_DONE) {
+ return 0;
+ }
+
+ ATRACE_CALL();
+ ATRACE_INT("operation id", op);
+ struct ion_flush_data flush_data;
+ int err = 0;
+
+ flush_data.handle = handle;
+ flush_data.vaddr = base;
+ // offset and length are unsigned int
+ flush_data.offset = offset;
+ flush_data.length = size;
+
+ struct ion_custom_data d;
+ switch (op) {
+ case CACHE_CLEAN:
+ d.cmd = ION_IOC_CLEAN_CACHES;
+ break;
+ case CACHE_INVALIDATE:
+ d.cmd = ION_IOC_INV_CACHES;
+ break;
+ case CACHE_CLEAN_AND_INVALIDATE:
+ default:
+ d.cmd = ION_IOC_CLEAN_INV_CACHES;
+ }
+
+ d.arg = (unsigned long)(&flush_data); // NOLINT
+ if (ioctl(ion_dev_fd_, INT(ION_IOC_CUSTOM), &d)) {
+ err = -errno;
+ ALOGE("%s: ION_IOC_CLEAN_INV_CACHES failed with error - %s", __FUNCTION__, strerror(errno));
+ return err;
+ }
+
+ return 0;
+}
+
+#else // This ion version is not supported
+
+int IonAlloc::OpenIonDevice() {
+ return -EINVAL;
+}
+
+void IonAlloc::CloseIonDevice() {
+}
+
+int IonAlloc::AllocBuffer(AllocData * /*data*/) {
+ return -EINVAL;
+}
+
+int IonAlloc::FreeBuffer(void * /*base*/, unsigned int /*size*/, unsigned int /*offset*/,
+ int /*fd*/, int /*ion_handle*/) {
+ return -EINVAL;
+}
+
+int IonAlloc::ImportBuffer(int /*fd*/) {
+ return -EINVAL;
+}
+
+int IonAlloc::CleanBuffer(void * /*base*/, unsigned int /*size*/, unsigned int /*offset*/,
+ int /*handle*/, int /*op*/, int /*fd*/) {
+ return -EINVAL;
+}
+
+#endif
+#endif // TARGET_ION_ABI_VERSION
+
+
+int IonAlloc::MapBuffer(void **base, unsigned int size, unsigned int offset, int fd) {
+ ATRACE_CALL();
+ int err = 0;
+ void *addr = 0;
+
+ addr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+ *base = addr;
+ if (addr == MAP_FAILED) {
+ err = -errno;
+ ALOGE("ion: Failed to map memory in the client: %s", strerror(errno));
+ } else {
+ ALOGD_IF(DEBUG, "ion: Mapped buffer base:%p size:%u offset:%u fd:%d", addr, size, offset, fd);
+ }
+
+ return err;
+}
+
+int IonAlloc::UnmapBuffer(void *base, unsigned int size, unsigned int /*offset*/) {
+ ATRACE_CALL();
+ ALOGD_IF(DEBUG, "ion: Unmapping buffer base:%p size:%u", base, size);
+
+ int err = 0;
+ if (munmap(base, size)) {
+ err = -errno;
+ ALOGE("ion: Failed to unmap memory at %p : %s", base, strerror(errno));
+ }
+
+ return err;
+}
+
+} // namespace gralloc
diff --git a/gralloc/gr_ion_alloc.h b/gralloc/gr_ion_alloc.h
new file mode 100644
index 0000000..8cb1568
--- /dev/null
+++ b/gralloc/gr_ion_alloc.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2011-2018, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __GR_ION_ALLOC_H__
+#define __GR_ION_ALLOC_H__
+
+#include <linux/msm_ion.h>
+
+#define FD_INIT -1
+
+namespace gralloc {
+
+enum {
+ CACHE_CLEAN = 0x1,
+ CACHE_INVALIDATE,
+ CACHE_CLEAN_AND_INVALIDATE,
+ CACHE_READ_DONE
+};
+
+struct AllocData {
+ void *base = NULL;
+ int fd = -1;
+ int ion_handle = -1;
+ unsigned int offset = 0;
+ unsigned int size = 0;
+ unsigned int align = 1;
+ uintptr_t handle = 0;
+ bool uncached = false;
+ unsigned int flags = 0x0;
+ unsigned int heap_id = 0x0;
+ unsigned int alloc_type = 0x0;
+};
+
+class IonAlloc {
+ public:
+ IonAlloc() { ion_dev_fd_ = FD_INIT; }
+
+ ~IonAlloc() { CloseIonDevice(); }
+
+ bool Init();
+ int AllocBuffer(AllocData *data);
+ int FreeBuffer(void *base, unsigned int size, unsigned int offset, int fd, int ion_handle);
+ int MapBuffer(void **base, unsigned int size, unsigned int offset, int fd);
+ int ImportBuffer(int fd);
+ int UnmapBuffer(void *base, unsigned int size, unsigned int offset);
+ int CleanBuffer(void *base, unsigned int size, unsigned int offset, int handle, int op, int fd);
+
+ private:
+#ifndef TARGET_ION_ABI_VERSION
+ const char *kIonDevice = "/dev/ion";
+#endif
+
+ int OpenIonDevice();
+ void CloseIonDevice();
+
+ int ion_dev_fd_;
+};
+
+} // namespace gralloc
+
+#endif // __GR_ION_ALLOC_H__
diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp
new file mode 100644
index 0000000..98e60e2
--- /dev/null
+++ b/gralloc/gr_utils.cpp
@@ -0,0 +1,1830 @@
+/*
+ * Copyright (c) 2011-2020, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#include <media/msm_media_info.h>
+
+#include <drm/drm_fourcc.h>
+
+#include <algorithm>
+
+#include "gr_adreno_info.h"
+#include "gr_utils.h"
+
+#define ASTC_BLOCK_SIZE 16
+
+#ifndef COLOR_FMT_P010_UBWC
+#define COLOR_FMT_P010_UBWC 9
+#endif
+
+namespace gralloc {
+
+bool IsYuvFormat(int format) {
+ switch (format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: // Same as YCbCr_420_SP_VENUS
+ case HAL_PIXEL_FORMAT_NV21_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV21_ZSL:
+ case HAL_PIXEL_FORMAT_RAW16:
+ case HAL_PIXEL_FORMAT_Y16:
+ case HAL_PIXEL_FORMAT_RAW12:
+ case HAL_PIXEL_FORMAT_RAW10:
+ case HAL_PIXEL_FORMAT_YV12:
+ case HAL_PIXEL_FORMAT_Y8:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ // Below formats used by camera and VR
+ case HAL_PIXEL_FORMAT_BLOB:
+ case HAL_PIXEL_FORMAT_RAW_OPAQUE:
+ case HAL_PIXEL_FORMAT_NV12_HEIF:
+ case HAL_PIXEL_FORMAT_CbYCrY_422_I:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool IsUncompressedRGBFormat(int format) {
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ case HAL_PIXEL_FORMAT_RGB_888:
+ case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ case HAL_PIXEL_FORMAT_RGBA_4444:
+ case HAL_PIXEL_FORMAT_R_8:
+ case HAL_PIXEL_FORMAT_RG_88:
+ case HAL_PIXEL_FORMAT_BGRX_8888:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ case HAL_PIXEL_FORMAT_ARGB_2101010:
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ case HAL_PIXEL_FORMAT_XRGB_2101010:
+ case HAL_PIXEL_FORMAT_BGRA_1010102:
+ case HAL_PIXEL_FORMAT_ABGR_2101010:
+ case HAL_PIXEL_FORMAT_BGRX_1010102:
+ case HAL_PIXEL_FORMAT_XBGR_2101010:
+ case HAL_PIXEL_FORMAT_RGBA_FP16:
+ case HAL_PIXEL_FORMAT_BGR_888:
+ return true;
+ default:
+ break;
+ }
+
+ return false;
+}
+
+bool IsCompressedRGBFormat(int format) {
+ switch (format) {
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_4x4_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x4_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_5x5_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x5_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_6x6_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x5_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x6_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_8x8_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x5_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x6_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x8_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_10x10_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x10_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_12x12_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:
+ return true;
+ default:
+ break;
+ }
+
+ return false;
+}
+
+uint32_t GetBppForUncompressedRGB(int format) {
+ uint32_t bpp = 0;
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RGBA_FP16:
+ bpp = 8;
+ break;
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ case HAL_PIXEL_FORMAT_BGRX_8888:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ case HAL_PIXEL_FORMAT_ARGB_2101010:
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ case HAL_PIXEL_FORMAT_XRGB_2101010:
+ case HAL_PIXEL_FORMAT_BGRA_1010102:
+ case HAL_PIXEL_FORMAT_ABGR_2101010:
+ case HAL_PIXEL_FORMAT_BGRX_1010102:
+ case HAL_PIXEL_FORMAT_XBGR_2101010:
+ bpp = 4;
+ break;
+ case HAL_PIXEL_FORMAT_RGB_888:
+ case HAL_PIXEL_FORMAT_BGR_888:
+ bpp = 3;
+ break;
+ case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ case HAL_PIXEL_FORMAT_RGBA_4444:
+ bpp = 2;
+ break;
+ default:
+ ALOGE("Error : %s New format request = 0x%x", __FUNCTION__, format);
+ break;
+ }
+
+ return bpp;
+}
+
+bool CpuCanAccess(uint64_t usage) {
+ return CpuCanRead(usage) || CpuCanWrite(usage);
+}
+
+bool CpuCanRead(uint64_t usage) {
+ if (usage & BufferUsage::CPU_READ_MASK) {
+ return true;
+ }
+
+ return false;
+}
+
+bool CpuCanWrite(uint64_t usage) {
+ if (usage & BufferUsage::CPU_WRITE_MASK) {
+ // Application intends to use CPU for rendering
+ return true;
+ }
+
+ return false;
+}
+
+uint32_t GetDataAlignment(int format, uint64_t usage) {
+ uint32_t align = UINT(getpagesize());
+ if (format == HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED) {
+ align = SIZE_8K;
+ }
+
+ if (usage & BufferUsage::PROTECTED) {
+ if ((usage & BufferUsage::CAMERA_OUTPUT) || (usage & GRALLOC_USAGE_PRIVATE_SECURE_DISPLAY)) {
+ // The alignment here reflects qsee mmu V7L/V8L requirement
+ align = SZ_2M;
+ } else {
+ align = SECURE_ALIGN;
+ }
+ }
+
+ return align;
+}
+
+bool IsGPUFlagSupported(uint64_t usage) {
+ bool ret = true;
+ if ((usage & BufferUsage::GPU_MIPMAP_COMPLETE)) {
+ ALOGE("GPU_MIPMAP_COMPLETE not supported");
+ ret = false;
+ }
+
+ if ((usage & BufferUsage::GPU_CUBE_MAP)) {
+ ALOGE("GPU_CUBE_MAP not supported");
+ ret = false;
+ }
+
+ return ret;
+}
+
+int GetBpp(int format) {
+ if (IsUncompressedRGBFormat(format)) {
+ return GetBppForUncompressedRGB(format);
+ }
+ switch (format) {
+ case HAL_PIXEL_FORMAT_COMPRESSED_RGBA_ASTC_4x4_KHR:
+ case HAL_PIXEL_FORMAT_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:
+ case HAL_PIXEL_FORMAT_RAW8:
+ case HAL_PIXEL_FORMAT_Y8:
+ return 1;
+ case HAL_PIXEL_FORMAT_RAW16:
+ case HAL_PIXEL_FORMAT_Y16:
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_422_I:
+ case HAL_PIXEL_FORMAT_YCrCb_422_I:
+ case HAL_PIXEL_FORMAT_CbYCrY_422_I:
+ return 2;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ return 3;
+ default:
+ return -1;
+ }
+}
+
+// Returns the final buffer size meant to be allocated with ion
+unsigned int GetSize(const BufferInfo &info, unsigned int alignedw, unsigned int alignedh) {
+ unsigned int size = 0;
+ int format = info.format;
+ int width = info.width;
+ int height = info.height;
+ uint64_t usage = info.usage;
+
+ if (!IsGPUFlagSupported(usage)) {
+ ALOGE("Unsupported GPU usage flags present 0x%" PRIx64, usage);
+ return 0;
+ }
+
+ if (IsUBwcEnabled(format, usage)) {
+ size = GetUBwcSize(width, height, format, alignedw, alignedh);
+ } else if (IsUncompressedRGBFormat(format)) {
+ uint32_t bpp = GetBppForUncompressedRGB(format);
+ size = alignedw * alignedh * bpp;
+ } else if (IsCompressedRGBFormat(format)) {
+ size = alignedw * alignedh * ASTC_BLOCK_SIZE;
+ } else {
+ // Below switch should be for only YUV/custom formats
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RAW16:
+ case HAL_PIXEL_FORMAT_Y16:size = alignedw * alignedh * 2;
+ break;
+ case HAL_PIXEL_FORMAT_RAW10:
+ case HAL_PIXEL_FORMAT_RAW12:size = ALIGN(alignedw * alignedh, SIZE_4K);
+ break;
+ case HAL_PIXEL_FORMAT_RAW8:
+ case HAL_PIXEL_FORMAT_Y8:size = alignedw * alignedh * 1;
+ break;
+ // adreno formats
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO: // NV21
+ size = ALIGN(alignedw * alignedh, SIZE_4K);
+ size += (unsigned int) ALIGN(2 * ALIGN(width / 2, 32) * ALIGN(height / 2, 32), SIZE_4K);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED: // NV12
+ // The chroma plane is subsampled,
+ // but the pitch in bytes is unchanged
+ // The GPU needs 4K alignment, but the video decoder needs 8K
+ size = ALIGN(alignedw * alignedh, SIZE_8K);
+ size += ALIGN(alignedw * (unsigned int) ALIGN(height / 2, 32), SIZE_8K);
+ break;
+ case HAL_PIXEL_FORMAT_YV12:
+ if ((format == HAL_PIXEL_FORMAT_YV12) && ((width & 1) || (height & 1))) {
+ ALOGE("w or h is odd for the YV12 format");
+ return 0;
+ }
+ size = alignedw * alignedh + (ALIGN(alignedw / 2, 16) * (alignedh / 2)) * 2;
+ size = ALIGN(size, (unsigned int) SIZE_4K);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ size = ALIGN((alignedw * alignedh) + (alignedw * alignedh) / 2 + 1, SIZE_4K);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ size = ALIGN((alignedw * alignedh * 2) + (alignedw * alignedh) + 1, SIZE_4K);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ size = VENUS_BUFFER_SIZE(COLOR_FMT_P010,
+ width,
+ height);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_422_I:
+ case HAL_PIXEL_FORMAT_YCrCb_422_I:
+ case HAL_PIXEL_FORMAT_CbYCrY_422_I:
+ if (width & 1) {
+ ALOGE("width is odd for the YUV422_SP format");
+ return 0;
+ }
+ size = ALIGN(alignedw * alignedh * 2, SIZE_4K);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ size = VENUS_BUFFER_SIZE(COLOR_FMT_NV12, width, height);
+ break;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV21_ENCODEABLE:
+ size = VENUS_BUFFER_SIZE(COLOR_FMT_NV21, width, height);
+ break;
+ case HAL_PIXEL_FORMAT_BLOB:
+ case HAL_PIXEL_FORMAT_RAW_OPAQUE:
+ if (height != 1) {
+ ALOGE("%s: Buffers with HAL_PIXEL_FORMAT_BLOB must have height 1 ", __FUNCTION__);
+ return 0;
+ }
+ size = (unsigned int) width;
+ break;
+ case HAL_PIXEL_FORMAT_NV21_ZSL:
+ size = ALIGN((alignedw * alignedh) + (alignedw * alignedh) / 2,
+ SIZE_4K);
+ break;
+ case HAL_PIXEL_FORMAT_NV12_HEIF:
+ size = VENUS_BUFFER_SIZE(COLOR_FMT_NV12_512, width, height);
+ break;
+ default:ALOGE("%s: Unrecognized pixel format: 0x%x", __FUNCTION__, format);
+ return 0;
+ }
+ }
+ auto align = GetDataAlignment(format, usage);
+ size = ALIGN(size, align) * info.layer_count;
+ return size;
+}
+
+int GetBufferSizeAndDimensions(const BufferInfo &info, unsigned int *size, unsigned int *alignedw,
+ unsigned int *alignedh) {
+ GraphicsMetadata graphics_metadata = {};
+ return GetBufferSizeAndDimensions(info, size, alignedw, alignedh, &graphics_metadata);
+}
+
+int GetBufferSizeAndDimensions(const BufferInfo &info, unsigned int *size, unsigned int *alignedw,
+ unsigned int *alignedh, GraphicsMetadata *graphics_metadata) {
+ int buffer_type = GetBufferType(info.format);
+ if (CanUseAdrenoForSize(buffer_type, info.usage)) {
+ return GetGpuResourceSizeAndDimensions(info, size, alignedw, alignedh, graphics_metadata);
+ } else {
+ GetAlignedWidthAndHeight(info, alignedw, alignedh);
+ *size = GetSize(info, *alignedw, *alignedh);
+ }
+ return 0;
+}
+
+void GetYuvUbwcSPPlaneInfo(uint32_t width, uint32_t height, int color_format,
+ PlaneLayoutInfo *plane_info) {
+ // UBWC buffer has these 4 planes in the following sequence:
+ // Y_Plane, UV_Plane, Y_Meta_Plane, UV_Meta_Plane
+ unsigned int y_meta_stride, y_meta_height, y_meta_size;
+ unsigned int y_stride, y_height, y_size;
+ unsigned int c_meta_stride, c_meta_height, c_meta_size;
+ unsigned int alignment = 4096;
+ unsigned int c_stride, c_height, c_size;
+ uint64_t yOffset, cOffset, yMetaOffset, cMetaOffset;
+
+ y_meta_stride = VENUS_Y_META_STRIDE(color_format, INT(width));
+ y_meta_height = VENUS_Y_META_SCANLINES(color_format, INT(height));
+ y_meta_size = ALIGN((y_meta_stride * y_meta_height), alignment);
+
+ y_stride = VENUS_Y_STRIDE(color_format, INT(width));
+ y_height = VENUS_Y_SCANLINES(color_format, INT(height));
+ y_size = ALIGN((y_stride * y_height), alignment);
+
+ c_meta_stride = VENUS_UV_META_STRIDE(color_format, INT(width));
+ c_meta_height = VENUS_UV_META_SCANLINES(color_format, INT(height));
+ c_meta_size = ALIGN((c_meta_stride * c_meta_height), alignment);
+
+ c_stride = VENUS_UV_STRIDE(color_format, INT(width));
+ c_height = VENUS_UV_SCANLINES(color_format, INT(height));
+ c_size = ALIGN((c_stride * c_height), alignment);
+
+ yMetaOffset = 0;
+ yOffset = y_meta_size;
+ cMetaOffset = y_meta_size + y_size;
+ cOffset = y_meta_size + y_size + c_meta_size;
+
+ plane_info[0].component = (PlaneComponent)PLANE_COMPONENT_Y;
+ plane_info[0].offset = (uint32_t)yOffset;
+ plane_info[0].stride = static_cast<int32_t>(UINT(width));
+ plane_info[0].stride_bytes = static_cast<int32_t>(y_stride);
+ plane_info[0].scanlines = static_cast<int32_t>(y_height);
+ plane_info[0].size = static_cast<uint32_t>(y_size);
+
+ plane_info[1].component = (PlaneComponent)(PLANE_COMPONENT_Cb | PLANE_COMPONENT_Cr);
+ plane_info[1].offset = (uint32_t)cOffset;
+ plane_info[1].stride = static_cast<int32_t>(UINT(width));
+ plane_info[1].stride_bytes = static_cast<int32_t>(c_stride);
+ plane_info[1].scanlines = static_cast<int32_t>(c_height);
+ plane_info[1].size = static_cast<uint32_t>(c_size);
+
+ plane_info[2].component = (PlaneComponent)(PLANE_COMPONENT_META | PLANE_COMPONENT_Y);
+ plane_info[2].offset = (uint32_t)yMetaOffset;
+ plane_info[2].stride = static_cast<int32_t>(UINT(width));
+ plane_info[2].stride_bytes = static_cast<int32_t>(y_meta_stride);
+ plane_info[2].scanlines = static_cast<int32_t>(y_meta_height);
+ plane_info[2].size = static_cast<uint32_t>(y_meta_size);
+
+ plane_info[3].component =
+ (PlaneComponent)(PLANE_COMPONENT_META | PLANE_COMPONENT_Cb | PLANE_COMPONENT_Cr);
+ plane_info[3].offset = (uint32_t)cMetaOffset;
+ plane_info[3].stride = static_cast<int32_t>(UINT(width));
+ plane_info[3].stride_bytes = static_cast<int32_t>(c_meta_stride);
+ plane_info[3].scanlines = static_cast<int32_t>(c_meta_height);
+ plane_info[3].size = static_cast<uint32_t>(c_meta_size);
+}
+
+// This API gets information about 8 planes (Y_Plane, UV_Plane, Y_Meta_Plane, UV_Meta_Plane,
+// Y_Plane, UV_Plane, Y_Meta_Plane, UV_Meta_Plane) and it stores the
+// information in PlaneLayoutInfo array.
+void GetYuvUbwcInterlacedSPPlaneInfo(uint32_t width, uint32_t height,
+ PlaneLayoutInfo plane_info[8]) {
+ // UBWC interlaced has top-bottom field layout with each field as
+ // 8-plane (including meta plane also) NV12_UBWC with width = image_width
+ // & height = image_height / 2.
+ // Client passed plane_info argument is ptr to struct PlaneLayoutInfo[8].
+ // Plane info to be filled for each field separately.
+ height = (height + 1) >> 1;
+
+ GetYuvUbwcSPPlaneInfo(width, height, COLOR_FMT_NV12_UBWC, &plane_info[0]);
+
+ GetYuvUbwcSPPlaneInfo(width, height, COLOR_FMT_NV12_UBWC, &plane_info[4]);
+}
+
+// This API gets information about 2 planes (Y_Plane & UV_Plane)
+void GetYuvSPPlaneInfo(const BufferInfo &info, int format, uint32_t width, uint32_t height,
+ uint32_t bpp, PlaneLayoutInfo *plane_info) {
+ int unaligned_width = info.width;
+ int unaligned_height = info.height;
+ unsigned int y_stride = 0, y_height = 0, y_size = 0;
+ unsigned int c_stride = 0, c_height = 0, c_size = 0;
+ uint64_t yOffset, cOffset;
+
+ y_stride = c_stride = UINT(width) * bpp;
+ y_height = INT(height);
+ y_size = y_stride * y_height;
+ switch (format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ c_size = (width * height) / 2 + 1;
+ c_height = height >> 1;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+ if (unaligned_width & 1) {
+ ALOGE("width is odd for the YUV422_SP format");
+ return;
+ }
+ c_size = width * height;
+ c_height = height;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ c_height = VENUS_UV_SCANLINES(COLOR_FMT_NV12, height);
+ c_size = c_stride * c_height;
+ break;
+ case HAL_PIXEL_FORMAT_NV12_HEIF:
+ c_height = VENUS_UV_SCANLINES(COLOR_FMT_NV12_512, height);
+ c_size = c_stride * c_height;
+ break;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
+ y_size = ALIGN(width * height, 4096);
+ c_size = ALIGN(2 * ALIGN(unaligned_width / 2, 32) * ALIGN(unaligned_height / 2, 32), 4096);
+ break;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV21_ENCODEABLE:
+ c_height = VENUS_UV_SCANLINES(COLOR_FMT_NV21, height);
+ c_size = c_stride * c_height;
+ break;
+ case HAL_PIXEL_FORMAT_NV21_ZSL:
+ c_size = (width * height) / 2;
+ c_height = height >> 1;
+ break;
+ case HAL_PIXEL_FORMAT_Y16:
+ c_size = width * height;
+ c_height = height;
+ break;
+ case HAL_PIXEL_FORMAT_Y8:
+ c_size = 0;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ c_size = (width * height) + 1;
+ c_height = height;
+ break;
+ default:
+ break;
+ }
+
+ yOffset = 0;
+ cOffset = y_size;
+
+ plane_info[0].component = (PlaneComponent)PLANE_COMPONENT_Y;
+ plane_info[0].offset = (uint32_t)yOffset;
+ plane_info[0].step = 1;
+ plane_info[0].stride = static_cast<int32_t>(UINT(width));
+ plane_info[0].stride_bytes = static_cast<int32_t>(y_stride);
+ plane_info[0].scanlines = static_cast<int32_t>(y_height);
+ plane_info[0].size = static_cast<uint32_t>(y_size);
+
+ plane_info[1].component = (PlaneComponent)(PLANE_COMPONENT_Cb | PLANE_COMPONENT_Cr);
+ plane_info[1].offset = (uint32_t)cOffset;
+ plane_info[1].step = 2 * bpp;
+ plane_info[1].stride = static_cast<int32_t>(UINT(width));
+ plane_info[1].stride_bytes = static_cast<int32_t>(c_stride);
+ plane_info[1].scanlines = static_cast<int32_t>(c_height);
+ plane_info[1].size = static_cast<uint32_t>(c_size);
+}
+
+int GetYUVPlaneInfo(const private_handle_t *hnd, struct android_ycbcr ycbcr[2]) {
+ int err = 0;
+ uint32_t width = UINT(hnd->width);
+ uint32_t height = UINT(hnd->height);
+ int format = hnd->format;
+ uint64_t usage = hnd->usage;
+ int32_t interlaced = 0;
+ int plane_count = 0;
+ int unaligned_width = INT(hnd->unaligned_width);
+ int unaligned_height = INT(hnd->unaligned_height);
+ BufferInfo info(unaligned_width, unaligned_height, format, usage);
+
+ memset(ycbcr->reserved, 0, sizeof(ycbcr->reserved));
+
+ // Check if UBWC buffer has been rendered in linear format.
+ int linear_format = 0;
+ if (getMetaData(const_cast<private_handle_t *>(hnd), GET_LINEAR_FORMAT, &linear_format) == 0) {
+ format = INT(linear_format);
+ }
+
+ // Check metadata if the geometry has been updated.
+ BufferDim_t buffer_dim;
+ if (getMetaData(const_cast<private_handle_t *>(hnd), GET_BUFFER_GEOMETRY, &buffer_dim) == 0) {
+ BufferInfo info(buffer_dim.sliceWidth, buffer_dim.sliceHeight, format, usage);
+ GetAlignedWidthAndHeight(info, &width, &height);
+ }
+
+ // Check metadata for interlaced content.
+ int interlace_flag = 0;
+ if (getMetaData(const_cast<private_handle_t *>(hnd), GET_PP_PARAM_INTERLACED, &interlace_flag) ==
+ 0) {
+ if (interlace_flag) {
+ interlaced = LAYOUT_INTERLACED_FLAG;
+ }
+ }
+
+ PlaneLayoutInfo plane_info[8] = {};
+ // Get the chroma offsets from the handle width/height. We take advantage
+ // of the fact the width _is_ the stride
+ err = GetYUVPlaneInfo(info, format, width, height, interlaced, &plane_count, plane_info);
+ if (err == 0) {
+ if (interlaced && format == HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC) {
+ CopyPlaneLayoutInfotoAndroidYcbcr(hnd->base, plane_count, &plane_info[0], &ycbcr[0]);
+ unsigned int uv_stride, uv_height, uv_size;
+ unsigned int alignment = 4096;
+ uint64_t field_base;
+ height = (height + 1) >> 1;
+ uv_stride = VENUS_UV_STRIDE(COLOR_FMT_NV12_UBWC, INT(width));
+ uv_height = VENUS_UV_SCANLINES(COLOR_FMT_NV12_UBWC, INT(height));
+ uv_size = ALIGN((uv_stride * uv_height), alignment);
+ field_base = hnd->base + plane_info[1].offset + uv_size;
+ memset(ycbcr[1].reserved, 0, sizeof(ycbcr[1].reserved));
+ CopyPlaneLayoutInfotoAndroidYcbcr(field_base, plane_count, &plane_info[4], &ycbcr[1]);
+ } else {
+ CopyPlaneLayoutInfotoAndroidYcbcr(hnd->base, plane_count, plane_info, ycbcr);
+ switch (format) {
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV21_ZSL:
+ case HAL_PIXEL_FORMAT_RAW16:
+ case HAL_PIXEL_FORMAT_Y16:
+ case HAL_PIXEL_FORMAT_RAW10:
+ case HAL_PIXEL_FORMAT_RAW8:
+ case HAL_PIXEL_FORMAT_Y8:
+ std::swap(ycbcr->cb, ycbcr->cr);
+ }
+ }
+ }
+ return err;
+}
+
+int GetRawPlaneInfo(int32_t format, int32_t width, int32_t height, PlaneLayoutInfo *plane_info) {
+ int32_t step = 0;
+
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RAW16:
+ step = 2;
+ break;
+ case HAL_PIXEL_FORMAT_RAW8:
+ step = 1;
+ break;
+ case HAL_PIXEL_FORMAT_RAW12:
+ case HAL_PIXEL_FORMAT_RAW10:
+ step = 0;
+ break;
+ default:
+ ALOGW("RawPlaneInfo is unsupported for format 0x%x", format);
+ return -EINVAL;
+ }
+
+ BufferInfo info(width, height, format);
+ uint32_t alignedWidth, alignedHeight;
+ GetAlignedWidthAndHeight(info, &alignedWidth, &alignedHeight);
+
+ uint32_t size = GetSize(info, alignedWidth, alignedHeight);
+
+ plane_info[0].component = (PlaneComponent)PLANE_COMPONENT_RAW;
+ plane_info[0].h_subsampling = 0;
+ plane_info[0].v_subsampling = 0;
+ plane_info[0].offset = 0;
+ plane_info[0].step = step;
+ plane_info[0].stride = width;
+ plane_info[0].stride_bytes = static_cast<int32_t>(alignedWidth);
+ if (format == HAL_PIXEL_FORMAT_RAW16) {
+ plane_info[0].stride_bytes = static_cast<int32_t>(alignedWidth * GetBpp(format));
+ }
+ plane_info[0].scanlines = height;
+ plane_info[0].size = size;
+
+ return 0;
+}
+
+// Explicitly defined UBWC formats
+bool IsUBwcFormat(int format) {
+ switch (format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool IsUBwcSupported(int format) {
+ // Existing HAL formats with UBWC support
+ switch (format) {
+ case HAL_PIXEL_FORMAT_BGR_565:
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ case HAL_PIXEL_FORMAT_DEPTH_16:
+ case HAL_PIXEL_FORMAT_DEPTH_24:
+ case HAL_PIXEL_FORMAT_DEPTH_24_STENCIL_8:
+ case HAL_PIXEL_FORMAT_DEPTH_32F:
+ case HAL_PIXEL_FORMAT_STENCIL_8:
+ return true;
+ default:
+ break;
+ }
+
+ return false;
+}
+
+bool IsUBwcPISupported(int format, uint64_t usage) {
+ if (usage & BufferUsage::COMPOSER_OVERLAY || !(usage & GRALLOC_USAGE_PRIVATE_ALLOC_UBWC_PI)) {
+ return false;
+ }
+
+ // As of now only two formats
+ switch (format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC: {
+ if ((usage & BufferUsage::GPU_TEXTURE) || (usage & BufferUsage::GPU_RENDER_TARGET)) {
+ if (AdrenoMemInfo::GetInstance()) {
+ return AdrenoMemInfo::GetInstance()->IsPISupportedByGPU(format, usage);
+ }
+ } else {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+bool IsUBwcEnabled(int format, uint64_t usage) {
+ // Allow UBWC, if client is using an explicitly defined UBWC pixel format.
+ if (IsUBwcFormat(format)) {
+ return true;
+ }
+
+ // Allow UBWC, if an OpenGL client sets UBWC usage flag and GPU plus MDP
+ // support the format. OR if a non-OpenGL client like Rotator, sets UBWC
+ // usage flag and MDP supports the format.
+ if (((usage & GRALLOC_USAGE_PRIVATE_ALLOC_UBWC) ||
+ (usage & GRALLOC_USAGE_PRIVATE_ALLOC_UBWC_PI) ||
+ (usage & BufferUsage::COMPOSER_CLIENT_TARGET))
+ && IsUBwcSupported(format)) {
+ bool enable = true;
+ // Query GPU for UBWC only if buffer is intended to be used by GPU.
+ if ((usage & BufferUsage::GPU_TEXTURE) || (usage & BufferUsage::GPU_RENDER_TARGET)) {
+ if (AdrenoMemInfo::GetInstance()) {
+ enable = AdrenoMemInfo::GetInstance()->IsUBWCSupportedByGPU(format);
+ }
+ }
+
+ // Allow UBWC, only if CPU usage flags are not set
+ if (enable && !(CpuCanAccess(usage))) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void GetYuvUBwcWidthAndHeight(int width, int height, int format, unsigned int *aligned_w,
+ unsigned int *aligned_h) {
+ switch (format) {
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ *aligned_w = VENUS_Y_STRIDE(COLOR_FMT_NV12, width);
+ *aligned_h = VENUS_Y_SCANLINES(COLOR_FMT_NV12, height);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ *aligned_w = VENUS_Y_STRIDE(COLOR_FMT_NV12_UBWC, width);
+ *aligned_h = VENUS_Y_SCANLINES(COLOR_FMT_NV12_UBWC, height);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ // The macro returns the stride which is 4/3 times the width, hence * 3/4
+ *aligned_w = (VENUS_Y_STRIDE(COLOR_FMT_NV12_BPP10_UBWC, width) * 3) / 4;
+ *aligned_h = VENUS_Y_SCANLINES(COLOR_FMT_NV12_BPP10_UBWC, height);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ // The macro returns the stride which is 2 times the width, hence / 2
+ *aligned_w = (VENUS_Y_STRIDE(COLOR_FMT_P010_UBWC, width) / 2);
+ *aligned_h = VENUS_Y_SCANLINES(COLOR_FMT_P010_UBWC, height);
+ break;
+ default:
+ ALOGE("%s: Unsupported pixel format: 0x%x", __FUNCTION__, format);
+ *aligned_w = 0;
+ *aligned_h = 0;
+ break;
+ }
+}
+
+void GetRgbUBwcBlockSize(uint32_t bpp, int *block_width, int *block_height) {
+ *block_width = 0;
+ *block_height = 0;
+
+ switch (bpp) {
+ case 2:
+ case 4:
+ *block_width = 16;
+ *block_height = 4;
+ break;
+ case 8:
+ *block_width = 8;
+ *block_height = 4;
+ break;
+ case 16:
+ *block_width = 4;
+ *block_height = 4;
+ break;
+ default:
+ ALOGE("%s: Unsupported bpp: %d", __FUNCTION__, bpp);
+ break;
+ }
+}
+
+unsigned int GetRgbUBwcMetaBufferSize(int width, int height, uint32_t bpp) {
+ unsigned int size = 0;
+ int meta_width, meta_height;
+ int block_width, block_height;
+
+ GetRgbUBwcBlockSize(bpp, &block_width, &block_height);
+ if (!block_width || !block_height) {
+ ALOGE("%s: Unsupported bpp: %d", __FUNCTION__, bpp);
+ return size;
+ }
+
+ // Align meta buffer height to 16 blocks
+ meta_height = ALIGN(((height + block_height - 1) / block_height), 16);
+
+ // Align meta buffer width to 64 blocks
+ meta_width = ALIGN(((width + block_width - 1) / block_width), 64);
+
+ // Align meta buffer size to 4K
+ size = (unsigned int)ALIGN((meta_width * meta_height), 4096);
+
+ return size;
+}
+
+unsigned int GetUBwcSize(int width, int height, int format, unsigned int alignedw,
+ unsigned int alignedh) {
+ unsigned int size = 0;
+ uint32_t bpp = 0;
+ switch (format) {
+ case HAL_PIXEL_FORMAT_BGR_565:
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ bpp = GetBppForUncompressedRGB(format);
+ size = alignedw * alignedh * bpp;
+ size += GetRgbUBwcMetaBufferSize(width, height, bpp);
+ break;
+ /*
+ * 1. The CtsMediaV2TestCases#CodecEncoderSurfaceTest is a transcode use case and shares
+ * same surface between encoder and decoder.
+ * 2. Configures encoder with Opaque color format thus encoder sets ubwc usage bits and
+ * is configured with NV12_UBWC format.
+ * 3. Configures decoder as 'flexible', thus configuring decoder with NV12 format.
+ * 4. Decoder should produce output to surface that will be fed back to encoder as input.
+ * 5. Though UBWC is enabled, we need to compute the actual buffer size (including aligned
+ * width and height) based on pixel format that is set.
+ */
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ size = VENUS_BUFFER_SIZE(COLOR_FMT_NV12, width, height);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ size = VENUS_BUFFER_SIZE(COLOR_FMT_NV12_UBWC, width, height);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ size = VENUS_BUFFER_SIZE(COLOR_FMT_NV12_BPP10_UBWC, width, height);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ size = VENUS_BUFFER_SIZE(COLOR_FMT_P010_UBWC, width, height);
+ break;
+ default:
+ ALOGE("%s: Unsupported pixel format: 0x%x", __FUNCTION__, format);
+ break;
+ }
+
+ return size;
+}
+
+unsigned int GetRgbMetaSize(int format, uint32_t width, uint32_t height, uint64_t usage) {
+ unsigned int meta_size = 0;
+ if (!IsUBwcEnabled(format, usage)) {
+ return meta_size;
+ }
+ uint32_t bpp = GetBppForUncompressedRGB(format);
+ switch (format) {
+ case HAL_PIXEL_FORMAT_BGR_565:
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ case HAL_PIXEL_FORMAT_RGBA_FP16:
+ meta_size = GetRgbUBwcMetaBufferSize(width, height, bpp);
+ break;
+ default:
+ ALOGE("%s:Unsupported RGB format: 0x%x", __FUNCTION__, format);
+ break;
+ }
+ return meta_size;
+}
+
+int GetRgbDataAddress(private_handle_t *hnd, void **rgb_data) {
+ int err = 0;
+
+ // This api is for RGB* formats
+ if (!IsUncompressedRGBFormat(hnd->format)) {
+ return -EINVAL;
+ }
+
+ // linear buffer, nothing to do further
+ if (!(hnd->flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED)) {
+ *rgb_data = reinterpret_cast<void *>(hnd->base);
+ return err;
+ }
+ unsigned int meta_size = GetRgbMetaSize(hnd->format, hnd->width, hnd->height, hnd->usage);
+
+ *rgb_data = reinterpret_cast<void *>(hnd->base + meta_size);
+
+ return err;
+}
+
+void GetCustomDimensions(private_handle_t *hnd, int *stride, int *height) {
+ BufferDim_t buffer_dim;
+ int interlaced = 0;
+
+ *stride = hnd->width;
+ *height = hnd->height;
+ if (getMetaData(hnd, GET_BUFFER_GEOMETRY, &buffer_dim) == 0) {
+ *stride = buffer_dim.sliceWidth;
+ *height = buffer_dim.sliceHeight;
+ } else if (getMetaData(hnd, GET_PP_PARAM_INTERLACED, &interlaced) == 0) {
+ if (interlaced && IsUBwcFormat(hnd->format)) {
+ unsigned int alignedw = 0, alignedh = 0;
+ // Get re-aligned height for single ubwc interlaced field and
+ // multiply by 2 to get frame height.
+ BufferInfo info(hnd->width, ((hnd->height + 1) >> 1), hnd->format);
+ GetAlignedWidthAndHeight(info, &alignedw, &alignedh);
+ *stride = static_cast<int>(alignedw);
+ *height = static_cast<int>(alignedh * 2);
+ }
+ }
+}
+
+void GetColorSpaceFromMetadata(private_handle_t *hnd, int *color_space) {
+ ColorMetaData color_metadata;
+ if (getMetaData(hnd, GET_COLOR_METADATA, &color_metadata) == 0) {
+ switch (color_metadata.colorPrimaries) {
+ case ColorPrimaries_BT709_5:
+ *color_space = HAL_CSC_ITU_R_709;
+ break;
+ case ColorPrimaries_BT601_6_525:
+ case ColorPrimaries_BT601_6_625:
+ *color_space = ((color_metadata.range) ? HAL_CSC_ITU_R_601_FR : HAL_CSC_ITU_R_601);
+ break;
+ case ColorPrimaries_BT2020:
+ *color_space = (color_metadata.range) ? HAL_CSC_ITU_R_2020_FR : HAL_CSC_ITU_R_2020;
+ break;
+ default:
+ ALOGE("Unknown Color Space = %d", color_metadata.colorPrimaries);
+ break;
+ }
+ } else if (getMetaData(hnd, GET_COLOR_SPACE, color_space) != 0) {
+ *color_space = 0;
+ }
+}
+
+void GetAlignedWidthAndHeight(const BufferInfo &info, unsigned int *alignedw,
+ unsigned int *alignedh) {
+ int width = info.width;
+ int height = info.height;
+ int format = info.format;
+ uint64_t usage = info.usage;
+
+ // Currently surface padding is only computed for RGB* surfaces.
+ bool ubwc_enabled = IsUBwcEnabled(format, usage);
+ int tile = ubwc_enabled;
+
+ if (IsUncompressedRGBFormat(format)) {
+ if (AdrenoMemInfo::GetInstance()) {
+ AdrenoMemInfo::GetInstance()->AlignUnCompressedRGB(width, height, format, tile, alignedw,
+ alignedh);
+ }
+ return;
+ }
+
+ if (ubwc_enabled) {
+ GetYuvUBwcWidthAndHeight(width, height, format, alignedw, alignedh);
+ return;
+ }
+
+ if (IsCompressedRGBFormat(format)) {
+ if (AdrenoMemInfo::GetInstance()) {
+ AdrenoMemInfo::GetInstance()->AlignCompressedRGB(width, height, format, alignedw, alignedh);
+ }
+ return;
+ }
+
+ int aligned_w = width;
+ int aligned_h = height;
+ unsigned int alignment = 32;
+
+ // Below should be only YUV family
+ switch (format) {
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ if (AdrenoMemInfo::GetInstance() == nullptr) {
+ return;
+ }
+ alignment = AdrenoMemInfo::GetInstance()->GetGpuPixelAlignment();
+ aligned_w = ALIGN(width, alignment);
+ break;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
+ aligned_w = ALIGN(width, alignment);
+ break;
+ case HAL_PIXEL_FORMAT_RAW16:
+ case HAL_PIXEL_FORMAT_Y16:
+ case HAL_PIXEL_FORMAT_Y8:
+ aligned_w = ALIGN(width, 16);
+ break;
+ case HAL_PIXEL_FORMAT_RAW12:
+ aligned_w = ALIGN(width * 12 / 8, 16);
+ break;
+ case HAL_PIXEL_FORMAT_RAW10:
+ aligned_w = ALIGN(width * 10 / 8, 16);
+ break;
+ case HAL_PIXEL_FORMAT_RAW8:
+ aligned_w = ALIGN(width, 16);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED:
+ aligned_w = ALIGN(width, 128);
+ break;
+ case HAL_PIXEL_FORMAT_YV12:
+ if ((usage & BufferUsage::GPU_TEXTURE) || (usage & BufferUsage::GPU_RENDER_TARGET)) {
+ if (AdrenoMemInfo::GetInstance() == nullptr) {
+ return;
+ }
+ alignment = AdrenoMemInfo::GetInstance()->GetGpuPixelAlignment();
+ aligned_w = ALIGN(width, alignment);
+ } else {
+ aligned_w = ALIGN(width, 16);
+ }
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_422_I:
+ case HAL_PIXEL_FORMAT_YCrCb_422_I:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ aligned_w = ALIGN(width, 16);
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ aligned_w = INT(VENUS_Y_STRIDE(COLOR_FMT_P010, width) / 2);
+ aligned_h = INT(VENUS_Y_SCANLINES(COLOR_FMT_P010, height));
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ aligned_w = INT(VENUS_Y_STRIDE(COLOR_FMT_NV12, width));
+ aligned_h = INT(VENUS_Y_SCANLINES(COLOR_FMT_NV12, height));
+ break;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV21_ENCODEABLE:
+ aligned_w = INT(VENUS_Y_STRIDE(COLOR_FMT_NV21, width));
+ aligned_h = INT(VENUS_Y_SCANLINES(COLOR_FMT_NV21, height));
+ break;
+ case HAL_PIXEL_FORMAT_BLOB:
+ case HAL_PIXEL_FORMAT_RAW_OPAQUE:
+ break;
+ case HAL_PIXEL_FORMAT_NV21_ZSL:
+ aligned_w = ALIGN(width, 64);
+ aligned_h = ALIGN(height, 64);
+ break;
+ case HAL_PIXEL_FORMAT_NV12_HEIF:
+ aligned_w = INT(VENUS_Y_STRIDE(COLOR_FMT_NV12_512, width));
+ aligned_h = INT(VENUS_Y_SCANLINES(COLOR_FMT_NV12_512, height));
+ break;
+ default:
+ break;
+ }
+
+ *alignedw = (unsigned int)aligned_w;
+ *alignedh = (unsigned int)aligned_h;
+}
+
+int GetBufferLayout(private_handle_t *hnd, uint32_t stride[4], uint32_t offset[4],
+ uint32_t *num_planes) {
+ if (!hnd || !stride || !offset || !num_planes) {
+ return -EINVAL;
+ }
+
+ struct android_ycbcr yuvPlaneInfo[2] = {};
+ *num_planes = 1;
+ stride[0] = 0;
+
+ switch (hnd->format) {
+ case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGR_565:
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ case HAL_PIXEL_FORMAT_RGBA_4444:
+ stride[0] = static_cast<uint32_t>(hnd->width * 2);
+ break;
+ case HAL_PIXEL_FORMAT_RGB_888:
+ stride[0] = static_cast<uint32_t>(hnd->width * 3);
+ break;
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ case HAL_PIXEL_FORMAT_BGRX_8888:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ case HAL_PIXEL_FORMAT_ARGB_2101010:
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ case HAL_PIXEL_FORMAT_XRGB_2101010:
+ case HAL_PIXEL_FORMAT_BGRA_1010102:
+ case HAL_PIXEL_FORMAT_ABGR_2101010:
+ case HAL_PIXEL_FORMAT_BGRX_1010102:
+ case HAL_PIXEL_FORMAT_XBGR_2101010:
+ stride[0] = static_cast<uint32_t>(hnd->width * 4);
+ break;
+ }
+
+ // Format is RGB
+ if (stride[0]) {
+ return 0;
+ }
+
+ (*num_planes)++;
+ int ret = GetYUVPlaneInfo(hnd, yuvPlaneInfo);
+ if (ret < 0) {
+ ALOGE("%s failed", __FUNCTION__);
+ return ret;
+ }
+
+ // We are only returning buffer layout for progressive or single field formats.
+ struct android_ycbcr yuvInfo = yuvPlaneInfo[0];
+ stride[0] = static_cast<uint32_t>(yuvInfo.ystride);
+ offset[0] = static_cast<uint32_t>(reinterpret_cast<uint64_t>(yuvInfo.y) - hnd->base);
+ stride[1] = static_cast<uint32_t>(yuvInfo.cstride);
+ switch (hnd->format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ case HAL_PIXEL_FORMAT_NV12_HEIF:
+ offset[1] = static_cast<uint32_t>(reinterpret_cast<uint64_t>(yuvInfo.cb) - hnd->base);
+ break;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+ case HAL_PIXEL_FORMAT_NV21_ENCODEABLE:
+ offset[1] = static_cast<uint32_t>(reinterpret_cast<uint64_t>(yuvInfo.cr) - hnd->base);
+ break;
+ case HAL_PIXEL_FORMAT_YV12:
+ offset[1] = static_cast<uint32_t>(reinterpret_cast<uint64_t>(yuvInfo.cr) - hnd->base);
+ stride[2] = static_cast<uint32_t>(yuvInfo.cstride);
+ offset[2] = static_cast<uint32_t>(reinterpret_cast<uint64_t>(yuvInfo.cb) - hnd->base);
+ (*num_planes)++;
+ break;
+ case HAL_PIXEL_FORMAT_CbYCrY_422_I:
+ *num_planes = 1;
+ break;
+ default:
+ ALOGW("%s: Unsupported format", __FUNCTION__);
+ ret = -EINVAL;
+ }
+
+ if (hnd->flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED) {
+ std::fill(offset, offset + 4, 0);
+ }
+
+ return 0;
+}
+
+int GetGpuResourceSizeAndDimensions(const BufferInfo &info, unsigned int *size,
+ unsigned int *alignedw, unsigned int *alignedh,
+ GraphicsMetadata *graphics_metadata) {
+ GetAlignedWidthAndHeight(info, alignedw, alignedh);
+ AdrenoMemInfo* adreno_mem_info = AdrenoMemInfo::GetInstance();
+ graphics_metadata->size = adreno_mem_info->AdrenoGetMetadataBlobSize();
+ uint64_t adreno_usage = info.usage;
+ // If gralloc disables UBWC based on any of the checks,
+ // we pass modified usage flag to adreno to convey this.
+ int is_ubwc_enabled = IsUBwcEnabled(info.format, info.usage);
+ if (!is_ubwc_enabled) {
+ adreno_usage &= ~(GRALLOC_USAGE_PRIVATE_ALLOC_UBWC);
+ } else {
+ adreno_usage |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ }
+
+ // Call adreno api for populating metadata blob
+ // Layer count is for 2D/Cubemap arrays and depth is used for 3D slice
+ // Using depth to pass layer_count here
+ int ret = adreno_mem_info->AdrenoInitMemoryLayout(graphics_metadata->data, info.width,
+ info.height, info.layer_count, /* depth */
+ info.format, 1, is_ubwc_enabled,
+ adreno_usage, 1);
+ if (ret != 0) {
+ ALOGE("%s Graphics metadata init failed", __FUNCTION__);
+ *size = 0;
+ return -EINVAL;
+ }
+ // Call adreno api with the metadata blob to get buffer size
+ *size = adreno_mem_info->AdrenoGetAlignedGpuBufferSize(graphics_metadata->data);
+ return 0;
+}
+
+bool CanUseAdrenoForSize(int buffer_type, uint64_t usage) {
+ if (buffer_type == BUFFER_TYPE_VIDEO || !GetAdrenoSizeAPIStatus()) {
+ return false;
+ }
+
+ if ((usage & BufferUsage::PROTECTED) && ((usage & BufferUsage::CAMERA_OUTPUT) ||
+ (usage & GRALLOC_USAGE_PRIVATE_SECURE_DISPLAY))) {
+ return false;
+ }
+
+ return true;
+}
+
+bool GetAdrenoSizeAPIStatus() {
+ AdrenoMemInfo* adreno_mem_info = AdrenoMemInfo::GetInstance();
+ if (adreno_mem_info) {
+ return adreno_mem_info->AdrenoSizeAPIAvaliable();
+ }
+ return false;
+}
+
+bool UseUncached(int format, uint64_t usage) {
+ if ((usage & GRALLOC_USAGE_PRIVATE_UNCACHED) || (usage & BufferUsage::PROTECTED)) {
+ return true;
+ }
+
+ // CPU read rarely
+ if ((usage & BufferUsage::CPU_READ_MASK) == static_cast<uint64_t>(BufferUsage::CPU_READ_RARELY)) {
+ return true;
+ }
+
+ // CPU write rarely
+ if ((usage & BufferUsage::CPU_WRITE_MASK) ==
+ static_cast<uint64_t>(BufferUsage::CPU_WRITE_RARELY)) {
+ return true;
+ }
+
+ if ((usage & BufferUsage::SENSOR_DIRECT_DATA) || (usage & BufferUsage::GPU_DATA_BUFFER)) {
+ return true;
+ }
+
+ if (format && IsUBwcEnabled(format, usage)) {
+ return true;
+ }
+
+ return false;
+}
+
+uint64_t GetHandleFlags(int format, uint64_t usage) {
+ uint64_t priv_flags = 0;
+
+ if (usage & BufferUsage::VIDEO_ENCODER) {
+ priv_flags |= private_handle_t::PRIV_FLAGS_VIDEO_ENCODER;
+ }
+
+ if (usage & BufferUsage::CAMERA_OUTPUT) {
+ priv_flags |= private_handle_t::PRIV_FLAGS_CAMERA_WRITE;
+ }
+
+ if (usage & BufferUsage::CAMERA_INPUT) {
+ priv_flags |= private_handle_t::PRIV_FLAGS_CAMERA_READ;
+ }
+
+ if (usage & BufferUsage::COMPOSER_OVERLAY) {
+ priv_flags |= private_handle_t::PRIV_FLAGS_DISP_CONSUMER;
+ }
+
+ if (usage & BufferUsage::GPU_TEXTURE) {
+ priv_flags |= private_handle_t::PRIV_FLAGS_HW_TEXTURE;
+ }
+
+ if (usage & GRALLOC_USAGE_PRIVATE_SECURE_DISPLAY) {
+ priv_flags |= private_handle_t::PRIV_FLAGS_SECURE_DISPLAY;
+ }
+
+ if (IsUBwcEnabled(format, usage)) {
+ if (IsUBwcPISupported(format, usage)) {
+ priv_flags |= private_handle_t::PRIV_FLAGS_UBWC_ALIGNED_PI;
+ } else {
+ priv_flags |= private_handle_t::PRIV_FLAGS_UBWC_ALIGNED;
+ }
+ }
+
+ if (usage & (BufferUsage::CPU_READ_MASK | BufferUsage::CPU_WRITE_MASK)) {
+ priv_flags |= private_handle_t::PRIV_FLAGS_CPU_RENDERED;
+ }
+
+ if ((usage & (BufferUsage::VIDEO_ENCODER | BufferUsage::VIDEO_DECODER |
+ BufferUsage::CAMERA_OUTPUT | BufferUsage::GPU_RENDER_TARGET))) {
+ priv_flags |= private_handle_t::PRIV_FLAGS_NON_CPU_WRITER;
+ }
+
+ if (!UseUncached(format, usage)) {
+ priv_flags |= private_handle_t::PRIV_FLAGS_CACHED;
+ }
+
+ return priv_flags;
+}
+
+int GetImplDefinedFormat(uint64_t usage, int format) {
+ int gr_format = format;
+
+ // If input format is HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED then based on
+ // the usage bits, gralloc assigns a format.
+ if (format == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED ||
+ format == HAL_PIXEL_FORMAT_YCbCr_420_888) {
+ if ((usage & GRALLOC_USAGE_PRIVATE_ALLOC_UBWC || usage & GRALLOC_USAGE_PRIVATE_ALLOC_UBWC_PI)
+ && format != HAL_PIXEL_FORMAT_YCbCr_420_888) {
+ gr_format = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC;
+ } else if (usage & BufferUsage::VIDEO_ENCODER) {
+ if (usage & GRALLOC_USAGE_PRIVATE_VIDEO_NV21_ENCODER) {
+ gr_format = HAL_PIXEL_FORMAT_NV21_ENCODEABLE; // NV21
+ } else if (usage & GRALLOC_USAGE_PRIVATE_HEIF) {
+ gr_format = HAL_PIXEL_FORMAT_NV12_HEIF;
+ } else if (format == HAL_PIXEL_FORMAT_YCbCr_420_888) {
+ gr_format = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS;
+ } else {
+ gr_format = HAL_PIXEL_FORMAT_NV12_ENCODEABLE; // NV12
+ }
+ } else if (usage & BufferUsage::CAMERA_INPUT) {
+ if (usage & BufferUsage::CAMERA_OUTPUT) {
+ // Assumed ZSL if both producer and consumer camera flags set
+ gr_format = HAL_PIXEL_FORMAT_NV21_ZSL; // NV21
+ } else {
+ gr_format = HAL_PIXEL_FORMAT_YCrCb_420_SP; // NV21
+ }
+ } else if (usage & BufferUsage::CAMERA_OUTPUT) {
+ if (format == HAL_PIXEL_FORMAT_YCbCr_420_888) {
+ gr_format = HAL_PIXEL_FORMAT_NV21_ZSL; // NV21
+ } else {
+ gr_format = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS; // NV12 preview
+ }
+ } else if (usage & BufferUsage::COMPOSER_OVERLAY) {
+ // XXX: If we still haven't set a format, default to RGBA8888
+ gr_format = HAL_PIXEL_FORMAT_RGBA_8888;
+ } else if (format == HAL_PIXEL_FORMAT_YCbCr_420_888) {
+ // If no other usage flags are detected, default the
+ // flexible YUV format to NV21_ZSL
+ gr_format = HAL_PIXEL_FORMAT_NV21_ZSL;
+ }
+ }
+
+ return gr_format;
+}
+
+int GetCustomFormatFlags(int format, uint64_t usage,
+ int *custom_format, uint64_t *priv_flags) {
+ *custom_format = GetImplDefinedFormat(usage, format);
+ *priv_flags = GetHandleFlags(*custom_format, usage);
+
+ if (usage & GRALLOC_USAGE_PROTECTED) {
+ *priv_flags |= private_handle_t::PRIV_FLAGS_SECURE_BUFFER;
+ }
+
+ *priv_flags |= private_handle_t::PRIV_FLAGS_USES_ION;
+
+ return 0;
+}
+
+int GetBufferType(int inputFormat) {
+ return IsYuvFormat(inputFormat) ? BUFFER_TYPE_VIDEO : BUFFER_TYPE_UI;
+}
+
+int GetYUVPlaneInfo(const BufferInfo &info, int32_t format, int32_t width, int32_t height,
+ int32_t flags, int *plane_count, PlaneLayoutInfo *plane_info) {
+ int err = 0;
+ unsigned int y_stride, c_stride, y_height, c_height, y_size, c_size;
+ uint64_t yOffset, cOffset, crOffset, cbOffset;
+ int h_subsampling = 0, v_subsampling = 0;
+ switch (format) {
+ // Semiplanar
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_NV21_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_NV12_HEIF: // Same as YCbCr_420_SP_VENUS
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_NV21_ZSL:
+ case HAL_PIXEL_FORMAT_Y16:
+ case HAL_PIXEL_FORMAT_Y8:
+ *plane_count = 2;
+ GetYuvSPPlaneInfo(info, format, width, height, 1, plane_info);
+ GetYuvSubSamplingFactor(format, &h_subsampling, &v_subsampling);
+ plane_info[0].h_subsampling = 0;
+ plane_info[0].v_subsampling = 0;
+ plane_info[1].h_subsampling = h_subsampling;
+ plane_info[1].v_subsampling = v_subsampling;
+ break;
+
+ case HAL_PIXEL_FORMAT_RAW10:
+ case HAL_PIXEL_FORMAT_RAW8:
+ case HAL_PIXEL_FORMAT_RAW16:
+ case HAL_PIXEL_FORMAT_RAW12:
+ *plane_count = 1;
+ GetRawPlaneInfo(format, info.width, info.height, plane_info);
+ break;
+
+
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ GetYuvSubSamplingFactor(format, &h_subsampling, &v_subsampling);
+ if (flags & LAYOUT_INTERLACED_FLAG) {
+ *plane_count = 8;
+ GetYuvUbwcInterlacedSPPlaneInfo(width, height, plane_info);
+ plane_info[0].step = plane_info[4].step = 1;
+ plane_info[1].step = plane_info[5].step = 2;
+ plane_info[0].h_subsampling = plane_info[4].h_subsampling = 0;
+ plane_info[0].v_subsampling = plane_info[4].v_subsampling = 0;
+ plane_info[1].h_subsampling = plane_info[5].h_subsampling = h_subsampling;
+ plane_info[1].v_subsampling = plane_info[5].v_subsampling = v_subsampling;
+ plane_info[2].h_subsampling = plane_info[3].h_subsampling = 0;
+ plane_info[2].v_subsampling = plane_info[3].v_subsampling = 0;
+ plane_info[2].step = plane_info[3].step = 0;
+ plane_info[6].h_subsampling = plane_info[7].h_subsampling = 0;
+ plane_info[6].v_subsampling = plane_info[7].v_subsampling = 0;
+ plane_info[6].step = plane_info[7].step = 0;
+ } else {
+ *plane_count = 4;
+ GetYuvUbwcSPPlaneInfo(width, height, COLOR_FMT_NV12_UBWC, plane_info);
+ plane_info[0].h_subsampling = 0;
+ plane_info[0].v_subsampling = 0;
+ plane_info[0].step = 1;
+ plane_info[1].h_subsampling = h_subsampling;
+ plane_info[1].v_subsampling = v_subsampling;
+ plane_info[1].step = 2;
+ plane_info[2].h_subsampling = plane_info[3].h_subsampling = 0;
+ plane_info[2].v_subsampling = plane_info[3].v_subsampling = 0;
+ plane_info[2].step = plane_info[3].step = 0;
+ }
+ break;
+
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ *plane_count = 2;
+ GetYuvSPPlaneInfo(info, format, width, height, 2, plane_info);
+ GetYuvSubSamplingFactor(format, &h_subsampling, &v_subsampling);
+ plane_info[0].h_subsampling = 0;
+ plane_info[0].v_subsampling = 0;
+ plane_info[1].h_subsampling = h_subsampling;
+ plane_info[1].v_subsampling = v_subsampling;
+ break;
+
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ *plane_count = 4;
+ GetYuvUbwcSPPlaneInfo(width, height, COLOR_FMT_NV12_BPP10_UBWC, plane_info);
+ GetYuvSubSamplingFactor(format, &h_subsampling, &v_subsampling);
+ plane_info[0].h_subsampling = 0;
+ plane_info[0].v_subsampling = 0;
+ plane_info[1].step = 1;
+ plane_info[1].h_subsampling = h_subsampling;
+ plane_info[1].v_subsampling = v_subsampling;
+ plane_info[1].step = 3;
+ plane_info[2].h_subsampling = plane_info[3].h_subsampling = 0;
+ plane_info[2].v_subsampling = plane_info[3].v_subsampling = 0;
+ plane_info[2].step = plane_info[3].step = 0;
+ break;
+
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ *plane_count = 4;
+ GetYuvUbwcSPPlaneInfo(width, height, COLOR_FMT_P010_UBWC, plane_info);
+ GetYuvSubSamplingFactor(format, &h_subsampling, &v_subsampling);
+ plane_info[0].h_subsampling = 0;
+ plane_info[0].v_subsampling = 0;
+ plane_info[1].step = 1;
+ plane_info[1].h_subsampling = h_subsampling;
+ plane_info[1].v_subsampling = v_subsampling;
+ plane_info[1].step = 4;
+ plane_info[2].h_subsampling = plane_info[3].h_subsampling = 0;
+ plane_info[2].v_subsampling = plane_info[3].v_subsampling = 0;
+ plane_info[2].step = plane_info[3].step = 0;
+ break;
+
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ *plane_count = 2;
+ y_stride = VENUS_Y_STRIDE(COLOR_FMT_P010, width);
+ c_stride = VENUS_UV_STRIDE(COLOR_FMT_P010, width);
+ y_height = VENUS_Y_SCANLINES(COLOR_FMT_P010, height);
+ y_size = y_stride * y_height;
+ yOffset = 0;
+ cOffset = y_size;
+ c_height = VENUS_UV_SCANLINES(COLOR_FMT_P010, INT(height));
+ c_size = c_stride * c_height;
+ GetYuvSubSamplingFactor(format, &h_subsampling, &v_subsampling);
+
+ plane_info[0].component = (PlaneComponent)PLANE_COMPONENT_Y;
+ plane_info[0].offset = (uint32_t)yOffset;
+ plane_info[0].stride = static_cast<int32_t>(UINT(width));
+ plane_info[0].stride_bytes = static_cast<int32_t>(y_stride);
+ plane_info[0].scanlines = static_cast<int32_t>(y_height);
+ plane_info[0].size = static_cast<uint32_t>(y_size);
+ plane_info[0].step = 1;
+ plane_info[0].h_subsampling = 0;
+ plane_info[0].v_subsampling = 0;
+
+ plane_info[1].component = (PlaneComponent)(PLANE_COMPONENT_Cb | PLANE_COMPONENT_Cr);
+ plane_info[1].offset = (uint32_t)cOffset;
+ plane_info[1].stride = static_cast<int32_t>(UINT(width));
+ plane_info[1].stride_bytes = static_cast<int32_t>(c_stride);
+ plane_info[1].scanlines = static_cast<int32_t>(c_height);
+ plane_info[1].size = static_cast<uint32_t>(c_size);
+ plane_info[1].step = 4;
+ plane_info[1].h_subsampling = h_subsampling;
+ plane_info[1].v_subsampling = v_subsampling;
+ break;
+
+ // Planar
+ case HAL_PIXEL_FORMAT_YV12:
+ if ((info.width & 1) || (info.height & 1)) {
+ ALOGE("w or h is odd for the YV12 format");
+ err = -EINVAL;
+ return err;
+ }
+ *plane_count = 3;
+ y_stride = width;
+ c_stride = ALIGN(width / 2, 16);
+ y_height = UINT(height);
+ y_size = (y_stride * y_height);
+ height = height >> 1;
+ c_height = UINT(height);
+ c_size = (c_stride * c_height);
+ yOffset = 0;
+ crOffset = y_size;
+ cbOffset = (y_size + c_size);
+ GetYuvSubSamplingFactor(format, &h_subsampling, &v_subsampling);
+
+ plane_info[0].component = (PlaneComponent)PLANE_COMPONENT_Y;
+ plane_info[0].offset = (uint32_t)yOffset;
+ plane_info[0].stride = static_cast<int32_t>(UINT(width));
+ plane_info[0].stride_bytes = static_cast<int32_t>(y_stride);
+ plane_info[0].scanlines = static_cast<int32_t>(y_height);
+ plane_info[0].size = static_cast<uint32_t>(y_size);
+ plane_info[0].step = 1;
+ plane_info[0].h_subsampling = 0;
+ plane_info[0].v_subsampling = 0;
+
+ plane_info[1].component = (PlaneComponent)PLANE_COMPONENT_Cb;
+ plane_info[1].offset = (uint32_t)cbOffset;
+ plane_info[2].component = (PlaneComponent)PLANE_COMPONENT_Cr;
+ plane_info[2].offset = (uint32_t)crOffset;
+ for (int i = 1; i < 3; i++) {
+ plane_info[i].stride = static_cast<int32_t>(UINT(width));
+ plane_info[i].stride_bytes = static_cast<int32_t>(c_stride);
+ plane_info[i].scanlines = static_cast<int32_t>(c_height);
+ plane_info[i].size = static_cast<uint32_t>(c_size);
+ plane_info[i].step = 1;
+ plane_info[i].h_subsampling = h_subsampling;
+ plane_info[i].v_subsampling = v_subsampling;
+ }
+ break;
+ case HAL_PIXEL_FORMAT_CbYCrY_422_I:
+ if (info.width & 1) {
+ ALOGE("width is odd for the YUV422_SP format");
+ err = -EINVAL;
+ return err;
+ }
+ *plane_count = 1;
+ y_stride = width * 2;
+ y_height = UINT(height);
+ y_size = y_stride * y_height;
+ yOffset = 0;
+ plane_info[0].component = (PlaneComponent)PLANE_COMPONENT_Y;
+ plane_info[0].offset = (uint32_t)yOffset;
+ plane_info[0].stride = static_cast<int32_t>(UINT(width));
+ plane_info[0].stride_bytes = static_cast<int32_t>(y_stride);
+ plane_info[0].scanlines = static_cast<int32_t>(y_height);
+ plane_info[0].size = static_cast<uint32_t>(y_size);
+ plane_info[0].step = 1;
+ plane_info[0].h_subsampling = 0;
+ plane_info[0].v_subsampling = 0;
+ break;
+
+ // Unsupported formats
+ case HAL_PIXEL_FORMAT_YCbCr_422_I:
+ case HAL_PIXEL_FORMAT_YCrCb_422_I:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED:
+ default:
+ *plane_count = 0;
+ ALOGD("%s: Invalid format passed: 0x%x", __FUNCTION__, format);
+ err = -EINVAL;
+ }
+ return err;
+}
+
+void GetYuvSubSamplingFactor(int32_t format, int *h_subsampling, int *v_subsampling) {
+ switch (format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: // Same as YCbCr_420_SP_VENUS
+ case HAL_PIXEL_FORMAT_NV21_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_NV21_ZSL:
+ case HAL_PIXEL_FORMAT_YV12:
+ *h_subsampling = 1;
+ *v_subsampling = 1;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+ case HAL_PIXEL_FORMAT_CbYCrY_422_I:
+ *h_subsampling = 1;
+ *v_subsampling = 0;
+ break;
+ case HAL_PIXEL_FORMAT_Y16:
+ case HAL_PIXEL_FORMAT_Y8:
+ case HAL_PIXEL_FORMAT_BLOB:
+ case HAL_PIXEL_FORMAT_RAW_OPAQUE:
+ case HAL_PIXEL_FORMAT_NV12_HEIF:
+ default:
+ *h_subsampling = 0;
+ *v_subsampling = 0;
+ break;
+ }
+}
+
+void CopyPlaneLayoutInfotoAndroidYcbcr(uint64_t base, int plane_count, PlaneLayoutInfo *plane_info,
+ struct android_ycbcr *ycbcr) {
+ ycbcr->y = reinterpret_cast<void *>(base + plane_info[0].offset);
+ ycbcr->ystride = plane_info[0].stride_bytes;
+ if (plane_count == 1) {
+ ycbcr->cb = NULL;
+ ycbcr->cr = NULL;
+ ycbcr->cstride = 0;
+ ycbcr->chroma_step = 0;
+ } else if (plane_count == 2 || plane_count == 4 || plane_count == 8) {
+ /* For YUV semiplanar :-
+ * - In progressive & linear case plane count is 2 and plane_info[0] will
+ * contain info about Y plane and plane_info[1] will contain info about UV plane.
+ * - In progressive & compressed case plane count is 4 then plane_info[0] will
+ * contain info about Y plane and plane_info[1] will contain info about UV plane.
+ * Remaining two plane (plane_info[2] & plane_info[3]) contain info about the
+ * Y_Meta_Plane and UV_Meta_Plane.
+ * - In interlaced & compressed case plane count is 8 then plane_info[0], plane_info[1],
+ * plane_info[4] & plane_info[5] will contain info about Y_plane, UV_plane, Y_plane
+ * & UV_plane. Remaining plane will contain info about the meta planes. As in this case
+ * this API is called twice through GetYUVPlaneInfo() with address of plane_info[0] &
+ * plane_info[4], so this will calculate the information accordingly and will fill the
+ * ycbcr structure with interlaced plane info only.
+ */
+ ycbcr->cb = reinterpret_cast<void *>(base + plane_info[1].offset);
+ ycbcr->cr = reinterpret_cast<void *>(base + plane_info[1].offset + 1);
+ ycbcr->cstride = plane_info[1].stride_bytes;
+ ycbcr->chroma_step = plane_info[1].step;
+ } else if (plane_count == 3) {
+ /* For YUV planar :-
+ * Plane size is 3 and plane_info[0], plane_info[1], plane_info[2] will
+ * contain info about y_plane, cb_plane and cr_plane accordingly.
+ */
+ ycbcr->cb = reinterpret_cast<void *>(base + plane_info[1].offset);
+ ycbcr->cr = reinterpret_cast<void *>(base + plane_info[2].offset);
+ ycbcr->cstride = plane_info[1].stride_bytes;
+ ycbcr->chroma_step = plane_info[1].step;
+ }
+}
+
+bool HasAlphaComponent(int32_t format) {
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ case HAL_PIXEL_FORMAT_RGBA_4444:
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ case HAL_PIXEL_FORMAT_ARGB_2101010:
+ case HAL_PIXEL_FORMAT_BGRA_1010102:
+ case HAL_PIXEL_FORMAT_ABGR_2101010:
+ case HAL_PIXEL_FORMAT_RGBA_FP16:
+ return true;
+ default:
+ return false;
+ }
+}
+
+void GetRGBPlaneInfo(const BufferInfo &info, int32_t format, int32_t width, int32_t height,
+ int32_t /* flags */, int *plane_count, PlaneLayoutInfo *plane_info) {
+ uint64_t usage = info.usage;
+ *plane_count = 1;
+ uint32_t bpp = 0;
+ if (IsUncompressedRGBFormat(format)) {
+ bpp = GetBppForUncompressedRGB(format);
+ }
+ plane_info->component =
+ (PlaneComponent)(PLANE_COMPONENT_R | PLANE_COMPONENT_G | PLANE_COMPONENT_B);
+ if (HasAlphaComponent(format)) {
+ plane_info->component = (PlaneComponent)(plane_info->component | PLANE_COMPONENT_A);
+ }
+ plane_info->size = GetSize(info, width, height);
+ plane_info->step = bpp;
+ plane_info->offset = GetRgbMetaSize(format, width, height, usage);
+ plane_info->h_subsampling = 0;
+ plane_info->v_subsampling = 0;
+ plane_info->stride = width;
+ plane_info->stride_bytes = width * plane_info->step;
+ plane_info->scanlines = height;
+}
+
+// TODO(tbalacha): tile vs ubwc -- may need to find a diff way to differentiate
+void GetDRMFormat(uint32_t format, uint32_t flags, uint32_t *drm_format,
+ uint64_t *drm_format_modifier) {
+ bool compressed = (flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED) ? true : false;
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ *drm_format = DRM_FORMAT_ABGR8888;
+ break;
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ *drm_format = DRM_FORMAT_ABGR1555;
+ break;
+ case HAL_PIXEL_FORMAT_RGBA_4444:
+ *drm_format = DRM_FORMAT_ABGR4444;
+ break;
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ *drm_format = DRM_FORMAT_ARGB8888;
+ break;
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ *drm_format = DRM_FORMAT_XBGR8888;
+ if (compressed)
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ break;
+ case HAL_PIXEL_FORMAT_BGRX_8888:
+ *drm_format = DRM_FORMAT_XRGB8888;
+ break;
+ case HAL_PIXEL_FORMAT_RGB_888:
+ *drm_format = DRM_FORMAT_BGR888;
+ break;
+ case HAL_PIXEL_FORMAT_RGB_565:
+ *drm_format = DRM_FORMAT_BGR565;
+ break;
+ case HAL_PIXEL_FORMAT_BGR_565:
+ *drm_format = DRM_FORMAT_BGR565;
+ if (compressed)
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ break;
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ *drm_format = DRM_FORMAT_ABGR2101010;
+ if (compressed)
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ break;
+ case HAL_PIXEL_FORMAT_ARGB_2101010:
+ *drm_format = DRM_FORMAT_BGRA1010102;
+ break;
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ *drm_format = DRM_FORMAT_XBGR2101010;
+ if (compressed)
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ break;
+ case HAL_PIXEL_FORMAT_XRGB_2101010:
+ *drm_format = DRM_FORMAT_BGRX1010102;
+ break;
+ case HAL_PIXEL_FORMAT_BGRA_1010102:
+ *drm_format = DRM_FORMAT_ARGB2101010;
+ break;
+ case HAL_PIXEL_FORMAT_ABGR_2101010:
+ *drm_format = DRM_FORMAT_RGBA1010102;
+ break;
+ case HAL_PIXEL_FORMAT_BGRX_1010102:
+ *drm_format = DRM_FORMAT_XRGB2101010;
+ break;
+ case HAL_PIXEL_FORMAT_XBGR_2101010:
+ *drm_format = DRM_FORMAT_RGBX1010102;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ *drm_format = DRM_FORMAT_NV12;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ *drm_format = DRM_FORMAT_NV12;
+ if (compressed) {
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ } else {
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_TILE;
+ }
+ break;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ *drm_format = DRM_FORMAT_NV21;
+ break;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ *drm_format = DRM_FORMAT_NV21;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ *drm_format = DRM_FORMAT_NV12;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_DX;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ *drm_format = DRM_FORMAT_NV12;
+ if (compressed) {
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED | DRM_FORMAT_MOD_QCOM_DX;
+ } else {
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_TILE | DRM_FORMAT_MOD_QCOM_DX;
+ }
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ *drm_format = DRM_FORMAT_NV12;
+ if (compressed) {
+ *drm_format_modifier =
+ DRM_FORMAT_MOD_QCOM_COMPRESSED | DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT;
+ } else {
+ *drm_format_modifier =
+ DRM_FORMAT_MOD_QCOM_TILE | DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT;
+ }
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ *drm_format = DRM_FORMAT_NV16;
+ break;
+ /*
+ TODO: No HAL_PIXEL_FORMAT equivalent?
+ case kFormatYCrCb422H2V1SemiPlanar:
+ *drm_format = DRM_FORMAT_NV61;
+ break;*/
+ case HAL_PIXEL_FORMAT_YV12:
+ *drm_format = DRM_FORMAT_YVU420;
+ break;
+ default:
+ ALOGE("Unsupported format %d", format);
+ }
+}
+
+} // namespace gralloc
diff --git a/gralloc/gr_utils.h b/gralloc/gr_utils.h
new file mode 100644
index 0000000..e21f92b
--- /dev/null
+++ b/gralloc/gr_utils.h
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2011-2016,2018-2020, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __GR_UTILS_H__
+#define __GR_UTILS_H__
+
+#include <android/hardware/graphics/common/1.2/types.h>
+#include "gralloc_priv.h"
+#include "qdMetaData.h"
+
+#define SZ_2M 0x200000
+#define SZ_1M 0x100000
+#define SZ_4K 0x1000
+
+#define SIZE_4K 4096
+#define SIZE_8K 8192
+
+#ifdef SLAVE_SIDE_CP
+#define SECURE_ALIGN SZ_1M
+#else // MASTER_SIDE_CP
+#define SECURE_ALIGN SZ_4K
+#endif
+
+#define INT(exp) static_cast<int>(exp)
+#define UINT(exp) static_cast<unsigned int>(exp)
+
+using android::hardware::graphics::common::V1_1::BufferUsage;
+
+namespace gralloc {
+struct BufferInfo {
+ BufferInfo(int w, int h, int f, uint64_t usage = 0)
+ : width(w), height(h), format(f), layer_count(1), usage(usage) {}
+ int width;
+ int height;
+ int format;
+ int layer_count;
+ uint64_t usage;
+};
+
+struct GrallocProperties {
+ bool use_system_heap_for_sensors = true;
+ bool ubwc_disable = false;
+ bool ahardware_buffer_disable = false;
+};
+
+template <class Type1, class Type2>
+inline Type1 ALIGN(Type1 x, Type2 align) {
+ return (Type1)((x + (Type1)align - 1) & ~((Type1)align - 1));
+}
+
+enum class Error : int32_t {
+ /**
+ * No error.
+ */
+ NONE = 0,
+ /**
+ * Invalid BufferDescriptor.
+ */
+ BAD_DESCRIPTOR = 1,
+ /**
+ * Invalid buffer handle.
+ */
+ BAD_BUFFER = 2,
+ /**
+ * Invalid HardwareBufferDescription.
+ */
+ BAD_VALUE = 3,
+ /**
+ * Resource unavailable.
+ */
+ NO_RESOURCES = 5,
+ /**
+ * Permanent failure.
+ */
+ UNSUPPORTED = 7,
+};
+
+enum PlaneComponent {
+ /* luma */
+ PLANE_COMPONENT_Y = 1 << 0,
+ /* chroma blue */
+ PLANE_COMPONENT_Cb = 1 << 1,
+ /* chroma red */
+ PLANE_COMPONENT_Cr = 1 << 2,
+
+ /* red */
+ PLANE_COMPONENT_R = 1 << 10,
+ /* green */
+ PLANE_COMPONENT_G = 1 << 11,
+ /* blue */
+ PLANE_COMPONENT_B = 1 << 12,
+
+ /* alpha */
+ PLANE_COMPONENT_A = 1 << 20,
+
+ /* raw data plane */
+ PLANE_COMPONENT_RAW = 1 << 30,
+
+ /* meta information plane */
+ PLANE_COMPONENT_META = 1 << 31,
+};
+
+struct PlaneLayoutInfo {
+ /** Components represented the type of plane. */
+ PlaneComponent component;
+
+ /** horizontal subsampling. Must be a positive power of 2. */
+ uint32_t h_subsampling;
+
+ /** vertical subsampling. Must be a positive power of 2. */
+ uint32_t v_subsampling;
+
+ /** offset to the first byte of the top-left pixel of the plane
+ * and it is calculated from the start of the buffer.
+ * Add base of the handle with offset to get the first byte of the plane.
+ */
+ uint32_t offset;
+
+ /** step is the distance in bytes from one pixel value to the next. */
+ int32_t step;
+
+ /** stride of the plane in pixels */
+ int32_t stride;
+
+ /** stride of the plane in in bytes */
+ int32_t stride_bytes;
+
+ /** plane height or vertical stride */
+ int32_t scanlines;
+
+ /** size of the plane in bytes */
+ uint32_t size;
+};
+
+bool IsYuvFormat(int format);
+bool IsCompressedRGBFormat(int format);
+bool IsUncompressedRGBFormat(int format);
+uint32_t GetBppForUncompressedRGB(int format);
+bool CpuCanAccess(uint64_t usage);
+bool CpuCanRead(uint64_t usage);
+bool CpuCanWrite(uint64_t usage);
+int GetBpp(int format);
+unsigned int GetSize(const BufferInfo &d, unsigned int alignedw, unsigned int alignedh);
+int GetBufferSizeAndDimensions(const BufferInfo &d, unsigned int *size, unsigned int *alignedw,
+ unsigned int *alignedh);
+int GetBufferSizeAndDimensions(const BufferInfo &d, unsigned int *size, unsigned int *alignedw,
+ unsigned int *alignedh, GraphicsMetadata *graphics_metadata);
+void GetCustomDimensions(private_handle_t *hnd, int *stride, int *height);
+void GetColorSpaceFromMetadata(private_handle_t *hnd, int *color_space);
+void GetAlignedWidthAndHeight(const BufferInfo &d, unsigned int *aligned_w,
+ unsigned int *aligned_h);
+int GetYUVPlaneInfo(const private_handle_t *hnd, struct android_ycbcr ycbcr[2]);
+int GetYUVPlaneInfo(const BufferInfo &info, int32_t format, int32_t width, int32_t height,
+ int32_t flags, int *plane_count, PlaneLayoutInfo plane_info[8]);
+void GetRGBPlaneInfo(const BufferInfo &info, int32_t format, int32_t width, int32_t height,
+ int32_t flags, int *plane_count, PlaneLayoutInfo *plane_info);
+unsigned int GetRgbMetaSize(int format, uint32_t width, uint32_t height, uint64_t usage);
+void GetYuvSubSamplingFactor(int32_t format, int *h_subsampling, int *v_subsampling);
+void CopyPlaneLayoutInfotoAndroidYcbcr(uint64_t base, int plane_count, PlaneLayoutInfo *plane_info,
+ struct android_ycbcr *ycbcr);
+int GetRgbDataAddress(private_handle_t *hnd, void **rgb_data);
+bool IsUBwcFormat(int format);
+bool IsUBwcSupported(int format);
+bool IsUBwcPISupported(int format, uint64_t usage);
+bool IsUBwcEnabled(int format, uint64_t usage);
+void GetYuvUBwcWidthAndHeight(int width, int height, int format, unsigned int *aligned_w,
+ unsigned int *aligned_h);
+void GetYuvSPPlaneInfo(const BufferInfo &info, int format, uint32_t width, uint32_t height,
+ uint32_t bpp, PlaneLayoutInfo *plane_info);
+void GetYuvUbwcSPPlaneInfo(uint32_t width, uint32_t height, int color_format,
+ PlaneLayoutInfo *plane_info);
+void GetYuvUbwcInterlacedSPPlaneInfo(uint32_t width, uint32_t height,
+ PlaneLayoutInfo plane_info[8]);
+void GetRgbUBwcBlockSize(uint32_t bpp, int *block_width, int *block_height);
+unsigned int GetRgbUBwcMetaBufferSize(int width, int height, uint32_t bpp);
+unsigned int GetUBwcSize(int width, int height, int format, unsigned int alignedw,
+ unsigned int alignedh);
+int GetBufferLayout(private_handle_t *hnd, uint32_t stride[4], uint32_t offset[4],
+ uint32_t *num_planes);
+uint32_t GetDataAlignment(int format, uint64_t usage);
+int GetGpuResourceSizeAndDimensions(const BufferInfo &info, unsigned int *size,
+ unsigned int *alignedw, unsigned int *alignedh,
+ GraphicsMetadata *graphics_metadata);
+bool CanUseAdrenoForSize(int buffer_type, uint64_t usage);
+bool GetAdrenoSizeAPIStatus();
+bool UseUncached(int format, uint64_t usage);
+uint64_t GetHandleFlags(int format, uint64_t usage);
+int GetImplDefinedFormat(uint64_t usage, int format);
+int GetCustomFormatFlags(int format, uint64_t usage, int *custom_format, uint64_t *priv_flags);
+int GetBufferType(int inputFormat);
+bool IsGPUFlagSupported(uint64_t usage);
+bool HasAlphaComponent(int32_t format);
+
+void GetDRMFormat(uint32_t format, uint32_t flags, uint32_t *drm_format,
+ uint64_t *drm_format_modifier);
+} // namespace gralloc
+
+#endif // __GR_UTILS_H__
diff --git a/gralloc/service.cpp b/gralloc/service.cpp
new file mode 100644
index 0000000..2b890ff
--- /dev/null
+++ b/gralloc/service.cpp
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+#include <hidl/LegacySupport.h>
+
+#include "QtiAllocator.h"
+
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+using IQtiAllocator3 = vendor::qti::hardware::display::allocator::V3_0::IQtiAllocator;
+using IQtiAllocator4 = vendor::qti::hardware::display::allocator::V4_0::IQtiAllocator;
+
+int main(int, char **) {
+ android::sp<IQtiAllocator3> service3 =
+ new vendor::qti::hardware::display::allocator::V3_0::implementation::QtiAllocator();
+
+ configureRpcThreadpool(4, true /*callerWillJoin*/);
+ if (service3->registerAsService() != android::OK) {
+ ALOGE("Cannot register QTI Allocator 3 service");
+ return -EINVAL;
+ }
+ ALOGI("Initialized qti-allocator 3");
+
+#ifdef TARGET_USES_GRALLOC4
+ android::sp<IQtiAllocator4> service4 =
+ new vendor::qti::hardware::display::allocator::V4_0::implementation::QtiAllocator();
+ if (service4->registerAsService() != android::OK) {
+ ALOGE("Cannot register QTI Allocator 4 service");
+ return -EINVAL;
+ }
+ ALOGI("Initialized qti-allocator 4");
+#endif
+
+ joinRpcThreadpool();
+
+ return 0;
+}
diff --git a/gralloc/vendor.qti.hardware.display.allocator-service.rc b/gralloc/vendor.qti.hardware.display.allocator-service.rc
new file mode 100644
index 0000000..ca2c7b9
--- /dev/null
+++ b/gralloc/vendor.qti.hardware.display.allocator-service.rc
@@ -0,0 +1,6 @@
+service vendor.qti.hardware.display.allocator /vendor/bin/hw/vendor.qti.hardware.display.allocator-service
+ class hal animation
+ user system
+ group graphics drmrpc
+ capabilities SYS_NICE
+ onrestart restart surfaceflinger
diff --git a/gralloc/vendor.qti.hardware.display.allocator-service.xml b/gralloc/vendor.qti.hardware.display.allocator-service.xml
new file mode 100644
index 0000000..506c58b
--- /dev/null
+++ b/gralloc/vendor.qti.hardware.display.allocator-service.xml
@@ -0,0 +1,50 @@
+<!--
+Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+-->
+<manifest version="1.0" type="device">
+ <hal format="hidl">
+ <name>android.hardware.graphics.allocator</name>
+ <transport>hwbinder</transport>
+ <version>3.0</version>
+ <version>4.0</version>
+ <interface>
+ <name>IAllocator</name>
+ <instance>default</instance>
+ </interface>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.qti.hardware.display.allocator</name>
+ <transport>hwbinder</transport>
+ <version>3.0</version>
+ <version>4.0</version>
+ <interface>
+ <name>IQtiAllocator</name>
+ <instance>default</instance>
+ </interface>
+ </hal>
+</manifest>
diff --git a/hdmi_cec/Android.mk b/hdmi_cec/Android.mk
new file mode 100644
index 0000000..a333654
--- /dev/null
+++ b/hdmi_cec/Android.mk
@@ -0,0 +1,18 @@
+LOCAL_PATH := $(call my-dir)
+include $(LOCAL_PATH)/../common.mk
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := hdmi_cec.$(TARGET_BOARD_PLATFORM)
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := $(common_includes)
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_SHARED_LIBRARIES := $(common_libs) libqservice libbinder libqdutils
+
+LOCAL_CFLAGS := $(common_flags) -DLOG_TAG=\"qdhdmi_cec\" -Wno-sign-conversion
+LOCAL_CLANG := true
+LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_SRC_FILES := qhdmi_cec.cpp \
+ QHDMIClient.cpp
+include $(BUILD_SHARED_LIBRARY)
diff --git a/hdmi_cec/QHDMIClient.cpp b/hdmi_cec/QHDMIClient.cpp
new file mode 100644
index 0000000..2b2b1e6
--- /dev/null
+++ b/hdmi_cec/QHDMIClient.cpp
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2014 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#define DEBUG 0
+#include <QServiceUtils.h>
+#include "QHDMIClient.h"
+
+using namespace android;
+using namespace qhdmicec;
+using namespace qService;
+
+namespace qClient {
+
+void QHDMIClient::binderDied(const wp<IBinder>& who __unused)
+{
+ ALOGW("%s: Display QService died", __FUNCTION__);
+}
+
+void QHDMIClient::onHdmiHotplug(int connected)
+{
+ ALOGD("%s: HDMI connected event connected: %d", __FUNCTION__, connected);
+ cec_hdmi_hotplug(mCtx, connected);
+}
+
+void QHDMIClient::onCECMessageRecieved(char *msg, ssize_t len)
+{
+ ALOGD_IF(DEBUG, "%s: CEC message received len: %zd", __FUNCTION__, len);
+ cec_receive_message(mCtx, msg, len);
+}
+
+void QHDMIClient::registerClient(sp<QHDMIClient>& client)
+{
+ sp<IServiceManager> sm = defaultServiceManager();
+ sp<IBinder> binder = sm->getService(String16("display.qservice"));
+ binder->linkToDeath(client);
+ mQService = interface_cast<IQService>(binder);
+ mQService->connect(interface_cast<IQHDMIClient>(client));
+}
+
+};
diff --git a/hdmi_cec/QHDMIClient.h b/hdmi_cec/QHDMIClient.h
new file mode 100644
index 0000000..9e54f2f
--- /dev/null
+++ b/hdmi_cec/QHDMIClient.h
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2014 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include "IQHDMIClient.h"
+#include "qhdmi_cec.h"
+#include <IQService.h>
+
+namespace qClient {
+
+class QHDMIClient: public android::IBinder::DeathRecipient,
+ public BnQHDMIClient
+{
+public:
+ QHDMIClient() {}
+
+ virtual void binderDied(const android::wp<android::IBinder>& who);
+
+ virtual void onHdmiHotplug(int connected);
+
+ virtual void onCECMessageRecieved(char *msg, ssize_t len);
+
+ void setCECContext(qhdmicec::cec_context_t* ctx) { mCtx = ctx; }
+
+ void registerClient(android::sp<QHDMIClient>& client);
+
+private:
+ qhdmicec::cec_context_t* mCtx;
+ android::sp<qService::IQService> mQService;
+
+};
+};
diff --git a/hdmi_cec/qhdmi_cec.cpp b/hdmi_cec/qhdmi_cec.cpp
new file mode 100644
index 0000000..2760334
--- /dev/null
+++ b/hdmi_cec/qhdmi_cec.cpp
@@ -0,0 +1,520 @@
+/*
+* Copyright (c) 2014, 2016-2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#define DEBUG 0
+#define ATRACE_TAG (ATRACE_TAG_GRAPHICS | ATRACE_TAG_HAL)
+#include <cstdlib>
+#include <log/log.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <hardware/hdmi_cec.h>
+#include <utils/Trace.h>
+#include "qhdmi_cec.h"
+#include "QHDMIClient.h"
+
+namespace qhdmicec {
+
+const int NUM_HDMI_PORTS = 1;
+const int MAX_SYSFS_DATA = 128;
+const int MAX_CEC_FRAME_SIZE = 20;
+const int MAX_SEND_MESSAGE_RETRIES = 1;
+
+enum {
+ LOGICAL_ADDRESS_SET = 1,
+ LOGICAL_ADDRESS_UNSET = -1,
+};
+
+// Offsets of members of struct hdmi_cec_msg
+// drivers/video/msm/mdss/mdss_hdmi_cec.c
+// XXX: Get this from a driver header
+enum {
+ CEC_OFFSET_SENDER_ID,
+ CEC_OFFSET_RECEIVER_ID,
+ CEC_OFFSET_OPCODE,
+ CEC_OFFSET_OPERAND,
+ CEC_OFFSET_FRAME_LENGTH = 17,
+ CEC_OFFSET_RETRANSMIT,
+};
+
+//Forward declarations
+static void cec_close_context(cec_context_t* ctx __unused);
+static int cec_enable(cec_context_t *ctx, int enable);
+static int cec_is_connected(const struct hdmi_cec_device* dev, int port_id);
+
+static ssize_t read_node(const char *path, char *data)
+{
+ ssize_t err = 0;
+ FILE *fp = NULL;
+ err = access(path, R_OK);
+ if (!err) {
+ fp = fopen(path, "r");
+ if (fp) {
+ err = fread(data, sizeof(char), MAX_SYSFS_DATA ,fp);
+ fclose(fp);
+ }
+ }
+ return err;
+}
+
+static ssize_t write_node(const char *path, const char *data, size_t len)
+{
+ ssize_t err = 0;
+ int fd = -1;
+ err = access(path, W_OK);
+ if (!err) {
+ fd = open(path, O_WRONLY);
+ errno = 0;
+ err = write(fd, data, len);
+ if (err < 0) {
+ err = -errno;
+ }
+ close(fd);
+ } else {
+ ALOGE("%s: Failed to access path: %s error: %s",
+ __FUNCTION__, path, strerror(errno));
+ err = -errno;
+ }
+ return err;
+}
+
+// Helper function to write integer values to the full sysfs path
+static ssize_t write_int_to_node(cec_context_t *ctx,
+ const char *path_postfix,
+ const int value)
+{
+ char sysfs_full_path[MAX_PATH_LENGTH];
+ char sysfs_data[MAX_SYSFS_DATA];
+ snprintf(sysfs_data, sizeof(sysfs_data), "%d",value);
+ snprintf(sysfs_full_path,sizeof(sysfs_full_path), "%s/%s",
+ ctx->fb_sysfs_path, path_postfix);
+ ssize_t err = write_node(sysfs_full_path, sysfs_data, strlen(sysfs_data));
+ return err;
+}
+
+static void hex_to_string(const char *msg, ssize_t len, char *str)
+{
+ //Functions assumes sufficient memory in str
+ char *ptr = str;
+ for(int i=0; i < len ; i++) {
+ ptr += snprintf(ptr, 3, "%02X", msg[i]);
+ // Overwrite null termination of snprintf in all except the last byte
+ if (i < len - 1)
+ *ptr = ':';
+ ptr++;
+ }
+}
+
+static ssize_t cec_get_fb_node_number(cec_context_t *ctx)
+{
+ //XXX: Do this from a common utility library across the display HALs
+ const int MAX_FB_DEVICES = 2;
+ ssize_t len = 0;
+ char fb_type_path[MAX_PATH_LENGTH];
+ char fb_type[MAX_SYSFS_DATA];
+ const char *dtv_panel_str = "dtv panel";
+
+ for(int num = 0; num < MAX_FB_DEVICES; num++) {
+ snprintf(fb_type_path, sizeof(fb_type_path),"%s%d/msm_fb_type",
+ SYSFS_BASE,num);
+ ALOGD_IF(DEBUG, "%s: num: %d fb_type_path: %s", __FUNCTION__, num, fb_type_path);
+ len = read_node(fb_type_path, fb_type);
+ ALOGD_IF(DEBUG, "%s: fb_type:%s", __FUNCTION__, fb_type);
+ if(len > 0 && (strncmp(fb_type, dtv_panel_str, strlen(dtv_panel_str)) == 0)){
+ ALOGD_IF(DEBUG, "%s: Found DTV panel at fb%d", __FUNCTION__, num);
+ ctx->fb_num = num;
+ snprintf(ctx->fb_sysfs_path, sizeof(ctx->fb_sysfs_path),
+ "%s%d", SYSFS_BASE, num);
+ break;
+ }
+ }
+ if (len < 0)
+ return len;
+ else
+ return 0;
+}
+
+static int cec_add_logical_address(const struct hdmi_cec_device* dev,
+ cec_logical_address_t addr)
+{
+ if (addr < CEC_ADDR_TV || addr > CEC_ADDR_BROADCAST) {
+ ALOGE("%s: Received invalid address: %d ", __FUNCTION__, addr);
+ return -EINVAL;
+ }
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ ctx->logical_address[addr] = LOGICAL_ADDRESS_SET;
+
+ //XXX: We can get multiple logical addresses here but we can only send one
+ //to the driver. Store locally for now
+ ssize_t err = write_int_to_node(ctx, "cec/logical_addr", addr);
+ ALOGI("%s: Allocated logical address: %d ", __FUNCTION__, addr);
+ return (int) err;
+}
+
+static void cec_clear_logical_address(const struct hdmi_cec_device* dev)
+{
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ memset(ctx->logical_address, LOGICAL_ADDRESS_UNSET,
+ sizeof(ctx->logical_address));
+ //XXX: Find logical_addr that needs to be reset
+ write_int_to_node(ctx, "cec/logical_addr", 15);
+ ALOGD_IF(DEBUG, "%s: Cleared logical addresses", __FUNCTION__);
+}
+
+static int cec_get_physical_address(const struct hdmi_cec_device* dev,
+ uint16_t* addr)
+{
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ char pa_path[MAX_PATH_LENGTH];
+ char pa_data[MAX_SYSFS_DATA];
+ snprintf (pa_path, sizeof(pa_path),"%s/pa",
+ ctx->fb_sysfs_path);
+ int err = (int) read_node(pa_path, pa_data);
+ *addr = (uint16_t) atoi(pa_data);
+ ALOGD_IF(DEBUG, "%s: Physical Address: 0x%x", __FUNCTION__, *addr);
+ if (err < 0)
+ return err;
+ else
+ return 0;
+}
+
+static int cec_send_message(const struct hdmi_cec_device* dev,
+ const cec_message_t* msg)
+{
+ ATRACE_CALL();
+ if(cec_is_connected(dev, 0) <= 0)
+ return HDMI_RESULT_FAIL;
+
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ ALOGD_IF(DEBUG, "%s: initiator: %d destination: %d length: %u",
+ __FUNCTION__, msg->initiator, msg->destination,
+ (uint32_t) msg->length);
+
+ // Dump message received from framework
+ char dump[128];
+ if(msg->length > 0) {
+ hex_to_string((char*)msg->body, msg->length, dump);
+ ALOGD_IF(DEBUG, "%s: message from framework: %s", __FUNCTION__, dump);
+ }
+
+ char write_msg_path[MAX_PATH_LENGTH];
+ char write_msg[MAX_CEC_FRAME_SIZE];
+ memset(write_msg, 0, sizeof(write_msg));
+ // See definition of struct hdmi_cec_msg in driver code
+ // drivers/video/msm/mdss/mdss_hdmi_cec.c
+ // Write header block
+ // XXX: Include this from header in kernel
+ write_msg[CEC_OFFSET_SENDER_ID] = msg->initiator;
+ write_msg[CEC_OFFSET_RECEIVER_ID] = msg->destination;
+ //Kernel splits opcode/operand, but Android sends it in one byte array
+ write_msg[CEC_OFFSET_OPCODE] = msg->body[0];
+ if(msg->length > 1) {
+ memcpy(&write_msg[CEC_OFFSET_OPERAND], &msg->body[1],
+ sizeof(char)*(msg->length - 1));
+ }
+ //msg length + initiator + destination
+ write_msg[CEC_OFFSET_FRAME_LENGTH] = (unsigned char) (msg->length + 1);
+ hex_to_string(write_msg, sizeof(write_msg), dump);
+ ALOGD_IF(DEBUG, "%s: message to driver: %s", __FUNCTION__, dump);
+ snprintf(write_msg_path, sizeof(write_msg_path), "%s/cec/wr_msg",
+ ctx->fb_sysfs_path);
+ int retry_count = 0;
+ ssize_t err = 0;
+ //HAL spec requires us to retry at least once.
+ while (true) {
+ err = write_node(write_msg_path, write_msg, sizeof(write_msg));
+ retry_count++;
+ if (err == -EAGAIN && retry_count <= MAX_SEND_MESSAGE_RETRIES) {
+ ALOGE("%s: CEC line busy, retrying", __FUNCTION__);
+ } else {
+ break;
+ }
+ }
+
+ if (err < 0) {
+ if (err == -ENXIO) {
+ ALOGI("%s: No device exists with the destination address",
+ __FUNCTION__);
+ return HDMI_RESULT_NACK;
+ } else if (err == -EAGAIN) {
+ ALOGE("%s: CEC line is busy, max retry count exceeded",
+ __FUNCTION__);
+ return HDMI_RESULT_BUSY;
+ } else {
+ return HDMI_RESULT_FAIL;
+ ALOGE("%s: Failed to send CEC message err: %zd - %s",
+ __FUNCTION__, err, strerror(int(-err)));
+ }
+ } else {
+ ALOGD_IF(DEBUG, "%s: Sent CEC message - %zd bytes written",
+ __FUNCTION__, err);
+ return HDMI_RESULT_SUCCESS;
+ }
+}
+
+void cec_receive_message(cec_context_t *ctx, char *msg, ssize_t len)
+{
+ if(!ctx->system_control)
+ return;
+
+ char dump[128];
+ if(len > 0) {
+ hex_to_string(msg, len, dump);
+ ALOGD_IF(DEBUG, "%s: Message from driver: %s", __FUNCTION__, dump);
+ }
+
+ hdmi_event_t event;
+ event.type = HDMI_EVENT_CEC_MESSAGE;
+ event.dev = (hdmi_cec_device *) ctx;
+ // Remove initiator/destination from this calculation
+ event.cec.length = msg[CEC_OFFSET_FRAME_LENGTH] - 1;
+ event.cec.initiator = (cec_logical_address_t) msg[CEC_OFFSET_SENDER_ID];
+ event.cec.destination = (cec_logical_address_t) msg[CEC_OFFSET_RECEIVER_ID];
+ //Copy opcode and operand
+ size_t copy_size = event.cec.length > sizeof(event.cec.body) ?
+ sizeof(event.cec.body) : event.cec.length;
+ memcpy(event.cec.body, &msg[CEC_OFFSET_OPCODE],copy_size);
+ hex_to_string((char *) event.cec.body, copy_size, dump);
+ ALOGD_IF(DEBUG, "%s: Message to framework: %s", __FUNCTION__, dump);
+ ctx->callback.callback_func(&event, ctx->callback.callback_arg);
+}
+
+void cec_hdmi_hotplug(cec_context_t *ctx, int connected)
+{
+ //Ignore unplug events when system control is disabled
+ if(!ctx->system_control && connected == 0)
+ return;
+ hdmi_event_t event;
+ event.type = HDMI_EVENT_HOT_PLUG;
+ event.dev = (hdmi_cec_device *) ctx;
+ event.hotplug.connected = connected ? HDMI_CONNECTED : HDMI_NOT_CONNECTED;
+ ctx->callback.callback_func(&event, ctx->callback.callback_arg);
+}
+
+static void cec_register_event_callback(const struct hdmi_cec_device* dev,
+ event_callback_t callback, void* arg)
+{
+ ALOGD_IF(DEBUG, "%s: Registering callback", __FUNCTION__);
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ ctx->callback.callback_func = callback;
+ ctx->callback.callback_arg = arg;
+}
+
+static void cec_get_version(const struct hdmi_cec_device* dev, int* version)
+{
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ *version = ctx->version;
+ ALOGD_IF(DEBUG, "%s: version: %d", __FUNCTION__, *version);
+}
+
+static void cec_get_vendor_id(const struct hdmi_cec_device* dev,
+ uint32_t* vendor_id)
+{
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ *vendor_id = ctx->vendor_id;
+ ALOGD_IF(DEBUG, "%s: vendor id: %u", __FUNCTION__, *vendor_id);
+}
+
+static void cec_get_port_info(const struct hdmi_cec_device* dev,
+ struct hdmi_port_info* list[], int* total)
+{
+ ALOGD_IF(DEBUG, "%s: Get port info", __FUNCTION__);
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ *total = NUM_HDMI_PORTS;
+ *list = ctx->port_info;
+}
+
+static void cec_set_option(const struct hdmi_cec_device* dev, int flag,
+ int value)
+{
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ switch (flag) {
+ case HDMI_OPTION_WAKEUP:
+ ALOGD_IF(DEBUG, "%s: Wakeup: value: %d", __FUNCTION__, value);
+ //XXX
+ break;
+ case HDMI_OPTION_ENABLE_CEC:
+ ALOGD_IF(DEBUG, "%s: Enable CEC: value: %d", __FUNCTION__, value);
+ cec_enable(ctx, value? 1 : 0);
+ break;
+ case HDMI_OPTION_SYSTEM_CEC_CONTROL:
+ ALOGD_IF(DEBUG, "%s: system_control: value: %d",
+ __FUNCTION__, value);
+ ctx->system_control = !!value;
+ break;
+ }
+}
+
+static void cec_set_audio_return_channel(const struct hdmi_cec_device* dev,
+ int port, int flag)
+{
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ ctx->arc_enabled = flag ? true : false;
+ ALOGD_IF(DEBUG, "%s: ARC flag: %d port: %d", __FUNCTION__, flag, port);
+}
+
+static int cec_is_connected(const struct hdmi_cec_device* dev, int port_id)
+{
+ // Ignore port_id since we have only one port
+ int connected = 0;
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ char connected_path[MAX_PATH_LENGTH];
+ char connected_data[MAX_SYSFS_DATA];
+ snprintf (connected_path, sizeof(connected_path),"%s/connected",
+ ctx->fb_sysfs_path);
+ ssize_t err = read_node(connected_path, connected_data);
+ connected = atoi(connected_data);
+
+ ALOGD_IF(DEBUG, "%s: HDMI at port %d is - %s", __FUNCTION__, port_id,
+ connected ? "connected":"disconnected");
+ if (err < 0)
+ return (int) err;
+ else
+ return connected;
+}
+
+static int cec_device_close(struct hw_device_t *dev)
+{
+ ALOGD_IF(DEBUG, "%s: Close CEC HAL ", __FUNCTION__);
+ if (!dev) {
+ ALOGE("%s: NULL device pointer", __FUNCTION__);
+ return -EINVAL;
+ }
+ cec_context_t* ctx = (cec_context_t*)(dev);
+ cec_close_context(ctx);
+ free(dev);
+ return 0;
+}
+
+static int cec_enable(cec_context_t *ctx, int enable)
+{
+ ssize_t err;
+ // Enable CEC
+ int value = enable ? 0x3 : 0x0;
+ err = write_int_to_node(ctx, "cec/enable", value);
+ if(err < 0) {
+ ALOGE("%s: Failed to toggle CEC: enable: %d",
+ __FUNCTION__, enable);
+ return (int) err;
+ }
+ ctx->enabled = enable;
+ return 0;
+}
+
+static void cec_init_context(cec_context_t *ctx)
+{
+ ALOGD_IF(DEBUG, "%s: Initializing context", __FUNCTION__);
+ cec_get_fb_node_number(ctx);
+
+ //Initialize ports - We support only one output port
+ ctx->port_info = new hdmi_port_info[NUM_HDMI_PORTS];
+ ctx->port_info[0].type = HDMI_OUTPUT;
+ ctx->port_info[0].port_id = 1;
+ ctx->port_info[0].cec_supported = 1;
+ //XXX: Enable ARC if supported
+ ctx->port_info[0].arc_supported = 0;
+ cec_get_physical_address((hdmi_cec_device *) ctx,
+ &ctx->port_info[0].physical_address );
+
+ ctx->version = 0x4;
+ ctx->vendor_id = 0xA47733;
+ cec_clear_logical_address((hdmi_cec_device_t*)ctx);
+
+ //Set up listener for HDMI events
+ ctx->disp_client = new qClient::QHDMIClient();
+ ctx->disp_client->setCECContext(ctx);
+ ctx->disp_client->registerClient(ctx->disp_client);
+
+ //Enable CEC - framework expects it to be enabled by default
+ cec_enable(ctx, true);
+
+ ALOGD("%s: CEC enabled", __FUNCTION__);
+}
+
+static void cec_close_context(cec_context_t* ctx __unused)
+{
+ ALOGD("%s: Closing context", __FUNCTION__);
+}
+
+static int cec_device_open(const struct hw_module_t* module,
+ const char* name,
+ struct hw_device_t** device)
+{
+ ALOGD_IF(DEBUG, "%s: name: %s", __FUNCTION__, name);
+ int status = -EINVAL;
+ if (!strcmp(name, HDMI_CEC_HARDWARE_INTERFACE )) {
+ struct cec_context_t *dev;
+ dev = (cec_context_t *) calloc (1, sizeof(*dev));
+ if (dev) {
+ cec_init_context(dev);
+
+ //Setup CEC methods
+ dev->device.common.tag = HARDWARE_DEVICE_TAG;
+ dev->device.common.version = HDMI_CEC_DEVICE_API_VERSION_1_0;
+ dev->device.common.module = const_cast<hw_module_t* >(module);
+ dev->device.common.close = cec_device_close;
+ dev->device.add_logical_address = cec_add_logical_address;
+ dev->device.clear_logical_address = cec_clear_logical_address;
+ dev->device.get_physical_address = cec_get_physical_address;
+ dev->device.send_message = cec_send_message;
+ dev->device.register_event_callback = cec_register_event_callback;
+ dev->device.get_version = cec_get_version;
+ dev->device.get_vendor_id = cec_get_vendor_id;
+ dev->device.get_port_info = cec_get_port_info;
+ dev->device.set_option = cec_set_option;
+ dev->device.set_audio_return_channel = cec_set_audio_return_channel;
+ dev->device.is_connected = cec_is_connected;
+
+ *device = &dev->device.common;
+ status = 0;
+ } else {
+ status = -EINVAL;
+ }
+ }
+ return status;
+}
+}; //namespace qhdmicec
+
+// Standard HAL module, should be outside qhdmicec namespace
+static struct hw_module_methods_t cec_module_methods = {
+ .open = qhdmicec::cec_device_open
+};
+
+hdmi_module_t HAL_MODULE_INFO_SYM = {
+ .common = {
+ .tag = HARDWARE_MODULE_TAG,
+ .version_major = 1,
+ .version_minor = 0,
+ .id = HDMI_CEC_HARDWARE_MODULE_ID,
+ .name = "QTI HDMI CEC module",
+ .author = "The Linux Foundation",
+ .methods = &cec_module_methods,
+ }
+};
+
+
diff --git a/hdmi_cec/qhdmi_cec.h b/hdmi_cec/qhdmi_cec.h
new file mode 100644
index 0000000..aa97620
--- /dev/null
+++ b/hdmi_cec/qhdmi_cec.h
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2014 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+#ifndef QHDMI_CEC_H
+#define QHDMI_CEC_H
+
+#include <hardware/hdmi_cec.h>
+#include <utils/RefBase.h>
+
+namespace qClient {
+ class QHDMIClient;
+};
+
+namespace qhdmicec {
+
+#define SYSFS_BASE "/sys/class/graphics/fb"
+#define MAX_PATH_LENGTH 128
+
+struct cec_callback_t {
+ // Function in HDMI service to call back on CEC messages
+ event_callback_t callback_func;
+ // This stores the object to pass back to the framework
+ void* callback_arg;
+
+};
+
+struct cec_context_t {
+ hdmi_cec_device_t device; // Device for HW module
+ cec_callback_t callback; // Struct storing callback object
+ bool enabled;
+ bool arc_enabled;
+ bool system_control; // If true, HAL/driver handle CEC messages
+ int fb_num; // Framebuffer node for HDMI
+ char fb_sysfs_path[MAX_PATH_LENGTH];
+ hdmi_port_info *port_info; // HDMI port info
+
+ // Logical address is stored in an array, the index of the array is the
+ // logical address and the value in the index shows whether it is set or not
+ int logical_address[CEC_ADDR_BROADCAST];
+ int version;
+ uint32_t vendor_id;
+ android::sp<qClient::QHDMIClient> disp_client;
+};
+
+void cec_receive_message(cec_context_t *ctx, char *msg, ssize_t len);
+void cec_hdmi_hotplug(cec_context_t *ctx, int connected);
+
+}; //namespace
+#endif /* end of include guard: QHDMI_CEC_H */
diff --git a/include/Android.mk b/include/Android.mk
new file mode 100644
index 0000000..85e7554
--- /dev/null
+++ b/include/Android.mk
@@ -0,0 +1,18 @@
+LOCAL_PATH:= $(call my-dir)
+include $(LOCAL_PATH)/../common.mk
+include $(CLEAR_VARS)
+
+# Legacy header copy. This is deprecated.
+# Modules using these headers should shift to using
+# LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_VENDOR_MODULE := true
+LOCAL_COPY_HEADERS_TO := $(common_header_export_path)
+LOCAL_COPY_HEADERS := display_properties.h \
+ ../libqdutils/qd_utils.h \
+ ../libqdutils/display_config.h \
+ ../libqservice/QServiceUtils.h \
+ ../libqservice/IQService.h \
+ ../libqservice/IQHDMIClient.h \
+ ../libqservice/IQClient.h
+
+include $(BUILD_COPY_HEADERS)
diff --git a/include/display_properties.h b/include/display_properties.h
new file mode 100644
index 0000000..0e57f34
--- /dev/null
+++ b/include/display_properties.h
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2018 - 2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DISPLAY_PROPERTIES_H__
+#define __DISPLAY_PROPERTIES_H__
+
+#define DISP_PROP_PREFIX "vendor.display."
+#define GRALLOC_PROP_PREFIX "vendor.gralloc."
+#define RO_DISP_PROP_PREFIX "ro.vendor.display."
+#define PERSIST_DISP_PROP_PREFIX "persist.vendor.display."
+
+#define DISPLAY_PROP(prop_name) DISP_PROP_PREFIX prop_name
+#define GRALLOC_PROP(prop_name) GRALLOC_PROP_PREFIX prop_name
+#define RO_DISPLAY_PROP(prop_name) RO_DISP_PROP_PREFIX prop_name
+#define PERSIST_DISPLAY_PROP(prop_name) PERSIST_DISP_PROP_PREFIX prop_name
+
+#define COMPOSITION_MASK_PROP DISPLAY_PROP("comp_mask")
+#define HDMI_CONFIG_INDEX_PROP DISPLAY_PROP("hdmi_cfg_idx")
+#define IDLE_TIME_PROP DISPLAY_PROP("idle_time")
+#define IDLE_TIME_INACTIVE_PROP DISPLAY_PROP("idle_time_inactive")
+#define BOOT_ANIMATION_LAYER_COUNT_PROP DISPLAY_PROP("boot_anim_layer_count")
+#define DISABLE_ROTATOR_DOWNSCALE_PROP DISPLAY_PROP("disable_rotator_downscale")
+// Enables rotator for UI
+#define ENABLE_ROTATOR_UI_PROP DISPLAY_PROP("enable_rotator_ui")
+#define DISABLE_DECIMATION_PROP DISPLAY_PROP("disable_decimation")
+#define PRIMARY_MIXER_STAGES_PROP DISPLAY_PROP("primary_mixer_stages")
+#define EXTERNAL_MIXER_STAGES_PROP DISPLAY_PROP("external_mixer_stages")
+#define VIRTUAL_MIXER_STAGES_PROP DISPLAY_PROP("virtual_mixer_stages")
+#define MAX_UPSCALE_PROP DISPLAY_PROP("max_upscale")
+#define VIDEO_MODE_PANEL_PROP DISPLAY_PROP("video_mode_panel")
+#define DISABLE_ROTATOR_UBWC_PROP DISPLAY_PROP("disable_rotator_ubwc")
+#define DISABLE_ROTATOR_SPLIT_PROP DISPLAY_PROP("disable_rotator_split")
+#define DISABLE_SCALER_PROP DISPLAY_PROP("disable_scaler")
+#define DISABLE_AVR_PROP DISPLAY_PROP("disable_avr")
+#define DISABLE_EXTERNAL_ANIMATION_PROP DISPLAY_PROP("disable_ext_anim")
+#define DISABLE_PARTIAL_SPLIT_PROP DISPLAY_PROP("disable_partial_split")
+#define PREFER_SOURCE_SPLIT_PROP DISPLAY_PROP("prefer_source_split")
+#define MIXER_RESOLUTION_PROP DISPLAY_PROP("mixer_resolution")
+#define SIMULATED_CONFIG_PROP DISPLAY_PROP("simulated_config")
+#define MAX_EXTERNAL_LAYERS_PROP DISPLAY_PROP("max_external_layers")
+#define PERF_HINT_WINDOW_PROP DISPLAY_PROP("perf_hint_window")
+#define ENABLE_EXTERNAL_DOWNSCALE_PROP DISPLAY_PROP("enable_external_downscale")
+#define EXTERNAL_ACTION_SAFE_WIDTH_PROP DISPLAY_PROP("external_action_safe_width")
+#define EXTERNAL_ACTION_SAFE_HEIGHT_PROP DISPLAY_PROP("external_action_safe_height")
+#define FB_WIDTH_PROP DISPLAY_PROP("fb_width")
+#define FB_HEIGHT_PROP DISPLAY_PROP("fb_height")
+#define DISABLE_METADATA_DYNAMIC_FPS_PROP DISPLAY_PROP("disable_metadata_dynamic_fps")
+#define DISABLE_BLIT_COMPOSITION_PROP DISPLAY_PROP("disable_blit_comp")
+#define DISABLE_SKIP_VALIDATE_PROP DISPLAY_PROP("disable_skip_validate")
+#define HDMI_S3D_MODE_PROP DISPLAY_PROP("hdmi_s3d_mode")
+#define DISABLE_DESTINATION_SCALER_PROP DISPLAY_PROP("disable_dest_scaler")
+#define ENABLE_PARTIAL_UPDATE_PROP DISPLAY_PROP("enable_partial_update")
+#define DISABLE_UBWC_PROP GRALLOC_PROP("disable_ubwc")
+#define ENABLE_FB_UBWC_PROP GRALLOC_PROP("enable_fb_ubwc")
+#define MAP_FB_MEMORY_PROP GRALLOC_PROP("map_fb_memory")
+
+#define MAX_BLIT_FACTOR_PROP DISPLAY_PROP("max_blit_factor")
+#define DISABLE_SECURE_INLINE_ROTATOR_PROP DISPLAY_PROP("disable_secure_inline_rotator")
+#define DISABLE_MULTIRECT_PROP DISPLAY_PROP("disable_multirect")
+#define DISABLE_UBWC_FF_VOTING_PROP DISPLAY_PROP("disable_ubwc_ff_voting")
+#define DISABLE_INLINE_ROTATOR_PROP DISPLAY_PROP("disable_inline_rotator")
+#define DISABLE_FB_CROPPING_PROP DISPLAY_PROP("disable_fb_cropping")
+#define PRIORITIZE_CACHE_COMPOSITION_PROP DISPLAY_PROP("prioritize_cache_comp")
+#define DISABLE_HW_RECOVERY_PROP DISPLAY_PROP("disable_hw_recovery")
+#define DISABLE_HW_RECOVERY_DUMP_PROP DISPLAY_PROP("disable_hw_recovery_dump")
+#define DISABLE_SRC_TONEMAP_PROP DISPLAY_PROP("disable_src_tonemap")
+#define ENABLE_NULL_DISPLAY_PROP DISPLAY_PROP("enable_null_display")
+#define DISABLE_EXCL_RECT_PROP DISPLAY_PROP("disable_excl_rect")
+#define ENABLE_PIPE_PRIORITY_PROP DISPLAY_PROP("enable_pipe_priority")
+#define DISABLE_EXCl_RECT_PARTIAL_FB DISPLAY_PROP("disable_excl_rect_partial_fb")
+#define DISABLE_FBID_CACHE DISPLAY_PROP("disable_fbid_cache")
+#define DISABLE_HOTPLUG_BWCHECK DISPLAY_PROP("disable_hotplug_bwcheck")
+#define DISABLE_MASK_LAYER_HINT DISPLAY_PROP("disable_mask_layer_hint")
+
+#define DISABLE_HDR_LUT_GEN DISPLAY_PROP("disable_hdr_lut_gen")
+#define ENABLE_DEFAULT_COLOR_MODE DISPLAY_PROP("enable_default_color_mode")
+#define DISABLE_HDR DISPLAY_PROP("hwc_disable_hdr")
+#define DATASPACE_SATURATION_MATRIX_PROP DISPLAY_PROP("dataspace_saturation_matrix")
+#define DISABLE_QTI_BSP DISPLAY_PROP("disable_qti_bsp")
+#define UPDATE_VSYNC_ON_DOZE DISPLAY_PROP("update_vsync_on_doze")
+#define PANEL_MOUNTFLIP DISPLAY_PROP("panel_mountflip")
+#define VDS_ALLOW_HWC DISPLAY_PROP("vds_allow_hwc")
+#define QDFRAMEWORK_LOGS DISPLAY_PROP("qdframework_logs")
+
+#define HDR_CONFIG_PROP RO_DISPLAY_PROP("hdr.config")
+#define QDCM_PCC_TRANS_PROP DISPLAY_PROP("qdcm.pcc_for_trans")
+#define QDCM_DIAGONAL_MATRIXMODE_PROP DISPLAY_PROP("qdcm.diagonal_matrix_mode")
+#define QDCM_DISABLE_TIMEOUT_PROP PERSIST_DISPLAY_PROP("qdcm.disable_timeout")
+#define QDCM_MODE_COMBINE_PROP DISPLAY_PROP("qdcm.mode_combine")
+#define PREFER_MULTIRECT_PROP DISPLAY_PROP("prefer_multirect")
+#define DROP_SKEWED_VSYNC DISPLAY_PROP("drop_skewed_vsync")
+#define DISABLE_FAST_PATH DISPLAY_PROP("disable_fast_path")
+#define BUILTIN_BASEID_AND_SIZE_PROP DISPLAY_PROP("builtin_baseid_and_size")
+#define PLUGGABLE_BASEID_AND_SIZE_PROP DISPLAY_PROP("pluggable_baseid_and_size")
+#define VIRTUAL_BASEID_AND_SIZE_PROP DISPLAY_PROP("virtual_baseid_and_size")
+#define ENABLE_QDCM_DIAG DISPLAY_PROP("enable_qdcm_diag")
+#define QDCM_DISABLE_FACTORY_MODE_PROP DISPLAY_PROP("qdcm.disable_factory_mode")
+
+#define ZERO_SWAP_INTERVAL "vendor.debug.egl.swapinterval"
+#define ENABLE_OPTIMIZE_REFRESH DISPLAY_PROP("enable_optimize_refresh")
+#define ENABLE_ASYNC_POWERMODE DISPLAY_PROP("enable_async_powermode")
+#define DISABLE_UI_3D_TONEMAP DISPLAY_PROP("disable_ui_3d_tonemap")
+#define DISABLE_PARALLEL_CACHE DISPLAY_PROP("disable_parallel_cache")
+#define ENABLE_FORCE_SPLIT DISPLAY_PROP("enable_force_split")
+#define DEFER_FPS_FRAME_COUNT DISPLAY_PROP("defer_fps_frame_count")
+#define DISABLE_IDLE_TIME_VIDEO DISPLAY_PROP("disable_idle_time_video")
+#define DISABLE_IDLE_TIME_HDR DISPLAY_PROP("disable_idle_time_hdr")
+#define ENABLE_POMS_DURING_DOZE DISPLAY_PROP("enable_poms_during_doze")
+
+#endif // __DISPLAY_PROPERTIES_H__
diff --git a/libcopybit/Android.mk b/libcopybit/Android.mk
new file mode 100644
index 0000000..8396d51
--- /dev/null
+++ b/libcopybit/Android.mk
@@ -0,0 +1,23 @@
+# Copyright (C) 2008 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH:= $(call my-dir)
+include $(LOCAL_PATH)/../common.mk
+include $(CLEAR_VARS)
+
+LOCAL_VENDOR_MODULE := true
+LOCAL_COPY_HEADERS_TO := $(common_header_export_path)
+LOCAL_COPY_HEADERS := copybit.h copybit_priv.h c2d2.h
+#Copy the headers regardless of whether copybit is built
+include $(BUILD_COPY_HEADERS)
diff --git a/libcopybit/MODULE_LICENSE_APACHE2 b/libcopybit/MODULE_LICENSE_APACHE2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libcopybit/MODULE_LICENSE_APACHE2
diff --git a/libcopybit/NOTICE b/libcopybit/NOTICE
new file mode 100644
index 0000000..9c1e63a
--- /dev/null
+++ b/libcopybit/NOTICE
@@ -0,0 +1,189 @@
+
+ Copyright (c) 2008, The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
diff --git a/libcopybit/c2d2.h b/libcopybit/c2d2.h
new file mode 100644
index 0000000..315a3ba
--- /dev/null
+++ b/libcopybit/c2d2.h
@@ -0,0 +1,685 @@
+/* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ *
+ */
+#ifndef __c2d2_h_
+#define __c2d2_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef C2D_API
+#define C2D_API /* define API export as needed */
+#endif
+#if !defined(int32) && !defined(_INT32_DEFINED)
+typedef int int32;
+#define _INT32_DEFINED
+#endif
+#if !defined(uint32) && !defined(_UINT32_DEFINED)
+typedef unsigned int uint32;
+#define _UINT32_DEFINED
+#endif
+
+/*****************************************************************************/
+/*********************** Blit definitions *****************************/
+/*****************************************************************************/
+
+/* Status codes, returned by any blit function */
+typedef enum {
+ C2D_STATUS_OK = 0,
+ C2D_STATUS_NOT_SUPPORTED = 1,
+ C2D_STATUS_OUT_OF_MEMORY = 2,
+ C2D_STATUS_INVALID_PARAM = 3,
+ C2D_STATUS_SURFACE_IN_USE = 4,
+} C2D_STATUS;
+
+
+/* Definitions of color format modes, used together with color formats */
+typedef enum {
+ C2D_FORMAT_PACK_INTO_32BIT = (1 << 8), /* pack into dword if set */
+ C2D_FORMAT_SWAP_ENDIANNESS = (1 << 9), /* swaps the order */
+ C2D_FORMAT_LINEAR_SPACE = (1 << 10), /* linear color space */
+ C2D_FORMAT_PREMULTIPLIED = (1 << 11), /* alpha premultiplied */
+ C2D_FORMAT_INVERT_ALPHA = (1 << 12), /* inverts alpha */
+ C2D_FORMAT_DISABLE_ALPHA = (1 << 13), /* disables alpha */
+ C2D_FORMAT_INTERLACED = (1 << 14), /* YUV line-interlaced */
+ C2D_FORMAT_TRANSPARENT = (1 << 15), /* YUV 1-bit alpha in Y */
+ C2D_FORMAT_MACROTILED = (1 << 16), /* tiled in macro level */
+ C2D_FORMAT_TILED_4x4 = (1 << 17), /* 4x4 tiled format */
+ C2D_FORMAT_SWAP_RB = (1 << 18), /* Swap R & B color components */
+ C2D_FORMAT_UBWC_COMPRESSED = (1 << 23), /* UBWC compressed format */
+} C2D_FORMAT_MODE;
+
+/* Definitions of supported RGB formats, used in C2D_RGB_SURFACE_DEF.
+ * The bits of each color channel are packed into a machine word
+ * representing a single pixel from left to right (MSB to LSB) in the
+ * order indicated by format name. For the sub-byte formats the pixels
+ * are packed into bytes from left to right (MSbit to LSBit).
+ * If the C2D_FORMAT_PACK_INTO_32BIT bit is set, the minimal
+ * machine word used for pixel storage is 32-bit and the whole word
+ * is reversed if endianness is swapped.
+ * If the C2D_FORMAT_SWAP_ENDIANNESS bit is set, the order within a
+ * minimal machine word representing a pixel
+ * is reversed for both sub-byte and multi-byte formats.
+ * If the C2D_FORMAT_LINEAR_SPACE bit is set, the color space of
+ * the formats below is considered linear, if applicable.
+ * If the C2D_FORMAT_PREMULTIPLIED bit is set, the color channels
+ * are premultiplied with the alpha, if applicable.
+ * If the C2D_FORMAT_INVERT_ALPHA bit is set, the alpha interpretation
+ * is inverted: 0 - opaque, 1 - transparent, if applicable.
+ * If the C2D_FORMAT_DISABLE_ALPHA bit is set, the alpha channel serves
+ * as a placeholder and is ignored during blit, if applicable.
+ * If the C2D_FORMAT_MACROTILED bit is set, the surface is in the
+ * tiled format : 64x32 for 8bpp, 32x32 for 16bpp formats */
+typedef enum {
+ C2D_COLOR_FORMAT_1 = 0, /* 1-bit alpha/color expansion */
+
+ C2D_COLOR_FORMAT_2_PALETTE = 1, /* 2-bit indices for palette */
+ C2D_COLOR_FORMAT_4_PALETTE = 2, /* 4-bit indices for palette */
+ C2D_COLOR_FORMAT_8_PALETTE = 3, /* 8-bit indices for palette */
+
+ C2D_COLOR_FORMAT_2_L = 4, /* 2-bit grayscale */
+ C2D_COLOR_FORMAT_4_L = 5, /* 4-bit grayscale */
+ C2D_COLOR_FORMAT_8_L = 6, /* 8-bit grayscale */
+
+ C2D_COLOR_FORMAT_2_A = 7, /* 2-bit alpha only */
+ C2D_COLOR_FORMAT_4_A = 8, /* 4-bit alpha only */
+ C2D_COLOR_FORMAT_8_A = 9, /* 8-bit alpha only */
+
+ C2D_COLOR_FORMAT_444_RGB = 10, /* 12-bit colors */
+ C2D_COLOR_FORMAT_565_RGB = 11, /* 16-bit colors */
+ C2D_COLOR_FORMAT_888_RGB = 12, /* 24-bit colors */
+
+ C2D_COLOR_FORMAT_1555_ARGB = 13, /* 16-bit colors (1-bit alpha) */
+ C2D_COLOR_FORMAT_4444_ARGB = 14, /* 16-bit colors (4-bit alpha) */
+ C2D_COLOR_FORMAT_8565_ARGB = 15, /* 24-bit colors (8-bit alpha) */
+ C2D_COLOR_FORMAT_8888_ARGB = 16, /* 32-bit colors (8-bit alpha) */
+
+ C2D_COLOR_FORMAT_5551_RGBA = 17, /* 16-bit colors (1-bit alpha) */
+ C2D_COLOR_FORMAT_4444_RGBA = 18, /* 16-bit colors (4-bit alpha) */
+ C2D_COLOR_FORMAT_5658_RGBA = 19, /* 24-bit colors (8-bit alpha) */
+ C2D_COLOR_FORMAT_8888_RGBA = 20, /* 32-bit colors (8-bit alpha) */
+
+ /* derived RGB color formats (base format + mode bits) */
+
+} C2D_RGB_FORMAT;
+
+/* Definitions of supported YUV formats, used in C2D_YUV_SURFACE_DEF.
+ * Each of Y,U,V channels usually takes 1 byte and therefore is
+ * individually addressable. The definitions below show how Y,U,V
+ * channels are packed into macropixels for each particular format.
+ * The order is from left (smaller byte addresses) to right (larger
+ * byte addresses). The first three digits (4xx) denote the chroma
+ * subsampling in standard YUV notation. The digits in the macropixel
+ * denote that the whole block (from the previous digit or from the
+ * beginning) has to be repeated the number of times. Underscores
+ * between Y,U,V channels are used to describe separate planes for
+ * planar YUV formats. Formats are mapped to numbers so that future
+ * versions with various YUV permutations are easy to add.
+ * If the C2D_FORMAT_INTERLACED bit is set, the line order is
+ * interlaced: 0,2,4,...1,3,5... if applicable.
+ * If the C2D_FORMAT_TRANSPARENT bit is set, the least significant
+ * bit of Y channel serves as alpha: 0 - transparent, 1 - opaque. */
+typedef enum {
+ C2D_COLOR_FORMAT_411_YYUYYV = 110, /* packed, 12-bit */
+ C2D_COLOR_FORMAT_411_YUYYVY = 111, /* packed, 12-bit */
+ C2D_COLOR_FORMAT_411_UYYVYY = 112, /* packed, 12-bit, "Y411" */
+ C2D_COLOR_FORMAT_411_YUYV2Y4 = 116, /* packed, 12-bit */
+ C2D_COLOR_FORMAT_411_UYVY2Y4 = 117, /* packed, 12-bit, "Y41P" */
+
+ C2D_COLOR_FORMAT_422_YUYV = 120, /* packed, 16-bit, "YUY2" */
+ C2D_COLOR_FORMAT_422_UYVY = 121, /* packed, 16-bit, "UYVY" */
+ C2D_COLOR_FORMAT_422_YVYU = 122, /* packed, 16-bit, "YVYU" */
+ C2D_COLOR_FORMAT_422_VYUY = 123, /* packed, 16-bit */
+
+ C2D_COLOR_FORMAT_444_YUV = 130, /* packed, 24-bit */
+ C2D_COLOR_FORMAT_444_UYV = 131, /* packed, 24-bit, "IYU2" */
+ C2D_COLOR_FORMAT_444_AYUV = 136, /* packed, 24-bit, "AYUV" */
+
+ C2D_COLOR_FORMAT_410_Y_UV = 150, /* planar, Y + interleaved UV */
+ C2D_COLOR_FORMAT_411_Y_UV = 151, /* planar, Y + interleaved UV */
+ C2D_COLOR_FORMAT_420_Y_UV = 152, /* planar, Y + interleaved UV */
+ C2D_COLOR_FORMAT_422_Y_UV = 153, /* planar, Y + interleaved UV */
+ C2D_COLOR_FORMAT_444_Y_UV = 154, /* planar, Y + interleaved UV */
+
+ C2D_COLOR_FORMAT_410_Y_VU = 160, /* planar, Y + interleaved VU */
+ C2D_COLOR_FORMAT_411_Y_VU = 161, /* planar, Y + interleaved VU */
+ C2D_COLOR_FORMAT_420_Y_VU = 162, /* planar, Y + interleaved VU */
+ C2D_COLOR_FORMAT_422_Y_VU = 163, /* planar, Y + interleaved VU */
+ C2D_COLOR_FORMAT_444_Y_VU = 164, /* planar, Y + interleaved VU */
+
+ C2D_COLOR_FORMAT_410_Y_U_V = 170, /* planar, Y + U + V separate */
+ C2D_COLOR_FORMAT_411_Y_U_V = 171, /* planar, Y + U + V separate */
+ C2D_COLOR_FORMAT_420_Y_V_U = 172, /* planar, Y + V + U separate */
+ C2D_COLOR_FORMAT_420_Y_U_V = 173, /* planar, Y + U + V separate */
+ C2D_COLOR_FORMAT_422_Y_U_V = 174, /* planar, Y + U + V separate */
+ C2D_COLOR_FORMAT_444_Y_U_V = 175, /* planar, Y + U + V separate */
+
+ C2D_COLOR_FORMAT_800_Y = 190, /* planar, Y only, grayscale */
+
+ /* derived YUV color formats (base format + mode bits), FOURCC */
+
+ C2D_COLOR_FORMAT_411_Y411 = 112,
+ C2D_COLOR_FORMAT_411_Y41P = 117,
+ C2D_COLOR_FORMAT_411_IY41 = 117 | (1 << 14),
+ C2D_COLOR_FORMAT_411_Y41T = 117 | (1 << 15),
+
+ C2D_COLOR_FORMAT_422_YUY2 = 120,
+ C2D_COLOR_FORMAT_422_IUYV = 121 | (1 << 14),
+ C2D_COLOR_FORMAT_422_Y42T = 121 | (1 << 15),
+ C2D_COLOR_FORMAT_444_IYU2 = 131,
+
+ C2D_COLOR_FORMAT_420_NV12 = 152,
+ C2D_COLOR_FORMAT_420_NV21 = 162,
+
+ C2D_COLOR_FORMAT_410_YUV9 = 170,
+ C2D_COLOR_FORMAT_410_YVU9 = 170,
+ C2D_COLOR_FORMAT_411_Y41B = 171,
+ C2D_COLOR_FORMAT_420_YV12 = 172,
+ C2D_COLOR_FORMAT_420_IYUV = 173,
+ C2D_COLOR_FORMAT_420_I420 = 173,
+ C2D_COLOR_FORMAT_422_YV16 = 174,
+ C2D_COLOR_FORMAT_422_Y42B = 174,
+
+ C2D_COLOR_FORMAT_800_Y800 = 190,
+
+} C2D_YUV_FORMAT;
+
+
+/* Configuration bits, used in the config_mask field of C2D_OBJECT struct */
+typedef enum {
+ C2D_SOURCE_RECT_BIT = (1 << 0), /* enables source_rect field */
+ C2D_MIRROR_H_BIT = (1 << 1), /* enables horizontal flipping */
+ C2D_MIRROR_V_BIT = (1 << 2), /* enables vertical flipping */
+ C2D_SOURCE_TILE_BIT = (1 << 3), /* enables source surface tiling */
+ C2D_TARGET_RECT_BIT = (1 << 4), /* enables target_rect field */
+ C2D_ROTATE_BIT = (1 << 5), /* enables all rotation fields */
+ C2D_SCISSOR_RECT_BIT = (1 << 6), /* enables scissor_rect field */
+ C2D_MASK_SURFACE_BIT = (1 << 7), /* enables mask_surface_id field */
+ C2D_MASK_ALIGN_BIT = (1 << 8), /* aligns mask to source_rect */
+ C2D_MASK_SCALE_BIT = (1 << 9), /* enables mask surface scaling */
+ C2D_MASK_TILE_BIT = (1 << 10), /* enables mask surface tiling */
+ C2D_GLOBAL_ALPHA_BIT = (1 << 11), /* enables global_alpha field */
+ C2D_COLOR_KEY_BIT = (1 << 12), /* enables color_key field */
+ C2D_NO_PIXEL_ALPHA_BIT = (1 << 13), /* disables source alpha channel */
+ C2D_NO_BILINEAR_BIT = (1 << 14), /* disables bilinear on scaling */
+ C2D_NO_ANTIALIASING_BIT = (1 << 15), /* disables antialiasing on edges */
+ C2D_DRAW_LINE_BIT = (1 << 16), /* enables line drawing with source rectangle */
+ C2D_DRAW_LINE_NOLAST = (1 << 17), /* disable last pixel draw for line */
+} C2D_SOURCE_CONFIG;
+
+
+/* Target configuration bits, defines rotation + mirroring.
+ * Mirror is applied prior to rotation if enabled. */
+typedef enum {
+ C2D_TARGET_MIRROR_H = (1 << 0), /* horizontal flip */
+ C2D_TARGET_MIRROR_V = (1 << 1), /* vertical flip */
+ C2D_TARGET_ROTATE_0 = (0 << 2), /* no rotation */
+ C2D_TARGET_ROTATE_90 = (1 << 2), /* 90 degree rotation */
+ C2D_TARGET_ROTATE_180 = (2 << 2), /* 180 degree rotation */
+ C2D_TARGET_ROTATE_270 = (3 << 2), /* 270 degree rotation, 90 + 180 */
+ C2D_TARGET_MASK_ALIGN = (1 << 4), /* aligns mask to target scissor */
+ C2D_TARGET_MASK_SCALE = (1 << 5), /* enables mask scaling */
+ C2D_TARGET_MASK_TILE = (1 << 6), /* enables mask tiling */
+ C2D_TARGET_COLOR_KEY = (1 << 7), /* enables target_color_key */
+ C2D_TARGET_NO_PIXEL_ALPHA = (1 << 8), /* disables target alpha channel */
+} C2D_TARGET_CONFIG;
+
+#define C2D_TARGET_ROTATION_MASK (C2D_TARGET_ROTATE_90*3)
+
+/* Additional blend modes, can be used with both source and target configs.
+ If none of the below is set, the default "SRC over DST" is applied. */
+typedef enum {
+ C2D_ALPHA_BLEND_SRC_OVER = (0 << 20), /* Default, Porter-Duff "SRC over DST" */
+ C2D_ALPHA_BLEND_SRC = (1 << 20), /* Porter-Duff "SRC" */
+ C2D_ALPHA_BLEND_SRC_IN = (2 << 20), /* Porter-Duff "SRC in DST" */
+ C2D_ALPHA_BLEND_DST_IN = (3 << 20), /* Porter-Duff "DST in SRC" */
+ C2D_ALPHA_BLEND_SRC_OUT = (4 << 20), /* Porter-Duff "SRC out DST" */
+ C2D_ALPHA_BLEND_DST_OUT = (5 << 20), /* Porter-Duff "DST out SRC" */
+ C2D_ALPHA_BLEND_DST_OVER = (6 << 20), /* Porter-Duff "DST over SRC" */
+ C2D_ALPHA_BLEND_SRC_ATOP = (7 << 20), /* Porter-Duff "SRC ATOP" */
+ C2D_ALPHA_BLEND_DST_ATOP = (8 << 20), /* Porter-Duff "DST ATOP" */
+ C2D_ALPHA_BLEND_XOR = (9 << 20), /* Xor */
+ C2D_ALPHA_BLEND_MULTIPLY = (10 << 20), /* OpenVG "MULTIPLY" */
+ C2D_ALPHA_BLEND_SCREEN = (11 << 20), /* OpenVG "SCREEN" */
+ C2D_ALPHA_BLEND_DARKEN = (12 << 20), /* OpenVG "DARKEN" */
+ C2D_ALPHA_BLEND_LIGHTEN = (13 << 20), /* OpenVG "LIGHTEN" */
+ C2D_ALPHA_BLEND_ADDITIVE = (14 << 20), /* OpenVG "ADDITIVE" */
+ C2D_ALPHA_BLEND_DIRECT = (15 << 20), /* Direct alpha blitting */
+ C2D_ALPHA_BLEND_INVERTC = (16 << 20), /* Invert color */
+ C2D_ALPHA_BLEND_NONE = (1 << 25), /* disables alpha blending */
+} C2D_ALPHA_BLEND_MODE;
+
+/* Configuration bits, used in the config_mask field of C2D_OBJECT struct */
+typedef enum {
+ C2D_OVERRIDE_GLOBAL_TARGET_ROTATE_CONFIG = (1 << 27), /* Overrides TARGET Config */
+ C2D_OVERRIDE_TARGET_ROTATE_0 = (0 << 28), /* no rotation */
+ C2D_OVERRIDE_TARGET_ROTATE_90 = (1 << 28), /* 90 degree rotation */
+ C2D_OVERRIDE_TARGET_ROTATE_180 = (2 << 28), /* 180 degree rotation */
+ C2D_OVERRIDE_TARGET_ROTATE_270 = (3 << 28), /* 270 degree rotation */
+} C2D_SOURCE_TARGET_CONFIG;
+
+#define C2D_OVERRIDE_SOURCE_CONFIG_TARGET_ROTATION_SHIFT_MASK 28
+#define C2D_OVERRIDE_TARGET_CONFIG_TARGET_ROTATION_SHIFT_MASK 2
+
+
+/* Surface caps enumeration */
+typedef enum {
+ C2D_SOURCE = (1 << 0), /* allows to use as a source */
+ C2D_TARGET = (1 << 1), /* allows to use as a target */
+ C2D_MASK = (1 << 2), /* allows to use as a mask */
+ C2D_PALETTE = (1 << 3), /* allows to use as a palette */
+} C2D_SURFACE_BITS;
+
+/* Surface type enumeration */
+typedef enum {
+ C2D_SURFACE_RGB_HOST = 1, /* Host memory RGB surface */
+ C2D_SURFACE_RGB_EXT = 2, /* External memory RGB surface */
+ C2D_SURFACE_YUV_HOST = 3, /* Host memory YUV surface */
+ C2D_SURFACE_YUV_EXT = 4, /* External memory YUV surface */
+ C2D_SURFACE_WITH_PHYS = (1<<3), /* physical address already mapped */
+ /* this bit is valid with HOST types */
+ C2D_SURFACE_WITH_PHYS_DUMMY = (1<<4), /* physical address already mapped */
+ /* this bit is valid with HOST types */
+} C2D_SURFACE_TYPE;
+
+/* Structure for registering a RGB buffer as a blit surface */
+typedef struct {
+ uint32 format; /* RGB color format plus additional mode bits */
+ uint32 width; /* defines width in pixels */
+ uint32 height; /* defines height in pixels */
+ void *buffer; /* pointer to the RGB buffer */
+ void *phys; /* physical address */
+ int32 stride; /* defines stride in bytes, negative stride is allowed */
+} C2D_RGB_SURFACE_DEF;
+
+/* Structure for registering a YUV plane(s) as a blit surface */
+typedef struct {
+ uint32 format; /* YUV color format plus additional mode bits */
+ uint32 width; /* defines width in pixels */
+ uint32 height; /* defines height in pixels */
+ void *plane0; /* holds the whole buffer if YUV format is not planar */
+ void *phys0; /* physical address */
+ int32 stride0; /* stride in bytes if YUV format is not planar */
+ void *plane1; /* holds UV or VU plane for planar interleaved */
+ void *phys1; /* physical address */
+ int32 stride1; /* stride for UV or VU plane for planar interleaved */
+ void *plane2; /* holds the 3. plane, ignored if YUV format is not planar */
+ void *phys2; /* physical address */
+ int32 stride2; /* stride for the 3. plane, ignored if YUV format is not planar */
+} C2D_YUV_SURFACE_DEF;
+
+
+/* Rectangle definition */
+typedef struct {
+ int32 x; /* upper-left x */
+ int32 y; /* upper-left y */
+ int32 width; /* width */
+ int32 height; /* height */
+} C2D_RECT;
+
+/* C2D_OBJECT encapsulates the blit parameters for a source surface.
+ * The fg_color defines color in target format for bits equal to 1
+ * in the source C2D_COLOR_FORMAT_1 format. It also defines rendering
+ * color for all alpha-only source formats. If the surface_id is 0
+ * the fg_color defines a constant fill color used instead of the surface.
+ * The bg_color defines color in target format for bits equal to 0
+ * in the source C2D_COLOR_FORMAT_1 format, otherwise both are ignored.
+ * The palette_id is used for all palette source formats, otherwise ignored.
+
+ * The source_rect first defines the content of the source surface,
+ * it is then horizontally/vertically flipped if C2D_MIRROR_*_BIT is set,
+ * then scaled with bilinear interpolation to exactly fit target_rect
+ * or repeated across target_rect if C2D_SOURCE_TILE_BIT is set,
+ * target_rect is then rotated clockwise by an arbitrary angle in degrees
+ * around the rot_orig_x/y, defined relative to target_rect's top left point,
+ * and then clipped to scissor_rect defined in target coordinate system.
+
+ * Finally alpha blending is applied before pixels get written into the target.
+ * Surface's pixel alpha is combined with mask alpha and with global alpha.
+ * Mask surface follows all transformations applied to the source surface.
+ * Source color key defines transparent color, applied together with alpha. */
+typedef struct C2D_OBJECT_STR {
+ uint32 surface_id; /* source surface */
+
+ uint32 fg_color; /* foreground color */
+ uint32 bg_color; /* background color */
+ uint32 palette_id; /* one-dimensional horizontal palette surface */
+
+ uint32 config_mask; /* defines which fields below are enabled */
+
+ C2D_RECT source_rect; /* region of the source surface, 16.16 fp */
+ C2D_RECT target_rect; /* position and scaling in target, 16.16 fp */
+
+ int32 rot_orig_x; /* rotation origin relative to target_rect's... */
+ int32 rot_orig_y; /* ...top left point, both are 16.16 fp */
+ int32 rotation; /* clock-wise rotation in degrees, 16.16 fp */
+
+ C2D_RECT scissor_rect; /* defines the clip rectangle in target surface */
+
+ uint32 mask_surface_id; /* source alpha-mask surface */
+ uint32 global_alpha; /* 0 = fully transparent, 255 = fully opaque */
+ uint32 color_key; /* transparent color for the source surface */
+
+ struct C2D_OBJECT_STR *next; /* pointer to the next object or NULL */
+} C2D_OBJECT;
+
+/* Configuration bits, driver capabilities used by 2Dapplications */
+typedef enum {
+ C2D_DRIVER_SUPPORTS_GLOBAL_ALPHA_OP = (1 << 0),
+ C2D_DRIVER_SUPPORTS_TILE_OP = (1 << 1),
+ C2D_DRIVER_SUPPORTS_COLOR_KEY_OP = (1 << 2),
+ C2D_DRIVER_SUPPORTS_NO_PIXEL_ALPHA_OP = (1 << 3),
+ C2D_DRIVER_SUPPORTS_TARGET_ROTATE_OP = (1 << 4),
+ C2D_DRIVER_SUPPORTS_ANTI_ALIASING_OP = (1 << 5), /* antialiasing */
+ C2D_DRIVER_SUPPORTS_BILINEAR_FILTER_OP = (1 << 6),
+ C2D_DRIVER_SUPPORTS_LENS_CORRECTION_OP = (1 << 7),
+ C2D_DRIVER_SUPPORTS_OVERRIDE_TARGET_ROTATE_OP = (1 << 8),
+ C2D_DRIVER_SUPPORTS_SHADER_BLOB_OP = (1 << 9),
+ C2D_DRIVER_SUPPORTS_MASK_SURFACE_OP = (1 << 10), /* mask surface */
+ C2D_DRIVER_SUPPORTS_MIRROR_H_OP = (1 << 11), /* horizontal flip */
+ C2D_DRIVER_SUPPORTS_MIRROR_V_OP = (1 << 12), /* vertical flip */
+ C2D_DRIVER_SUPPORTS_SCISSOR_RECT_OP = (1 << 13),
+ C2D_DRIVER_SUPPORTS_SOURCE_RECT_OP = (1 << 14),
+ C2D_DRIVER_SUPPORTS_TARGET_RECT_OP = (1 << 15),
+ C2D_DRIVER_SUPPORTS_ROTATE_OP = (1 << 16), /* all rotations */
+ C2D_DRIVER_SUPPORTS_FLUSH_WITH_FENCE_FD_OP = (1 << 17), /* all rotations */
+ C2D_DRIVER_SUPPORTS_UBWC_COMPRESSED_OP = (1 << 18), /* UBWC Compression */
+ C2D_DRIVER_SUPPORTS_ALL_CAPABILITIES_OP = ((0xFFFFFFFF) >> (31 - 18)) /* mask for all capabilities supported */
+} C2D_DRIVER_CAPABILITIES;
+
+/* 2D driver workaround bits used by the 2D applications */
+typedef enum {
+ C2D_DRIVER_WORKAROUND_NONE = 0, /* NO workaround */
+ C2D_DRIVER_WORKAROUND_SWAP_UV_FOR_YUV_TARGET = (1 << 0), /* Swap UV when this flag set */
+} C2D_DRIVER_WORKAROUND;
+
+/* Structure to query Driver information */
+typedef struct {
+ uint32 capabilities_mask;
+ uint32 workaround_mask;
+ uint32 reserved1;
+ uint32 reserved2;
+ uint32 reserved3;
+} C2D_DRIVER_INFO;
+
+/* Structure to query Driver information */
+typedef struct {
+ uint32 max_surface_template_needed;
+ uint32 reserved1;
+ uint32 reserved2;
+ uint32 reserved3;
+} C2D_DRIVER_SETUP_INFO;
+
+/*****************************************************************************/
+/**************************** C2D API 2.0 ********************************/
+/*****************************************************************************/
+
+/******************************************************************************
+ * Functions to create/destroy surfaces */
+
+/* Creates a generic blit surface according to its type.
+ * Pass a combination of desired surface bits according to planned usage.
+ * Accepted values for surface_bits may include bits from C2D_SURFACE_BITS,
+ * and also from C2D_DISPLAY for compatibility with HW display controller.
+ * For host memory types the memory is preallocated outside the API
+ * and should remain valid until surface is destroyed.
+ * For external memory types the memory is allocated within API.
+ * On success, the non-zero surface identifier is returned.
+ * All numbers greater that 0 are valid surface identifiers, 0 is invalid.
+
+ * Host memory RGB surface:
+ * surface_type = C2D_SURFACE_RGB_HOST
+ * surface_definition = C2D_RGB_SURFACE_DEF
+ * all fields in definition structure should be set
+
+ * External memory RGB surface:
+ * surface_type = C2D_SURFACE_RGB_EXT
+ * surface_definition = C2D_RGB_SURFACE_DEF
+ * buffer field in definition structure is ignored
+
+ * Host memory YUV surface:
+ * surface_type = C2D_SURFACE_YUV_HOST
+ * surface_definition = C2D_YUV_SURFACE_DEF
+ * one or all plane and stride fields in definition structure
+ * should be set depending on whether the format is planar or not
+
+ * External memory YUV surface:
+ * surface_type = C2D_SURFACE_YUV_EXT
+ * surface_definition = C2D_YUV_SURFACE_DEF
+ * all plane and stride fields in definition structure are ignored */
+C2D_API C2D_STATUS c2dCreateSurface( uint32 *surface_id,
+ uint32 surface_bits,
+ C2D_SURFACE_TYPE surface_type,
+ void *surface_definition );
+
+/* Requests properties of the specified surface. */
+C2D_API C2D_STATUS c2dQuerySurface( uint32 surface_id,
+ uint32 *surface_bits,
+ C2D_SURFACE_TYPE *surface_type,
+ uint32 *width, uint32 *height,
+ uint32 *format );
+
+/* Destroys a generic blit surface.
+ * For external memory surfaces also deallocates the memory.
+ * It is safe to free any external resources associated with a given
+ * surface on c2dCreateSurface call after this function returns. */
+C2D_API C2D_STATUS c2dDestroySurface( uint32 surface_id );
+
+
+/******************************************************************************
+ * Functions to modify/exchange surface data */
+
+/* The format of fill_color is the same as color format being used
+ * for specified surface. If fill_rect is NULL the whole surface is filled.
+ * Alpha-blending is not performed while filling.
+ * The operation is complete when function returns. */
+C2D_API C2D_STATUS c2dFillSurface( uint32 surface_id,
+ uint32 fill_color,
+ C2D_RECT *fill_rect );
+
+/* Writes data located in host memory into the specified surface.
+ * The chunk of host memory is identified with surface_type and
+ * surface_definition, no surface registration needed in this case.
+ * Only C2D_SURFACE_RGB_HOST, C2D_SURFACE_YUV_HOST are accepted.
+ * If only part of the host memory buffer should be loaded, it should
+ * be configured in surface_definition using width, height and stride.
+ * The x and y are defined in target surface coordinate space.
+ * Color conversion has to be done, if color formats differ.
+ * Alpha-blending is not performed while writing.
+ * The operation is complete when function returns. */
+C2D_API C2D_STATUS c2dWriteSurface( uint32 surface_id,
+ C2D_SURFACE_TYPE surface_type,
+ void *surface_definition,
+ int32 x, int32 y );
+
+/* Reads data from the specified surface into the host memory.
+ * The chunk of host memory is identified with surface_type and
+ * surface_definition, no surface registration needed in this case.
+ * Only C2D_SURFACE_RGB_HOST, C2D_SURFACE_YUV_HOST are accepted.
+ * If only part of the surface should be read, it should
+ * be configured in surface_definition using width, height and stride.
+ * The x and y are defined in source surface coordinate space.
+ * Color conversion has to be done, if color formats differ.
+ * Alpha-blending is not performed while reading.
+ * The operation is complete when function returns. */
+C2D_API C2D_STATUS c2dReadSurface( uint32 surface_id,
+ C2D_SURFACE_TYPE surface_type,
+ void *surface_definition,
+ int32 x, int32 y );
+
+/* Notifies c2d imlementation that surface has been updated from outside the API,
+ * if updated_rect is NULL then the whole surface has been updated. */
+C2D_API C2D_STATUS c2dSurfaceUpdated( uint32 surface_id,
+ C2D_RECT *updated_rect );
+
+/* Updates surface information.
+ * Could be called only for host surfaces set with parameter "C2D_SURFACE_WITH_PHYS".
+ * Count for surface planes have to be same than for already allocated surface */
+C2D_API C2D_STATUS c2dUpdateSurface( uint32 surface_id,
+ uint32 surface_bits,
+ C2D_SURFACE_TYPE surface_type,
+ void *surface_definition );
+
+/******************************************************************************
+ * Functions to do actual blit */
+
+/* Draw a list of blit objects into the given target.
+ * The target_config is a bitwise OR of values from C2D_TARGET_CONFIG.
+ * The target transformation creates the effect that target surface
+ * is transformed before the blit and then transformed back
+ * after blit, however no physical target transform is performed.
+ * The objects_list is a linked list of blit objects, no more
+ * than num_objects is drawn from the given list.
+ * If num_objects is 0, the whole list is drawn.
+ * The blit is not guaranteed to complete after function returns. */
+C2D_API C2D_STATUS c2dDraw( uint32 target_id,
+ uint32 target_config, C2D_RECT *target_scissor,
+ uint32 target_mask_id, uint32 target_color_key,
+ C2D_OBJECT *objects_list, uint32 num_objects );
+
+
+/* timstamp set in the blit commands flush */
+typedef void* c2d_ts_handle;
+
+/* Forces any pending blit to complete for a given target.
+ * Non-blocking. All input surfaces for this target except those
+ * which are shared with other targets are expected to be immediately
+ * writable after client has been waiting returned timestamp with
+ * c2dWaitTimestamp funtion or c2dFinish has been called for same target */
+C2D_API C2D_STATUS c2dFlush( uint32 target_id, c2d_ts_handle *timestamp);
+
+
+/* Waits the pending timestamp */
+C2D_API C2D_STATUS c2dWaitTimestamp( c2d_ts_handle timestamp );
+
+
+/* Forces any pending blit to complete for a given target.
+ * Blocking version, returns when blit is done.
+ * All input surfaces for this target except those which are shared with
+ * other targets are expected to be immediately
+ * writable after this function returns. */
+C2D_API C2D_STATUS c2dFinish( uint32 target_id );
+
+
+/*****************************************************************************/
+/****************************** Display API **********************************/
+/*****************************************************************************/
+
+
+/* Display input enumeration */
+typedef enum {
+ C2D_DISPLAY_INPUT_0 = 0, /*!< default input */
+ C2D_DISPLAY_INPUT_1 = (1<<16), /*!< Overlay 1 */
+ C2D_DISPLAY_INPUT_2 = (1<<17), /*!< Overlay 2... */
+} C2D_DISPLAY_INPUT;
+
+
+/******************************************************************************
+ * Functions for display output. */
+
+/* Functionality described in this section is optional and is
+ * provided only for the cases when blit HW
+ * is tightly bound to the display controller. */
+
+/* Display enumeration, may also be used in surface caps */
+typedef enum {
+ C2D_DISPLAY_MAIN = (1 << 10), /* main display */
+ C2D_DISPLAY_SECONDARY = (1 << 11), /* secondary display */
+ C2D_DISPLAY_TV_OUT = (1 << 12), /* tv-out */
+} C2D_DISPLAY;
+
+/* Display window enumeration */
+typedef enum {
+ C2D_DISPLAY_OVERLAY = C2D_DISPLAY_INPUT_1, /*!< Overlay window bit. This defines display input.
+ When defined the surface is set on the overlay window
+ otherwise the surface is set on the background window. */
+} C2D_DISPLAY_WINDOW; /*!< Window bit set with display parameter */
+
+
+/* Display update modes */
+typedef enum {
+ C2D_DISPLAY_MODE_TEAR_SYNC = (1 << 0), /* enables tearing sync */
+ C2D_DISPLAY_MODE_SURF_REMOVE = (1 << 1), /* Remove surface from given display + input */
+} C2D_DISPLAY_MODE;
+
+
+/* Sets the given surface as a current display front buffer.
+ * Several displays can be specified as an output if supported.
+ * Still only one input can be specified at a time fro display/displays.
+ * The surface remains shown until it gets replaced with another one. */
+C2D_API C2D_STATUS c2dDisplaySetSurface( uint32 display,
+ uint32 surface_id, uint32 mode );
+
+/* Returns the current surface for a particular display.
+ * Only one display can be specified at a time.
+ * The latest surface set with compDisplaySetSurface or
+ * the default pre-allocated surface is returned. */
+C2D_API C2D_STATUS c2dDisplayGetSurface( uint32 display,
+ uint32 *surface_id );
+
+/* Returns the properties for a particular display.
+ * Only one display can be specified at a time. */
+C2D_API C2D_STATUS c2dDisplayGetProperties( uint32 display,
+ uint32 *width, uint32 *height,
+ uint32 *format );
+
+/* Sets the properties for a particular display input.
+ * Only one display + input can be specified at a time.
+ * C2D_OBJECT used to set input rect(target rect),
+ * blending operations, rotation...etc for display source */
+C2D_API C2D_STATUS c2dDisplaySetObject( uint32 display,
+ uint32 target_config, uint32 target_color_key,
+ C2D_OBJECT * c2dObject, uint32 mode);
+
+/* allows user to map a memory region to the gpu. only supported on linux
+ * mem_fd is the fd of the memory region, hostptr is the host pointer to the region,
+ * len and offset are the size and offset of the memory.
+ * flags is one of the memory types supported by gsl
+ * gpaddr is passed by refernce back to the user
+ */
+C2D_API C2D_STATUS c2dMapAddr ( int mem_fd, void * hostptr, uint32 len, uint32 offset, uint32 flags, void ** gpuaddr);
+
+/* allows user to unmap memory region mapped by c2dMapAddr.
+ * gpaddr is the gpuaddr to unmap */
+C2D_API C2D_STATUS c2dUnMapAddr (void * gpuaddr);
+
+/* allows user to query driver capabilities.
+ * driver_info is the information about driver */
+C2D_API C2D_STATUS c2dGetDriverCapabilities( C2D_DRIVER_INFO * driver_info);
+
+/* create a fence fd for the timestamp */
+C2D_API C2D_STATUS c2dCreateFenceFD( uint32 target_id, c2d_ts_handle timestamp, int32 *fd);
+
+/*****************************************************************************/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __c2d2_h_ */
diff --git a/libcopybit/copybit.cpp b/libcopybit/copybit.cpp
new file mode 100644
index 0000000..22e6972
--- /dev/null
+++ b/libcopybit/copybit.cpp
@@ -0,0 +1,786 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (c) 2010 - 2014, 2020 The Linux Foundation. All rights reserved.
+ *
+ * Not a Contribution, Apache license notifications and license are retained
+ * for attribution purposes only.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <log/log.h>
+
+#include <linux/msm_mdp.h>
+#include <linux/fb.h>
+
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+
+#include <copybit.h>
+
+#include "gralloc_priv.h"
+#include "software_converter.h"
+#include <qdMetaData.h>
+
+#define DEBUG_MDP_ERRORS 1
+
+/******************************************************************************/
+
+#define MAX_SCALE_FACTOR (4)
+#define MAX_DIMENSION (4096)
+
+/******************************************************************************/
+struct blitReq{
+ struct mdp_buf_sync sync;
+ uint32_t count;
+ struct mdp_blit_req req[10];
+};
+
+/** State information for each device instance */
+struct copybit_context_t {
+ struct copybit_device_t device;
+ int mFD;
+ uint8_t mAlpha;
+ int mFlags;
+ bool mBlitToFB;
+ int acqFence[MDP_MAX_FENCE_FD];
+ int relFence;
+ struct mdp_buf_sync sync;
+ struct blitReq list;
+ uint8_t dynamic_fps;
+};
+
+/**
+ * Common hardware methods
+ */
+
+static int open_copybit(const struct hw_module_t* module, const char* name,
+ struct hw_device_t** device);
+
+static struct hw_module_methods_t copybit_module_methods = {
+open: open_copybit
+};
+
+/*
+ * The COPYBIT Module
+ */
+struct copybit_module_t HAL_MODULE_INFO_SYM = {
+common: {
+tag: HARDWARE_MODULE_TAG,
+ version_major: 1,
+ version_minor: 0,
+ id: COPYBIT_HARDWARE_MODULE_ID,
+ name: "QCT MSM7K COPYBIT Module",
+ author: "Google, Inc.",
+ methods: ©bit_module_methods
+ }
+};
+
+/******************************************************************************/
+
+/** min of int a, b */
+static inline int min(int a, int b) {
+ return (a<b) ? a : b;
+}
+
+/** max of int a, b */
+static inline int max(int a, int b) {
+ return (a>b) ? a : b;
+}
+
+/** scale each parameter by mul/div. Assume div isn't 0 */
+static inline void MULDIV(uint32_t *a, uint32_t *b, int mul, int div) {
+ if (mul != div) {
+ *a = (mul * *a) / div;
+ *b = (mul * *b) / div;
+ }
+}
+
+/** Determine the intersection of lhs & rhs store in out */
+static void intersect(struct copybit_rect_t *out,
+ const struct copybit_rect_t *lhs,
+ const struct copybit_rect_t *rhs) {
+ out->l = max(lhs->l, rhs->l);
+ out->t = max(lhs->t, rhs->t);
+ out->r = min(lhs->r, rhs->r);
+ out->b = min(lhs->b, rhs->b);
+}
+
+static bool validateCopybitRect(struct copybit_rect_t *rect) {
+ return ((rect->b > rect->t) && (rect->r > rect->l)) ;
+}
+
+/** convert COPYBIT_FORMAT to MDP format */
+static int get_format(int format) {
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RGB_565: return MDP_RGB_565;
+ case HAL_PIXEL_FORMAT_RGBA_5551: return MDP_RGBA_5551;
+ case HAL_PIXEL_FORMAT_RGBA_4444: return MDP_RGBA_4444;
+ case HAL_PIXEL_FORMAT_RGBX_8888: return MDP_RGBX_8888;
+ case HAL_PIXEL_FORMAT_BGRX_8888: return MDP_BGRX_8888;
+ case HAL_PIXEL_FORMAT_RGB_888: return MDP_RGB_888;
+ case HAL_PIXEL_FORMAT_RGBA_8888: return MDP_RGBA_8888;
+ case HAL_PIXEL_FORMAT_BGRA_8888: return MDP_BGRA_8888;
+ case HAL_PIXEL_FORMAT_YCrCb_422_I: return MDP_YCRYCB_H2V1;
+ case HAL_PIXEL_FORMAT_YCbCr_422_I: return MDP_YCBYCR_H2V1;
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP: return MDP_Y_CRCB_H2V1;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP: return MDP_Y_CRCB_H2V2;
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP: return MDP_Y_CBCR_H2V1;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP: return MDP_Y_CBCR_H2V2;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO: return MDP_Y_CBCR_H2V2_ADRENO;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS: return MDP_Y_CBCR_H2V2_VENUS;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS: return MDP_Y_CRCB_H2V2_VENUS;
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: return MDP_Y_CBCR_H2V2;
+ case HAL_PIXEL_FORMAT_CbYCrY_422_I: return MDP_CBYCRY_H2V1;
+ case HAL_PIXEL_FORMAT_BGR_888: return MDP_BGR_888;
+ }
+ return -1;
+}
+
+/** convert from copybit image to mdp image structure */
+static void set_image(struct mdp_img *img, const struct copybit_image_t *rhs)
+{
+ private_handle_t* hnd = (private_handle_t*)rhs->handle;
+ if(hnd == NULL){
+ ALOGE("copybit: Invalid handle");
+ return;
+ }
+ img->width = rhs->w;
+ img->height = rhs->h;
+ img->format = get_format(rhs->format);
+ img->offset = (uint32_t)hnd->offset;
+ img->memory_id = hnd->fd;
+}
+/** setup rectangles */
+static bool set_rects(struct copybit_context_t *dev,
+ struct mdp_blit_req *e,
+ const struct copybit_rect_t *dst,
+ const struct copybit_rect_t *src,
+ const struct copybit_rect_t *scissor) {
+ struct copybit_rect_t clip;
+ intersect(&clip, scissor, dst);
+
+ if (!validateCopybitRect(&clip))
+ return false;
+
+ e->dst_rect.x = clip.l;
+ e->dst_rect.y = clip.t;
+ e->dst_rect.w = clip.r - clip.l;
+ e->dst_rect.h = clip.b - clip.t;
+
+ uint32_t W, H, delta_x, delta_y;
+ if (dev->mFlags & COPYBIT_TRANSFORM_ROT_90) {
+ delta_x = (clip.t - dst->t);
+ delta_y = (dst->r - clip.r);
+ e->src_rect.w = (clip.b - clip.t);
+ e->src_rect.h = (clip.r - clip.l);
+ W = dst->b - dst->t;
+ H = dst->r - dst->l;
+ } else {
+ delta_x = (clip.l - dst->l);
+ delta_y = (clip.t - dst->t);
+ e->src_rect.w = (clip.r - clip.l);
+ e->src_rect.h = (clip.b - clip.t);
+ W = dst->r - dst->l;
+ H = dst->b - dst->t;
+ }
+
+ MULDIV(&delta_x, &e->src_rect.w, src->r - src->l, W);
+ MULDIV(&delta_y, &e->src_rect.h, src->b - src->t, H);
+
+ e->src_rect.x = delta_x + src->l;
+ e->src_rect.y = delta_y + src->t;
+
+ if (dev->mFlags & COPYBIT_TRANSFORM_FLIP_V) {
+ if (dev->mFlags & COPYBIT_TRANSFORM_ROT_90) {
+ e->src_rect.x = (src->l + src->r) - (e->src_rect.x + e->src_rect.w);
+ }else{
+ e->src_rect.y = (src->t + src->b) - (e->src_rect.y + e->src_rect.h);
+ }
+ }
+
+ if (dev->mFlags & COPYBIT_TRANSFORM_FLIP_H) {
+ if (dev->mFlags & COPYBIT_TRANSFORM_ROT_90) {
+ e->src_rect.y = (src->t + src->b) - (e->src_rect.y + e->src_rect.h);
+ }else{
+ e->src_rect.x = (src->l + src->r) - (e->src_rect.x + e->src_rect.w);
+ }
+ }
+ return true;
+}
+
+/** setup mdp request */
+static void set_infos(struct copybit_context_t *dev,
+ struct mdp_blit_req *req, int flags)
+{
+ req->alpha = dev->mAlpha;
+ req->fps = dev->dynamic_fps;
+ req->transp_mask = MDP_TRANSP_NOP;
+ req->flags = dev->mFlags | flags;
+ // check if we are blitting to f/b
+ if (COPYBIT_ENABLE == dev->mBlitToFB) {
+ req->flags |= MDP_MEMORY_ID_TYPE_FB;
+ }
+#if defined(COPYBIT_QSD8K)
+ req->flags |= MDP_BLEND_FG_PREMULT;
+#endif
+}
+
+/** copy the bits */
+static int msm_copybit(struct copybit_context_t *dev, void const *list)
+{
+ int err;
+ if (dev->relFence != -1) {
+ close(dev->relFence);
+ dev->relFence = -1;
+ }
+ err = ioctl(dev->mFD, MSMFB_ASYNC_BLIT,
+ (struct mdp_async_blit_req_list const*)list);
+ ALOGE_IF(err<0, "copyBits failed (%s)", strerror(errno));
+ if (err == 0) {
+ return 0;
+ } else {
+#if DEBUG_MDP_ERRORS
+ struct mdp_async_blit_req_list const* l =
+ (struct mdp_async_blit_req_list const*)list;
+ for (unsigned int i=0 ; i<l->count ; i++) {
+ ALOGE("%d: src={w=%d, h=%d, f=%d, rect={%d,%d,%d,%d}}\n"
+ " dst={w=%d, h=%d, f=%d, rect={%d,%d,%d,%d}}\n"
+ " flags=%08x, fps=%d"
+ ,
+ i,
+ l->req[i].src.width,
+ l->req[i].src.height,
+ l->req[i].src.format,
+ l->req[i].src_rect.x,
+ l->req[i].src_rect.y,
+ l->req[i].src_rect.w,
+ l->req[i].src_rect.h,
+ l->req[i].dst.width,
+ l->req[i].dst.height,
+ l->req[i].dst.format,
+ l->req[i].dst_rect.x,
+ l->req[i].dst_rect.y,
+ l->req[i].dst_rect.w,
+ l->req[i].dst_rect.h,
+ l->req[i].flags,
+ l->req[i].fps
+ );
+ }
+#endif
+ return -errno;
+ }
+}
+
+/*****************************************************************************/
+
+/** Set a parameter to value */
+static int set_parameter_copybit(
+ struct copybit_device_t *dev,
+ int name,
+ int value)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ int status = 0;
+ if (ctx) {
+ switch(name) {
+ case COPYBIT_ROTATION_DEG:
+ switch (value) {
+ case 0:
+ ctx->mFlags &= ~0x7;
+ break;
+ case 90:
+ ctx->mFlags &= ~0x7;
+ ctx->mFlags |= MDP_ROT_90;
+ break;
+ case 180:
+ ctx->mFlags &= ~0x7;
+ ctx->mFlags |= MDP_ROT_180;
+ break;
+ case 270:
+ ctx->mFlags &= ~0x7;
+ ctx->mFlags |= MDP_ROT_270;
+ break;
+ default:
+ ALOGE("Invalid value for COPYBIT_ROTATION_DEG");
+ status = -EINVAL;
+ break;
+ }
+ break;
+ case COPYBIT_PLANE_ALPHA:
+ if (value < 0) value = MDP_ALPHA_NOP;
+ if (value >= 256) value = 255;
+ ctx->mAlpha = (uint8_t)value;
+ break;
+ case COPYBIT_DYNAMIC_FPS:
+ ctx->dynamic_fps = (uint8_t)value;
+ break;
+ case COPYBIT_DITHER:
+ if (value == COPYBIT_ENABLE) {
+ ctx->mFlags |= MDP_DITHER;
+ } else if (value == COPYBIT_DISABLE) {
+ ctx->mFlags &= ~MDP_DITHER;
+ }
+ break;
+ case COPYBIT_BLUR:
+ if (value == COPYBIT_ENABLE) {
+ ctx->mFlags |= MDP_BLUR;
+ } else if (value == COPYBIT_DISABLE) {
+ ctx->mFlags &= ~MDP_BLUR;
+ }
+ break;
+ case COPYBIT_BLEND_MODE:
+ if(value == COPYBIT_BLENDING_PREMULT) {
+ ctx->mFlags |= MDP_BLEND_FG_PREMULT;
+ } else {
+ ctx->mFlags &= ~MDP_BLEND_FG_PREMULT;
+ }
+ break;
+ case COPYBIT_TRANSFORM:
+ ctx->mFlags &= ~0x7;
+ ctx->mFlags |= value & 0x7;
+ break;
+ case COPYBIT_BLIT_TO_FRAMEBUFFER:
+ if (COPYBIT_ENABLE == value) {
+ ctx->mBlitToFB = value;
+ } else if (COPYBIT_DISABLE == value) {
+ ctx->mBlitToFB = value;
+ } else {
+ ALOGE ("%s:Invalid input for COPYBIT_BLIT_TO_FRAMEBUFFER : %d",
+ __FUNCTION__, value);
+ }
+ break;
+ case COPYBIT_FG_LAYER:
+ if(value == COPYBIT_ENABLE) {
+ ctx->mFlags |= MDP_IS_FG;
+ } else if (value == COPYBIT_DISABLE) {
+ ctx->mFlags &= ~MDP_IS_FG;
+ }
+ break ;
+ default:
+ status = -EINVAL;
+ break;
+ }
+ } else {
+ status = -EINVAL;
+ }
+ return status;
+}
+
+/** Get a static info value */
+static int get(struct copybit_device_t *dev, int name)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ int value;
+ if (ctx) {
+ switch(name) {
+ case COPYBIT_MINIFICATION_LIMIT:
+ value = MAX_SCALE_FACTOR;
+ break;
+ case COPYBIT_MAGNIFICATION_LIMIT:
+ value = MAX_SCALE_FACTOR;
+ break;
+ case COPYBIT_SCALING_FRAC_BITS:
+ value = 32;
+ break;
+ case COPYBIT_ROTATION_STEP_DEG:
+ value = 90;
+ break;
+ default:
+ value = -EINVAL;
+ }
+ } else {
+ value = -EINVAL;
+ }
+ return value;
+}
+
+static int set_sync_copybit(struct copybit_device_t *dev,
+ int acquireFenceFd)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ if (acquireFenceFd != -1) {
+ if (ctx->list.sync.acq_fen_fd_cnt < (MDP_MAX_FENCE_FD - 1)) {
+ ctx->acqFence[ctx->list.sync.acq_fen_fd_cnt++] = acquireFenceFd;
+ } else {
+ int ret = -EINVAL;
+ struct blitReq *list = &ctx->list;
+
+ // Since fence is full kick off what is already in the list
+ ret = msm_copybit(ctx, list);
+ if (ret < 0) {
+ ALOGE("%s: Blit call failed", __FUNCTION__);
+ return -EINVAL;
+ }
+ list->count = 0;
+ list->sync.acq_fen_fd_cnt = 0;
+ ctx->acqFence[list->sync.acq_fen_fd_cnt++] = acquireFenceFd;
+ }
+ }
+ return 0;
+}
+
+/** do a stretch blit type operation */
+static int stretch_copybit(
+ struct copybit_device_t *dev,
+ struct copybit_image_t const *dst,
+ struct copybit_image_t const *src,
+ struct copybit_rect_t const *dst_rect,
+ struct copybit_rect_t const *src_rect,
+ struct copybit_region_t const *region)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ struct blitReq *list;
+ int status = 0;
+ private_handle_t *yv12_handle = NULL;
+
+ if (ctx) {
+ list = &ctx->list;
+
+ if (ctx->mAlpha < 255) {
+ switch (src->format) {
+ // we don't support plane alpha with RGBA formats
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ case HAL_PIXEL_FORMAT_RGBA_4444:
+ ALOGE ("%s : Unsupported Pixel format %d", __FUNCTION__,
+ src->format);
+ return -EINVAL;
+ }
+ }
+
+ if (src_rect->l < 0 || (uint32_t)src_rect->r > src->w ||
+ src_rect->t < 0 || (uint32_t)src_rect->b > src->h) {
+ // this is always invalid
+ ALOGE ("%s : Invalid source rectangle : src_rect l %d t %d r %d b %d",\
+ __FUNCTION__, src_rect->l, src_rect->t, src_rect->r, src_rect->b);
+
+ return -EINVAL;
+ }
+
+ if (src->w > MAX_DIMENSION || src->h > MAX_DIMENSION) {
+ ALOGE ("%s : Invalid source dimensions w %d h %d", __FUNCTION__, src->w, src->h);
+ return -EINVAL;
+ }
+
+ if (dst->w > MAX_DIMENSION || dst->h > MAX_DIMENSION) {
+ ALOGE ("%s : Invalid DST dimensions w %d h %d", __FUNCTION__, dst->w, dst->h);
+ return -EINVAL;
+ }
+
+ if(src->format == HAL_PIXEL_FORMAT_YV12) {
+ int usage =
+ GRALLOC_USAGE_PRIVATE_IOMMU_HEAP | GRALLOC_USAGE_PRIVATE_UNCACHED;
+ if (0 == alloc_buffer(&yv12_handle,src->w,src->h,
+ src->format, usage)){
+ if(0 == convertYV12toYCrCb420SP(src,yv12_handle)){
+ (const_cast<copybit_image_t *>(src))->format =
+ HAL_PIXEL_FORMAT_YCrCb_420_SP;
+ (const_cast<copybit_image_t *>(src))->handle =
+ yv12_handle;
+ (const_cast<copybit_image_t *>(src))->base =
+ (void *)yv12_handle->base;
+ }
+ else{
+ ALOGE("Error copybit conversion from yv12 failed");
+ if(yv12_handle)
+ free_buffer(yv12_handle);
+ return -EINVAL;
+ }
+ }
+ else{
+ ALOGE("Error:unable to allocate memeory for yv12 software conversion");
+ return -EINVAL;
+ }
+ }
+ const uint32_t maxCount =
+ (uint32_t)(sizeof(list->req)/sizeof(list->req[0]));
+ const struct copybit_rect_t bounds = { 0, 0, (int)dst->w, (int)dst->h };
+ struct copybit_rect_t clip;
+ status = 0;
+ while ((status == 0) && region->next(region, &clip)) {
+ intersect(&clip, &bounds, &clip);
+ mdp_blit_req* req = &list->req[list->count];
+ int flags = 0;
+
+ private_handle_t* src_hnd = (private_handle_t*)src->handle;
+ if(src_hnd != NULL &&
+ (!(src_hnd->flags & private_handle_t::PRIV_FLAGS_CACHED))) {
+ flags |= MDP_BLIT_NON_CACHED;
+ }
+
+ // Set Color Space for MDP to configure CSC matrix
+ req->color_space = ITU_R_601;
+
+ set_infos(ctx, req, flags);
+ set_image(&req->dst, dst);
+ set_image(&req->src, src);
+ if (set_rects(ctx, req, dst_rect, src_rect, &clip) == false)
+ continue;
+
+ if (req->src_rect.w<=0 || req->src_rect.h<=0)
+ continue;
+
+ if (req->dst_rect.w<=0 || req->dst_rect.h<=0)
+ continue;
+
+ if (++list->count == maxCount) {
+ status = msm_copybit(ctx, list);
+ list->sync.acq_fen_fd_cnt = 0;
+ list->count = 0;
+ }
+ }
+ if(yv12_handle) {
+ //Before freeing the buffer we need buffer passed through blit call
+ if (list->count != 0) {
+ status = msm_copybit(ctx, list);
+ list->sync.acq_fen_fd_cnt = 0;
+ list->count = 0;
+ }
+ free_buffer(yv12_handle);
+ }
+ } else {
+ ALOGE ("%s : Invalid COPYBIT context", __FUNCTION__);
+ status = -EINVAL;
+ }
+ return status;
+}
+
+/** Perform a blit type operation */
+static int blit_copybit(
+ struct copybit_device_t *dev,
+ struct copybit_image_t const *dst,
+ struct copybit_image_t const *src,
+ struct copybit_region_t const *region)
+{
+ struct copybit_rect_t dr = { 0, 0, (int)dst->w, (int)dst->h };
+ struct copybit_rect_t sr = { 0, 0, (int)src->w, (int)src->h };
+ return stretch_copybit(dev, dst, src, &dr, &sr, region);
+}
+
+static int finish_copybit(struct copybit_device_t *dev)
+{
+ // NOP for MDP copybit
+ if(!dev)
+ return -EINVAL;
+
+ return 0;
+}
+static int clear_copybit(struct copybit_device_t *dev,
+ struct copybit_image_t const *buf,
+ struct copybit_rect_t *rect)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ uint32_t color = 0; // black color
+
+ if (!ctx) {
+ ALOGE ("%s: Invalid copybit context", __FUNCTION__);
+ return -EINVAL;
+ }
+
+ struct blitReq list1;
+ memset((char *)&list1 , 0 ,sizeof (struct blitReq) );
+ list1.count = 1;
+ int my_tmp_get_fence = -1;
+
+ list1.sync.acq_fen_fd = ctx->acqFence;
+ list1.sync.rel_fen_fd = &my_tmp_get_fence;
+ list1.sync.acq_fen_fd_cnt = ctx->list.sync.acq_fen_fd_cnt;
+ mdp_blit_req* req = &list1.req[0];
+
+ if(!req) {
+ ALOGE ("%s : Invalid request", __FUNCTION__);
+ return -EINVAL;
+ }
+
+ set_image(&req->dst, buf);
+ set_image(&req->src, buf);
+
+ if (rect->l < 0 || (uint32_t)(rect->r - rect->l) > req->dst.width ||
+ rect->t < 0 || (uint32_t)(rect->b - rect->t) > req->dst.height) {
+ ALOGE ("%s : Invalid rect : src_rect l %d t %d r %d b %d",\
+ __FUNCTION__, rect->l, rect->t, rect->r, rect->b);
+ return -EINVAL;
+ }
+
+ req->dst_rect.x = rect->l;
+ req->dst_rect.y = rect->t;
+ req->dst_rect.w = rect->r - rect->l;
+ req->dst_rect.h = rect->b - rect->t;
+
+ req->src_rect = req->dst_rect;
+
+ req->const_color.b = (uint32_t)((color >> 16) & 0xff);
+ req->const_color.g = (uint32_t)((color >> 8) & 0xff);
+ req->const_color.r = (uint32_t)((color >> 0) & 0xff);
+ req->const_color.alpha = MDP_ALPHA_NOP;
+
+ req->transp_mask = MDP_TRANSP_NOP;
+ req->flags = MDP_SOLID_FILL | MDP_MEMORY_ID_TYPE_FB | MDP_BLEND_FG_PREMULT;
+ int status = msm_copybit(ctx, &list1);
+
+ ctx->list.sync.acq_fen_fd_cnt = 0;
+ if (my_tmp_get_fence != -1)
+ close(my_tmp_get_fence);
+
+ return status;
+}
+
+/** Fill the rect on dst with RGBA color **/
+static int fill_color(struct copybit_device_t *dev,
+ struct copybit_image_t const *dst,
+ struct copybit_rect_t const *rect,
+ uint32_t color)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ if (!ctx) {
+ ALOGE("%s: Invalid copybit context", __FUNCTION__);
+ return -EINVAL;
+ }
+
+ if (dst->w > MAX_DIMENSION || dst->h > MAX_DIMENSION) {
+ ALOGE("%s: Invalid DST w=%d h=%d", __FUNCTION__, dst->w, dst->h);
+ return -EINVAL;
+ }
+
+ if (rect->l < 0 || (uint32_t)(rect->r - rect->l) > dst->w ||
+ rect->t < 0 || (uint32_t)(rect->b - rect->t) > dst->h) {
+ ALOGE("%s: Invalid destination rect: l=%d t=%d r=%d b=%d",
+ __FUNCTION__, rect->l, rect->t, rect->r, rect->b);
+ return -EINVAL;
+ }
+
+ int status = 0;
+ struct blitReq* list = &ctx->list;
+ mdp_blit_req* req = &list->req[list->count++];
+ set_infos(ctx, req, MDP_SOLID_FILL);
+ set_image(&req->src, dst);
+ set_image(&req->dst, dst);
+
+ req->dst_rect.x = rect->l;
+ req->dst_rect.y = rect->t;
+ req->dst_rect.w = rect->r - rect->l;
+ req->dst_rect.h = rect->b - rect->t;
+ req->src_rect = req->dst_rect;
+
+ req->const_color.r = (uint32_t)((color >> 0) & 0xff);
+ req->const_color.g = (uint32_t)((color >> 8) & 0xff);
+ req->const_color.b = (uint32_t)((color >> 16) & 0xff);
+ req->const_color.alpha = (uint32_t)((color >> 24) & 0xff);
+
+ if (list->count == sizeof(list->req)/sizeof(list->req[0])) {
+ status = msm_copybit(ctx, list);
+ list->sync.acq_fen_fd_cnt = 0;
+ list->count = 0;
+ }
+ return status;
+}
+
+/*****************************************************************************/
+
+/** Close the copybit device */
+static int close_copybit(struct hw_device_t *dev)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ if (ctx) {
+ close(ctx->mFD);
+ free(ctx);
+ }
+ return 0;
+}
+
+static int flush_get_fence(struct copybit_device_t *dev, int* fd)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ struct blitReq *list = &ctx->list;
+ int ret = -EINVAL;
+
+ if (list->count) {
+ ret = msm_copybit(ctx, list);
+ if (ret < 0)
+ ALOGE("%s: Blit call failed", __FUNCTION__);
+ list->count = 0;
+ }
+ *fd = ctx->relFence;
+ list->sync.acq_fen_fd_cnt = 0;
+ ctx->relFence = -1;
+ return ret;
+}
+
+/** Open a new instance of a copybit device using name */
+static int open_copybit(const struct hw_module_t* module, const char* name,
+ struct hw_device_t** device)
+{
+ int status = -EINVAL;
+
+ if (strcmp(name, COPYBIT_HARDWARE_COPYBIT0)) {
+ return COPYBIT_FAILURE;
+ }
+ copybit_context_t *ctx;
+ ctx = (copybit_context_t *)malloc(sizeof(copybit_context_t));
+
+ if (ctx == NULL ) {
+ return COPYBIT_FAILURE;
+ }
+
+ memset(ctx, 0, sizeof(*ctx));
+
+ ctx->device.common.tag = HARDWARE_DEVICE_TAG;
+ ctx->device.common.version = 1;
+ ctx->device.common.module = const_cast<hw_module_t*>(module);
+ ctx->device.common.close = close_copybit;
+ ctx->device.set_parameter = set_parameter_copybit;
+ ctx->device.get = get;
+ ctx->device.blit = blit_copybit;
+ ctx->device.set_sync = set_sync_copybit;
+ ctx->device.stretch = stretch_copybit;
+ ctx->device.finish = finish_copybit;
+ ctx->device.fill_color = fill_color;
+ ctx->device.flush_get_fence = flush_get_fence;
+ ctx->device.clear = clear_copybit;
+ ctx->mAlpha = MDP_ALPHA_NOP;
+ //dynamic_fps is zero means default
+ //panel refresh rate for driver.
+ ctx->dynamic_fps = 0;
+ ctx->mFlags = 0;
+ ctx->sync.flags = 0;
+ ctx->relFence = -1;
+ for (int i=0; i < MDP_MAX_FENCE_FD; i++) {
+ ctx->acqFence[i] = -1;
+ }
+ ctx->sync.acq_fen_fd = ctx->acqFence;
+ ctx->sync.rel_fen_fd = &ctx->relFence;
+ ctx->list.count = 0;
+ ctx->list.sync.acq_fen_fd_cnt = 0;
+ ctx->list.sync.rel_fen_fd = ctx->sync.rel_fen_fd;
+ ctx->list.sync.acq_fen_fd = ctx->sync.acq_fen_fd;
+ ctx->mFD = open("/dev/graphics/fb0", O_RDWR, 0);
+ if (ctx->mFD < 0) {
+ status = errno;
+ ALOGE("Error opening frame buffer errno=%d (%s)",
+ status, strerror(status));
+ status = -status;
+ } else {
+ status = 0;
+ *device = &ctx->device.common;
+ }
+ return status;
+}
diff --git a/libcopybit/copybit.h b/libcopybit/copybit.h
new file mode 100644
index 0000000..de585ee
--- /dev/null
+++ b/libcopybit/copybit.h
@@ -0,0 +1,319 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
+ *
+ * Not a Contribution, Apache license notifications and license are retained
+ * for attribution purposes only.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_COPYBIT_INTERFACE_H
+#define ANDROID_COPYBIT_INTERFACE_H
+
+#include <hardware/hardware.h>
+
+#include <stdint.h>
+#include <sys/cdefs.h>
+#include <sys/types.h>
+#include <gralloc_priv.h>
+
+__BEGIN_DECLS
+
+/**
+ * The id of this module
+ */
+#define COPYBIT_HARDWARE_MODULE_ID "copybit"
+
+/**
+ * Name of the graphics device to open
+ */
+#define COPYBIT_HARDWARE_COPYBIT0 "copybit0"
+
+/* supported pixel-formats. these must be compatible with
+ * graphics/PixelFormat.java, ui/PixelFormat.h, pixelflinger/format.h
+ */
+enum {
+ COPYBIT_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888,
+ COPYBIT_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888,
+ COPYBIT_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888,
+ COPYBIT_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565,
+ COPYBIT_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888,
+ COPYBIT_FORMAT_RGBA_5551 = HAL_PIXEL_FORMAT_RGBA_5551,
+ COPYBIT_FORMAT_RGBA_4444 = HAL_PIXEL_FORMAT_RGBA_4444,
+ COPYBIT_FORMAT_YCbCr_422_SP = 0x10,
+ COPYBIT_FORMAT_YCrCb_420_SP = 0x11,
+};
+
+/* name for copybit_set_parameter */
+enum {
+ /* Default blit destination is offline buffer */
+ /* clients to set this to '1', if blitting to framebuffer */
+ /* and reset to '0', after calling blit/stretch */
+ COPYBIT_BLIT_TO_FRAMEBUFFER = 0,
+ /* rotation of the source image in degrees (0 to 359) */
+ COPYBIT_ROTATION_DEG = 1,
+ /* plane alpha value */
+ COPYBIT_PLANE_ALPHA = 2,
+ /* enable or disable dithering */
+ COPYBIT_DITHER = 3,
+ /* transformation applied (this is a superset of COPYBIT_ROTATION_DEG) */
+ COPYBIT_TRANSFORM = 4,
+ /* blurs the copied bitmap. The amount of blurring cannot be changed
+ * at this time. */
+ COPYBIT_BLUR = 5,
+ /* Blend mode */
+ COPYBIT_BLEND_MODE = 6,
+ /* FB width */
+ COPYBIT_FRAMEBUFFER_WIDTH = 7,
+ /* FB height */
+ COPYBIT_FRAMEBUFFER_HEIGHT = 8,
+ COPYBIT_FG_LAYER = 9,
+ COPYBIT_DYNAMIC_FPS = 10,
+ /* Source Format Mode */
+ COPYBIT_SRC_FORMAT_MODE = 11,
+ /* Destination Format Mode */
+ COPYBIT_DST_FORMAT_MODE = 12,
+};
+
+/* values for copybit_set_parameter(COPYBIT_TRANSFORM) */
+enum {
+ /* flip source image horizontally */
+ COPYBIT_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H,
+ /* flip source image vertically */
+ COPYBIT_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V,
+ /* rotate source image 90 degres */
+ COPYBIT_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90,
+ /* rotate source image 180 degres */
+ COPYBIT_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180,
+ /* rotate source image 270 degres */
+ COPYBIT_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270,
+};
+
+/* enable/disable value copybit_set_parameter */
+enum {
+ COPYBIT_DISABLE = 0,
+ COPYBIT_ENABLE = 1
+};
+
+/*
+ * copybit blending values. same as HWC blending values
+ */
+enum {
+ /* no blending */
+ COPYBIT_BLENDING_NONE = 0x0100,
+
+ /* ONE / ONE_MINUS_SRC_ALPHA */
+ COPYBIT_BLENDING_PREMULT = 0x0105,
+
+ /* SRC_ALPHA / ONE_MINUS_SRC_ALPHA */
+ COPYBIT_BLENDING_COVERAGE = 0x0405
+};
+
+enum {
+ /* Linear format mode*/
+ COPYBIT_LINEAR = 0x0000,
+ /* UBWC format mode*/
+ COPYBIT_UBWC_COMPRESSED = 0x0001,
+};
+
+/* use get_static_info() to query static informations about the hardware */
+enum {
+ /* Maximum amount of minification supported by the hardware*/
+ COPYBIT_MINIFICATION_LIMIT = 1,
+ /* Maximum amount of magnification supported by the hardware */
+ COPYBIT_MAGNIFICATION_LIMIT = 2,
+ /* Number of fractional bits support by the scaling engine */
+ COPYBIT_SCALING_FRAC_BITS = 3,
+ /* Supported rotation step in degres. */
+ COPYBIT_ROTATION_STEP_DEG = 4,
+ /* UBWC support*/
+ COPYBIT_UBWC_SUPPORT = 5,
+};
+
+/* Image structure */
+struct copybit_image_t {
+ /* width */
+ uint32_t w;
+ /* height */
+ uint32_t h;
+ /* format COPYBIT_FORMAT_xxx */
+ int32_t format;
+ /* base of buffer with image */
+ void *base;
+ /* handle to the image */
+ native_handle_t* handle;
+ /* number of pixels added for the stride */
+ uint32_t horiz_padding;
+ /* number of pixels added for the vertical stride */
+ uint32_t vert_padding;
+};
+
+/* Rectangle */
+struct copybit_rect_t {
+ /* left */
+ int l;
+ /* top */
+ int t;
+ /* right */
+ int r;
+ /* bottom */
+ int b;
+};
+
+/* Region */
+struct copybit_region_t {
+ int (*next)(struct copybit_region_t const *region, struct copybit_rect_t *rect);
+};
+
+/**
+ * Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
+ * and the fields of this data structure must begin with hw_module_t
+ * followed by module specific information.
+ */
+struct copybit_module_t {
+ struct hw_module_t common;
+};
+
+/**
+ * Every device data structure must begin with hw_device_t
+ * followed by module specific public methods and attributes.
+ */
+struct copybit_device_t {
+ struct hw_device_t common;
+
+ /**
+ * Set a copybit parameter.
+ *
+ * @param dev from open
+ * @param name one for the COPYBIT_NAME_xxx
+ * @param value one of the COPYBIT_VALUE_xxx
+ *
+ * @return 0 if successful
+ */
+ int (*set_parameter)(struct copybit_device_t *dev, int name, int value);
+
+ /**
+ * Get a static copybit information.
+ *
+ * @param dev from open
+ * @param name one of the COPYBIT_STATIC_xxx
+ *
+ * @return value or -EINVAL if error
+ */
+ int (*get)(struct copybit_device_t *dev, int name);
+
+ /**
+ * Execute the bit blit copy operation
+ *
+ * @param dev from open
+ * @param dst is the destination image
+ * @param src is the source image
+ * @param region the clip region
+ *
+ * @return 0 if successful
+ */
+ int (*blit)(struct copybit_device_t *dev,
+ struct copybit_image_t const *dst,
+ struct copybit_image_t const *src,
+ struct copybit_region_t const *region);
+
+ /**
+ * Give acquire fence to copybit to be used in upcoming stretch
+ * call
+ *
+ * @param dev from open
+ * @param acquireFenceFd is the acquire fence
+ *
+ * @return 0 if successful
+ */
+ int (*set_sync)(struct copybit_device_t *dev,
+ int acquireFenceFd);
+
+ /**
+ * Execute the stretch bit blit copy operation
+ *
+ * @param dev from open
+ * @param dst is the destination image
+ * @param src is the source image
+ * @param dst_rect is the destination rectangle
+ * @param src_rect is the source rectangle
+ * @param region the clip region
+ *
+ * @return 0 if successful
+ */
+ int (*stretch)(struct copybit_device_t *dev,
+ struct copybit_image_t const *dst,
+ struct copybit_image_t const *src,
+ struct copybit_rect_t const *dst_rect,
+ struct copybit_rect_t const *src_rect,
+ struct copybit_region_t const *region);
+
+ /**
+ * Fill the rect on dst with RGBA color
+ *
+ * @param dev from open
+ * @param dst is destination image
+ * @param rect is destination rectangle
+ * @param color is RGBA color to fill
+ *
+ * @return 0 if successful
+ */
+ int (*fill_color)(struct copybit_device_t *dev,
+ struct copybit_image_t const *dst,
+ struct copybit_rect_t const *rect,
+ uint32_t color);
+
+ /**
+ * Execute the completion of the copybit draw operation.
+ *
+ * @param dev from open
+ *
+ * @return 0 if successful
+ */
+ int (*finish)(struct copybit_device_t *dev);
+
+ /**
+ * Trigger the copybit draw operation(async).
+ *
+ * @param dev from open
+ *
+ * @param fd - gets the fencefd
+ *
+ * @return 0 if successful
+ */
+ int (*flush_get_fence)(struct copybit_device_t *dev, int* fd);
+
+ /* Clears the buffer
+ */
+ int (*clear)(struct copybit_device_t *dev, struct copybit_image_t const *buf,
+ struct copybit_rect_t *rect);
+};
+
+
+/** convenience API for opening and closing a device */
+
+static inline int copybit_open(const struct hw_module_t* module,
+ struct copybit_device_t** device) {
+ return module->methods->open(module,
+ COPYBIT_HARDWARE_COPYBIT0, (struct hw_device_t**)device);
+}
+
+static inline int copybit_close(struct copybit_device_t* device) {
+ return device->common.close(&device->common);
+}
+
+
+__END_DECLS
+
+#endif // ANDROID_COPYBIT_INTERFACE_H
diff --git a/libcopybit/copybit_c2d.cpp b/libcopybit/copybit_c2d.cpp
new file mode 100644
index 0000000..63c1379
--- /dev/null
+++ b/libcopybit/copybit_c2d.cpp
@@ -0,0 +1,1776 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * Copyright (c) 2010-2015, The Linux Foundation. All rights reserved.
+ *
+ * Not a Contribution, Apache license notifications and license are retained
+ * for attribution purposes only.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <log/log.h>
+#include <sys/resource.h>
+#include <sys/prctl.h>
+
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+
+#include <linux/msm_kgsl.h>
+
+#include <EGL/eglplatform.h>
+#include <cutils/native_handle.h>
+
+#include <copybit.h>
+#include <alloc_controller.h>
+#include <memalloc.h>
+
+#include "c2d2.h"
+#include "software_converter.h"
+
+#include <dlfcn.h>
+
+using gralloc::IMemAlloc;
+using gralloc::IonController;
+using gralloc::alloc_data;
+
+C2D_STATUS (*LINK_c2dCreateSurface)( uint32 *surface_id,
+ uint32 surface_bits,
+ C2D_SURFACE_TYPE surface_type,
+ void *surface_definition );
+
+C2D_STATUS (*LINK_c2dUpdateSurface)( uint32 surface_id,
+ uint32 surface_bits,
+ C2D_SURFACE_TYPE surface_type,
+ void *surface_definition );
+
+C2D_STATUS (*LINK_c2dReadSurface)( uint32 surface_id,
+ C2D_SURFACE_TYPE surface_type,
+ void *surface_definition,
+ int32 x, int32 y );
+
+C2D_STATUS (*LINK_c2dDraw)( uint32 target_id,
+ uint32 target_config, C2D_RECT *target_scissor,
+ uint32 target_mask_id, uint32 target_color_key,
+ C2D_OBJECT *objects_list, uint32 num_objects );
+
+C2D_STATUS (*LINK_c2dFinish)( uint32 target_id);
+
+C2D_STATUS (*LINK_c2dFlush)( uint32 target_id, c2d_ts_handle *timestamp);
+
+C2D_STATUS (*LINK_c2dWaitTimestamp)( c2d_ts_handle timestamp );
+
+C2D_STATUS (*LINK_c2dDestroySurface)( uint32 surface_id );
+
+C2D_STATUS (*LINK_c2dMapAddr) ( int mem_fd, void * hostptr, size_t len,
+ size_t offset, uint32 flags, void ** gpuaddr);
+
+C2D_STATUS (*LINK_c2dUnMapAddr) ( void * gpuaddr);
+
+C2D_STATUS (*LINK_c2dGetDriverCapabilities) ( C2D_DRIVER_INFO * driver_info);
+
+/* create a fence fd for the timestamp */
+C2D_STATUS (*LINK_c2dCreateFenceFD) ( uint32 target_id, c2d_ts_handle timestamp,
+ int32 *fd);
+
+C2D_STATUS (*LINK_c2dFillSurface) ( uint32 surface_id, uint32 fill_color,
+ C2D_RECT * fill_rect);
+
+/******************************************************************************/
+
+#if defined(COPYBIT_Z180)
+#define MAX_SCALE_FACTOR (4096)
+#define MAX_DIMENSION (4096)
+#else
+#error "Unsupported HW version"
+#endif
+
+// The following defines can be changed as required i.e. as we encounter
+// complex use cases.
+#define MAX_RGB_SURFACES 32 // Max. RGB layers currently supported per draw
+#define MAX_YUV_2_PLANE_SURFACES 4// Max. 2-plane YUV layers currently supported per draw
+#define MAX_YUV_3_PLANE_SURFACES 1// Max. 3-plane YUV layers currently supported per draw
+// +1 for the destination surface. We cannot have multiple destination surfaces.
+#define MAX_SURFACES (MAX_RGB_SURFACES + MAX_YUV_2_PLANE_SURFACES + MAX_YUV_3_PLANE_SURFACES + 1)
+#define NUM_SURFACE_TYPES 3 // RGB_SURFACE + YUV_SURFACE_2_PLANES + YUV_SURFACE_3_PLANES
+#define MAX_BLIT_OBJECT_COUNT 50 // Max. blit objects that can be passed per draw
+
+enum {
+ RGB_SURFACE,
+ YUV_SURFACE_2_PLANES,
+ YUV_SURFACE_3_PLANES
+};
+
+enum eConversionType {
+ CONVERT_TO_ANDROID_FORMAT,
+ CONVERT_TO_C2D_FORMAT
+};
+
+enum eC2DFlags {
+ FLAGS_PREMULTIPLIED_ALPHA = 1<<0,
+ FLAGS_YUV_DESTINATION = 1<<1,
+ FLAGS_TEMP_SRC_DST = 1<<2,
+ FLAGS_UBWC_FORMAT_MODE = 1<<3
+};
+
+static gralloc::IAllocController* sAlloc = 0;
+/******************************************************************************/
+
+/** State information for each device instance */
+struct copybit_context_t {
+ struct copybit_device_t device;
+ // Templates for the various source surfaces. These templates are created
+ // to avoid the expensive create/destroy C2D Surfaces
+ C2D_OBJECT_STR blit_rgb_object[MAX_RGB_SURFACES];
+ C2D_OBJECT_STR blit_yuv_2_plane_object[MAX_YUV_2_PLANE_SURFACES];
+ C2D_OBJECT_STR blit_yuv_3_plane_object[MAX_YUV_3_PLANE_SURFACES];
+ C2D_OBJECT_STR blit_list[MAX_BLIT_OBJECT_COUNT]; // Z-ordered list of blit objects
+ C2D_DRIVER_INFO c2d_driver_info;
+ void *libc2d2;
+ alloc_data temp_src_buffer;
+ alloc_data temp_dst_buffer;
+ unsigned int dst[NUM_SURFACE_TYPES]; // dst surfaces
+ uintptr_t mapped_gpu_addr[MAX_SURFACES]; // GPU addresses mapped inside copybit
+ int blit_rgb_count; // Total RGB surfaces being blit
+ int blit_yuv_2_plane_count; // Total 2 plane YUV surfaces being
+ int blit_yuv_3_plane_count; // Total 3 plane YUV surfaces being blit
+ int blit_count; // Total blit objects.
+ unsigned int trg_transform; /* target transform */
+ int fb_width;
+ int fb_height;
+ int src_global_alpha;
+ int config_mask;
+ int dst_surface_type;
+ bool is_premultiplied_alpha;
+ void* time_stamp;
+ bool dst_surface_mapped; // Set when dst surface is mapped to GPU addr
+ void* dst_surface_base; // Stores the dst surface addr
+ bool is_src_ubwc_format;
+ bool is_dst_ubwc_format;
+
+ // used for signaling the wait thread
+ bool wait_timestamp;
+ pthread_t wait_thread_id;
+ bool stop_thread;
+ pthread_mutex_t wait_cleanup_lock;
+ pthread_cond_t wait_cleanup_cond;
+
+};
+
+struct bufferInfo {
+ int width;
+ int height;
+ int format;
+};
+
+struct yuvPlaneInfo {
+ int yStride; //luma stride
+ int plane1_stride;
+ int plane2_stride;
+ size_t plane1_offset;
+ size_t plane2_offset;
+};
+
+/**
+ * Common hardware methods
+ */
+
+static int open_copybit(const struct hw_module_t* module, const char* name,
+ struct hw_device_t** device);
+
+static struct hw_module_methods_t copybit_module_methods = {
+ .open = open_copybit,
+};
+
+/*
+ * The COPYBIT Module
+ */
+struct copybit_module_t HAL_MODULE_INFO_SYM = {
+ .common = {
+ .tag = HARDWARE_MODULE_TAG,
+ .version_major = 1,
+ .version_minor = 0,
+ .id = COPYBIT_HARDWARE_MODULE_ID,
+ .name = "QCT COPYBIT C2D 2.0 Module",
+ .author = "Qualcomm",
+ .methods = ©bit_module_methods
+ }
+};
+
+
+/* thread function which waits on the timeStamp and cleans up the surfaces */
+static void* c2d_wait_loop(void* ptr) {
+ copybit_context_t* ctx = (copybit_context_t*)(ptr);
+ char thread_name[64] = "copybitWaitThr";
+ prctl(PR_SET_NAME, (unsigned long) &thread_name, 0, 0, 0);
+ setpriority(PRIO_PROCESS, 0, HAL_PRIORITY_URGENT_DISPLAY);
+
+ while(ctx->stop_thread == false) {
+ pthread_mutex_lock(&ctx->wait_cleanup_lock);
+ while(ctx->wait_timestamp == false && !ctx->stop_thread) {
+ pthread_cond_wait(&(ctx->wait_cleanup_cond),
+ &(ctx->wait_cleanup_lock));
+ }
+ if(ctx->wait_timestamp) {
+ if(LINK_c2dWaitTimestamp(ctx->time_stamp)) {
+ ALOGE("%s: LINK_c2dWaitTimeStamp ERROR!!", __FUNCTION__);
+ }
+ ctx->wait_timestamp = false;
+ // Unmap any mapped addresses.
+ for (int i = 0; i < MAX_SURFACES; i++) {
+ if (ctx->mapped_gpu_addr[i]) {
+ LINK_c2dUnMapAddr( (void*)ctx->mapped_gpu_addr[i]);
+ ctx->mapped_gpu_addr[i] = 0;
+ }
+ }
+ // Reset the counts after the draw.
+ ctx->blit_rgb_count = 0;
+ ctx->blit_yuv_2_plane_count = 0;
+ ctx->blit_yuv_3_plane_count = 0;
+ ctx->blit_count = 0;
+ ctx->dst_surface_mapped = false;
+ ctx->dst_surface_base = 0;
+ }
+ pthread_mutex_unlock(&ctx->wait_cleanup_lock);
+ if(ctx->stop_thread)
+ break;
+ }
+ pthread_exit(NULL);
+ return NULL;
+}
+
+
+/* convert COPYBIT_FORMAT to C2D format */
+static int get_format(int format) {
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RGB_565: return C2D_COLOR_FORMAT_565_RGB;
+ case HAL_PIXEL_FORMAT_RGB_888: return C2D_COLOR_FORMAT_888_RGB |
+ C2D_FORMAT_SWAP_RB;
+ case HAL_PIXEL_FORMAT_RGBX_8888: return C2D_COLOR_FORMAT_8888_ARGB |
+ C2D_FORMAT_SWAP_RB |
+ C2D_FORMAT_DISABLE_ALPHA;
+ case HAL_PIXEL_FORMAT_RGBA_8888: return C2D_COLOR_FORMAT_8888_ARGB |
+ C2D_FORMAT_SWAP_RB;
+ case HAL_PIXEL_FORMAT_BGRA_8888: return C2D_COLOR_FORMAT_8888_ARGB;
+ case HAL_PIXEL_FORMAT_RGBA_5551: return C2D_COLOR_FORMAT_5551_RGBA;
+ case HAL_PIXEL_FORMAT_RGBA_4444: return C2D_COLOR_FORMAT_4444_RGBA;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP: return C2D_COLOR_FORMAT_420_NV12;
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:return C2D_COLOR_FORMAT_420_NV12;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP: return C2D_COLOR_FORMAT_420_NV21;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED: return C2D_COLOR_FORMAT_420_NV12 |
+ C2D_FORMAT_MACROTILED;
+ default: ALOGE("%s: invalid format (0x%x",
+ __FUNCTION__, format);
+ return -EINVAL;
+ }
+ return -EINVAL;
+}
+
+/* Get the C2D formats needed for conversion to YUV */
+static int get_c2d_format_for_yuv_destination(int halFormat) {
+ switch (halFormat) {
+ // We do not swap the RB when the target is YUV
+ case HAL_PIXEL_FORMAT_RGBX_8888: return C2D_COLOR_FORMAT_8888_ARGB |
+ C2D_FORMAT_DISABLE_ALPHA;
+ case HAL_PIXEL_FORMAT_RGBA_8888: return C2D_COLOR_FORMAT_8888_ARGB;
+ // The U and V need to be interchanged when the target is YUV
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP: return C2D_COLOR_FORMAT_420_NV21;
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:return C2D_COLOR_FORMAT_420_NV21;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP: return C2D_COLOR_FORMAT_420_NV12;
+ default: return get_format(halFormat);
+ }
+ return -EINVAL;
+}
+
+/* ------------------------------------------------------------------- *//*!
+ * \internal
+ * \brief Get the bpp for a particular color format
+ * \param color format
+ * \return bits per pixel
+ *//* ------------------------------------------------------------------- */
+int c2diGetBpp(int32 colorformat)
+{
+
+ int c2dBpp = 0;
+
+ switch(colorformat&0xFF)
+ {
+ case C2D_COLOR_FORMAT_4444_RGBA:
+ case C2D_COLOR_FORMAT_4444_ARGB:
+ case C2D_COLOR_FORMAT_1555_ARGB:
+ case C2D_COLOR_FORMAT_565_RGB:
+ case C2D_COLOR_FORMAT_5551_RGBA:
+ c2dBpp = 16;
+ break;
+ case C2D_COLOR_FORMAT_8888_RGBA:
+ case C2D_COLOR_FORMAT_8888_ARGB:
+ c2dBpp = 32;
+ break;
+ case C2D_COLOR_FORMAT_888_RGB:
+ c2dBpp = 24;
+ break;
+ case C2D_COLOR_FORMAT_8_L:
+ case C2D_COLOR_FORMAT_8_A:
+ c2dBpp = 8;
+ break;
+ case C2D_COLOR_FORMAT_4_A:
+ c2dBpp = 4;
+ break;
+ case C2D_COLOR_FORMAT_1:
+ c2dBpp = 1;
+ break;
+ default:
+ ALOGE("%s ERROR", __func__);
+ break;
+ }
+ return c2dBpp;
+}
+
+static size_t c2d_get_gpuaddr(copybit_context_t* ctx,
+ struct private_handle_t *handle, int &mapped_idx)
+{
+ uint32 memtype;
+ size_t *gpuaddr = 0;
+ C2D_STATUS rc;
+ int freeindex = 0;
+ bool mapaddr = false;
+
+ if(!handle)
+ return 0;
+
+ if (handle->flags & private_handle_t::PRIV_FLAGS_USES_ION)
+ memtype = KGSL_USER_MEM_TYPE_ION;
+ else {
+ ALOGE("Invalid handle flags: 0x%x", handle->flags);
+ return 0;
+ }
+
+ // Check for a freeindex in the mapped_gpu_addr list
+ for (freeindex = 0; freeindex < MAX_SURFACES; freeindex++) {
+ if (ctx->mapped_gpu_addr[freeindex] == 0) {
+ // free index is available
+ // map GPU addr and use this as mapped_idx
+ mapaddr = true;
+ break;
+ }
+ }
+
+ if(mapaddr) {
+ rc = LINK_c2dMapAddr(handle->fd, (void*)handle->base, handle->size,
+ handle->offset, memtype, (void**)&gpuaddr);
+
+ if (rc == C2D_STATUS_OK) {
+ // We have mapped the GPU address inside copybit. We need to unmap
+ // this address after the blit. Store this address
+ ctx->mapped_gpu_addr[freeindex] = (size_t)gpuaddr;
+ mapped_idx = freeindex;
+ }
+ }
+ return (size_t)gpuaddr;
+}
+
+static void unmap_gpuaddr(copybit_context_t* ctx, int mapped_idx)
+{
+ if (!ctx || (mapped_idx == -1))
+ return;
+
+ if (ctx->mapped_gpu_addr[mapped_idx]) {
+ LINK_c2dUnMapAddr( (void*)ctx->mapped_gpu_addr[mapped_idx]);
+ ctx->mapped_gpu_addr[mapped_idx] = 0;
+ }
+}
+
+static int is_supported_rgb_format(int format)
+{
+ switch(format) {
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ case HAL_PIXEL_FORMAT_RGB_888:
+ case HAL_PIXEL_FORMAT_RGB_565:
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ case HAL_PIXEL_FORMAT_RGBA_4444: {
+ return COPYBIT_SUCCESS;
+ }
+ default:
+ return COPYBIT_FAILURE;
+ }
+}
+
+static int get_num_planes(int format)
+{
+ switch(format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED: {
+ return 2;
+ }
+ case HAL_PIXEL_FORMAT_YV12: {
+ return 3;
+ }
+ default:
+ return COPYBIT_FAILURE;
+ }
+}
+
+static int is_supported_yuv_format(int format)
+{
+ switch(format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED: {
+ return COPYBIT_SUCCESS;
+ }
+ default:
+ return COPYBIT_FAILURE;
+ }
+}
+
+static int is_valid_destination_format(int format)
+{
+ if (format == HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED) {
+ // C2D does not support NV12Tile as a destination format.
+ return COPYBIT_FAILURE;
+ }
+ return COPYBIT_SUCCESS;
+}
+
+static int calculate_yuv_offset_and_stride(const bufferInfo& info,
+ yuvPlaneInfo& yuvInfo)
+{
+ int width = info.width;
+ int height = info.height;
+ int format = info.format;
+
+ int aligned_height = 0;
+ int aligned_width = 0, size = 0;
+
+ switch (format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED: {
+ /* NV12 Tile buffers have their luma height aligned to 32bytes and width
+ * aligned to 128 bytes. The chroma offset starts at an 8K boundary
+ */
+ aligned_height = ALIGN(height, 32);
+ aligned_width = ALIGN(width, 128);
+ size = aligned_width * aligned_height;
+ yuvInfo.plane1_offset = ALIGN(size,8192);
+ yuvInfo.yStride = aligned_width;
+ yuvInfo.plane1_stride = aligned_width;
+ break;
+ }
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP: {
+ aligned_width = ALIGN(width, 32);
+ yuvInfo.yStride = aligned_width;
+ yuvInfo.plane1_stride = aligned_width;
+ if (HAL_PIXEL_FORMAT_NV12_ENCODEABLE == format) {
+ // The encoder requires a 2K aligned chroma offset
+ yuvInfo.plane1_offset = ALIGN(aligned_width * height, 2048);
+ } else
+ yuvInfo.plane1_offset = aligned_width * height;
+
+ break;
+ }
+ default: {
+ return COPYBIT_FAILURE;
+ }
+ }
+ return COPYBIT_SUCCESS;
+}
+
+/** create C2D surface from copybit image */
+static int set_image(copybit_context_t* ctx, uint32 surfaceId,
+ const struct copybit_image_t *rhs,
+ const eC2DFlags flags, int &mapped_idx)
+{
+ struct private_handle_t* handle = (struct private_handle_t*)rhs->handle;
+ C2D_SURFACE_TYPE surfaceType;
+ int status = COPYBIT_SUCCESS;
+ uint64_t gpuaddr = 0;
+ int c2d_format;
+ mapped_idx = -1;
+
+ if (flags & FLAGS_YUV_DESTINATION) {
+ c2d_format = get_c2d_format_for_yuv_destination(rhs->format);
+ } else {
+ c2d_format = get_format(rhs->format);
+ }
+
+ if(c2d_format == -EINVAL) {
+ ALOGE("%s: invalid format", __FUNCTION__);
+ return -EINVAL;
+ }
+
+ if(handle == NULL) {
+ ALOGE("%s: invalid handle", __func__);
+ return -EINVAL;
+ }
+
+ if (handle->gpuaddr == 0) {
+ gpuaddr = c2d_get_gpuaddr(ctx, handle, mapped_idx);
+ if(!gpuaddr) {
+ ALOGE("%s: c2d_get_gpuaddr failed", __FUNCTION__);
+ return COPYBIT_FAILURE;
+ }
+ } else {
+ gpuaddr = handle->gpuaddr;
+ }
+
+ /* create C2D surface */
+ if(is_supported_rgb_format(rhs->format) == COPYBIT_SUCCESS) {
+ /* RGB */
+ C2D_RGB_SURFACE_DEF surfaceDef;
+
+ surfaceType = (C2D_SURFACE_TYPE) (C2D_SURFACE_RGB_HOST | C2D_SURFACE_WITH_PHYS);
+
+ surfaceDef.phys = (void*) gpuaddr;
+ surfaceDef.buffer = (void*) (handle->base);
+
+ surfaceDef.format = c2d_format |
+ ((flags & FLAGS_PREMULTIPLIED_ALPHA) ? C2D_FORMAT_PREMULTIPLIED : 0);
+
+ surfaceDef.format = surfaceDef.format |
+ ((flags & FLAGS_UBWC_FORMAT_MODE) ? C2D_FORMAT_UBWC_COMPRESSED : 0);
+
+ surfaceDef.width = rhs->w;
+ surfaceDef.height = rhs->h;
+ int aligned_width = ALIGN((int)surfaceDef.width,32);
+ surfaceDef.stride = (aligned_width * c2diGetBpp(surfaceDef.format))>>3;
+
+ if(LINK_c2dUpdateSurface( surfaceId,C2D_TARGET | C2D_SOURCE, surfaceType,
+ &surfaceDef)) {
+ ALOGE("%s: RGB Surface c2dUpdateSurface ERROR", __FUNCTION__);
+ unmap_gpuaddr(ctx, mapped_idx);
+ status = COPYBIT_FAILURE;
+ }
+ } else if (is_supported_yuv_format(rhs->format) == COPYBIT_SUCCESS) {
+ C2D_YUV_SURFACE_DEF surfaceDef;
+ memset(&surfaceDef, 0, sizeof(surfaceDef));
+ surfaceType = (C2D_SURFACE_TYPE)(C2D_SURFACE_YUV_HOST | C2D_SURFACE_WITH_PHYS);
+ surfaceDef.format = c2d_format;
+
+ bufferInfo info;
+ info.width = rhs->w;
+ info.height = rhs->h;
+ info.format = rhs->format;
+
+ yuvPlaneInfo yuvInfo = {0};
+ status = calculate_yuv_offset_and_stride(info, yuvInfo);
+ if(status != COPYBIT_SUCCESS) {
+ ALOGE("%s: calculate_yuv_offset_and_stride error", __FUNCTION__);
+ unmap_gpuaddr(ctx, mapped_idx);
+ }
+
+ surfaceDef.width = rhs->w;
+ surfaceDef.height = rhs->h;
+ surfaceDef.plane0 = (void*) (handle->base);
+ surfaceDef.phys0 = (void*) (gpuaddr);
+ surfaceDef.stride0 = yuvInfo.yStride;
+
+ surfaceDef.plane1 = (void*) (handle->base + yuvInfo.plane1_offset);
+ surfaceDef.phys1 = (void*) (gpuaddr + yuvInfo.plane1_offset);
+ surfaceDef.stride1 = yuvInfo.plane1_stride;
+ if (3 == get_num_planes(rhs->format)) {
+ surfaceDef.plane2 = (void*) (handle->base + yuvInfo.plane2_offset);
+ surfaceDef.phys2 = (void*) (gpuaddr + yuvInfo.plane2_offset);
+ surfaceDef.stride2 = yuvInfo.plane2_stride;
+ }
+
+ if(LINK_c2dUpdateSurface( surfaceId,C2D_TARGET | C2D_SOURCE, surfaceType,
+ &surfaceDef)) {
+ ALOGE("%s: YUV Surface c2dUpdateSurface ERROR", __FUNCTION__);
+ unmap_gpuaddr(ctx, mapped_idx);
+ status = COPYBIT_FAILURE;
+ }
+ } else {
+ ALOGE("%s: invalid format 0x%x", __FUNCTION__, rhs->format);
+ unmap_gpuaddr(ctx, mapped_idx);
+ status = COPYBIT_FAILURE;
+ }
+
+ return status;
+}
+
+/** copy the bits */
+static int msm_copybit(struct copybit_context_t *ctx, unsigned int target)
+{
+ if (ctx->blit_count == 0) {
+ return COPYBIT_SUCCESS;
+ }
+
+ for (int i = 0; i < ctx->blit_count; i++)
+ {
+ ctx->blit_list[i].next = &(ctx->blit_list[i+1]);
+ }
+ ctx->blit_list[ctx->blit_count-1].next = NULL;
+ uint32_t target_transform = ctx->trg_transform;
+ if (ctx->c2d_driver_info.capabilities_mask &
+ C2D_DRIVER_SUPPORTS_OVERRIDE_TARGET_ROTATE_OP) {
+ // For A3xx - set 0x0 as the transform is set in the config_mask
+ target_transform = 0x0;
+ }
+ if(LINK_c2dDraw(target, target_transform, 0x0, 0, 0, ctx->blit_list,
+ ctx->blit_count)) {
+ ALOGE("%s: LINK_c2dDraw ERROR", __FUNCTION__);
+ return COPYBIT_FAILURE;
+ }
+ return COPYBIT_SUCCESS;
+}
+
+
+
+static int flush_get_fence_copybit (struct copybit_device_t *dev, int* fd)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ int status = COPYBIT_FAILURE;
+ if (!ctx)
+ return COPYBIT_FAILURE;
+ pthread_mutex_lock(&ctx->wait_cleanup_lock);
+ status = msm_copybit(ctx, ctx->dst[ctx->dst_surface_type]);
+
+ if(LINK_c2dFlush(ctx->dst[ctx->dst_surface_type], &ctx->time_stamp)) {
+ ALOGE("%s: LINK_c2dFlush ERROR", __FUNCTION__);
+ // unlock the mutex and return failure
+ pthread_mutex_unlock(&ctx->wait_cleanup_lock);
+ return COPYBIT_FAILURE;
+ }
+ if(LINK_c2dCreateFenceFD(ctx->dst[ctx->dst_surface_type], ctx->time_stamp,
+ fd)) {
+ ALOGE("%s: LINK_c2dCreateFenceFD ERROR", __FUNCTION__);
+ status = COPYBIT_FAILURE;
+ }
+ if(status == COPYBIT_SUCCESS) {
+ //signal the wait_thread
+ ctx->wait_timestamp = true;
+ pthread_cond_signal(&ctx->wait_cleanup_cond);
+ }
+ pthread_mutex_unlock(&ctx->wait_cleanup_lock);
+ return status;
+}
+
+static int finish_copybit(struct copybit_device_t *dev)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ if (!ctx)
+ return COPYBIT_FAILURE;
+
+ int status = msm_copybit(ctx, ctx->dst[ctx->dst_surface_type]);
+
+ if(LINK_c2dFinish(ctx->dst[ctx->dst_surface_type])) {
+ ALOGE("%s: LINK_c2dFinish ERROR", __FUNCTION__);
+ return COPYBIT_FAILURE;
+ }
+
+ // Unmap any mapped addresses.
+ for (int i = 0; i < MAX_SURFACES; i++) {
+ if (ctx->mapped_gpu_addr[i]) {
+ LINK_c2dUnMapAddr( (void*)ctx->mapped_gpu_addr[i]);
+ ctx->mapped_gpu_addr[i] = 0;
+ }
+ }
+
+ // Reset the counts after the draw.
+ ctx->blit_rgb_count = 0;
+ ctx->blit_yuv_2_plane_count = 0;
+ ctx->blit_yuv_3_plane_count = 0;
+ ctx->blit_count = 0;
+ ctx->dst_surface_mapped = false;
+ ctx->dst_surface_base = 0;
+
+ return status;
+}
+
+static int clear_copybit(struct copybit_device_t *dev,
+ struct copybit_image_t const *buf,
+ struct copybit_rect_t *rect)
+{
+ int ret = COPYBIT_SUCCESS;
+ int flags = FLAGS_PREMULTIPLIED_ALPHA;
+ int mapped_dst_idx = -1;
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ if (ctx->is_dst_ubwc_format)
+ flags |= FLAGS_UBWC_FORMAT_MODE;
+ C2D_RECT c2drect = {rect->l, rect->t, rect->r - rect->l, rect->b - rect->t};
+ pthread_mutex_lock(&ctx->wait_cleanup_lock);
+ if(!ctx->dst_surface_mapped) {
+ ret = set_image(ctx, ctx->dst[RGB_SURFACE], buf,
+ (eC2DFlags)flags, mapped_dst_idx);
+ if(ret) {
+ ALOGE("%s: set_image error", __FUNCTION__);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ pthread_mutex_unlock(&ctx->wait_cleanup_lock);
+ return COPYBIT_FAILURE;
+ }
+ //clear_copybit is the first call made by HWC for each composition
+ //with the dest surface, hence set dst_surface_mapped.
+ ctx->dst_surface_mapped = true;
+ ctx->dst_surface_base = buf->base;
+ ret = LINK_c2dFillSurface(ctx->dst[RGB_SURFACE], 0x0, &c2drect);
+ }
+ pthread_mutex_unlock(&ctx->wait_cleanup_lock);
+ return ret;
+}
+
+
+/** setup rectangles */
+static void set_rects(struct copybit_context_t *ctx,
+ C2D_OBJECT *c2dObject,
+ const struct copybit_rect_t *dst,
+ const struct copybit_rect_t *src,
+ const struct copybit_rect_t *scissor)
+{
+ // Set the target rect.
+ if((ctx->trg_transform & C2D_TARGET_ROTATE_90) &&
+ (ctx->trg_transform & C2D_TARGET_ROTATE_180)) {
+ /* target rotation is 270 */
+ c2dObject->target_rect.x = (dst->t)<<16;
+ c2dObject->target_rect.y = ctx->fb_width?
+ (ALIGN(ctx->fb_width,32)- dst->r):dst->r;
+ c2dObject->target_rect.y = c2dObject->target_rect.y<<16;
+ c2dObject->target_rect.height = ((dst->r) - (dst->l))<<16;
+ c2dObject->target_rect.width = ((dst->b) - (dst->t))<<16;
+ } else if(ctx->trg_transform & C2D_TARGET_ROTATE_90) {
+ c2dObject->target_rect.x = ctx->fb_height?(ctx->fb_height - dst->b):dst->b;
+ c2dObject->target_rect.x = c2dObject->target_rect.x<<16;
+ c2dObject->target_rect.y = (dst->l)<<16;
+ c2dObject->target_rect.height = ((dst->r) - (dst->l))<<16;
+ c2dObject->target_rect.width = ((dst->b) - (dst->t))<<16;
+ } else if(ctx->trg_transform & C2D_TARGET_ROTATE_180) {
+ c2dObject->target_rect.y = ctx->fb_height?(ctx->fb_height - dst->b):dst->b;
+ c2dObject->target_rect.y = c2dObject->target_rect.y<<16;
+ c2dObject->target_rect.x = ctx->fb_width?
+ (ALIGN(ctx->fb_width,32) - dst->r):dst->r;
+ c2dObject->target_rect.x = c2dObject->target_rect.x<<16;
+ c2dObject->target_rect.height = ((dst->b) - (dst->t))<<16;
+ c2dObject->target_rect.width = ((dst->r) - (dst->l))<<16;
+ } else {
+ c2dObject->target_rect.x = (dst->l)<<16;
+ c2dObject->target_rect.y = (dst->t)<<16;
+ c2dObject->target_rect.height = ((dst->b) - (dst->t))<<16;
+ c2dObject->target_rect.width = ((dst->r) - (dst->l))<<16;
+ }
+ c2dObject->config_mask |= C2D_TARGET_RECT_BIT;
+
+ // Set the source rect
+ c2dObject->source_rect.x = (src->l)<<16;
+ c2dObject->source_rect.y = (src->t)<<16;
+ c2dObject->source_rect.height = ((src->b) - (src->t))<<16;
+ c2dObject->source_rect.width = ((src->r) - (src->l))<<16;
+ c2dObject->config_mask |= C2D_SOURCE_RECT_BIT;
+
+ // Set the scissor rect
+ c2dObject->scissor_rect.x = scissor->l;
+ c2dObject->scissor_rect.y = scissor->t;
+ c2dObject->scissor_rect.height = (scissor->b) - (scissor->t);
+ c2dObject->scissor_rect.width = (scissor->r) - (scissor->l);
+ c2dObject->config_mask |= C2D_SCISSOR_RECT_BIT;
+}
+
+/*****************************************************************************/
+
+/** Set a parameter to value */
+static int set_parameter_copybit(
+ struct copybit_device_t *dev,
+ int name,
+ int value)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ int status = COPYBIT_SUCCESS;
+ if (!ctx) {
+ ALOGE("%s: null context", __FUNCTION__);
+ return -EINVAL;
+ }
+
+ pthread_mutex_lock(&ctx->wait_cleanup_lock);
+ switch(name) {
+ case COPYBIT_PLANE_ALPHA:
+ {
+ if (value < 0) value = 0;
+ if (value >= 256) value = 255;
+
+ ctx->src_global_alpha = value;
+ if (value < 255)
+ ctx->config_mask |= C2D_GLOBAL_ALPHA_BIT;
+ else
+ ctx->config_mask &= ~C2D_GLOBAL_ALPHA_BIT;
+ }
+ break;
+ case COPYBIT_BLEND_MODE:
+ {
+ if (value == COPYBIT_BLENDING_NONE) {
+ ctx->config_mask |= C2D_ALPHA_BLEND_NONE;
+ ctx->is_premultiplied_alpha = true;
+ } else if (value == COPYBIT_BLENDING_PREMULT) {
+ ctx->is_premultiplied_alpha = true;
+ } else {
+ ctx->config_mask &= ~C2D_ALPHA_BLEND_NONE;
+ }
+ }
+ break;
+ case COPYBIT_TRANSFORM:
+ {
+ unsigned int transform = 0;
+ uint32 config_mask = 0;
+ config_mask |= C2D_OVERRIDE_GLOBAL_TARGET_ROTATE_CONFIG;
+ if((value & 0x7) == COPYBIT_TRANSFORM_ROT_180) {
+ transform = C2D_TARGET_ROTATE_180;
+ config_mask |= C2D_OVERRIDE_TARGET_ROTATE_180;
+ } else if((value & 0x7) == COPYBIT_TRANSFORM_ROT_270) {
+ transform = C2D_TARGET_ROTATE_90;
+ config_mask |= C2D_OVERRIDE_TARGET_ROTATE_90;
+ } else if(value == COPYBIT_TRANSFORM_ROT_90) {
+ transform = C2D_TARGET_ROTATE_270;
+ config_mask |= C2D_OVERRIDE_TARGET_ROTATE_270;
+ } else {
+ config_mask |= C2D_OVERRIDE_TARGET_ROTATE_0;
+ if(value & COPYBIT_TRANSFORM_FLIP_H) {
+ config_mask |= C2D_MIRROR_H_BIT;
+ } else if(value & COPYBIT_TRANSFORM_FLIP_V) {
+ config_mask |= C2D_MIRROR_V_BIT;
+ }
+ }
+
+ if (ctx->c2d_driver_info.capabilities_mask &
+ C2D_DRIVER_SUPPORTS_OVERRIDE_TARGET_ROTATE_OP) {
+ ctx->config_mask |= config_mask;
+ } else {
+ // The transform for this surface does not match the current
+ // target transform. Draw all previous surfaces. This will be
+ // changed once we have a new mechanism to send different
+ // target rotations to c2d.
+ finish_copybit(dev);
+ }
+ ctx->trg_transform = transform;
+ }
+ break;
+ case COPYBIT_FRAMEBUFFER_WIDTH:
+ ctx->fb_width = value;
+ break;
+ case COPYBIT_FRAMEBUFFER_HEIGHT:
+ ctx->fb_height = value;
+ break;
+ case COPYBIT_ROTATION_DEG:
+ case COPYBIT_DITHER:
+ case COPYBIT_BLUR:
+ case COPYBIT_BLIT_TO_FRAMEBUFFER:
+ // Do nothing
+ break;
+ case COPYBIT_SRC_FORMAT_MODE:
+ ctx->is_src_ubwc_format = (value == COPYBIT_UBWC_COMPRESSED);
+ break;
+ case COPYBIT_DST_FORMAT_MODE:
+ ctx->is_dst_ubwc_format = (value == COPYBIT_UBWC_COMPRESSED);
+ break;
+ default:
+ ALOGE("%s: default case param=0x%x", __FUNCTION__, name);
+ status = -EINVAL;
+ break;
+ }
+ pthread_mutex_unlock(&ctx->wait_cleanup_lock);
+ return status;
+}
+
+/** Get a static info value */
+static int get(struct copybit_device_t *dev, int name)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ int value;
+
+ if (!ctx) {
+ ALOGE("%s: null context error", __FUNCTION__);
+ return -EINVAL;
+ }
+
+ switch(name) {
+ case COPYBIT_MINIFICATION_LIMIT:
+ value = MAX_SCALE_FACTOR;
+ break;
+ case COPYBIT_MAGNIFICATION_LIMIT:
+ value = MAX_SCALE_FACTOR;
+ break;
+ case COPYBIT_SCALING_FRAC_BITS:
+ value = 32;
+ break;
+ case COPYBIT_ROTATION_STEP_DEG:
+ value = 1;
+ break;
+ case COPYBIT_UBWC_SUPPORT:
+ value = 0;
+ if (ctx->c2d_driver_info.capabilities_mask & C2D_DRIVER_SUPPORTS_UBWC_COMPRESSED_OP) {
+ value = 1;
+ }
+ break;
+ default:
+ ALOGE("%s: default case param=0x%x", __FUNCTION__, name);
+ value = -EINVAL;
+ }
+ return value;
+}
+
+/* Function to check if we need a temporary buffer for the blit.
+ * This would happen if the requested destination stride and the
+ * C2D stride do not match. We ignore RGB buffers, since their
+ * stride is always aligned to 32.
+ */
+static bool need_temp_buffer(struct copybit_image_t const *img)
+{
+ if (COPYBIT_SUCCESS == is_supported_rgb_format(img->format))
+ return false;
+
+ struct private_handle_t* handle = (struct private_handle_t*)img->handle;
+
+ // The width parameter in the handle contains the aligned_w. We check if we
+ // need to convert based on this param. YUV formats have bpp=1, so checking
+ // if the requested stride is aligned should suffice.
+ if (0 == (handle->width)%32) {
+ return false;
+ }
+
+ return true;
+}
+
+/* Function to extract the information from the copybit image and set the corresponding
+ * values in the bufferInfo struct.
+ */
+static void populate_buffer_info(struct copybit_image_t const *img, bufferInfo& info)
+{
+ info.width = img->w;
+ info.height = img->h;
+ info.format = img->format;
+}
+
+/* Function to get the required size for a particular format, inorder for C2D to perform
+ * the blit operation.
+ */
+static int get_size(const bufferInfo& info)
+{
+ int size = 0;
+ int w = info.width;
+ int h = info.height;
+ int aligned_w = ALIGN(w, 32);
+ switch(info.format) {
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ {
+ // Chroma for this format is aligned to 2K.
+ size = ALIGN((aligned_w*h), 2048) +
+ ALIGN(aligned_w/2, 32) * (h/2) *2;
+ size = ALIGN(size, 4096);
+ } break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ {
+ size = aligned_w * h +
+ ALIGN(aligned_w/2, 32) * (h/2) * 2;
+ size = ALIGN(size, 4096);
+ } break;
+ default: break;
+ }
+ return size;
+}
+
+/* Function to allocate memory for the temporary buffer. This memory is
+ * allocated from Ashmem. It is the caller's responsibility to free this
+ * memory.
+ */
+static int get_temp_buffer(const bufferInfo& info, alloc_data& data)
+{
+ ALOGD("%s E", __FUNCTION__);
+ // Alloc memory from system heap
+ data.base = 0;
+ data.fd = -1;
+ data.offset = 0;
+ data.size = get_size(info);
+ data.align = getpagesize();
+ data.uncached = true;
+ int allocFlags = 0;
+
+ if (sAlloc == 0) {
+ sAlloc = gralloc::IAllocController::getInstance();
+ }
+
+ if (sAlloc == 0) {
+ ALOGE("%s: sAlloc is still NULL", __FUNCTION__);
+ return COPYBIT_FAILURE;
+ }
+
+ int err = sAlloc->allocate(data, allocFlags);
+ if (0 != err) {
+ ALOGE("%s: allocate failed", __FUNCTION__);
+ return COPYBIT_FAILURE;
+ }
+
+ ALOGD("%s X", __FUNCTION__);
+ return err;
+}
+
+/* Function to free the temporary allocated memory.*/
+static void free_temp_buffer(alloc_data &data)
+{
+ if (-1 != data.fd) {
+ IMemAlloc* memalloc = sAlloc->getAllocator(data.allocType);
+ memalloc->free_buffer(data.base, data.size, 0, data.fd);
+ }
+}
+
+/* Function to perform the software color conversion. Convert the
+ * C2D compatible format to the Android compatible format
+ */
+static int copy_image(private_handle_t *src_handle,
+ struct copybit_image_t const *rhs,
+ eConversionType conversionType)
+{
+ if (src_handle->fd == -1) {
+ ALOGE("%s: src_handle fd is invalid", __FUNCTION__);
+ return COPYBIT_FAILURE;
+ }
+
+ // Copy the info.
+ int ret = COPYBIT_SUCCESS;
+ switch(rhs->format) {
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ {
+ if (CONVERT_TO_ANDROID_FORMAT == conversionType) {
+ return convert_yuv_c2d_to_yuv_android(src_handle, rhs);
+ } else {
+ return convert_yuv_android_to_yuv_c2d(src_handle, rhs);
+ }
+
+ } break;
+ default: {
+ ALOGE("%s: invalid format 0x%x", __FUNCTION__, rhs->format);
+ ret = COPYBIT_FAILURE;
+ } break;
+ }
+ return ret;
+}
+
+static void delete_handle(private_handle_t *handle)
+{
+ if (handle) {
+ delete handle;
+ handle = 0;
+ }
+}
+
+static bool need_to_execute_draw(eC2DFlags flags)
+{
+ if (flags & FLAGS_TEMP_SRC_DST) {
+ return true;
+ }
+ if (flags & FLAGS_YUV_DESTINATION) {
+ return true;
+ }
+ return false;
+}
+
+/** do a stretch blit type operation */
+static int stretch_copybit_internal(
+ struct copybit_device_t *dev,
+ struct copybit_image_t const *dst,
+ struct copybit_image_t const *src,
+ struct copybit_rect_t const *dst_rect,
+ struct copybit_rect_t const *src_rect,
+ struct copybit_region_t const *region,
+ bool enableBlend)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ int status = COPYBIT_SUCCESS;
+ int flags = 0;
+ int src_surface_type;
+ int mapped_src_idx = -1, mapped_dst_idx = -1;
+ C2D_OBJECT_STR src_surface;
+
+ if (!ctx) {
+ ALOGE("%s: null context error", __FUNCTION__);
+ return -EINVAL;
+ }
+
+ if (src->w > MAX_DIMENSION || src->h > MAX_DIMENSION) {
+ ALOGE("%s: src dimension error", __FUNCTION__);
+ return -EINVAL;
+ }
+
+ if (dst->w > MAX_DIMENSION || dst->h > MAX_DIMENSION) {
+ ALOGE("%s : dst dimension error dst w %d h %d", __FUNCTION__, dst->w,
+ dst->h);
+ return -EINVAL;
+ }
+
+ if (is_valid_destination_format(dst->format) == COPYBIT_FAILURE) {
+ ALOGE("%s: Invalid destination format format = 0x%x", __FUNCTION__,
+ dst->format);
+ return COPYBIT_FAILURE;
+ }
+
+ int dst_surface_type;
+ if (ctx->is_dst_ubwc_format)
+ flags |= FLAGS_UBWC_FORMAT_MODE;
+
+ if (is_supported_rgb_format(dst->format) == COPYBIT_SUCCESS) {
+ dst_surface_type = RGB_SURFACE;
+ flags |= FLAGS_PREMULTIPLIED_ALPHA;
+ } else if (is_supported_yuv_format(dst->format) == COPYBIT_SUCCESS) {
+ int num_planes = get_num_planes(dst->format);
+ flags |= FLAGS_YUV_DESTINATION;
+ if (num_planes == 2) {
+ dst_surface_type = YUV_SURFACE_2_PLANES;
+ } else if (num_planes == 3) {
+ dst_surface_type = YUV_SURFACE_3_PLANES;
+ } else {
+ ALOGE("%s: dst number of YUV planes is invalid dst format = 0x%x",
+ __FUNCTION__, dst->format);
+ return COPYBIT_FAILURE;
+ }
+ } else {
+ ALOGE("%s: Invalid dst surface format 0x%x", __FUNCTION__,
+ dst->format);
+ return COPYBIT_FAILURE;
+ }
+
+ if (ctx->blit_rgb_count == MAX_RGB_SURFACES ||
+ ctx->blit_yuv_2_plane_count == MAX_YUV_2_PLANE_SURFACES ||
+ ctx->blit_yuv_3_plane_count == MAX_YUV_2_PLANE_SURFACES ||
+ ctx->blit_count == MAX_BLIT_OBJECT_COUNT ||
+ ctx->dst_surface_type != dst_surface_type) {
+ // we have reached the max. limits of our internal structures or
+ // changed the target.
+ // Draw the remaining surfaces. We need to do the finish here since
+ // we need to free up the surface templates.
+ finish_copybit(dev);
+ }
+
+ ctx->dst_surface_type = dst_surface_type;
+
+ // Update the destination
+ copybit_image_t dst_image;
+ dst_image.w = dst->w;
+ dst_image.h = dst->h;
+ dst_image.format = dst->format;
+ dst_image.handle = dst->handle;
+ // Check if we need a temp. copy for the destination. We'd need this the destination
+ // width is not aligned to 32. This case occurs for YUV formats. RGB formats are
+ // aligned to 32.
+ bool need_temp_dst = need_temp_buffer(dst);
+ bufferInfo dst_info;
+ populate_buffer_info(dst, dst_info);
+ private_handle_t* dst_hnd = new private_handle_t(-1, 0, 0, 0, dst_info.format,
+ dst_info.width, dst_info.height);
+ if (dst_hnd == NULL) {
+ ALOGE("%s: dst_hnd is null", __FUNCTION__);
+ return COPYBIT_FAILURE;
+ }
+ if (need_temp_dst) {
+ if (get_size(dst_info) != (int) ctx->temp_dst_buffer.size) {
+ free_temp_buffer(ctx->temp_dst_buffer);
+ // Create a temp buffer and set that as the destination.
+ if (COPYBIT_FAILURE == get_temp_buffer(dst_info, ctx->temp_dst_buffer)) {
+ ALOGE("%s: get_temp_buffer(dst) failed", __FUNCTION__);
+ delete_handle(dst_hnd);
+ return COPYBIT_FAILURE;
+ }
+ }
+ dst_hnd->fd = ctx->temp_dst_buffer.fd;
+ dst_hnd->size = ctx->temp_dst_buffer.size;
+ dst_hnd->flags = ctx->temp_dst_buffer.allocType;
+ dst_hnd->base = (uintptr_t)(ctx->temp_dst_buffer.base);
+ dst_hnd->offset = ctx->temp_dst_buffer.offset;
+ dst_hnd->gpuaddr = 0;
+ dst_image.handle = dst_hnd;
+ }
+ if(!ctx->dst_surface_mapped) {
+ //map the destination surface to GPU address
+ status = set_image(ctx, ctx->dst[ctx->dst_surface_type], &dst_image,
+ (eC2DFlags)flags, mapped_dst_idx);
+ if(status) {
+ ALOGE("%s: dst: set_image error", __FUNCTION__);
+ delete_handle(dst_hnd);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ return COPYBIT_FAILURE;
+ }
+ ctx->dst_surface_mapped = true;
+ ctx->dst_surface_base = dst->base;
+ } else if(ctx->dst_surface_mapped && ctx->dst_surface_base != dst->base) {
+ // Destination surface for the operation should be same for multiple
+ // requests, this check is catch if there is any case when the
+ // destination changes
+ ALOGE("%s: a different destination surface!!", __FUNCTION__);
+ }
+
+ // Update the source
+ flags = 0;
+ if(is_supported_rgb_format(src->format) == COPYBIT_SUCCESS) {
+ src_surface_type = RGB_SURFACE;
+ src_surface = ctx->blit_rgb_object[ctx->blit_rgb_count];
+ } else if (is_supported_yuv_format(src->format) == COPYBIT_SUCCESS) {
+ int num_planes = get_num_planes(src->format);
+ if (num_planes == 2) {
+ src_surface_type = YUV_SURFACE_2_PLANES;
+ src_surface = ctx->blit_yuv_2_plane_object[ctx->blit_yuv_2_plane_count];
+ } else if (num_planes == 3) {
+ src_surface_type = YUV_SURFACE_3_PLANES;
+ src_surface = ctx->blit_yuv_3_plane_object[ctx->blit_yuv_2_plane_count];
+ } else {
+ ALOGE("%s: src number of YUV planes is invalid src format = 0x%x",
+ __FUNCTION__, src->format);
+ delete_handle(dst_hnd);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ return -EINVAL;
+ }
+ } else {
+ ALOGE("%s: Invalid source surface format 0x%x", __FUNCTION__,
+ src->format);
+ delete_handle(dst_hnd);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ return -EINVAL;
+ }
+
+ copybit_image_t src_image;
+ src_image.w = src->w;
+ src_image.h = src->h;
+ src_image.format = src->format;
+ src_image.handle = src->handle;
+
+ bool need_temp_src = need_temp_buffer(src);
+ bufferInfo src_info;
+ populate_buffer_info(src, src_info);
+ private_handle_t* src_hnd = new private_handle_t(-1, 0, 0, 0, src_info.format,
+ src_info.width, src_info.height);
+ if (NULL == src_hnd) {
+ ALOGE("%s: src_hnd is null", __FUNCTION__);
+ delete_handle(dst_hnd);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ return COPYBIT_FAILURE;
+ }
+ if (need_temp_src) {
+ if (get_size(src_info) != (int) ctx->temp_src_buffer.size) {
+ free_temp_buffer(ctx->temp_src_buffer);
+ // Create a temp buffer and set that as the destination.
+ if (COPYBIT_SUCCESS != get_temp_buffer(src_info,
+ ctx->temp_src_buffer)) {
+ ALOGE("%s: get_temp_buffer(src) failed", __FUNCTION__);
+ delete_handle(dst_hnd);
+ delete_handle(src_hnd);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ return COPYBIT_FAILURE;
+ }
+ }
+ src_hnd->fd = ctx->temp_src_buffer.fd;
+ src_hnd->size = ctx->temp_src_buffer.size;
+ src_hnd->flags = ctx->temp_src_buffer.allocType;
+ src_hnd->base = (uintptr_t)(ctx->temp_src_buffer.base);
+ src_hnd->offset = ctx->temp_src_buffer.offset;
+ src_hnd->gpuaddr = 0;
+ src_image.handle = src_hnd;
+
+ // Copy the source.
+ status = copy_image((private_handle_t *)src->handle, &src_image,
+ CONVERT_TO_C2D_FORMAT);
+ if (status == COPYBIT_FAILURE) {
+ ALOGE("%s:copy_image failed in temp source",__FUNCTION__);
+ delete_handle(dst_hnd);
+ delete_handle(src_hnd);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ return status;
+ }
+
+ // Clean the cache
+ IMemAlloc* memalloc = sAlloc->getAllocator(src_hnd->flags);
+ if (memalloc->clean_buffer((void *)(src_hnd->base), src_hnd->size,
+ src_hnd->offset, src_hnd->fd,
+ gralloc::CACHE_CLEAN)) {
+ ALOGE("%s: clean_buffer failed", __FUNCTION__);
+ delete_handle(dst_hnd);
+ delete_handle(src_hnd);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ return COPYBIT_FAILURE;
+ }
+ }
+
+ flags |= (ctx->is_premultiplied_alpha) ? FLAGS_PREMULTIPLIED_ALPHA : 0;
+ flags |= (ctx->dst_surface_type != RGB_SURFACE) ? FLAGS_YUV_DESTINATION : 0;
+ flags |= (ctx->is_src_ubwc_format) ? FLAGS_UBWC_FORMAT_MODE : 0;
+ status = set_image(ctx, src_surface.surface_id, &src_image,
+ (eC2DFlags)flags, mapped_src_idx);
+ if(status) {
+ ALOGE("%s: set_image (src) error", __FUNCTION__);
+ delete_handle(dst_hnd);
+ delete_handle(src_hnd);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ unmap_gpuaddr(ctx, mapped_src_idx);
+ return COPYBIT_FAILURE;
+ }
+
+ src_surface.config_mask = C2D_NO_ANTIALIASING_BIT | ctx->config_mask;
+ src_surface.global_alpha = ctx->src_global_alpha;
+ if (enableBlend) {
+ if(src_surface.config_mask & C2D_GLOBAL_ALPHA_BIT) {
+ src_surface.config_mask &= ~C2D_ALPHA_BLEND_NONE;
+ if(!(src_surface.global_alpha)) {
+ // src alpha is zero
+ delete_handle(dst_hnd);
+ delete_handle(src_hnd);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ unmap_gpuaddr(ctx, mapped_src_idx);
+ return COPYBIT_FAILURE;
+ }
+ }
+ } else {
+ src_surface.config_mask |= C2D_ALPHA_BLEND_NONE;
+ }
+
+ if (src_surface_type == RGB_SURFACE) {
+ ctx->blit_rgb_object[ctx->blit_rgb_count] = src_surface;
+ ctx->blit_rgb_count++;
+ } else if (src_surface_type == YUV_SURFACE_2_PLANES) {
+ ctx->blit_yuv_2_plane_object[ctx->blit_yuv_2_plane_count] = src_surface;
+ ctx->blit_yuv_2_plane_count++;
+ } else {
+ ctx->blit_yuv_3_plane_object[ctx->blit_yuv_3_plane_count] = src_surface;
+ ctx->blit_yuv_3_plane_count++;
+ }
+
+ struct copybit_rect_t clip;
+ while ((status == 0) && region->next(region, &clip)) {
+ set_rects(ctx, &(src_surface), dst_rect, src_rect, &clip);
+ if (ctx->blit_count == MAX_BLIT_OBJECT_COUNT) {
+ ALOGW("Reached end of blit count");
+ finish_copybit(dev);
+ }
+ ctx->blit_list[ctx->blit_count] = src_surface;
+ ctx->blit_count++;
+ }
+
+ // Check if we need to perform an early draw-finish.
+ flags |= (need_temp_dst || need_temp_src) ? FLAGS_TEMP_SRC_DST : 0;
+ if (need_to_execute_draw((eC2DFlags)flags))
+ {
+ finish_copybit(dev);
+ }
+
+ if (need_temp_dst) {
+ // copy the temp. destination without the alignment to the actual
+ // destination.
+ status = copy_image(dst_hnd, dst, CONVERT_TO_ANDROID_FORMAT);
+ if (status == COPYBIT_FAILURE) {
+ ALOGE("%s:copy_image failed in temp Dest",__FUNCTION__);
+ delete_handle(dst_hnd);
+ delete_handle(src_hnd);
+ unmap_gpuaddr(ctx, mapped_dst_idx);
+ unmap_gpuaddr(ctx, mapped_src_idx);
+ return status;
+ }
+ // Clean the cache.
+ IMemAlloc* memalloc = sAlloc->getAllocator(dst_hnd->flags);
+ memalloc->clean_buffer((void *)(dst_hnd->base), dst_hnd->size,
+ dst_hnd->offset, dst_hnd->fd,
+ gralloc::CACHE_CLEAN);
+ }
+ delete_handle(dst_hnd);
+ delete_handle(src_hnd);
+
+ ctx->is_premultiplied_alpha = false;
+ ctx->fb_width = 0;
+ ctx->fb_height = 0;
+ ctx->config_mask = 0;
+ return status;
+}
+
+static int set_sync_copybit(struct copybit_device_t *dev,
+ int /*acquireFenceFd*/)
+{
+ if(!dev)
+ return -EINVAL;
+
+ return 0;
+}
+
+static int stretch_copybit(
+ struct copybit_device_t *dev,
+ struct copybit_image_t const *dst,
+ struct copybit_image_t const *src,
+ struct copybit_rect_t const *dst_rect,
+ struct copybit_rect_t const *src_rect,
+ struct copybit_region_t const *region)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ int status = COPYBIT_SUCCESS;
+ bool needsBlending = (ctx->src_global_alpha != 0);
+ pthread_mutex_lock(&ctx->wait_cleanup_lock);
+ status = stretch_copybit_internal(dev, dst, src, dst_rect, src_rect,
+ region, needsBlending);
+ pthread_mutex_unlock(&ctx->wait_cleanup_lock);
+ return status;
+}
+
+/** Perform a blit type operation */
+static int blit_copybit(
+ struct copybit_device_t *dev,
+ struct copybit_image_t const *dst,
+ struct copybit_image_t const *src,
+ struct copybit_region_t const *region)
+{
+ int status = COPYBIT_SUCCESS;
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ struct copybit_rect_t dr = { 0, 0, (int)dst->w, (int)dst->h };
+ struct copybit_rect_t sr = { 0, 0, (int)src->w, (int)src->h };
+ pthread_mutex_lock(&ctx->wait_cleanup_lock);
+ status = stretch_copybit_internal(dev, dst, src, &dr, &sr, region, false);
+ pthread_mutex_unlock(&ctx->wait_cleanup_lock);
+ return status;
+}
+
+/** Fill the rect on dst with RGBA color **/
+static int fill_color(struct copybit_device_t *dev,
+ struct copybit_image_t const *dst,
+ struct copybit_rect_t const *rect,
+ uint32_t /*color*/)
+{
+ // TODO: Implement once c2d driver supports color fill
+ if(!dev || !dst || !rect)
+ return -EINVAL;
+
+ return -EINVAL;
+}
+
+/*****************************************************************************/
+
+static void clean_up(copybit_context_t* ctx)
+{
+ void* ret;
+ if (!ctx)
+ return;
+
+ // stop the wait_cleanup_thread
+ pthread_mutex_lock(&ctx->wait_cleanup_lock);
+ ctx->stop_thread = true;
+ // Signal waiting thread
+ pthread_cond_signal(&ctx->wait_cleanup_cond);
+ pthread_mutex_unlock(&ctx->wait_cleanup_lock);
+ // waits for the cleanup thread to exit
+ pthread_join(ctx->wait_thread_id, &ret);
+ pthread_mutex_destroy(&ctx->wait_cleanup_lock);
+ pthread_cond_destroy (&ctx->wait_cleanup_cond);
+
+ for (int i = 0; i < NUM_SURFACE_TYPES; i++) {
+ if (ctx->dst[i])
+ LINK_c2dDestroySurface(ctx->dst[i]);
+ }
+
+ for (int i = 0; i < MAX_RGB_SURFACES; i++) {
+ if (ctx->blit_rgb_object[i].surface_id)
+ LINK_c2dDestroySurface(ctx->blit_rgb_object[i].surface_id);
+ }
+
+ for (int i = 0; i < MAX_YUV_2_PLANE_SURFACES; i++) {
+ if (ctx->blit_yuv_2_plane_object[i].surface_id)
+ LINK_c2dDestroySurface(ctx->blit_yuv_2_plane_object[i].surface_id);
+ }
+
+ for (int i = 0; i < MAX_YUV_3_PLANE_SURFACES; i++) {
+ if (ctx->blit_yuv_3_plane_object[i].surface_id)
+ LINK_c2dDestroySurface(ctx->blit_yuv_3_plane_object[i].surface_id);
+ }
+
+ if (ctx->libc2d2) {
+ ::dlclose(ctx->libc2d2);
+ ALOGV("dlclose(libc2d2)");
+ }
+
+ free(ctx);
+}
+
+/** Close the copybit device */
+static int close_copybit(struct hw_device_t *dev)
+{
+ struct copybit_context_t* ctx = (struct copybit_context_t*)dev;
+ if (ctx) {
+ free_temp_buffer(ctx->temp_src_buffer);
+ free_temp_buffer(ctx->temp_dst_buffer);
+ }
+ clean_up(ctx);
+ return 0;
+}
+
+/** Open a new instance of a copybit device using name */
+static int open_copybit(const struct hw_module_t* module, const char* name,
+ struct hw_device_t** device)
+{
+ int status = COPYBIT_SUCCESS;
+ if (strcmp(name, COPYBIT_HARDWARE_COPYBIT0)) {
+ return COPYBIT_FAILURE;
+ }
+
+ C2D_RGB_SURFACE_DEF surfDefinition = {0};
+ C2D_YUV_SURFACE_DEF yuvSurfaceDef = {0} ;
+ struct copybit_context_t *ctx;
+
+ ctx = (struct copybit_context_t *)malloc(sizeof(struct copybit_context_t));
+ if(!ctx) {
+ ALOGE("%s: malloc failed", __FUNCTION__);
+ return COPYBIT_FAILURE;
+ }
+
+ /* initialize drawstate */
+ memset(ctx, 0, sizeof(*ctx));
+ ctx->libc2d2 = ::dlopen("libC2D2.so", RTLD_NOW);
+ if (!ctx->libc2d2) {
+ ALOGE("FATAL ERROR: could not dlopen libc2d2.so: %s", dlerror());
+ clean_up(ctx);
+ status = COPYBIT_FAILURE;
+ *device = NULL;
+ return status;
+ }
+ *(void **)&LINK_c2dCreateSurface = ::dlsym(ctx->libc2d2,
+ "c2dCreateSurface");
+ *(void **)&LINK_c2dUpdateSurface = ::dlsym(ctx->libc2d2,
+ "c2dUpdateSurface");
+ *(void **)&LINK_c2dReadSurface = ::dlsym(ctx->libc2d2,
+ "c2dReadSurface");
+ *(void **)&LINK_c2dDraw = ::dlsym(ctx->libc2d2, "c2dDraw");
+ *(void **)&LINK_c2dFlush = ::dlsym(ctx->libc2d2, "c2dFlush");
+ *(void **)&LINK_c2dFinish = ::dlsym(ctx->libc2d2, "c2dFinish");
+ *(void **)&LINK_c2dWaitTimestamp = ::dlsym(ctx->libc2d2,
+ "c2dWaitTimestamp");
+ *(void **)&LINK_c2dDestroySurface = ::dlsym(ctx->libc2d2,
+ "c2dDestroySurface");
+ *(void **)&LINK_c2dMapAddr = ::dlsym(ctx->libc2d2,
+ "c2dMapAddr");
+ *(void **)&LINK_c2dUnMapAddr = ::dlsym(ctx->libc2d2,
+ "c2dUnMapAddr");
+ *(void **)&LINK_c2dGetDriverCapabilities = ::dlsym(ctx->libc2d2,
+ "c2dGetDriverCapabilities");
+ *(void **)&LINK_c2dCreateFenceFD = ::dlsym(ctx->libc2d2,
+ "c2dCreateFenceFD");
+ *(void **)&LINK_c2dFillSurface = ::dlsym(ctx->libc2d2,
+ "c2dFillSurface");
+
+ if (!LINK_c2dCreateSurface || !LINK_c2dUpdateSurface || !LINK_c2dReadSurface
+ || !LINK_c2dDraw || !LINK_c2dFlush || !LINK_c2dWaitTimestamp ||
+ !LINK_c2dFinish || !LINK_c2dDestroySurface ||
+ !LINK_c2dGetDriverCapabilities || !LINK_c2dCreateFenceFD ||
+ !LINK_c2dFillSurface) {
+ ALOGE("%s: dlsym ERROR", __FUNCTION__);
+ clean_up(ctx);
+ status = COPYBIT_FAILURE;
+ *device = NULL;
+ return status;
+ }
+
+ ctx->device.common.tag = HARDWARE_DEVICE_TAG;
+ ctx->device.common.version = 1;
+ ctx->device.common.module = (hw_module_t*)(module);
+ ctx->device.common.close = close_copybit;
+ ctx->device.set_parameter = set_parameter_copybit;
+ ctx->device.get = get;
+ ctx->device.blit = blit_copybit;
+ ctx->device.set_sync = set_sync_copybit;
+ ctx->device.stretch = stretch_copybit;
+ ctx->device.finish = finish_copybit;
+ ctx->device.flush_get_fence = flush_get_fence_copybit;
+ ctx->device.clear = clear_copybit;
+ ctx->device.fill_color = fill_color;
+
+ /* Create RGB Surface */
+ surfDefinition.buffer = (void*)0xdddddddd;
+ surfDefinition.phys = (void*)0xdddddddd;
+ surfDefinition.stride = 1 * 4;
+ surfDefinition.width = 1;
+ surfDefinition.height = 1;
+ surfDefinition.format = C2D_COLOR_FORMAT_8888_ARGB;
+ if (LINK_c2dCreateSurface(&(ctx->dst[RGB_SURFACE]), C2D_TARGET | C2D_SOURCE,
+ (C2D_SURFACE_TYPE)(C2D_SURFACE_RGB_HOST |
+ C2D_SURFACE_WITH_PHYS |
+ C2D_SURFACE_WITH_PHYS_DUMMY ),
+ &surfDefinition)) {
+ ALOGE("%s: create ctx->dst_surface[RGB_SURFACE] failed", __FUNCTION__);
+ ctx->dst[RGB_SURFACE] = 0;
+ clean_up(ctx);
+ status = COPYBIT_FAILURE;
+ *device = NULL;
+ return status;
+ }
+
+ unsigned int surface_id = 0;
+ for (int i = 0; i < MAX_RGB_SURFACES; i++)
+ {
+ if (LINK_c2dCreateSurface(&surface_id, C2D_TARGET | C2D_SOURCE,
+ (C2D_SURFACE_TYPE)(C2D_SURFACE_RGB_HOST |
+ C2D_SURFACE_WITH_PHYS |
+ C2D_SURFACE_WITH_PHYS_DUMMY ),
+ &surfDefinition)) {
+ ALOGE("%s: create RGB source surface %d failed", __FUNCTION__, i);
+ ctx->blit_rgb_object[i].surface_id = 0;
+ status = COPYBIT_FAILURE;
+ break;
+ } else {
+ ctx->blit_rgb_object[i].surface_id = surface_id;
+ ALOGW("%s i = %d surface_id=%d", __FUNCTION__, i,
+ ctx->blit_rgb_object[i].surface_id);
+ }
+ }
+
+ if (status == COPYBIT_FAILURE) {
+ clean_up(ctx);
+ status = COPYBIT_FAILURE;
+ *device = NULL;
+ return status;
+ }
+
+ // Create 2 plane YUV surfaces
+ yuvSurfaceDef.format = C2D_COLOR_FORMAT_420_NV12;
+ yuvSurfaceDef.width = 4;
+ yuvSurfaceDef.height = 4;
+ yuvSurfaceDef.plane0 = (void*)0xaaaaaaaa;
+ yuvSurfaceDef.phys0 = (void*) 0xaaaaaaaa;
+ yuvSurfaceDef.stride0 = 4;
+
+ yuvSurfaceDef.plane1 = (void*)0xaaaaaaaa;
+ yuvSurfaceDef.phys1 = (void*) 0xaaaaaaaa;
+ yuvSurfaceDef.stride1 = 4;
+ if (LINK_c2dCreateSurface(&(ctx->dst[YUV_SURFACE_2_PLANES]),
+ C2D_TARGET | C2D_SOURCE,
+ (C2D_SURFACE_TYPE)(C2D_SURFACE_YUV_HOST |
+ C2D_SURFACE_WITH_PHYS |
+ C2D_SURFACE_WITH_PHYS_DUMMY),
+ &yuvSurfaceDef)) {
+ ALOGE("%s: create ctx->dst[YUV_SURFACE_2_PLANES] failed", __FUNCTION__);
+ ctx->dst[YUV_SURFACE_2_PLANES] = 0;
+ clean_up(ctx);
+ status = COPYBIT_FAILURE;
+ *device = NULL;
+ return status;
+ }
+
+ for (int i=0; i < MAX_YUV_2_PLANE_SURFACES; i++)
+ {
+ if (LINK_c2dCreateSurface(&surface_id, C2D_TARGET | C2D_SOURCE,
+ (C2D_SURFACE_TYPE)(C2D_SURFACE_YUV_HOST |
+ C2D_SURFACE_WITH_PHYS |
+ C2D_SURFACE_WITH_PHYS_DUMMY ),
+ &yuvSurfaceDef)) {
+ ALOGE("%s: create YUV source %d failed", __FUNCTION__, i);
+ ctx->blit_yuv_2_plane_object[i].surface_id = 0;
+ status = COPYBIT_FAILURE;
+ break;
+ } else {
+ ctx->blit_yuv_2_plane_object[i].surface_id = surface_id;
+ ALOGW("%s: 2 Plane YUV i=%d surface_id=%d", __FUNCTION__, i,
+ ctx->blit_yuv_2_plane_object[i].surface_id);
+ }
+ }
+
+ if (status == COPYBIT_FAILURE) {
+ clean_up(ctx);
+ status = COPYBIT_FAILURE;
+ *device = NULL;
+ return status;
+ }
+
+ // Create YUV 3 plane surfaces
+ yuvSurfaceDef.format = C2D_COLOR_FORMAT_420_YV12;
+ yuvSurfaceDef.plane2 = (void*)0xaaaaaaaa;
+ yuvSurfaceDef.phys2 = (void*) 0xaaaaaaaa;
+ yuvSurfaceDef.stride2 = 4;
+
+ if (LINK_c2dCreateSurface(&(ctx->dst[YUV_SURFACE_3_PLANES]),
+ C2D_TARGET | C2D_SOURCE,
+ (C2D_SURFACE_TYPE)(C2D_SURFACE_YUV_HOST |
+ C2D_SURFACE_WITH_PHYS |
+ C2D_SURFACE_WITH_PHYS_DUMMY),
+ &yuvSurfaceDef)) {
+ ALOGE("%s: create ctx->dst[YUV_SURFACE_3_PLANES] failed", __FUNCTION__);
+ ctx->dst[YUV_SURFACE_3_PLANES] = 0;
+ clean_up(ctx);
+ status = COPYBIT_FAILURE;
+ *device = NULL;
+ return status;
+ }
+
+ for (int i=0; i < MAX_YUV_3_PLANE_SURFACES; i++)
+ {
+ if (LINK_c2dCreateSurface(&(surface_id),
+ C2D_TARGET | C2D_SOURCE,
+ (C2D_SURFACE_TYPE)(C2D_SURFACE_YUV_HOST |
+ C2D_SURFACE_WITH_PHYS |
+ C2D_SURFACE_WITH_PHYS_DUMMY),
+ &yuvSurfaceDef)) {
+ ALOGE("%s: create 3 plane YUV surface %d failed", __FUNCTION__, i);
+ ctx->blit_yuv_3_plane_object[i].surface_id = 0;
+ status = COPYBIT_FAILURE;
+ break;
+ } else {
+ ctx->blit_yuv_3_plane_object[i].surface_id = surface_id;
+ ALOGW("%s: 3 Plane YUV i=%d surface_id=%d", __FUNCTION__, i,
+ ctx->blit_yuv_3_plane_object[i].surface_id);
+ }
+ }
+
+ if (status == COPYBIT_FAILURE) {
+ clean_up(ctx);
+ status = COPYBIT_FAILURE;
+ *device = NULL;
+ return status;
+ }
+
+ if (LINK_c2dGetDriverCapabilities(&(ctx->c2d_driver_info))) {
+ ALOGE("%s: LINK_c2dGetDriverCapabilities failed", __FUNCTION__);
+ clean_up(ctx);
+ status = COPYBIT_FAILURE;
+ *device = NULL;
+ return status;
+ }
+ // Initialize context variables.
+ ctx->trg_transform = C2D_TARGET_ROTATE_0;
+
+ ctx->temp_src_buffer.fd = -1;
+ ctx->temp_src_buffer.base = 0;
+ ctx->temp_src_buffer.size = 0;
+
+ ctx->temp_dst_buffer.fd = -1;
+ ctx->temp_dst_buffer.base = 0;
+ ctx->temp_dst_buffer.size = 0;
+
+ ctx->fb_width = 0;
+ ctx->fb_height = 0;
+
+ ctx->blit_rgb_count = 0;
+ ctx->blit_yuv_2_plane_count = 0;
+ ctx->blit_yuv_3_plane_count = 0;
+ ctx->blit_count = 0;
+
+ ctx->wait_timestamp = false;
+ ctx->stop_thread = false;
+ pthread_mutex_init(&(ctx->wait_cleanup_lock), NULL);
+ pthread_cond_init(&(ctx->wait_cleanup_cond), NULL);
+ /* Start the wait thread */
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+
+ pthread_create(&ctx->wait_thread_id, &attr, &c2d_wait_loop,
+ (void *)ctx);
+ pthread_attr_destroy(&attr);
+
+ *device = &ctx->device.common;
+ return status;
+}
diff --git a/libcopybit/copybit_priv.h b/libcopybit/copybit_priv.h
new file mode 100644
index 0000000..68dfac4
--- /dev/null
+++ b/libcopybit/copybit_priv.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2011, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#include <copybit.h>
+struct copybit_iterator : public copybit_region_t {
+ copybit_iterator(const copybit_rect_t& rect) {
+ mRect = rect;
+ mCount = 1;
+ this->next = iterate;
+ }
+private:
+ static int iterate(copybit_region_t const * self, copybit_rect_t* rect) {
+ if (!self || !rect) {
+ return 0;
+ }
+
+ copybit_iterator const* me = static_cast<copybit_iterator const*>(self);
+ if (me->mCount) {
+ rect->l = me->mRect.l;
+ rect->t = me->mRect.t;
+ rect->r = me->mRect.r;
+ rect->b = me->mRect.b;
+ me->mCount--;
+ return 1;
+ }
+ return 0;
+ }
+ copybit_rect_t mRect;
+ mutable int mCount;
+};
diff --git a/libcopybit/software_converter.cpp b/libcopybit/software_converter.cpp
new file mode 100644
index 0000000..1aa3ce6
--- /dev/null
+++ b/libcopybit/software_converter.cpp
@@ -0,0 +1,263 @@
+/*
+ * Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#include <log/log.h>
+#include <stdlib.h>
+#include <errno.h>
+#include "software_converter.h"
+
+/** Convert YV12 to YCrCb_420_SP */
+int convertYV12toYCrCb420SP(const copybit_image_t *src, private_handle_t *yv12_handle)
+{
+ private_handle_t* hnd = (private_handle_t*)src->handle;
+
+ if(hnd == NULL || yv12_handle == NULL){
+ ALOGE("Invalid handle");
+ return -1;
+ }
+
+ // Please refer to the description of YV12 in hardware.h
+ // for the formulae used to calculate buffer sizes and offsets
+
+ // In a copybit_image_t, w is the stride and
+ // stride - horiz_padding is the actual width
+ // vertical stride is the same as height, so not considered
+ unsigned int stride = src->w;
+ unsigned int width = src->w - src->horiz_padding;
+ unsigned int height = src->h;
+ unsigned int y_size = stride * src->h;
+ unsigned int c_width = ALIGN(stride/2, (unsigned int)16);
+ unsigned int c_size = c_width * src->h/2;
+ unsigned int chromaPadding = c_width - width/2;
+ unsigned int chromaSize = c_size * 2;
+ unsigned char* newChroma = (unsigned char *)(yv12_handle->base + y_size);
+ unsigned char* oldChroma = (unsigned char*)(hnd->base + y_size);
+ memcpy((char *)yv12_handle->base,(char *)hnd->base,y_size);
+
+#if defined(__ARM_HAVE_NEON) && !defined(__aarch64__)
+ /* interleave */
+ if(!chromaPadding) {
+ unsigned char * t1 = newChroma;
+ unsigned char * t2 = oldChroma;
+ unsigned char * t3 = t2 + chromaSize/2;
+ for(unsigned int i=0; i < (chromaSize/2)>>3; i++) {
+ __asm__ __volatile__ (
+ "vld1.u8 d0, [%0]! \n"
+ "vld1.u8 d1, [%1]! \n"
+ "vst2.u8 {d0, d1}, [%2]! \n"
+ :"+r"(t2), "+r"(t3), "+r"(t1)
+ :
+ :"memory","d0","d1"
+ );
+
+ }
+ }
+#else //__ARM_HAVE_NEON
+ if(!chromaPadding) {
+ for(unsigned int i = 0; i< chromaSize/2; i++) {
+ newChroma[i*2] = oldChroma[i];
+ newChroma[i*2+1] = oldChroma[i+chromaSize/2];
+ }
+
+ }
+#endif
+ // If the image is not aligned to 16 pixels,
+ // convert using the C routine below
+ // r1 tracks the row of the source buffer
+ // r2 tracks the row of the destination buffer
+ // The width/2 checks are to avoid copying
+ // from the padding
+
+ if(chromaPadding) {
+ unsigned int r1 = 0, r2 = 0, i = 0, j = 0;
+ while(r1 < height/2) {
+ if(j == width) {
+ j = 0;
+ r2++;
+ continue;
+ }
+ if (j+1 == width) {
+ newChroma[r2*width + j] = oldChroma[r1*c_width+i];
+ r2++;
+ newChroma[r2*width] = oldChroma[r1*c_width+i+c_size];
+ j = 1;
+ } else {
+ newChroma[r2*width + j] = oldChroma[r1*c_width+i];
+ newChroma[r2*width + j + 1] = oldChroma[r1*c_width+i+c_size];
+ j+=2;
+ }
+ i++;
+ if (i == width/2 ) {
+ i = 0;
+ r1++;
+ }
+ }
+ }
+
+ return 0;
+}
+
+struct copyInfo{
+ int width;
+ int height;
+ int src_stride;
+ int dst_stride;
+ size_t src_plane1_offset;
+ size_t src_plane2_offset;
+ size_t dst_plane1_offset;
+ size_t dst_plane2_offset;
+};
+
+/* Internal function to do the actual copy of source to destination */
+static int copy_source_to_destination(const uintptr_t src_base,
+ const uintptr_t dst_base,
+ copyInfo& info)
+{
+ if (!src_base || !dst_base) {
+ ALOGE("%s: invalid memory src_base = 0x%p dst_base=0x%p",
+ __FUNCTION__, (void*)src_base, (void*)dst_base);
+ return COPYBIT_FAILURE;
+ }
+
+ int width = info.width;
+ int height = info.height;
+ unsigned char *src = (unsigned char*)src_base;
+ unsigned char *dst = (unsigned char*)dst_base;
+
+ // Copy the luma
+ for (int i = 0; i < height; i++) {
+ memcpy(dst, src, width);
+ src += info.src_stride;
+ dst += info.dst_stride;
+ }
+
+ // Copy plane 1
+ src = (unsigned char*)(src_base + info.src_plane1_offset);
+ dst = (unsigned char*)(dst_base + info.dst_plane1_offset);
+ width = width/2;
+ height = height/2;
+ for (int i = 0; i < height; i++) {
+ memcpy(dst, src, info.src_stride);
+ src += info.src_stride;
+ dst += info.dst_stride;
+ }
+ return 0;
+}
+
+
+/*
+ * Function to convert the c2d format into an equivalent Android format
+ *
+ * @param: source buffer handle
+ * @param: destination image
+ *
+ * @return: return status
+ */
+int convert_yuv_c2d_to_yuv_android(private_handle_t *hnd,
+ struct copybit_image_t const *rhs)
+{
+ ALOGD("Enter %s", __FUNCTION__);
+ if (!hnd || !rhs) {
+ ALOGE("%s: invalid inputs hnd=%p rhs=%p", __FUNCTION__, hnd, rhs);
+ return COPYBIT_FAILURE;
+ }
+
+ int ret = COPYBIT_SUCCESS;
+ private_handle_t *dst_hnd = (private_handle_t *)rhs->handle;
+
+ copyInfo info;
+ info.width = rhs->w;
+ info.height = rhs->h;
+ info.src_stride = ALIGN(info.width, 32);
+ info.dst_stride = ALIGN(info.width, 16);
+ switch(rhs->format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP: {
+ info.src_plane1_offset = info.src_stride*info.height;
+ info.dst_plane1_offset = info.dst_stride*info.height;
+ } break;
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: {
+ // Chroma is 2K aligned for the NV12 encodeable format.
+ info.src_plane1_offset = ALIGN(info.src_stride*info.height, 2048);
+ info.dst_plane1_offset = ALIGN(info.dst_stride*info.height, 2048);
+ } break;
+ default:
+ ALOGE("%s: unsupported format (format=0x%x)", __FUNCTION__,
+ rhs->format);
+ return COPYBIT_FAILURE;
+ }
+
+ ret = copy_source_to_destination((uintptr_t) hnd->base, (uintptr_t) dst_hnd->base, info);
+ return ret;
+}
+
+/*
+ * Function to convert the Android format into an equivalent C2D format
+ *
+ * @param: source buffer handle
+ * @param: destination image
+ *
+ * @return: return status
+ */
+int convert_yuv_android_to_yuv_c2d(private_handle_t *hnd,
+ struct copybit_image_t const *rhs)
+{
+ if (!hnd || !rhs) {
+ ALOGE("%s: invalid inputs hnd=%p rhs=%p", __FUNCTION__, hnd, rhs);
+ return COPYBIT_FAILURE;
+ }
+
+ int ret = COPYBIT_SUCCESS;
+ private_handle_t *dst_hnd = (private_handle_t *)rhs->handle;
+
+ copyInfo info;
+ info.width = rhs->w;
+ info.height = rhs->h;
+ info.src_stride = ALIGN(hnd->width, 16);
+ info.dst_stride = ALIGN(info.width, 32);
+ switch(rhs->format) {
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP: {
+ info.src_plane1_offset = info.src_stride*info.height;
+ info.dst_plane1_offset = info.dst_stride*info.height;
+ } break;
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: {
+ // Chroma is 2K aligned for the NV12 encodeable format.
+ info.src_plane1_offset = ALIGN(info.src_stride*info.height, 2048);
+ info.dst_plane1_offset = ALIGN(info.dst_stride*info.height, 2048);
+ } break;
+ default:
+ ALOGE("%s: unsupported format (format=0x%x)", __FUNCTION__,
+ rhs->format);
+ return -1;
+ }
+
+ ret = copy_source_to_destination((uintptr_t) hnd->base, (uintptr_t) dst_hnd->base, info);
+ return ret;
+}
diff --git a/libcopybit/software_converter.h b/libcopybit/software_converter.h
new file mode 100644
index 0000000..cc6ae34
--- /dev/null
+++ b/libcopybit/software_converter.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2011, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+
+
+#include <copybit.h>
+#include "gralloc_priv.h"
+
+#define COPYBIT_SUCCESS 0
+#define COPYBIT_FAILURE -1
+
+#define ALIGN(x, y) (((x) + y - 1) & (~(y - 1)))
+
+int convertYV12toYCrCb420SP(const copybit_image_t *src,private_handle_t *yv12_handle);
+
+/*
+ * Function to convert the c2d format into an equivalent Android format
+ *
+ * @param: source buffer handle
+ * @param: destination image
+ *
+ * @return: return status
+ */
+int convert_yuv_c2d_to_yuv_android(private_handle_t *hnd,
+ struct copybit_image_t const *rhs);
+
+
+/*
+ * Function to convert the Android format into an equivalent C2D format
+ *
+ * @param: source buffer handle
+ * @param: destination image
+ *
+ * @return: return status
+ */
+int convert_yuv_android_to_yuv_c2d(private_handle_t *hnd,
+ struct copybit_image_t const *rhs);
diff --git a/libdebug/Android.mk b/libdebug/Android.mk
new file mode 100644
index 0000000..3ed3394
--- /dev/null
+++ b/libdebug/Android.mk
@@ -0,0 +1,14 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libdisplaydebug
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_TAGS := optional
+LOCAL_SHARED_LIBRARIES := libdl
+LOCAL_CFLAGS := -DLOG_TAG=\"SDM\" -Wall -Werror -fno-operator-names
+LOCAL_CLANG := true
+LOCAL_SRC_FILES := debug_handler.cpp
+LOCAL_COPY_HEADERS_TO := qcom/display
+LOCAL_COPY_HEADERS := debug_handler.h
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/libdebug/Makefile.am b/libdebug/Makefile.am
new file mode 100644
index 0000000..41a4445
--- /dev/null
+++ b/libdebug/Makefile.am
@@ -0,0 +1,14 @@
+h_sources = debug_handler.h
+
+cpp_sources = debug_handler.cpp
+
+library_includedir = $(includedir)
+library_include_HEADERS = $(h_sources)
+
+lib_LTLIBRARIES = libdisplaydebug.la
+libdisplaydebug_la_CC = @CC@
+libdisplaydebug_la_SOURCES = $(cpp_sources)
+libdisplaydebug_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"SDM\"
+libdisplaydebug_la_CPPFLAGS = $(AM_CPPFLAGS)
+libdisplaydebug_la_LIBADD = -ldl
+libdisplaydebug_la_LDFLAGS = -shared -avoid-version
diff --git a/libdebug/debug_handler.cpp b/libdebug/debug_handler.cpp
new file mode 100644
index 0000000..00c3ec9
--- /dev/null
+++ b/libdebug/debug_handler.cpp
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include "debug_handler.h"
+
+namespace display {
+
+// By default, drop any log messages/traces. It need to be overridden by client.
+class DefaultDebugHandler : public DebugHandler {
+ public:
+ virtual void Error(const char *, ...) { }
+ virtual void Warning(const char *, ...) { }
+ virtual void Info(const char *, ...) { }
+ virtual void Debug(const char *, ...) { }
+ virtual void Verbose(const char *, ...) { }
+ virtual void BeginTrace(const char *, const char *, const char *) { }
+ virtual void EndTrace() { }
+ virtual int GetProperty(const char *, int *) { return -1; }
+ virtual int GetProperty(const char *, char *) { return -1; }
+};
+
+DefaultDebugHandler g_default_debug_handler;
+DebugHandler * DebugHandler::debug_handler_ = &g_default_debug_handler;
+std::bitset<32> DebugHandler::log_mask_ = 0x1; // Always print logs tagged with value 0
+
+void DebugHandler::Set(DebugHandler *debug_handler) {
+ if (debug_handler) {
+ debug_handler_ = debug_handler;
+ } else {
+ debug_handler_ = &g_default_debug_handler;
+ }
+}
+
+} // namespace display
diff --git a/libdebug/debug_handler.h b/libdebug/debug_handler.h
new file mode 100644
index 0000000..81795e4
--- /dev/null
+++ b/libdebug/debug_handler.h
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DEBUG_HANDLER_H__
+#define __DEBUG_HANDLER_H__
+
+#include <bitset>
+
+#define DLOG(method, format, ...) \
+ display::DebugHandler::Get()->method(__CLASS__ "::%s: " format, __FUNCTION__, ##__VA_ARGS__)
+
+#define DLOG_IF(tag, method, format, ...) \
+ if (display::DebugHandler::GetLogMask()[tag]) { \
+ DLOG(method, format, ##__VA_ARGS__); \
+ }
+
+#define DLOGE_IF(tag, format, ...) DLOG_IF(tag, Error, format, ##__VA_ARGS__)
+#define DLOGW_IF(tag, format, ...) DLOG_IF(tag, Warning, format, ##__VA_ARGS__)
+#define DLOGI_IF(tag, format, ...) DLOG_IF(tag, Info, format, ##__VA_ARGS__)
+#define DLOGD_IF(tag, format, ...) DLOG_IF(tag, Debug, format, ##__VA_ARGS__)
+#define DLOGV_IF(tag, format, ...) DLOG_IF(tag, Verbose, format, ##__VA_ARGS__)
+
+#define DLOGE(format, ...) DLOG(Error, format, ##__VA_ARGS__)
+#define DLOGW(format, ...) DLOG(Warning, format, ##__VA_ARGS__)
+#define DLOGI(format, ...) DLOG(Info, format, ##__VA_ARGS__)
+#define DLOGD(format, ...) DLOG(Debug, format, ##__VA_ARGS__)
+#define DLOGV(format, ...) DLOG(Verbose, format, ##__VA_ARGS__)
+
+#define DTRACE_BEGIN(custom_string) display::DebugHandler::Get()->BeginTrace( \
+ __CLASS__, __FUNCTION__, custom_string)
+#define DTRACE_END() display::DebugHandler::Get()->EndTrace()
+#define DTRACE_SCOPED() display::ScopeTracer <display::DebugHandler> \
+ scope_tracer(__CLASS__, __FUNCTION__)
+
+namespace display {
+
+class DebugHandler {
+ public:
+ virtual void Error(const char *format, ...) = 0;
+ virtual void Warning(const char *format, ...) = 0;
+ virtual void Info(const char *format, ...) = 0;
+ virtual void Debug(const char *format, ...) = 0;
+ virtual void Verbose(const char *format, ...) = 0;
+ virtual void BeginTrace(const char *class_name, const char *function_name,
+ const char *custom_string) = 0;
+ virtual void EndTrace() = 0;
+ virtual int GetProperty(const char *property_name, int *value) = 0;
+ virtual int GetProperty(const char *property_name, char *value) = 0;
+
+ static inline DebugHandler *Get() { return debug_handler_; }
+ static void Set(DebugHandler *debug_handler);
+ static inline std::bitset<32> & GetLogMask() { return log_mask_; }
+ static void SetLogMask(const std::bitset<32> &log_mask) { log_mask_ = log_mask; }
+
+ protected:
+ virtual ~DebugHandler() { }
+
+ private:
+ static DebugHandler *debug_handler_;
+ static std::bitset<32> log_mask_;
+};
+
+template <class T>
+class ScopeTracer {
+ public:
+ ScopeTracer(const char *class_name, const char *function_name) {
+ T::Get()->BeginTrace(class_name, function_name, "");
+ }
+
+ ~ScopeTracer() { T::Get()->EndTrace(); }
+};
+
+} // namespace display
+
+#endif // __DEBUG_HANDLER_H__
diff --git a/libdisplayconfig/DisplayConfig.h b/libdisplayconfig/DisplayConfig.h
new file mode 100644
index 0000000..fbce8b6
--- /dev/null
+++ b/libdisplayconfig/DisplayConfig.h
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2017 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DISPLAY_CONFIG_H__
+#define __DISPLAY_CONFIG_H__
+
+#include <stdint.h>
+#include <vector>
+
+// This header is for clients to use to set/get global display configuration.
+
+namespace display {
+
+enum {
+ DISPLAY_PRIMARY = 0,
+ DISPLAY_EXTERNAL,
+ DISPLAY_VIRTUAL,
+};
+
+enum {
+ EXTERNAL_OFFLINE = 0,
+ EXTERNAL_ONLINE,
+ EXTERNAL_PAUSE,
+ EXTERNAL_RESUME,
+};
+
+enum {
+ DISABLE_METADATA_DYN_REFRESH_RATE = 0,
+ ENABLE_METADATA_DYN_REFRESH_RATE,
+ SET_BINDER_DYN_REFRESH_RATE,
+};
+
+enum {
+ DISPLAY_PORT_DEFAULT = 0,
+ DISPLAY_PORT_DSI,
+ DISPLAY_PORT_DTV,
+ DISPLAY_PORT_WRITEBACK,
+ DISPLAY_PORT_LVDS,
+ DISPLAY_PORT_EDP,
+ DISPLAY_PORT_DP,
+};
+
+struct DisplayAttributes {
+ uint32_t vsync_period = 0; //nanoseconds
+ uint32_t xres = 0;
+ uint32_t yres = 0;
+ float xdpi = 0.0f;
+ float ydpi = 0.0f;
+ int panel_type = DISPLAY_PORT_DEFAULT;
+ bool is_yuv = false;
+};
+
+struct DisplayHDRCapabilities {
+ std::vector<int32_t> supported_hdr_types;
+ float max_luminance = 0.0f;
+ float max_avg_luminance = 0.0f;
+ float min_luminance = 0.0f;
+};
+
+struct WriteBackCapabilities {
+ bool isWbUbwcSupported;
+};
+
+//=============================================================================
+// The functions below run in the client pocess and wherever necessary
+// do a binder call to HWC to get/set data.
+
+int isExternalConnected();
+int setSecondayDisplayStatus(int dpy, uint32_t status);
+int configureDynRefeshRate(uint32_t op, uint32_t refreshRate);
+int getConfigCount(int dpy);
+int getActiveConfig(int dpy);
+int setActiveConfig(int dpy, uint32_t config);
+DisplayAttributes getDisplayAttributes(uint32_t configIndex, int dpy);
+int setPanelBrightness(uint32_t level);
+uint32_t getPanelBrightness();
+int minHdcpEncryptionLevelChanged(int dpy, uint32_t min_enc_level);
+int refreshScreen();
+int controlPartialUpdate(int dpy, bool enable);
+int toggleScreenUpdate(uint32_t on);
+int setIdleTimeout(uint32_t value);
+int getHDRCapabilities(int dpy, DisplayHDRCapabilities *caps);
+int setCameraLaunchStatus(uint32_t on);
+bool displayBWTransactionPending();
+int32_t getWriteBackCapabilities( WriteBackCapabilities *caps);
+
+} // namespace display
+
+#endif // __DISPLAY_CONFIG_H__
diff --git a/libdrmutils/Android.mk b/libdrmutils/Android.mk
new file mode 100644
index 0000000..e448d4f
--- /dev/null
+++ b/libdrmutils/Android.mk
@@ -0,0 +1,19 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libdrmutils
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := external/libdrm \
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \
+ $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include/display
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_SHARED_LIBRARIES := libdrm libdl libdisplaydebug
+LOCAL_CFLAGS := -DLOG_TAG=\"DRMUTILS\" -Wall -Werror -fno-operator-names
+LOCAL_CLANG := true
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+LOCAL_SRC_FILES := drm_master.cpp drm_res_mgr.cpp drm_lib_loader.cpp
+LOCAL_COPY_HEADERS_TO := qcom/display
+LOCAL_COPY_HEADERS := drm_master.h drm_res_mgr.h drm_lib_loader.h drm_logger.h drm_interface.h
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/libdrmutils/Makefile.am b/libdrmutils/Makefile.am
new file mode 100644
index 0000000..a04c874
--- /dev/null
+++ b/libdrmutils/Makefile.am
@@ -0,0 +1,17 @@
+HEADER_PATH := ${WORKSPACE}/display/display-hal/libdrmutils
+
+cpp_sources = drm_lib_loader.cpp \
+ drm_master.cpp \
+ drm_res_mgr.cpp
+
+drmutils_h_sources = $(HEADER_PATH)/*.h
+drmutils_includedir = $(includedir)
+drmutils_include_HEADERS = $(drmutils_h_sources)
+
+lib_LTLIBRARIES = libdrmutils.la
+libdrmutils_la_CC = @CC@
+libdrmutils_la_SOURCES = $(cpp_sources)
+libdrmutils_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"DRMUTILS\"
+libdrmutils_la_CPPFLAGS = $(AM_CPPFLAGS)
+libsdmcore_la_LIBADD = -ldrm
+libdrmutils_la_LDFLAGS = -shared -avoid-version
diff --git a/libdrmutils/drm_interface.h b/libdrmutils/drm_interface.h
new file mode 100644
index 0000000..5d27b4e
--- /dev/null
+++ b/libdrmutils/drm_interface.h
@@ -0,0 +1,989 @@
+/*
+* Copyright (c) 2017 - 2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DRM_INTERFACE_H__
+#define __DRM_INTERFACE_H__
+
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
+#include <bitset>
+
+#include "xf86drm.h"
+#include "xf86drmMode.h"
+#include <drm/msm_drm.h>
+#include <drm/msm_drm_pp.h>
+#include <drm/sde_drm.h>
+
+namespace sde_drm {
+
+typedef std::map<std::pair<uint32_t, uint64_t>, float> CompRatioMap;
+
+/*
+ * Drm Atomic Operation Codes
+ */
+enum struct DRMOps {
+ /*
+ * Op: Sets plane source crop
+ * Arg: uint32_t - Plane ID
+ * DRMRect - Source Rectangle
+ */
+ PLANE_SET_SRC_RECT,
+ /*
+ * Op: Sets plane destination rect
+ * Arg: uint32_t - Plane ID
+ * DRMRect - Dst Rectangle
+ */
+ PLANE_SET_DST_RECT,
+ /*
+ * Op: Sets plane exclusion rect
+ * Arg: uint32_t - Plane ID
+ * drm_clip_rect - Exclusion Rectangle
+ */
+ PLANE_SET_EXCL_RECT,
+ /*
+ * Op: Sets plane zorder
+ * Arg: uint32_t - Plane ID
+ * uint32_t - zorder
+ */
+ PLANE_SET_ZORDER,
+ /*
+ * Op: Sets plane rotation flags
+ * Arg: uint32_t - Plane ID
+ * uint32_t - bit mask of rotation flags (See drm_mode.h for enums)
+ */
+ PLANE_SET_ROTATION,
+ /*
+ * Op: Sets plane alpha
+ * Arg: uint32_t - Plane ID
+ * uint32_t - alpha value
+ */
+ PLANE_SET_ALPHA,
+ /*
+ * Op: Sets the blend type
+ * Arg: uint32_t - Plane ID
+ * uint32_t - blend type (see DRMBlendType)
+ */
+ PLANE_SET_BLEND_TYPE,
+ /*
+ * Op: Sets horizontal decimation
+ * Arg: uint32_t - Plane ID
+ * uint32_t - decimation factor
+ */
+ PLANE_SET_H_DECIMATION,
+ /*
+ * Op: Sets vertical decimation
+ * Arg: uint32_t - Plane ID
+ * uint32_t - decimation factor
+ */
+ PLANE_SET_V_DECIMATION,
+ /*
+ * Op: Sets source config flags
+ * Arg: uint32_t - Plane ID
+ * uint32_t - flags to enable or disable a specific op. E.g. deinterlacing
+ */
+ PLANE_SET_SRC_CONFIG,
+ /*
+ * Op: Sets frame buffer ID for plane. Set together with CRTC.
+ * Arg: uint32_t - Plane ID
+ * uint32_t - Framebuffer ID
+ */
+ PLANE_SET_FB_ID,
+ /*
+ * Op: Sets the crtc for this plane. Set together with FB_ID.
+ * Arg: uint32_t - Plane ID
+ * uint32_t - CRTC ID
+ */
+ PLANE_SET_CRTC,
+ /*
+ * Op: Sets acquire fence for this plane's buffer. Set together with FB_ID, CRTC.
+ * Arg: uint32_t - Plane ID
+ * uint32_t - Input fence
+ */
+ PLANE_SET_INPUT_FENCE,
+ /*
+ * Op: Sets scaler config on this plane.
+ * Arg: uint32_t - Plane ID
+ * uint64_t - Address of the scaler config object (version based)
+ */
+ PLANE_SET_SCALER_CONFIG,
+ /*
+ * Op: Sets plane rotation destination rect
+ * Arg: uint32_t - Plane ID
+ * DRMRect - rotator dst Rectangle
+ */
+ PLANE_SET_ROTATION_DST_RECT,
+ /*
+ * Op: Sets FB Secure mode for this plane.
+ * Arg: uint32_t - Plane ID
+ * uint32_t - Value of the FB Secure mode.
+ */
+ PLANE_SET_FB_SECURE_MODE,
+ /*
+ * Op: Sets csc config on this plane.
+ * Arg: uint32_t - Plane ID
+ * uint32_t* - pointer to csc type
+ */
+ PLANE_SET_CSC_CONFIG,
+ /*
+ * Op: Sets multirect mode on this plane.
+ * Arg: uint32_t - Plane ID
+ * uint32_t - multirect mode
+ */
+ PLANE_SET_MULTIRECT_MODE,
+ /*
+ * Op: Sets rotator output frame buffer ID for plane.
+ * Arg: uint32_t - Plane ID
+ * uint32_t - Framebuffer ID
+ */
+ PLANE_SET_ROT_FB_ID,
+ /*
+ * Op: Sets inverse pma mode on this plane.
+ * Arg: uint32_t - Plane ID
+ * uint32_t - enable/disable inverse pma.
+ */
+ PLANE_SET_INVERSE_PMA,
+ /*
+ * Op: Sets csc config on this plane.
+ * Arg: uint32_t - Plane ID
+ * uint64_t - Address of the csc config object(version based)
+ */
+ PLANE_SET_DGM_CSC_CONFIG,
+ /*
+ * Op: Sets SSPP Feature
+ * Arg: uint32_t - Plane ID
+ * DRMPPFeatureInfo * - PP feature data pointer
+ */
+ PLANE_SET_POST_PROC,
+ /*
+ * Op: Activate or deactivate a CRTC
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - 1 to enable, 0 to disable
+ */
+ CRTC_SET_ACTIVE,
+ /*
+ * Op: Sets display mode
+ * Arg: uint32_t - CRTC ID
+ * drmModeModeInfo* - Pointer to display mode
+ */
+ CRTC_SET_MODE,
+ /*
+ * Op: Sets an offset indicating when a release fence should be signalled.
+ * Arg: uint32_t - offset
+ * 0: non-speculative, default
+ * 1: speculative
+ */
+ CRTC_SET_OUTPUT_FENCE_OFFSET,
+ /*
+ * Op: Sets overall SDE core clock
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - core_clk
+ */
+ CRTC_SET_CORE_CLK,
+ /*
+ * Op: Sets MNOC bus average bandwidth
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - core_ab
+ */
+ CRTC_SET_CORE_AB,
+ /*
+ * Op: Sets MNOC bus instantaneous bandwidth
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - core_ib
+ */
+ CRTC_SET_CORE_IB,
+ /*
+ * Op: Sets LLCC Bus average bandwidth
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - llcc_ab
+ */
+ CRTC_SET_LLCC_AB,
+ /*
+ * Op: Sets LLCC Bus instantaneous bandwidth
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - llcc_ib
+ */
+ CRTC_SET_LLCC_IB,
+ /*
+ * Op: Sets DRAM bus average bandwidth
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - dram_ab
+ */
+ CRTC_SET_DRAM_AB,
+ /*
+ * Op: Sets DRAM bus instantaneous bandwidth
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - dram_ib
+ */
+ CRTC_SET_DRAM_IB,
+ /*
+ * Op: Sets Rotator BW for inline rotation
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - rot_bw
+ */
+ CRTC_SET_ROT_PREFILL_BW,
+ /*
+ * Op: Sets rotator clock for inline rotation
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - rot_clk
+ */
+ CRTC_SET_ROT_CLK,
+ /*
+ * Op: Sets destination scalar data
+ * Arg: uint32_t - CRTC ID
+ * uint64_t - Pointer to destination scalar data
+ */
+ CRTC_SET_DEST_SCALER_CONFIG,
+ /*
+ * Op: Returns release fence for this frame. Should be called after Commit() on
+ * DRMAtomicReqInterface.
+ * Arg: uint32_t - CRTC ID
+ * int * - Pointer to an integer that will hold the returned fence
+ */
+ CRTC_GET_RELEASE_FENCE,
+ /*
+ * Op: Sets PP feature
+ * Arg: uint32_t - CRTC ID
+ * DRMPPFeatureInfo * - PP feature data pointer
+ */
+ CRTC_SET_POST_PROC,
+ /*
+ * Op: Sets CRTC ROIs.
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - number of ROIs
+ * DRMRect * - Array of CRTC ROIs
+ */
+ CRTC_SET_ROI,
+ /*
+ * Op: Sets Security level for CRTC.
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - Security level
+ */
+ CRTC_SET_SECURITY_LEVEL,
+ /*
+ * Op: sets solid fill stages
+ * Arg: uint32_t - CRTC ID
+ * Vector of DRMSolidfillStage
+ */
+ CRTC_SET_SOLIDFILL_STAGES,
+ /*
+ * Op: Sets idle timeout.
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - idle timeout in ms
+ */
+ CRTC_SET_IDLE_TIMEOUT,
+ /*
+ * Op: Sets Capture mode for Concurrent Writeback feature.
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - Capture mode
+ */
+ CRTC_SET_CAPTURE_MODE,
+ /*
+ * Op: Sets Idle PC state for CRTC.
+ * Arg: uint32_t - CRTC ID
+ * uint32_t - idle pc state
+ */
+ CRTC_SET_IDLE_PC_STATE,
+ /*
+ * Op: Returns retire fence for this commit. Should be called after Commit() on
+ * DRMAtomicReqInterface.
+ * Arg: uint32_t - Connector ID
+ * int * - Pointer to an integer that will hold the returned fence
+ */
+ CONNECTOR_GET_RETIRE_FENCE,
+ /*
+ * Op: Sets writeback connector destination rect
+ * Arg: uint32_t - Connector ID
+ * DRMRect - Dst Rectangle
+ */
+ CONNECTOR_SET_OUTPUT_RECT,
+ /*
+ * Op: Sets frame buffer ID for writeback connector.
+ * Arg: uint32_t - Connector ID
+ * uint32_t - Framebuffer ID
+ */
+ CONNECTOR_SET_OUTPUT_FB_ID,
+ /*
+ * Op: Sets power mode for connector.
+ * Arg: uint32_t - Connector ID
+ * uint32_t - Power Mode
+ */
+ CONNECTOR_SET_POWER_MODE,
+ /*
+ * Op: Sets panel ROIs.
+ * Arg: uint32_t - Connector ID
+ * uint32_t - number of ROIs
+ * DRMRect * - Array of Connector ROIs
+ */
+ CONNECTOR_SET_ROI,
+ /*
+ * Op: Sets the connector to autorefresh mode.
+ * Arg: uint32_t - Connector ID
+ * uint32_t - Enable-1, Disable-0
+ */
+ CONNECTOR_SET_AUTOREFRESH,
+ /*
+ * Op: Set FB secure mode for Writeback connector.
+ * Arg: uint32_t - Connector ID
+ * uint32_t - FB Secure mode
+ */
+ CONNECTOR_SET_FB_SECURE_MODE,
+ /*
+ * Op: Sets a crtc id to this connector
+ * Arg: uint32_t - Connector ID
+ * uint32_t - CRTC ID
+ */
+ CONNECTOR_SET_CRTC,
+ /*
+ * Op: Sets PP feature
+ * Arg: uint32_t - Connector ID
+ * DRMPPFeatureInfo * - PP feature data pointer
+ */
+ CONNECTOR_SET_POST_PROC,
+ /*
+ * Op: Sets connector hdr metadata
+ * Arg: uint32_t - Connector ID
+ * drm_msm_ext_hdr_metadata - hdr_metadata
+ */
+ CONNECTOR_SET_HDR_METADATA,
+ /*
+ * Op: Cache Dpps features.
+ * Arg: uint32_t - Object ID
+ uint32_t - Feature ID
+ * uint64_t - Pointer to feature config data
+ */
+ DPPS_CACHE_FEATURE,
+ /*
+ * Op: Commit Dpps features.
+ * Arg: drmModeAtomicReq - Atomic request
+ */
+ DPPS_COMMIT_FEATURE,
+ /*
+ * Op: Sets qsync mode on connector
+ * Arg: uint32_t - Connector ID
+ * uint32_t - qsync mode
+ */
+ CONNECTOR_SET_QSYNC_MODE,
+ /*
+ * Op: Sets topology control on this connector
+ * Arg: uint32_t - Connector ID
+ * uint32_t - Topology control bit-mask
+ */
+ CONNECTOR_SET_TOPOLOGY_CONTROL,
+};
+
+enum struct DRMRotation {
+ FLIP_H = 0x1,
+ FLIP_V = 0x2,
+ ROT_180 = FLIP_H | FLIP_V,
+ ROT_90 = 0x4,
+};
+
+enum struct DRMPowerMode {
+ ON,
+ DOZE,
+ DOZE_SUSPEND,
+ OFF,
+};
+
+enum struct DRMBlendType {
+ UNDEFINED = 0,
+ OPAQUE = 1,
+ PREMULTIPLIED = 2,
+ COVERAGE = 3,
+};
+
+enum struct DRMSrcConfig {
+ DEINTERLACE = 0,
+};
+
+enum struct DRMIdlePCState {
+ NONE,
+ ENABLE,
+ DISABLE,
+};
+
+
+/* Display type to identify a suitable connector */
+enum struct DRMDisplayType {
+ PERIPHERAL,
+ TV,
+ VIRTUAL,
+};
+
+struct DRMRect {
+ uint32_t left; // Left-most pixel coordinate.
+ uint32_t top; // Top-most pixel coordinate.
+ uint32_t right; // Right-most pixel coordinate.
+ uint32_t bottom; // Bottom-most pixel coordinate.
+};
+
+//------------------------------------------------------------------------
+// DRM Info Query Types
+//------------------------------------------------------------------------
+
+enum struct QSEEDVersion {
+ V1,
+ V2,
+ V3,
+ V3LITE,
+};
+
+/* QSEED3 Step version */
+enum struct QSEEDStepVersion {
+ V2,
+ V3,
+ V4,
+ V3LITE_V4,
+ V3LITE_V5,
+};
+
+enum struct SmartDMARevision {
+ V1,
+ V2,
+ V2p5
+};
+
+/* Inline Rotation version */
+enum struct InlineRotationVersion {
+ UNKNOWN,
+ V1,
+ V1p1, // Rotator FB ID needs to be set
+};
+
+/* Per CRTC Resource Info*/
+struct DRMCrtcInfo {
+ bool has_src_split;
+ bool has_hdr;
+ uint32_t max_blend_stages;
+ uint32_t max_solidfill_stages;
+ QSEEDVersion qseed_version;
+ SmartDMARevision smart_dma_rev;
+ float ib_fudge_factor;
+ float clk_fudge_factor;
+ uint32_t dest_scale_prefill_lines;
+ uint32_t undersized_prefill_lines;
+ uint32_t macrotile_prefill_lines;
+ uint32_t nv12_prefill_lines;
+ uint32_t linear_prefill_lines;
+ uint32_t downscale_prefill_lines;
+ uint32_t extra_prefill_lines;
+ uint32_t amortized_threshold;
+ uint64_t max_bandwidth_low;
+ uint64_t max_bandwidth_high;
+ uint32_t max_sde_clk;
+ CompRatioMap comp_ratio_rt_map;
+ CompRatioMap comp_ratio_nrt_map;
+ uint32_t hw_version;
+ uint32_t dest_scaler_count = 0;
+ uint32_t max_dest_scaler_input_width = 0;
+ uint32_t max_dest_scaler_output_width = 0;
+ uint32_t max_dest_scale_up = 1;
+ uint32_t min_prefill_lines = 0;
+ int secure_disp_blend_stage = -1;
+ bool concurrent_writeback = false;
+ uint32_t num_mnocports = 0;
+ uint32_t mnoc_bus_width = 0;
+ bool use_baselayer_for_stage = false;
+ uint32_t vig_limit_index = 0;
+ uint32_t dma_limit_index = 0;
+ uint32_t scaling_limit_index = 0;
+ uint32_t rotation_limit_index = 0;
+ uint32_t line_width_constraints_count = 0;
+ std::vector< std::pair <uint32_t, uint32_t> > line_width_limits;
+ float vbif_cmd_ff = 0.0f;
+};
+
+enum struct DRMPlaneType {
+ // Has CSC and scaling capability
+ VIG = 0,
+ // Has scaling capability but no CSC
+ RGB,
+ // No scaling support
+ DMA,
+ // Supports a small dimension and doesn't use a CRTC stage
+ CURSOR,
+ MAX,
+};
+
+enum struct DRMTonemapLutType {
+ DMA_1D_GC,
+ DMA_1D_IGC,
+ VIG_1D_IGC,
+ VIG_3D_GAMUT,
+};
+
+struct DRMPlaneTypeInfo {
+ DRMPlaneType type;
+ uint32_t master_plane_id;
+ // FourCC format enum and modifier
+ std::vector<std::pair<uint32_t, uint64_t>> formats_supported;
+ uint32_t max_linewidth;
+ uint32_t max_scaler_linewidth;
+ uint32_t max_upscale;
+ uint32_t max_downscale;
+ uint32_t max_horizontal_deci;
+ uint32_t max_vertical_deci;
+ uint64_t max_pipe_bandwidth;
+ uint32_t cache_size; // cache size in bytes for inline rotation support.
+ bool has_excl_rect = false;
+ QSEEDStepVersion qseed3_version;
+ bool multirect_prop_present = false;
+ InlineRotationVersion inrot_version; // inline rotation version
+ bool inverse_pma = false;
+ uint32_t dgm_csc_version = 0; // csc used with DMA
+ std::map<DRMTonemapLutType, uint32_t> tonemap_lut_version_map = {};
+ bool block_sec_ui = false;
+ // Allow all planes to be usable on all displays by default
+ std::bitset<32> hw_block_mask = std::bitset<32>().set();
+};
+
+// All DRM Planes as map<Plane_id , plane_type_info> listed from highest to lowest priority
+typedef std::vector<std::pair<uint32_t, DRMPlaneTypeInfo>> DRMPlanesInfo;
+
+enum struct DRMTopology {
+ UNKNOWN, // To be compat with driver defs in sde_rm.h
+ SINGLE_LM,
+ SINGLE_LM_DSC,
+ DUAL_LM,
+ DUAL_LM_DSC,
+ DUAL_LM_MERGE,
+ DUAL_LM_MERGE_DSC,
+ DUAL_LM_DSCMERGE,
+ PPSPLIT,
+};
+
+enum struct DRMPanelMode {
+ VIDEO,
+ COMMAND,
+};
+
+/* Per mode info */
+struct DRMModeInfo {
+ drmModeModeInfo mode;
+ DRMTopology topology;
+ // Valid only if mode is command
+ int num_roi;
+ int xstart;
+ int ystart;
+ int walign;
+ int halign;
+ int wmin;
+ int hmin;
+ bool roi_merge;
+ uint64_t bit_clk_rate;
+ uint32_t transfer_time_us;
+};
+
+/* Per Connector Info*/
+struct DRMConnectorInfo {
+ uint32_t mmWidth;
+ uint32_t mmHeight;
+ uint32_t type;
+ uint32_t type_id;
+ std::vector<DRMModeInfo> modes;
+ std::string panel_name;
+ DRMPanelMode panel_mode;
+ bool is_primary;
+ // Valid only if DRMPanelMode is VIDEO
+ bool dynamic_fps;
+ // FourCC format enum and modifier
+ std::vector<std::pair<uint32_t, uint64_t>> formats_supported;
+ // Valid only if type is DRM_MODE_CONNECTOR_VIRTUAL
+ uint32_t max_linewidth;
+ DRMRotation panel_orientation;
+ drm_panel_hdr_properties panel_hdr_prop;
+ drm_msm_ext_hdr_properties ext_hdr_prop;
+ bool qsync_support;
+ // Connection status of this connector
+ bool is_connected;
+ bool is_wb_ubwc_supported;
+ uint32_t topology_control;
+ bool dyn_bitclk_support;
+ std::vector<uint8_t> edid;
+};
+
+// All DRM Connectors as map<Connector_id , connector_info>
+typedef std::map<uint32_t, DRMConnectorInfo> DRMConnectorsInfo;
+
+/* Per Encoder Info */
+struct DRMEncoderInfo {
+ uint32_t type;
+};
+
+// All DRM Encoders as map<Encoder_id , encoder_info>
+typedef std::map<uint32_t, DRMEncoderInfo> DRMEncodersInfo;
+
+/* Identifier token for a display */
+struct DRMDisplayToken {
+ uint32_t conn_id;
+ uint32_t crtc_id;
+ uint32_t crtc_index;
+ uint32_t encoder_id;
+ uint8_t hw_port;
+};
+
+enum DRMPPFeatureID {
+ kFeaturePcc,
+ kFeatureIgc,
+ kFeaturePgc,
+ kFeatureMixerGc,
+ kFeaturePaV2,
+ kFeatureDither,
+ kFeatureGamut,
+ kFeaturePADither,
+ kFeaturePAHsic,
+ kFeaturePASixZone,
+ kFeaturePAMemColSkin,
+ kFeaturePAMemColSky,
+ kFeaturePAMemColFoliage,
+ kFeaturePAMemColProt,
+ kFeatureDgmIgc,
+ kFeatureDgmGc,
+ kFeatureVigIgc,
+ kFeatureVigGamut,
+ kPPFeaturesMax,
+};
+
+enum DRMPPPropType {
+ kPropEnum,
+ kPropRange,
+ kPropBlob,
+ kPropTypeMax,
+};
+
+struct DRMPPFeatureInfo {
+ DRMPPFeatureID id;
+ DRMPPPropType type;
+ uint32_t version;
+ uint32_t payload_size;
+ void *payload;
+ uint32_t object_type;
+};
+
+enum DRMDPPSFeatureID {
+ // Ad4 properties
+ kFeatureAd4Mode,
+ kFeatureAd4Init,
+ kFeatureAd4Cfg,
+ kFeatureAd4Input,
+ kFeatureAd4Roi,
+ kFeatureAd4Backlight,
+ kFeatureAd4Assertiveness,
+ kFeatureAd4ManualStrength,
+ // ABA properties
+ kFeatureAbaHistCtrl,
+ kFeatureAbaHistIRQ,
+ kFeatureAbaLut,
+ // BL scale properties
+ kFeatureAd4BlScale,
+ kFeatureBacklightScale,
+ // Events
+ kFeaturePowerEvent,
+ kFeatureAbaHistEvent,
+ kFeatureBackLightEvent,
+ kFeatureAdAttBlEvent,
+ // Insert features above
+ kDppsFeaturesMax,
+};
+
+struct DppsFeaturePayload {
+ uint32_t object_type;
+ uint32_t feature_id;
+ uint64_t value;
+};
+
+struct DRMDppsFeatureInfo {
+ DRMDPPSFeatureID id;
+ uint32_t version;
+};
+
+enum AD4Modes {
+ kAd4Off,
+ kAd4AutoStrength,
+ kAd4Calibration,
+ kAd4Manual,
+ kAd4ModeMax,
+};
+
+enum HistModes {
+ kHistDisabled,
+ kHistEnabled,
+};
+
+struct DRMDppsEventInfo {
+ uint32_t object_type;
+ uint32_t event_type;
+ int drm_fd;
+ bool enable;
+};
+
+enum DRMCscType {
+ kCscYuv2Rgb601L,
+ kCscYuv2Rgb601FR,
+ kCscYuv2Rgb709L,
+ kCscYuv2Rgb2020L,
+ kCscYuv2Rgb2020FR,
+ kCscTypeMax,
+};
+
+struct DRMScalerLUTInfo {
+ uint32_t dir_lut_size = 0;
+ uint32_t cir_lut_size = 0;
+ uint32_t sep_lut_size = 0;
+ uint64_t dir_lut = 0;
+ uint64_t cir_lut = 0;
+ uint64_t sep_lut = 0;
+};
+
+enum struct DRMSecureMode {
+ NON_SECURE,
+ SECURE,
+ NON_SECURE_DIR_TRANSLATION,
+ SECURE_DIR_TRANSLATION,
+};
+
+enum struct DRMSecurityLevel {
+ SECURE_NON_SECURE,
+ SECURE_ONLY,
+};
+
+enum struct DRMMultiRectMode {
+ NONE = 0,
+ PARALLEL = 1,
+ SERIAL = 2,
+};
+
+enum struct DRMCWbCaptureMode {
+ MIXER_OUT = 0,
+ DSPP_OUT = 1,
+};
+
+enum struct DRMQsyncMode {
+ NONE = 0,
+ CONTINUOUS,
+ ONESHOT,
+};
+
+enum struct DRMTopologyControl {
+ NONE = 0,
+ RESERVE_LOCK = 1 << 0,
+ RESERVE_CLEAR = 1 << 1,
+ DSPP = 1 << 2,
+ DEST_SCALER = 1 << 3,
+};
+
+struct DRMSolidfillStage {
+ DRMRect bounding_rect {};
+ bool is_exclusion_rect = false;
+ uint32_t color = 0xff000000; // in 8bit argb
+ uint32_t red = 0;
+ uint32_t blue = 0;
+ uint32_t green = 0;
+ uint32_t alpha = 0xff;
+ uint32_t color_bit_depth = 0;
+ uint32_t z_order = 0;
+ uint32_t plane_alpha = 0xff;
+};
+
+/* DRM Atomic Request Property Set.
+ *
+ * Helper class to create and populate atomic properties of DRM components
+ * when rendered in DRM atomic mode */
+class DRMAtomicReqInterface {
+ public:
+ virtual ~DRMAtomicReqInterface() {}
+ /* Perform request operation.
+ *
+ * [input]: opcode: operation code from DRMOps list.
+ * obj_id: Relevant crtc, connector, plane id
+ * var_arg: arguments for DRMOps's can differ in number and
+ * data type. Refer above DRMOps to details.
+ * [return]: Error code if the API fails, 0 on success.
+ */
+ virtual int Perform(DRMOps opcode, uint32_t obj_id, ...) = 0;
+
+ /*
+ * Commit the params set via Perform(). Also resets the properties after commit. Needs to be
+ * called every frame.
+ * [input]: synchronous: Determines if the call should block until a h/w flip
+ * [input]: retain_planes: Retains already staged planes. Useful when not explicitly programming
+ * planes but still need the previously staged ones to not be unstaged
+ * [return]: Error code if the API fails, 0 on success.
+ */
+ virtual int Commit(bool synchronous, bool retain_planes) = 0;
+
+ /*
+ * Validate the params set via Perform().
+ * [return]: Error code if the API fails, 0 on success.
+ */
+ virtual int Validate() = 0;
+};
+
+class DRMManagerInterface;
+
+/* Populates a singleton instance of DRMManager */
+typedef int (*GetDRMManager)(int fd, DRMManagerInterface **intf);
+
+/* Destroy DRMManager instance */
+typedef int (*DestroyDRMManager)();
+
+/*
+ * DRM Manager Interface - Any class which plans to implement helper function for vendor
+ * specific DRM driver implementation must implement the below interface routines to work
+ * with SDM.
+ */
+
+class DRMManagerInterface {
+ public:
+ virtual ~DRMManagerInterface() {}
+
+ /*
+ * Since SDM completely manages the planes. GetPlanesInfo will provide all
+ * the plane information.
+ * [output]: DRMPlanesInfo: Resource Info for planes.
+ */
+ virtual void GetPlanesInfo(DRMPlanesInfo *info) = 0;
+
+ /*
+ * Will provide all the information of a selected crtc.
+ * [input]: Use crtc id 0 to obtain system wide info
+ * [output]: DRMCrtcInfo: Resource Info for the given CRTC id.
+ * [return]: 0 on success, a negative error value otherwise.
+ */
+ virtual int GetCrtcInfo(uint32_t crtc_id, DRMCrtcInfo *info) = 0;
+
+ /*
+ * Will provide all the information of a selected connector.
+ * [output]: DRMConnectorInfo: Resource Info for the given connector id
+ * [return]: 0 on success, a negative error value otherwise.
+ */
+ virtual int GetConnectorInfo(uint32_t conn_id, DRMConnectorInfo *info) = 0;
+
+ /*
+ * Provides information on all connectors.
+ * [output]: DRMConnectorsInfo: Resource info for connectors.
+ * [return]: 0 on success, a negative error value otherwise.
+ */
+ virtual int GetConnectorsInfo(DRMConnectorsInfo *info) = 0;
+
+ /*
+ * Provides information on a selected encoder.
+ * [output]: DRMEncoderInfo: Resource info for the given encoder id.
+ * [return]: 0 on success, a negative error value otherwise.
+ */
+ virtual int GetEncoderInfo(uint32_t encoder_id, DRMEncoderInfo *info) = 0;
+
+ /*
+ * Provides information on all encoders.
+ * [output]: DRMEncodersInfo: Resource info for encoders.
+ * [return]: 0 on success, a negative error value otherwise.
+ */
+ virtual int GetEncodersInfo(DRMEncodersInfo *info) = 0;
+
+ /*
+ * Will query post propcessing feature info of a CRTC.
+ * [output]: DRMPPFeatureInfo: CRTC post processing feature info
+ */
+ virtual void GetCrtcPPInfo(uint32_t crtc_id, DRMPPFeatureInfo *info) = 0;
+
+ /*
+ * Register a logical display to receive a token.
+ * Each display pipeline in DRM is identified by its CRTC and Connector(s). On display connect
+ * (bootup or hotplug), clients should invoke this interface to establish the pipeline for the
+ * display and should get a DisplayToken populated with crtc, encoder and connnector(s) id's. Here
+ * onwards, Client should use this token to represent the display for any Perform operations if
+ * needed.
+ *
+ * [input]: disp_type - Peripheral / TV / Virtual
+ * [output]: DRMDisplayToken - CRTC and Connector IDs for the display.
+ * [return]: 0 on success, a negative error value otherwise.
+ */
+ virtual int RegisterDisplay(DRMDisplayType disp_type, DRMDisplayToken *tok) = 0;
+
+ /*
+ * Register a logical display to receive a token.
+ * Each display pipeline in DRM is identified by its CRTC and Connector(s). On display connect
+ * (bootup or hotplug), clients should invoke this interface to establish the pipeline for the
+ * display and should get a DisplayToken populated with crtc, encoder and connnector(s) id's. Here
+ * onwards, Client should use this token to represent the display for any Perform operations if
+ * needed.
+ *
+ * [input]: display_id - Connector ID
+ * [output]: DRMDisplayToken - CRTC and Connector id's for the display.
+ * [return]: 0 on success, a negative error value otherwise.
+ */
+ virtual int RegisterDisplay(int32_t display_id, DRMDisplayToken *token) = 0;
+
+ /* Client should invoke this interface on display disconnect.
+ * [input]: DRMDisplayToken - identifier for the display.
+ */
+ virtual void UnregisterDisplay(DRMDisplayToken *token) = 0;
+
+ /*
+ * Creates and returns an instance of DRMAtomicReqInterface corresponding to a display token
+ * returned as part of RegisterDisplay API. Needs to be called per display.
+ * [input]: DRMDisplayToken that identifies a display pipeline
+ * [output]: Pointer to an instance of DRMAtomicReqInterface.
+ * [return]: Error code if the API fails, 0 on success.
+ */
+ virtual int CreateAtomicReq(const DRMDisplayToken &token, DRMAtomicReqInterface **intf) = 0;
+
+ /*
+ * Destroys the instance of DRMAtomicReqInterface
+ * [input]: Pointer to a DRMAtomicReqInterface
+ * [return]: Error code if the API fails, 0 on success.
+ */
+ virtual int DestroyAtomicReq(DRMAtomicReqInterface *intf) = 0;
+
+ /*
+ * Sets the global scaler LUT
+ * [input]: LUT Info
+ * [return]: Error code if the API fails, 0 on success.
+ */
+ virtual int SetScalerLUT(const DRMScalerLUTInfo &lut_info) = 0;
+
+ /*
+ * Unsets the global scaler LUT
+ * [input]: None
+ * [return]: Error code if the API fails, 0 on success.
+ */
+ virtual int UnsetScalerLUT() = 0;
+
+ /*
+ * Get the DPPS feature info
+ * [input]: Dpps feature id, info->id
+ * [output]: Dpps feature version, info->version
+ */
+ virtual void GetDppsFeatureInfo(DRMDppsFeatureInfo *info) = 0;
+};
+
+} // namespace sde_drm
+#endif // __DRM_INTERFACE_H__
diff --git a/libdrmutils/drm_lib_loader.cpp b/libdrmutils/drm_lib_loader.cpp
new file mode 100644
index 0000000..83c9f1b
--- /dev/null
+++ b/libdrmutils/drm_lib_loader.cpp
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <dlfcn.h>
+
+#include "drm_lib_loader.h"
+
+#define __CLASS__ "DRMLibLoader"
+
+using std::mutex;
+using std::lock_guard;
+
+namespace drm_utils {
+
+DRMLibLoader *DRMLibLoader::s_instance = nullptr;
+mutex DRMLibLoader::s_lock;
+
+DRMLibLoader *DRMLibLoader::GetInstance() {
+ lock_guard<mutex> obj(s_lock);
+
+ if (!s_instance) {
+ s_instance = new DRMLibLoader();
+ }
+
+ return s_instance;
+}
+
+void DRMLibLoader::Destroy() {
+ lock_guard<mutex> obj(s_lock);
+ if (s_instance) {
+ delete s_instance;
+ s_instance = nullptr;
+ }
+}
+
+DRMLibLoader::DRMLibLoader() {
+ if (Open("libsdedrm.so")) {
+ if (Sym("GetDRMManager", reinterpret_cast<void **>(&func_get_drm_manager_)) &&
+ Sym("DestroyDRMManager", reinterpret_cast<void **>(&func_destroy_drm_manager_))) {
+ is_loaded_ = true;
+ }
+ }
+}
+
+DRMLibLoader::~DRMLibLoader() {
+ if (lib_) {
+ ::dlclose(lib_);
+ lib_ = nullptr;
+ }
+}
+
+bool DRMLibLoader::Open(const char *lib_name) {
+ lib_ = ::dlopen(lib_name, RTLD_NOW);
+
+ return (lib_ != nullptr);
+}
+
+bool DRMLibLoader::Sym(const char *func_name, void **func_ptr) {
+ if (lib_) {
+ *func_ptr = ::dlsym(lib_, func_name);
+ }
+
+ return (*func_ptr != nullptr);
+}
+
+} // namespace drm_utils
diff --git a/libdrmutils/drm_lib_loader.h b/libdrmutils/drm_lib_loader.h
new file mode 100644
index 0000000..d132d69
--- /dev/null
+++ b/libdrmutils/drm_lib_loader.h
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DRM_LIB_LOADER_H__
+#define __DRM_LIB_LOADER_H__
+
+#include <drm_interface.h>
+#include <mutex>
+
+namespace drm_utils {
+
+class DRMLibLoader {
+ public:
+ ~DRMLibLoader();
+ bool IsLoaded() { return is_loaded_; }
+ sde_drm::GetDRMManager FuncGetDRMManager() { return func_get_drm_manager_; }
+ sde_drm::DestroyDRMManager FuncDestroyDRMManager() { return func_destroy_drm_manager_; }
+
+ static DRMLibLoader *GetInstance();
+ static void Destroy();
+
+ private:
+ DRMLibLoader();
+ bool Open(const char *lib_name);
+ bool Sym(const char *func_name, void **func_ptr);
+
+ void *lib_ = {};
+ sde_drm::GetDRMManager func_get_drm_manager_ = {};
+ sde_drm::DestroyDRMManager func_destroy_drm_manager_ = {};
+ bool is_loaded_ = false;
+
+ static DRMLibLoader *s_instance; // Singleton instance
+ static std::mutex s_lock;
+};
+
+} // namespace drm_utils
+
+#endif // __DRM_LIB_LOADER_H__
diff --git a/libdrmutils/drm_logger.h b/libdrmutils/drm_logger.h
new file mode 100644
index 0000000..7f81d88
--- /dev/null
+++ b/libdrmutils/drm_logger.h
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2017 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DRM_LOGGER_H__
+#define __DRM_LOGGER_H__
+
+#include <debug_handler.h>
+#include <utility>
+
+namespace drm_utils {
+
+#define DRM_LOG_TAG 4 // = kTagRotator
+
+#define DRM_LOGE(format, ...) DLOGE(format, ##__VA_ARGS__)
+#define DRM_LOGW(format, ...) DLOGW_IF(DRM_LOG_TAG, format, ##__VA_ARGS__)
+#define DRM_LOGI(format, ...) DLOGI_IF(DRM_LOG_TAG, format, ##__VA_ARGS__)
+#define DRM_LOGD(format, ...) DLOGD_IF(DRM_LOG_TAG, format, ##__VA_ARGS__)
+#define DRM_LOGV(format, ...) DLOGV_IF(DRM_LOG_TAG, format, ##__VA_ARGS__)
+
+} // namespace drm_utils
+
+#endif // __DRM_LOGGER_H__
diff --git a/libdrmutils/drm_master.cpp b/libdrmutils/drm_master.cpp
new file mode 100755
index 0000000..3a8516d
--- /dev/null
+++ b/libdrmutils/drm_master.cpp
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2017 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+#include <drm/sde_drm.h>
+
+// Intentionally included after xf86 headers so that they in-turn include libdrm version of drm.h
+// that doesn't use keyword "virtual" for a variable name. Not doing so leads to the kernel version
+// of drm.h being included causing compilation to fail
+#include <drm/msm_drm.h>
+#include <algorithm>
+#include <iterator>
+
+#include "drm_master.h"
+
+#define __CLASS__ "DRMMaster"
+
+using std::mutex;
+using std::lock_guard;
+using std::begin;
+using std::copy;
+using std::end;
+using std::fill;
+
+namespace drm_utils {
+
+DRMMaster *DRMMaster::s_instance = nullptr;
+mutex DRMMaster::s_lock;
+
+int DRMMaster::GetInstance(DRMMaster **master) {
+ lock_guard<mutex> obj(s_lock);
+
+ if (!s_instance) {
+ s_instance = new DRMMaster();
+ if (s_instance->Init() < 0) {
+ delete s_instance;
+ s_instance = nullptr;
+ return -ENODEV;
+ }
+ }
+
+ *master = s_instance;
+ return 0;
+}
+
+void DRMMaster::DestroyInstance() {
+ lock_guard<mutex> obj(s_lock);
+ delete s_instance;
+ s_instance = nullptr;
+}
+
+int DRMMaster::Init() {
+ dev_fd_ = drmOpen("msm_drm", nullptr);
+ if (dev_fd_ < 0) {
+ DRM_LOGE("drmOpen failed with error %d", dev_fd_);
+ return -ENODEV;
+ }
+
+ return 0;
+}
+
+DRMMaster::~DRMMaster() {
+ drmClose(dev_fd_);
+ dev_fd_ = -1;
+}
+
+int DRMMaster::CreateFbId(const DRMBuffer &drm_buffer, uint32_t *fb_id) {
+ uint32_t gem_handle = 0;
+ int ret = drmPrimeFDToHandle(dev_fd_, drm_buffer.fd, &gem_handle);
+ if (ret) {
+ DRM_LOGE("drmPrimeFDToHandle failed with error %d", ret);
+ return ret;
+ }
+
+ struct drm_mode_fb_cmd2 cmd2 {};
+ cmd2.width = drm_buffer.width;
+ cmd2.height = drm_buffer.height;
+ cmd2.pixel_format = drm_buffer.drm_format;
+ cmd2.flags = DRM_MODE_FB_MODIFIERS;
+ fill(begin(cmd2.handles), begin(cmd2.handles) + drm_buffer.num_planes, gem_handle);
+ copy(begin(drm_buffer.stride), end(drm_buffer.stride), begin(cmd2.pitches));
+ copy(begin(drm_buffer.offset), end(drm_buffer.offset), begin(cmd2.offsets));
+ fill(begin(cmd2.modifier), begin(cmd2.modifier) + drm_buffer.num_planes,
+ drm_buffer.drm_format_modifier);
+
+ if ((ret = drmIoctl(dev_fd_, DRM_IOCTL_MODE_ADDFB2, &cmd2))) {
+ DRM_LOGE("DRM_IOCTL_MODE_ADDFB2 failed with error %d", ret);
+ } else {
+ *fb_id = cmd2.fb_id;
+ }
+
+ struct drm_gem_close gem_close = {};
+ gem_close.handle = gem_handle;
+ int ret1 = drmIoctl(dev_fd_, DRM_IOCTL_GEM_CLOSE, &gem_close);
+ if (ret1) {
+ DRM_LOGE("drmIoctl::DRM_IOCTL_GEM_CLOSE failed with error %d", ret1);
+ return ret1;
+ }
+
+ return ret;
+}
+
+int DRMMaster::RemoveFbId(uint32_t fb_id) {
+ int ret = 0;
+#ifdef DRM_IOCTL_MSM_RMFB2
+ ret = drmIoctl(dev_fd_, DRM_IOCTL_MSM_RMFB2, &fb_id);
+ if (ret) {
+ DRM_LOGE("drmIoctl::DRM_IOCTL_MSM_RMFB2 failed for fb_id %d with error %d", fb_id, errno);
+ }
+#else
+ ret = drmModeRmFB(dev_fd_, fb_id);
+ if (ret) {
+ DRM_LOGE("drmModeRmFB failed for fb_id %d with error %d", fb_id, ret);
+ }
+#endif
+ return ret;
+}
+
+bool DRMMaster::IsRmFbRefCounted() {
+#ifdef DRM_IOCTL_MSM_RMFB2
+ return true;
+#endif
+ return false;
+}
+
+} // namespace drm_utils
diff --git a/libdrmutils/drm_master.h b/libdrmutils/drm_master.h
new file mode 100644
index 0000000..18f51eb
--- /dev/null
+++ b/libdrmutils/drm_master.h
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DRM_MASTER_H__
+#define __DRM_MASTER_H__
+
+#include <mutex>
+
+#include "drm_logger.h"
+
+namespace drm_utils {
+
+struct DRMBuffer {
+ int fd = -1;
+ uint32_t width = 0;
+ uint32_t height = 0;
+ uint32_t drm_format = 0;
+ uint64_t drm_format_modifier = 0;
+ uint32_t stride[4] = {};
+ uint32_t offset[4] = {};
+ uint32_t num_planes = 1;
+};
+
+class DRMMaster {
+ public:
+ ~DRMMaster();
+ /* Converts from ION fd --> Prime Handle --> FB_ID.
+ * Input:
+ * drm_buffer: A DRMBuffer obj that packages description of buffer
+ * Output:
+ * fb_id: Pointer to store DRM framebuffer id into
+ * Returns:
+ * ioctl error code
+ */
+ int CreateFbId(const DRMBuffer &drm_buffer, uint32_t *fb_id);
+ /* Removes the fb_id from DRM
+ * Input:
+ * fb_id: DRM FB to be removed
+ * Returns:
+ * ioctl error code
+ */
+ int RemoveFbId(uint32_t fb_id);
+ /* Poplulates master DRM fd
+ * Input:
+ * fd: Pointer to store master fd into
+ */
+ void GetHandle(int *fd) { *fd = dev_fd_; }
+ /* Returns true if the ref counted version of rmfb is being used */
+ bool IsRmFbRefCounted();
+
+ /* Creates an instance of DRMMaster if it doesn't exist and initializes it. Threadsafe.
+ * Input:
+ * master: Pointer to store a pointer to the instance
+ * Returns:
+ * -ENODEV if device cannot be opened or initilization fails
+ */
+ static int GetInstance(DRMMaster **master);
+ static void DestroyInstance();
+
+ private:
+ DRMMaster() {}
+ int Init();
+
+ int dev_fd_ = -1; // Master fd for DRM
+ static DRMMaster *s_instance; // Singleton instance
+ static std::mutex s_lock;
+};
+
+} // namespace drm_utils
+
+#endif // __DRM_MASTER_H__
diff --git a/libdrmutils/drm_res_mgr.cpp b/libdrmutils/drm_res_mgr.cpp
new file mode 100644
index 0000000..1d29495
--- /dev/null
+++ b/libdrmutils/drm_res_mgr.cpp
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <errno.h>
+
+#include "drm_master.h"
+#include "drm_res_mgr.h"
+
+#define DEBUG 0
+#define __CLASS__ "DRMResMgr"
+
+using std::mutex;
+using std::lock_guard;
+
+namespace drm_utils {
+
+DRMResMgr *DRMResMgr::s_instance = nullptr;
+mutex DRMResMgr::s_lock;
+
+static bool GetConnector(int dev_fd, drmModeRes *res, drmModeConnector **connector) {
+ for (auto i = 0; i < res->count_connectors; i++) {
+ drmModeConnector *conn = drmModeGetConnector(dev_fd, res->connectors[i]);
+ if (conn && conn->connector_type == DRM_MODE_CONNECTOR_DSI && conn->count_modes &&
+ conn->connection == DRM_MODE_CONNECTED) {
+ *connector = conn;
+ DRM_LOGI("Found connector %d", conn->connector_id);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static bool GetEncoder(int dev_fd, drmModeConnector *conn, drmModeEncoder **encoder) {
+ for (auto i = 0; i < conn->count_encoders; i++) {
+ drmModeEncoder *enc = drmModeGetEncoder(dev_fd, conn->encoders[i]);
+ if (enc && enc->encoder_type == DRM_MODE_ENCODER_DSI) {
+ *encoder = enc;
+ DRM_LOGI("Found encoder %d", enc->encoder_id);
+ return true;
+ }
+ }
+ return false;
+}
+
+static bool GetCrtc(int dev_fd, drmModeRes *res, drmModeEncoder *enc, drmModeCrtc **crtc) {
+ for (auto i = 0; i < res->count_crtcs; i++) {
+ if (enc->possible_crtcs & (1 << i)) {
+ drmModeCrtc *c = drmModeGetCrtc(dev_fd, res->crtcs[i]);
+ if (c) {
+ *crtc = c;
+ DRM_LOGI("Found crtc %d", c->crtc_id);
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+#define __CLASS__ "DRMResMgr"
+
+int DRMResMgr::GetInstance(DRMResMgr **res_mgr) {
+ lock_guard<mutex> obj(s_lock);
+
+ if (!s_instance) {
+ s_instance = new DRMResMgr();
+ if (s_instance->Init() < 0) {
+ delete s_instance;
+ s_instance = nullptr;
+ return -ENODEV;
+ }
+ }
+
+ *res_mgr = s_instance;
+ return 0;
+}
+
+int DRMResMgr::Init() {
+ DRMMaster *master = nullptr;
+ int dev_fd = -1;
+
+ int ret = DRMMaster::GetInstance(&master);
+ if (ret < 0) {
+ return ret;
+ }
+
+ master->GetHandle(&dev_fd);
+ drmModeRes *res = drmModeGetResources(dev_fd);
+ if (res == nullptr) {
+ DRM_LOGE("drmModeGetResources failed");
+ return -ENODEV;
+ }
+
+ drmModeConnector *conn = nullptr;
+ if (!GetConnector(dev_fd, res, &conn)) {
+ DRM_LOGE("Failed to find a connector");
+ return -ENODEV;
+ }
+
+ drmModeEncoder *enc = nullptr;
+ if (!GetEncoder(dev_fd, conn, &enc)) {
+ DRM_LOGE("Failed to find an encoder");
+ drmModeFreeConnector(conn);
+ return -ENODEV;
+ }
+
+ drmModeCrtc *crtc = nullptr;
+ if (!GetCrtc(dev_fd, res, enc, &crtc)) {
+ DRM_LOGE("Failed to find a crtc");
+ drmModeFreeEncoder(enc);
+ drmModeFreeConnector(conn);
+ drmModeFreeResources(res);
+ return -ENODEV;
+ }
+
+ res_ = res;
+ conn_ = conn;
+ enc_ = enc;
+ crtc_ = crtc;
+
+ return 0;
+}
+
+} // namespace drm_utils
diff --git a/libdrmutils/drm_res_mgr.h b/libdrmutils/drm_res_mgr.h
new file mode 100644
index 0000000..3a8378c
--- /dev/null
+++ b/libdrmutils/drm_res_mgr.h
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DRM_RES_MGR_H__
+#define __DRM_RES_MGR_H__
+
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+
+#include <mutex>
+
+namespace drm_utils {
+
+class DRMResMgr {
+ public:
+ /* Returns the default connector id for primary panel */
+ void GetConnectorId(uint32_t *id) { *id = conn_->connector_id; }
+ /* Returns the default crtc id for primary pipeline */
+ void GetCrtcId(uint32_t *id) { *id = crtc_->crtc_id; }
+ /* Returns the default mode currently used by the connector */
+ void GetMode(drmModeModeInfo *mode) { *mode = conn_->modes[0]; }
+ /* Returns the panel dimensions in mm */
+ void GetDisplayDimInMM(uint32_t *w, uint32_t *h) {
+ *w = conn_->mmWidth;
+ *h = conn_->mmHeight;
+ }
+
+ /* Creates and initializes an instance of DRMResMgr. On success, returns a pointer to it, on
+ * failure returns -ENODEV */
+ static int GetInstance(DRMResMgr **res_mgr);
+
+ private:
+ int Init();
+
+ drmModeRes *res_ = nullptr;
+ drmModeConnector *conn_ = nullptr;
+ drmModeEncoder *enc_ = nullptr;
+ drmModeCrtc *crtc_ = nullptr;
+
+ static DRMResMgr *s_instance;
+ static std::mutex s_lock;
+};
+
+} // namespace drm_utils
+
+#endif // __DRM_RES_MGR_H__
diff --git a/liblight/Android.mk b/liblight/Android.mk
new file mode 100644
index 0000000..d7060c8
--- /dev/null
+++ b/liblight/Android.mk
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH:= $(call my-dir)
+# HAL module implemenation stored in
+# hw/<COPYPIX_HARDWARE_MODULE_ID>.<ro.board.platform>.so
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := lights.c
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_HEADER_LIBRARIES := libhardware_headers
+LOCAL_SHARED_LIBRARIES := liblog
+LOCAL_CFLAGS := -DLOG_TAG=\"qdlights\"
+ifeq ($(LLVM_SA), true)
+ LOCAL_CFLAGS += --compile-and-analyze --analyzer-perf --analyzer-Werror
+endif
+LOCAL_CLANG := true
+LOCAL_MODULE := lights.$(TARGET_BOARD_PLATFORM)
+LOCAL_MODULE_TAGS := optional
+LOCAL_VENDOR_MODULE := true
+
+include $(BUILD_SHARED_LIBRARY)
diff --git a/liblight/NOTICE b/liblight/NOTICE
new file mode 100644
index 0000000..7340b9e
--- /dev/null
+++ b/liblight/NOTICE
@@ -0,0 +1,190 @@
+
+ Copyright (c) 2008, The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
diff --git a/liblight/lights.c b/liblight/lights.c
new file mode 100644
index 0000000..f74fb54
--- /dev/null
+++ b/liblight/lights.c
@@ -0,0 +1,415 @@
+/*
+ * Copyright (C) 2014, 2017-2018 The Linux Foundation. All rights reserved.
+ * Not a contribution
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+// #define LOG_NDEBUG 0
+
+#include <log/log.h>
+#include <cutils/properties.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+
+#include <sys/ioctl.h>
+#include <sys/types.h>
+
+#include <hardware/lights.h>
+
+#ifndef DEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS
+#define DEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS 0x80
+#endif
+
+/******************************************************************************/
+
+static pthread_once_t g_init = PTHREAD_ONCE_INIT;
+static pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER;
+static struct light_state_t g_notification;
+static struct light_state_t g_battery;
+static int g_last_backlight_mode = BRIGHTNESS_MODE_USER;
+static int g_attention = 0;
+static bool g_has_persistence_node = false;
+
+char const*const LCD_FILE
+ = "/sys/class/leds/lcd-backlight/brightness";
+
+char const*const LCD_FILE2
+ = "/sys/class/backlight/panel0-backlight/brightness";
+
+char const*const BUTTON_FILE
+ = "/sys/class/leds/button-backlight/brightness";
+
+char const*const PERSISTENCE_FILE
+ = "/sys/class/graphics/fb0/msm_fb_persist_mode";
+
+enum rgb_led {
+ LED_RED = 0,
+ LED_GREEN,
+ LED_BLUE,
+};
+
+char *led_names[] = {
+ "red",
+ "green",
+ "blue",
+};
+/**
+ * device methods
+ */
+
+void init_globals(void)
+{
+ // init the mutex
+ pthread_mutex_init(&g_lock, NULL);
+}
+
+static int write_int(char const* path, int value)
+{
+ int fd;
+ static int already_warned = 0;
+
+ fd = open(path, O_RDWR);
+ if (fd >= 0) {
+ char buffer[20];
+ int bytes = snprintf(buffer, sizeof(buffer), "%d\n", value);
+ ssize_t amt = write(fd, buffer, (size_t)bytes);
+ close(fd);
+ return amt == -1 ? -errno : 0;
+ } else {
+ if (already_warned == 0) {
+ ALOGE("write_int failed to open %s, errno = %d\n", path, errno);
+ already_warned = 1;
+ }
+ return -errno;
+ }
+}
+
+static bool file_exists(const char *file)
+{
+ int fd;
+
+ fd = open(file, O_RDWR);
+ if (fd < 0) {
+ ALOGE("failed to open %s, errno=%d\n", file, errno);
+ return false;
+ }
+
+ close(fd);
+ return true;
+}
+
+static int
+is_lit(struct light_state_t const* state)
+{
+ return state->color & 0x00ffffff;
+}
+
+static int
+rgb_to_brightness(struct light_state_t const* state)
+{
+ int color = state->color & 0x00ffffff;
+ return ((77*((color>>16)&0x00ff))
+ + (150*((color>>8)&0x00ff)) + (29*(color&0x00ff))) >> 8;
+}
+
+static int
+set_light_backlight(struct light_device_t* dev,
+ struct light_state_t const* state)
+{
+ int err = 0;
+ int brightness = rgb_to_brightness(state);
+ unsigned int lpEnabled =
+ state->brightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE;
+ if(!dev) {
+ return -1;
+ }
+
+ pthread_mutex_lock(&g_lock);
+ // Toggle low persistence mode state
+ bool persistence_mode = ((g_last_backlight_mode != state->brightnessMode && lpEnabled) ||
+ (!lpEnabled &&
+ g_last_backlight_mode == BRIGHTNESS_MODE_LOW_PERSISTENCE));
+ bool cannot_handle_persistence = !g_has_persistence_node && persistence_mode;
+ if (g_has_persistence_node) {
+ if (persistence_mode) {
+ if ((err = write_int(PERSISTENCE_FILE, lpEnabled)) != 0) {
+ ALOGE("%s: Failed to write to %s: %s\n", __FUNCTION__,
+ PERSISTENCE_FILE, strerror(errno));
+ }
+ if (lpEnabled != 0) {
+ brightness = DEFAULT_LOW_PERSISTENCE_MODE_BRIGHTNESS;
+ }
+ }
+ g_last_backlight_mode = state->brightnessMode;
+ }
+
+ if (!err) {
+ if (!access(LCD_FILE, F_OK)) {
+ err = write_int(LCD_FILE, brightness);
+ } else {
+ err = write_int(LCD_FILE2, brightness);
+ }
+ }
+
+ pthread_mutex_unlock(&g_lock);
+ return cannot_handle_persistence ? -ENOSYS : err;
+}
+
+static int set_rgb_led_brightness(enum rgb_led led, int brightness)
+{
+ char file[48];
+
+ snprintf(file, sizeof(file), "/sys/class/leds/%s/brightness", led_names[led]);
+ return write_int(file, brightness);
+}
+
+static int set_rgb_led_timer_trigger(enum rgb_led led, int onMS, int offMS)
+{
+ char file[48];
+ int rc;
+
+ snprintf(file, sizeof(file), "/sys/class/leds/%s/delay_off", led_names[led]);
+ rc = write_int(file, offMS);
+ if (rc < 0)
+ goto out;
+
+ snprintf(file, sizeof(file), "/sys/class/leds/%s/delay_on", led_names[led]);
+ rc = write_int(file, onMS);
+ if (rc < 0)
+ goto out;
+
+ return 0;
+out:
+ ALOGD("%s doesn't support timer trigger\n", led_names[led]);
+ return rc;
+}
+
+static int set_rgb_led_hw_blink(enum rgb_led led, int blink)
+{
+ char file[48];
+
+ snprintf(file, sizeof(file), "/sys/class/leds/%s/breath", led_names[led]);
+ if (!file_exists(file))
+ snprintf(file, sizeof(file), "/sys/class/leds/%s/blink", led_names[led]);
+
+ return write_int(file, blink);
+}
+
+static int
+set_speaker_light_locked(struct light_device_t* dev,
+ struct light_state_t const* state)
+{
+ int red, green, blue;
+ int onMS, offMS;
+ unsigned int colorRGB;
+ int blink = 0;
+ int rc = 0;
+
+ if(!dev) {
+ return -1;
+ }
+
+ colorRGB = state->color;
+ red = (colorRGB >> 16) & 0xFF;
+ green = (colorRGB >> 8) & 0xFF;
+ blue = colorRGB & 0xFF;
+
+ onMS = state->flashOnMS;
+ offMS = state->flashOffMS;
+
+ if (onMS != 0 && offMS != 0)
+ blink = 1;
+
+ switch (state->flashMode) {
+ case LIGHT_FLASH_HARDWARE:
+ if (!!red)
+ rc = set_rgb_led_hw_blink(LED_RED, blink);
+ if (!!green)
+ rc |= set_rgb_led_hw_blink(LED_GREEN, blink);
+ if (!!blue)
+ rc |= set_rgb_led_hw_blink(LED_BLUE, blink);
+ /* fallback to timed blinking if breath is not supported */
+ if (rc == 0)
+ break;
+ case LIGHT_FLASH_TIMED:
+ if (!!red)
+ rc = set_rgb_led_timer_trigger(LED_RED, onMS, offMS);
+ if (!!green)
+ rc |= set_rgb_led_timer_trigger(LED_GREEN, onMS, offMS);
+ if (!!blue)
+ rc |= set_rgb_led_timer_trigger(LED_BLUE, onMS, offMS);
+ /* fallback to constant on if timed blinking is not supported */
+ if (rc == 0)
+ break;
+ case LIGHT_FLASH_NONE:
+ default:
+ rc = set_rgb_led_brightness(LED_RED, red);
+ rc |= set_rgb_led_brightness(LED_GREEN, green);
+ rc |= set_rgb_led_brightness(LED_BLUE, blue);
+ break;
+ }
+
+ ALOGD("set_speaker_light_locked mode=%d, colorRGB=%08X, onMS=%d, offMS=%d, rc=%d\n",
+ state->flashMode, colorRGB, onMS, offMS, rc);
+
+ return rc;
+}
+
+static void
+handle_speaker_battery_locked(struct light_device_t* dev)
+{
+ if (is_lit(&g_battery)) {
+ set_speaker_light_locked(dev, &g_battery);
+ } else {
+ set_speaker_light_locked(dev, &g_notification);
+ }
+}
+
+static int
+set_light_battery(struct light_device_t* dev,
+ struct light_state_t const* state)
+{
+ pthread_mutex_lock(&g_lock);
+ g_battery = *state;
+ handle_speaker_battery_locked(dev);
+ pthread_mutex_unlock(&g_lock);
+ return 0;
+}
+
+static int
+set_light_notifications(struct light_device_t* dev,
+ struct light_state_t const* state)
+{
+ pthread_mutex_lock(&g_lock);
+ g_notification = *state;
+ handle_speaker_battery_locked(dev);
+ pthread_mutex_unlock(&g_lock);
+ return 0;
+}
+
+static int
+set_light_attention(struct light_device_t* dev,
+ struct light_state_t const* state)
+{
+ pthread_mutex_lock(&g_lock);
+ if (state->flashMode == LIGHT_FLASH_HARDWARE) {
+ g_attention = state->flashOnMS;
+ } else if (state->flashMode == LIGHT_FLASH_NONE) {
+ g_attention = 0;
+ }
+ handle_speaker_battery_locked(dev);
+ pthread_mutex_unlock(&g_lock);
+ return 0;
+}
+
+static int
+set_light_buttons(struct light_device_t* dev,
+ struct light_state_t const* state)
+{
+ int err = 0;
+ if(!dev) {
+ return -1;
+ }
+ pthread_mutex_lock(&g_lock);
+ err = write_int(BUTTON_FILE, state->color & 0xFF);
+ pthread_mutex_unlock(&g_lock);
+ return err;
+}
+
+/** Close the lights device */
+static int
+close_lights(struct light_device_t *dev)
+{
+ if (dev) {
+ free(dev);
+ }
+ return 0;
+}
+
+
+/******************************************************************************/
+
+/**
+ * module methods
+ */
+
+/** Open a new instance of a lights device using name */
+static int open_lights(const struct hw_module_t* module, char const* name,
+ struct hw_device_t** device)
+{
+ int (*set_light)(struct light_device_t* dev,
+ struct light_state_t const* state);
+
+ if (0 == strcmp(LIGHT_ID_BACKLIGHT, name)) {
+ g_has_persistence_node = !access(PERSISTENCE_FILE, F_OK);
+ set_light = set_light_backlight;
+ } else if (0 == strcmp(LIGHT_ID_BATTERY, name))
+ set_light = set_light_battery;
+ else if (0 == strcmp(LIGHT_ID_NOTIFICATIONS, name))
+ set_light = set_light_notifications;
+ else if (0 == strcmp(LIGHT_ID_BUTTONS, name)) {
+ if (!access(BUTTON_FILE, F_OK)) {
+ // enable light button when the file is present
+ set_light = set_light_buttons;
+ } else {
+ return -EINVAL;
+ }
+ }
+ else if (0 == strcmp(LIGHT_ID_ATTENTION, name))
+ set_light = set_light_attention;
+ else
+ return -EINVAL;
+
+ pthread_once(&g_init, init_globals);
+
+ struct light_device_t *dev = malloc(sizeof(struct light_device_t));
+
+ if(!dev)
+ return -ENOMEM;
+
+ memset(dev, 0, sizeof(*dev));
+
+ dev->common.tag = HARDWARE_DEVICE_TAG;
+ dev->common.version = LIGHTS_DEVICE_API_VERSION_2_0;
+ dev->common.module = (struct hw_module_t*)module;
+ dev->common.close = (int (*)(struct hw_device_t*))close_lights;
+ dev->set_light = set_light;
+
+ *device = (struct hw_device_t*)dev;
+ return 0;
+}
+
+static struct hw_module_methods_t lights_module_methods = {
+ .open = open_lights,
+};
+
+/*
+ * The lights Module
+ */
+struct hw_module_t HAL_MODULE_INFO_SYM = {
+ .tag = HARDWARE_MODULE_TAG,
+ .version_major = 1,
+ .version_minor = 0,
+ .id = LIGHTS_HARDWARE_MODULE_ID,
+ .name = "lights Module",
+ .author = "Google, Inc.",
+ .methods = &lights_module_methods,
+};
diff --git a/libmemtrack/Android.mk b/libmemtrack/Android.mk
new file mode 100644
index 0000000..10fd40a
--- /dev/null
+++ b/libmemtrack/Android.mk
@@ -0,0 +1,30 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH := $(call my-dir)
+
+# HAL module implemenation stored in
+# hw/<POWERS_HARDWARE_MODULE_ID>.<ro.hardware>.so
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_VENDOR_MODULE := true
+LOCAL_C_INCLUDES += hardware/libhardware/include
+LOCAL_CFLAGS := -Wconversion -Wall -Werror -Wno-sign-conversion
+LOCAL_CLANG := true
+LOCAL_SHARED_LIBRARIES := liblog
+LOCAL_HEADER_LIBRARIES := libhardware_headers
+LOCAL_SRC_FILES := memtrack_msm.c kgsl.c
+LOCAL_MODULE := memtrack.$(TARGET_BOARD_PLATFORM)
+include $(BUILD_SHARED_LIBRARY)
diff --git a/libmemtrack/kgsl.c b/libmemtrack/kgsl.c
new file mode 100644
index 0000000..e17c520
--- /dev/null
+++ b/libmemtrack/kgsl.c
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/mman.h>
+
+#include <hardware/memtrack.h>
+
+#include "memtrack_msm.h"
+
+#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
+#define min(x, y) ((x) < (y) ? (x) : (y))
+
+struct memtrack_record record_templates[] = {
+ {
+ .flags = MEMTRACK_FLAG_SMAPS_ACCOUNTED |
+ MEMTRACK_FLAG_PRIVATE |
+ MEMTRACK_FLAG_NONSECURE,
+ },
+ {
+ .flags = MEMTRACK_FLAG_SMAPS_UNACCOUNTED |
+ MEMTRACK_FLAG_PRIVATE |
+ MEMTRACK_FLAG_NONSECURE,
+ },
+};
+
+int kgsl_memtrack_get_memory(pid_t pid, enum memtrack_type type,
+ struct memtrack_record *records,
+ size_t *num_records)
+{
+ size_t allocated_records = min(*num_records, ARRAY_SIZE(record_templates));
+ char syspath[128];
+ size_t accounted_size = 0;
+ size_t unaccounted_size = 0;
+ FILE *fp;
+ int ret;
+
+ *num_records = ARRAY_SIZE(record_templates);
+
+ /* fastpath to return the necessary number of records */
+ if (allocated_records == 0)
+ return 0;
+
+ memcpy(records, record_templates,
+ sizeof(struct memtrack_record) * allocated_records);
+
+ if (type == MEMTRACK_TYPE_GL) {
+
+ snprintf(syspath, sizeof(syspath),
+ "/sys/class/kgsl/kgsl/proc/%d/gpumem_mapped", pid);
+
+ fp = fopen(syspath, "r");
+ if (fp == NULL)
+ return -errno;
+
+ ret = fscanf(fp, "%zu", &accounted_size);
+ if (ret != 1) {
+ fclose(fp);
+ return -EINVAL;
+ }
+ fclose(fp);
+
+ snprintf(syspath, sizeof(syspath),
+ "/sys/class/kgsl/kgsl/proc/%d/gpumem_unmapped", pid);
+
+ fp = fopen(syspath, "r");
+ if (fp == NULL) {
+ return -errno;
+ }
+
+ ret = fscanf(fp, "%zu", &unaccounted_size);
+ if (ret != 1) {
+ fclose(fp);
+ return -EINVAL;
+ }
+ fclose(fp);
+
+ } else if (type == MEMTRACK_TYPE_GRAPHICS) {
+
+ snprintf(syspath, sizeof(syspath),
+ "/sys/class/kgsl/kgsl/proc/%d/imported_mem", pid);
+
+ fp = fopen(syspath, "r");
+ if (fp == NULL)
+ return -errno;
+
+ ret = fscanf(fp, "%zu", &unaccounted_size);
+ if (ret != 1) {
+ fclose(fp);
+ return -EINVAL;
+ }
+ fclose(fp);
+ }
+
+ if (allocated_records > 0)
+ records[0].size_in_bytes = accounted_size;
+
+ if (allocated_records > 1)
+ records[1].size_in_bytes = unaccounted_size;
+
+ return 0;
+}
diff --git a/libmemtrack/memtrack_msm.c b/libmemtrack/memtrack_msm.c
new file mode 100644
index 0000000..e369d5f
--- /dev/null
+++ b/libmemtrack/memtrack_msm.c
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <errno.h>
+
+#include <hardware/memtrack.h>
+
+#include "memtrack_msm.h"
+
+int msm_memtrack_init(const struct memtrack_module *module)
+{
+ if(!module)
+ return -1;
+ return 0;
+}
+
+int msm_memtrack_get_memory(const struct memtrack_module *module,
+ pid_t pid,
+ int type,
+ struct memtrack_record *records,
+ size_t *num_records)
+{
+ if(!module)
+ return -1;
+ if (type == MEMTRACK_TYPE_GL || type == MEMTRACK_TYPE_GRAPHICS) {
+ return kgsl_memtrack_get_memory(pid, type, records, num_records);
+ }
+
+ return -EINVAL;
+}
+
+static struct hw_module_methods_t memtrack_module_methods = {
+ .open = NULL,
+};
+
+struct memtrack_module HAL_MODULE_INFO_SYM = {
+ .common = {
+ .tag = HARDWARE_MODULE_TAG,
+ .module_api_version = MEMTRACK_MODULE_API_VERSION_0_1,
+ .hal_api_version = HARDWARE_HAL_API_VERSION,
+ .id = MEMTRACK_HARDWARE_MODULE_ID,
+ .name = "MSM Memory Tracker HAL",
+ .author = "The Android Open Source Project",
+ .methods = &memtrack_module_methods,
+ },
+
+ .init = msm_memtrack_init,
+ .getMemory = msm_memtrack_get_memory,
+};
+
diff --git a/libmemtrack/memtrack_msm.h b/libmemtrack/memtrack_msm.h
new file mode 100644
index 0000000..74aa576
--- /dev/null
+++ b/libmemtrack/memtrack_msm.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _MEMTRACK_MSM_H_
+#define _MEMTRACK_MSM_H_
+
+int kgsl_memtrack_get_memory(pid_t pid, enum memtrack_type type,
+ struct memtrack_record *records,
+ size_t *num_records);
+
+#endif
diff --git a/libqdutils/Android.bp b/libqdutils/Android.bp
new file mode 100644
index 0000000..6e7ad99
--- /dev/null
+++ b/libqdutils/Android.bp
@@ -0,0 +1,21 @@
+cc_library_shared {
+ name: "libqdutils",
+ vendor: true,
+ defaults: ["display_defaults"],
+ header_libs: [
+ "libhardware_headers",
+ "libutils_headers",
+ ],
+ shared_libs: [
+ "libbinder",
+ "libqservice",
+ ],
+ cflags: [
+ "-DLOG_TAG=\"qdutils\"",
+ "-Wno-sign-conversion",
+ ],
+ srcs: [
+ "qd_utils.cpp",
+ "display_config.cpp",
+ ],
+}
diff --git a/libqdutils/Makefile.am b/libqdutils/Makefile.am
new file mode 100644
index 0000000..d0241d0
--- /dev/null
+++ b/libqdutils/Makefile.am
@@ -0,0 +1,16 @@
+header_sources = display_config.h
+
+cpp_sources = qd_utils.cpp \
+ display_config.cpp
+
+qdutils_includedir = $(pkgincludedir)/display
+qdutils_include_HEADERS = $(header_sources)
+
+lib_LTLIBRARIES = libqdutils.la
+libqdutils_la_CC = @CC@
+libqdutils_la_SOURCES = $(c_sources)
+libqdutils_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"qdutils\"
+libqdutils_la_CPPFLAGS = $(AM_CPPFLAGS)
+libqdutils_LDADD = -lhardware -lcutils -llog -lbinder
+libqdutils_la_LIBADD = ../libqservice/libqservice.la
+libqdutils_la_LDFLAGS = -shared -avoid-version
diff --git a/libqdutils/display_config.cpp b/libqdutils/display_config.cpp
new file mode 100644
index 0000000..c283b38
--- /dev/null
+++ b/libqdutils/display_config.cpp
@@ -0,0 +1,444 @@
+/*
+* Copyright (c) 2013-2014, 2016, 2018-2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <display_config.h>
+#include <QServiceUtils.h>
+#include <qd_utils.h>
+
+using namespace android;
+using namespace qService;
+
+namespace qdutils {
+
+//=============================================================================
+// The functions below run in the client process and wherever necessary
+// do a binder call to HWC to get/set data.
+
+int isExternalConnected(void) {
+ int ret;
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+ if(binder != NULL) {
+ err = binder->dispatch(IQService::CHECK_EXTERNAL_STATUS,
+ &inParcel , &outParcel);
+ }
+ if(err) {
+ ALOGE("%s: Failed to get external status err=%d", __FUNCTION__, err);
+ ret = err;
+ } else {
+ ret = outParcel.readInt32();
+ }
+ return ret;
+}
+
+int getDisplayAttributes(int dpy, DisplayAttributes_t& dpyattr) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(dpy);
+ if(binder != NULL) {
+ err = binder->dispatch(IQService::GET_DISPLAY_ATTRIBUTES,
+ &inParcel, &outParcel);
+ }
+ if(!err) {
+ dpyattr.vsync_period = outParcel.readInt32();
+ dpyattr.xres = outParcel.readInt32();
+ dpyattr.yres = outParcel.readInt32();
+ dpyattr.xdpi = outParcel.readFloat();
+ dpyattr.ydpi = outParcel.readFloat();
+ dpyattr.panel_type = outParcel.readInt32();
+ } else {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ return err;
+}
+
+int getDisplayVisibleRegion(int dpy, hwc_rect_t &rect) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(dpy);
+ if(binder != NULL) {
+ err = binder->dispatch(IQService::GET_DISPLAY_VISIBLE_REGION,
+ &inParcel, &outParcel);
+ }
+ if(!err) {
+ rect.left = outParcel.readInt32();
+ rect.top = outParcel.readInt32();
+ rect.right = outParcel.readInt32();
+ rect.bottom = outParcel.readInt32();
+ } else {
+ ALOGE("%s: Failed to getVisibleRegion for dpy =%d: err = %d",
+ __FUNCTION__, dpy, err);
+ }
+ return err;
+}
+
+int setViewFrame(int dpy, int l, int t, int r, int b) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(dpy);
+ inParcel.writeInt32(l);
+ inParcel.writeInt32(t);
+ inParcel.writeInt32(r);
+ inParcel.writeInt32(b);
+
+ if(binder != NULL) {
+ err = binder->dispatch(IQService::SET_VIEW_FRAME,
+ &inParcel, &outParcel);
+ }
+ if(err)
+ ALOGE("%s: Failed to set view frame for dpy %d err=%d",
+ __FUNCTION__, dpy, err);
+
+ return err;
+}
+
+int setSecondaryDisplayStatus(int dpy, uint32_t status) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(dpy);
+ inParcel.writeInt32(status);
+
+ if(binder != NULL) {
+ err = binder->dispatch(IQService::SET_SECONDARY_DISPLAY_STATUS,
+ &inParcel, &outParcel);
+ }
+ if(err)
+ ALOGE("%s: Failed for dpy %d status = %d err=%d", __FUNCTION__, dpy,
+ status, err);
+
+ return err;
+}
+
+int configureDynRefreshRate(uint32_t op, uint32_t refreshRate) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(op);
+ inParcel.writeInt32(refreshRate);
+
+ if(binder != NULL) {
+ err = binder->dispatch(IQService::CONFIGURE_DYN_REFRESH_RATE,
+ &inParcel, &outParcel);
+ }
+
+ if(err)
+ ALOGE("%s: Failed setting op %d err=%d", __FUNCTION__, op, err);
+
+ return err;
+}
+
+int getConfigCount(int /*dpy*/) {
+ int numConfigs = -1;
+ sp<IQService> binder = getBinder();
+ if(binder != NULL) {
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(DISPLAY_PRIMARY);
+ status_t err = binder->dispatch(IQService::GET_CONFIG_COUNT,
+ &inParcel, &outParcel);
+ if(!err) {
+ numConfigs = outParcel.readInt32();
+ ALOGI("%s() Received num configs %d", __FUNCTION__, numConfigs);
+ } else {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ }
+ return numConfigs;
+}
+
+int getActiveConfig(int dpy) {
+ int configIndex = -1;
+ sp<IQService> binder = getBinder();
+ if(binder != NULL) {
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(dpy);
+ status_t err = binder->dispatch(IQService::GET_ACTIVE_CONFIG,
+ &inParcel, &outParcel);
+ if(!err) {
+ configIndex = outParcel.readInt32();
+ ALOGI("%s() Received active config index %d", __FUNCTION__,
+ configIndex);
+ } else {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ }
+ return configIndex;
+}
+
+int setActiveConfig(int configIndex, int /*dpy*/) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ if(binder != NULL) {
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(configIndex);
+ inParcel.writeInt32(DISPLAY_PRIMARY);
+ err = binder->dispatch(IQService::SET_ACTIVE_CONFIG,
+ &inParcel, &outParcel);
+ if(!err) {
+ ALOGI("%s() Successfully set active config index %d", __FUNCTION__,
+ configIndex);
+ } else {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ }
+ return err;
+}
+
+DisplayAttributes getDisplayAttributes(int configIndex, int dpy) {
+ DisplayAttributes dpyattr = {};
+ sp<IQService> binder = getBinder();
+ if(binder != NULL) {
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(configIndex);
+ inParcel.writeInt32(dpy);
+ status_t err = binder->dispatch(
+ IQService::GET_DISPLAY_ATTRIBUTES_FOR_CONFIG, &inParcel,
+ &outParcel);
+ if(!err) {
+ dpyattr.vsync_period = outParcel.readInt32();
+ dpyattr.xres = outParcel.readInt32();
+ dpyattr.yres = outParcel.readInt32();
+ dpyattr.xdpi = outParcel.readFloat();
+ dpyattr.ydpi = outParcel.readFloat();
+ dpyattr.panel_type = outParcel.readInt32();
+ dpyattr.is_yuv = outParcel.readInt32();
+ ALOGI("%s() Received attrs for index %d: xres %d, yres %d",
+ __FUNCTION__, configIndex, dpyattr.xres, dpyattr.yres);
+ } else {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ }
+ return dpyattr;
+}
+
+int setPanelMode(int mode) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ if(binder != NULL) {
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(mode);
+ err = binder->dispatch(IQService::SET_DISPLAY_MODE,
+ &inParcel, &outParcel);
+ if(!err) {
+ ALOGI("%s() Successfully set the display mode to %d", __FUNCTION__,
+ mode);
+ } else {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ }
+ return err;
+}
+
+int setPanelBrightness(int level) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+
+ if(binder != NULL) {
+ inParcel.writeInt32(level);
+ status_t err = binder->dispatch(IQService::SET_PANEL_BRIGHTNESS,
+ &inParcel, &outParcel);
+ if(err) {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ }
+ return err;
+}
+
+int getPanelBrightness() {
+ int panel_brightness = -1;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+
+ if(binder != NULL) {
+ status_t err = binder->dispatch(IQService::GET_PANEL_BRIGHTNESS,
+ &inParcel, &outParcel);
+ if(!err) {
+ panel_brightness = outParcel.readInt32();
+ ALOGI("%s() Current panel brightness value %d", __FUNCTION__,
+ panel_brightness);
+ } else {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ }
+ return panel_brightness;
+}
+
+int setDsiClk(int dpy, uint64_t bitClk) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+
+ if(binder != NULL) {
+ inParcel.writeInt32(dpy);
+ inParcel.writeUint64(bitClk);
+ status_t err = binder->dispatch(IQService::SET_DSI_CLK, &inParcel, &outParcel);
+ if(err) {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ }
+ return err;
+}
+
+uint64_t getDsiClk(int dpy) {
+ uint64_t dsi_clk = 0;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+
+ if(binder != NULL) {
+ inParcel.writeInt32(dpy);
+ status_t err = binder->dispatch(IQService::GET_DSI_CLK, &inParcel, &outParcel);
+ if(!err) {
+ dsi_clk = outParcel.readUint64();
+ } else {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ }
+ return dsi_clk;
+}
+
+int getSupportedBitClk(int dpy, std::vector<uint64_t>& bit_rates) {
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+
+ if(binder != NULL) {
+ inParcel.writeInt32(dpy);
+ status_t err = binder->dispatch(IQService::GET_SUPPORTED_DSI_CLK, &inParcel, &outParcel);
+ if(err) {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ return err;
+ }
+ }
+
+ int32_t clk_levels = outParcel.readInt32();
+ while (clk_levels > 0) {
+ bit_rates.push_back(outParcel.readUint64());
+ clk_levels--;
+ }
+ return 0;
+}
+
+int setPanelLuminanceAttributes(int dpy, float min_lum, float max_lum) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+
+ if(binder != NULL) {
+ inParcel.writeInt32(dpy);
+ inParcel.writeFloat(min_lum);
+ inParcel.writeFloat(max_lum);
+ status_t err = binder->dispatch(IQService::SET_PANEL_LUMINANCE, &inParcel, &outParcel);
+ if(err) {
+ ALOGE("%s() failed with err %d", __FUNCTION__, err);
+ }
+ }
+ return err;
+}
+
+}// namespace
+
+// ----------------------------------------------------------------------------
+// Functions for linking dynamically to libqdutils
+// ----------------------------------------------------------------------------
+extern "C" int minHdcpEncryptionLevelChanged(int dpy, int min_enc_level) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(dpy);
+ inParcel.writeInt32(min_enc_level);
+
+ if(binder != NULL) {
+ err = binder->dispatch(IQService::MIN_HDCP_ENCRYPTION_LEVEL_CHANGED,
+ &inParcel, &outParcel);
+ }
+
+ if(err) {
+ ALOGE("%s: Failed for dpy %d err=%d", __FUNCTION__, dpy, err);
+ } else {
+ err = outParcel.readInt32();
+ }
+
+ return err;
+}
+
+extern "C" int refreshScreen(int dpy) {
+ int ret = 0;
+ ret = screenRefresh(dpy);
+ return ret;
+}
+
+extern "C" int controlPartialUpdate(int dpy, int mode) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ sp<IQService> binder = getBinder();
+ if(binder != NULL) {
+ Parcel inParcel, outParcel;
+ inParcel.writeInt32(dpy);
+ inParcel.writeInt32(mode);
+ err = binder->dispatch(IQService::CONTROL_PARTIAL_UPDATE, &inParcel, &outParcel);
+ if(err != 0) {
+ ALOGE_IF(getBinder(), "%s() failed with err %d", __FUNCTION__, err);
+ } else {
+ return outParcel.readInt32();
+ }
+ }
+
+ return err;
+}
+
+// returns 0 if composer is up
+extern "C" int waitForComposerInit() {
+ int status = false;
+ sp<IQService> binder = getBinder();
+ if (binder == NULL) {
+ sleep(2);
+ binder = getBinder();
+ }
+
+ if (binder != NULL) {
+ Parcel inParcel, outParcel;
+ binder->dispatch(IQService::GET_COMPOSER_STATUS, &inParcel, &outParcel);
+ status = !!outParcel.readInt32();
+ if (!status) {
+ sleep(2);
+ binder->dispatch(IQService::GET_COMPOSER_STATUS, &inParcel, &outParcel);
+ status = !!outParcel.readInt32();
+ }
+ }
+
+ return !status;
+}
diff --git a/libqdutils/display_config.h b/libqdutils/display_config.h
new file mode 100644
index 0000000..21aea60
--- /dev/null
+++ b/libqdutils/display_config.h
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2013 - 2016, 2018 - 2020, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef _DISPLAY_CONFIG_H
+#define _DISPLAY_CONFIG_H
+
+#include <vector>
+
+#include <gralloc_priv.h>
+#include <qdMetaData.h>
+#include <hardware/hwcomposer.h>
+
+// This header is for clients to use to set/get global display configuration.
+// Only primary and external displays are supported here.
+
+namespace qdutils {
+
+
+/* TODO: Have all the common enums that need be exposed to clients and which
+ * are also needed in hwc defined here. Remove such definitions we have in
+ * hwc_utils.h
+ */
+
+// Use this enum to specify the dpy parameters where needed
+enum {
+ // DO NOT CHANGE THE LEGACY DEFINES
+ DISPLAY_PRIMARY = 0, // = HWC_DISPLAY_PRIMARY
+ DISPLAY_EXTERNAL = 1, // = HWC_DISPLAY_EXTERNAL
+ DISPLAY_VIRTUAL = 2, // = HWC_DISPLAY_VIRTUAL
+
+ // Additional displays only for vendor client (e.g. pp) reference
+ DISPLAY_BUILTIN_2 = 3,
+ DISPLAY_EXTERNAL_2 = 4,
+};
+
+// External Display states - used in setSecondaryDisplayStatus()
+// To be consistent with the same defined in hwc_utils.h
+enum {
+ EXTERNAL_OFFLINE = 0,
+ EXTERNAL_ONLINE,
+ EXTERNAL_PAUSE,
+ EXTERNAL_RESUME,
+};
+
+enum {
+ DISABLE_METADATA_DYN_REFRESH_RATE = 0,
+ ENABLE_METADATA_DYN_REFRESH_RATE,
+ SET_BINDER_DYN_REFRESH_RATE,
+};
+
+enum {
+ DEFAULT_MODE = 0,
+ VIDEO_MODE,
+ COMMAND_MODE,
+};
+
+enum {
+ DISPLAY_PORT_DEFAULT = 0,
+ DISPLAY_PORT_DSI,
+ DISPLAY_PORT_DTV,
+ DISPLAY_PORT_WRITEBACK,
+ DISPLAY_PORT_LVDS,
+ DISPLAY_PORT_EDP,
+ DISPLAY_PORT_DP,
+};
+
+// Display Attributes that are available to clients of this library
+// Not to be confused with a similar struct in hwc_utils (in the hwc namespace)
+typedef struct DisplayAttributes {
+ uint32_t vsync_period = 0; //nanoseconds
+ uint32_t xres = 0;
+ uint32_t yres = 0;
+ float xdpi = 0.0f;
+ float ydpi = 0.0f;
+ int panel_type = DISPLAY_PORT_DEFAULT;
+ bool is_yuv = false;
+} DisplayAttributes_t;
+
+//=============================================================================
+// The functions below run in the client process and wherever necessary
+// do a binder call to HWC to get/set data.
+
+// Check if external display is connected. Useful to check before making
+// calls for external displays
+// Returns 1 if connected, 0 if disconnected, negative values on errors
+int isExternalConnected(void);
+
+// Get display vsync period which is in nanoseconds
+// i.e vsync_period = 1000000000l / fps
+// Returns 0 on success, negative values on errors
+int getDisplayAttributes(int dpy, DisplayAttributes_t& dpyattr);
+
+// get the active visible region for the display
+// Returns 0 on success, negative values on errors
+int getDisplayVisibleRegion(int dpy, hwc_rect_t &rect);
+
+// set the view frame information in hwc context from surfaceflinger
+int setViewFrame(int dpy, int l, int t, int r, int b);
+
+// Set the secondary display status(pause/resume/offline etc.,)
+int setSecondaryDisplayStatus(int dpy, uint32_t status);
+
+// Enable/Disable/Set refresh rate dynamically
+int configureDynRefreshRate(uint32_t op, uint32_t refreshRate);
+
+// Returns the number of configs supported for the display on success.
+// Returns -1 on error.
+// Only primary display supported for now, value of dpy ignored.
+int getConfigCount(int dpy);
+
+// Returns the index of config that is current set for the display on success.
+// Returns -1 on error.
+// Only primary display supported for now, value of dpy ignored.
+int getActiveConfig(int dpy);
+
+// Sets the config for the display on success and returns 0.
+// Returns -1 on error.
+// Only primary display supported for now, value of dpy ignored
+int setActiveConfig(int configIndex, int dpy);
+
+// Returns the attributes for the specified config for the display on success.
+// Returns xres and yres as 0 on error.
+// Only primary display supported for now, value of dpy ignored
+DisplayAttributes getDisplayAttributes(int configIndex, int dpy);
+
+// Set the primary display mode to command or video mode
+int setDisplayMode(int mode);
+
+// Sets the panel brightness of the primary display
+int setPanelBrightness(int level);
+
+// Retrieves the current panel brightness value
+int getPanelBrightness();
+
+// Sets the specified bit clk value.
+int setDsiClk(int dpy, uint64_t bitClk);
+
+// Retrieves the current bit clk value.
+uint64_t getDsiClk(int dpy);
+
+// Get supported bit clk values.
+int getSupportedBitClk(int dpy, std::vector<uint64_t>& bit_rates);
+
+// Sets the specified min and max luminance values.
+int setPanelLuminanceAttributes(int dpy, float min_lum, float max_lum);
+
+}; //namespace
+
+
+extern "C" int waitForComposerInit();
+#endif
diff --git a/libqdutils/qd_utils.cpp b/libqdutils/qd_utils.cpp
new file mode 100644
index 0000000..9e8cad7
--- /dev/null
+++ b/libqdutils/qd_utils.cpp
@@ -0,0 +1,249 @@
+/*
+ * Copyright (c) 2013, 2018, 2020, The Linux Foundation. All rights reserved.
+
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#include <unistd.h>
+#include <gralloc_priv.h>
+#include "qd_utils.h"
+
+static const int kFBNodeMax = 4;
+namespace qdutils {
+
+static int parseLine(char *input, char *tokens[], const uint32_t maxToken, uint32_t *count) {
+ char *tmpToken = NULL;
+ char *tmpPtr;
+ uint32_t index = 0;
+ const char *delim = ", =\n";
+ if (!input) {
+ return -1;
+ }
+ tmpToken = strtok_r(input, delim, &tmpPtr);
+ while (tmpToken && index < maxToken) {
+ tokens[index++] = tmpToken;
+ tmpToken = strtok_r(NULL, delim, &tmpPtr);
+ }
+ *count = index;
+
+ return 0;
+}
+
+static int getExternalNode(const char *type) {
+ FILE *displayDeviceFP = NULL;
+ char fbType[MAX_FRAME_BUFFER_NAME_SIZE];
+ char msmFbTypePath[MAX_FRAME_BUFFER_NAME_SIZE];
+ int j = 0;
+
+ for(j = 0; j < kFBNodeMax; j++) {
+ snprintf (msmFbTypePath, sizeof(msmFbTypePath),
+ "/sys/devices/virtual/graphics/fb%d/msm_fb_type", j);
+ displayDeviceFP = fopen(msmFbTypePath, "r");
+ if(displayDeviceFP) {
+ fread(fbType, sizeof(char), MAX_FRAME_BUFFER_NAME_SIZE,
+ displayDeviceFP);
+ if(strncmp(fbType, type, strlen(type)) == 0) {
+ ALOGD("%s: %s is at fb%d", __func__, type, j);
+ fclose(displayDeviceFP);
+ break;
+ }
+ fclose(displayDeviceFP);
+ } else {
+ ALOGE("%s: Failed to open fb node %s", __func__, msmFbTypePath);
+ }
+ }
+
+ if (j < kFBNodeMax)
+ return j;
+ else
+ ALOGE("%s: Failed to find %s node", __func__, type);
+
+ return -1;
+}
+
+
+bool isDPConnected() {
+ char connectPath[MAX_FRAME_BUFFER_NAME_SIZE];
+ FILE *connectFile = NULL;
+ size_t len = MAX_STRING_LENGTH;
+ char stringBuffer[MAX_STRING_LENGTH];
+ char *line = stringBuffer;
+
+ int nodeId = getExternalNode("dp panel");
+ if (nodeId < 0) {
+ ALOGE("%s no DP node found", __func__);
+ return false;
+ }
+
+ snprintf(connectPath, sizeof(connectPath),
+ "/sys/devices/virtual/graphics/fb%d/connected", nodeId);
+
+ connectFile = fopen(connectPath, "rb");
+ if (!connectFile) {
+ ALOGW("Failed to open connect node for device node %s", connectPath);
+ return false;
+ }
+
+ if (getline(&line, &len, connectFile) < 0) {
+ fclose(connectFile);
+ return false;
+ }
+
+ fclose(connectFile);
+
+ return atoi(line);
+}
+
+int getDPTestConfig(uint32_t *panelBpp, uint32_t *patternType) {
+ if (!panelBpp || !patternType) {
+ return -1;
+ }
+
+ char configPath[MAX_FRAME_BUFFER_NAME_SIZE];
+ FILE *configFile = NULL;
+ uint32_t tokenCount = 0;
+ const uint32_t maxCount = 10;
+ char *tokens[maxCount] = { NULL };
+ size_t len = MAX_STRING_LENGTH;
+ char stringBuffer[MAX_STRING_LENGTH];
+ char *line = stringBuffer;
+
+ int nodeId = getExternalNode("dp panel");
+ if (nodeId < 0) {
+ ALOGE("%s no DP node found", __func__);
+ return -EINVAL;
+ }
+
+ snprintf(configPath, sizeof(configPath),
+ "/sys/devices/virtual/graphics/fb%d/config", nodeId);
+
+ configFile = fopen(configPath, "rb");
+ if (!configFile) {
+ ALOGW("Failed to open config node for device node %s", configPath);
+ return -EINVAL;
+ }
+
+ while (getline(&line, &len, configFile) != -1) {
+ if (!parseLine(line, tokens, maxCount, &tokenCount)) {
+ if (tokens[0] != NULL) {
+ if (!strncmp(tokens[0], "bpp", strlen("bpp"))) {
+ *panelBpp = static_cast<uint32_t>(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "pattern", strlen("pattern"))) {
+ *patternType = static_cast<uint32_t>(atoi(tokens[1]));
+ }
+ }
+ }
+ }
+
+ fclose(configFile);
+
+ return 0;
+}
+
+DriverType getDriverType() {
+ const char *fb_caps = "/sys/devices/virtual/graphics/fb0/mdp/caps";
+ // 0 - File exists
+ return access(fb_caps, F_OK) ? DriverType::DRM : DriverType::FB;
+}
+
+const char *GetHALPixelFormatString(int format) {
+ switch (format) {
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ return "RGBA_8888";
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ return "RGBX_8888";
+ case HAL_PIXEL_FORMAT_RGB_888:
+ return "RGB_888";
+ case HAL_PIXEL_FORMAT_RGB_565:
+ return "RGB_565";
+ case HAL_PIXEL_FORMAT_BGR_565:
+ return "BGR_565";
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ return "BGRA_8888";
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ return "RGBA_5551";
+ case HAL_PIXEL_FORMAT_RGBA_4444:
+ return "RGBA_4444";
+ case HAL_PIXEL_FORMAT_YV12:
+ return "YV12";
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ return "YCbCr_422_SP_NV16";
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ return "YCrCb_420_SP_NV21";
+ case HAL_PIXEL_FORMAT_YCbCr_422_I:
+ return "YCbCr_422_I_YUY2";
+ case HAL_PIXEL_FORMAT_YCrCb_422_I:
+ return "YCrCb_422_I_YVYU";
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ return "NV12_ENCODEABLE";
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED:
+ return "YCbCr_420_SP_TILED_TILE_4x2";
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ return "YCbCr_420_SP";
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO:
+ return "YCrCb_420_SP_ADRENO";
+ case HAL_PIXEL_FORMAT_YCrCb_422_SP:
+ return "YCrCb_422_SP";
+ case HAL_PIXEL_FORMAT_R_8:
+ return "R_8";
+ case HAL_PIXEL_FORMAT_RG_88:
+ return "RG_88";
+ case HAL_PIXEL_FORMAT_INTERLACE:
+ return "INTERLACE";
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ return "YCbCr_420_SP_VENUS";
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ return "YCrCb_420_SP_VENUS";
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ return "YCbCr_420_SP_VENUS_UBWC";
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ return "RGBA_1010102";
+ case HAL_PIXEL_FORMAT_ARGB_2101010:
+ return "ARGB_2101010";
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ return "RGBX_1010102";
+ case HAL_PIXEL_FORMAT_XRGB_2101010:
+ return "XRGB_2101010";
+ case HAL_PIXEL_FORMAT_BGRA_1010102:
+ return "BGRA_1010102";
+ case HAL_PIXEL_FORMAT_ABGR_2101010:
+ return "ABGR_2101010";
+ case HAL_PIXEL_FORMAT_BGRX_1010102:
+ return "BGRX_1010102";
+ case HAL_PIXEL_FORMAT_XBGR_2101010:
+ return "XBGR_2101010";
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ return "YCbCr_420_P010";
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ return "YCbCr_420_TP10_UBWC";
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ return "YCbCr_420_P010_VENUS";
+ default:
+ return "Unknown_format";
+ }
+}
+
+}; //namespace qdutils
diff --git a/libqdmetadata/qd_utils.h b/libqdutils/qd_utils.h
similarity index 100%
rename from libqdmetadata/qd_utils.h
rename to libqdutils/qd_utils.h
diff --git a/libqservice/Android.bp b/libqservice/Android.bp
new file mode 100644
index 0000000..fe69d39
--- /dev/null
+++ b/libqservice/Android.bp
@@ -0,0 +1,16 @@
+cc_library_shared {
+ name: "libqservice",
+ vendor: true,
+ defaults: ["display_defaults"],
+ shared_libs: ["libbinder"],
+ cflags: [
+ "-DLOG_TAG=\"qdqservice\"",
+ "-Wno-sign-conversion",
+ ],
+ srcs: [
+ "QService.cpp",
+ "IQService.cpp",
+ "IQClient.cpp",
+ "IQHDMIClient.cpp",
+ ],
+}
diff --git a/libqservice/IQClient.cpp b/libqservice/IQClient.cpp
new file mode 100644
index 0000000..a6251c8
--- /dev/null
+++ b/libqservice/IQClient.cpp
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved.
+ *
+ * Not a Contribution, Apache license notifications and license are
+ * retained for attribution purposes only.
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sys/types.h>
+#include <binder/Parcel.h>
+#include <binder/IBinder.h>
+#include <binder/IInterface.h>
+#include <utils/Errors.h>
+#include <IQClient.h>
+
+using namespace android;
+
+// ---------------------------------------------------------------------------
+// XXX: Since qservice currently runs as part of hwc instead of a standalone
+// process, the implementation below is overridden and the notifyCallback in
+// hwc_qclient is directly called.
+
+namespace qClient {
+
+enum {
+ NOTIFY_CALLBACK = IBinder::FIRST_CALL_TRANSACTION,
+};
+
+class BpQClient : public BpInterface<IQClient>
+{
+public:
+ BpQClient(const sp<IBinder>& impl)
+ : BpInterface<IQClient>(impl) {}
+
+ virtual status_t notifyCallback(uint32_t command,
+ const Parcel* inParcel,
+ Parcel* outParcel) {
+ Parcel data;
+ Parcel *reply = outParcel;
+ data.writeInterfaceToken(IQClient::getInterfaceDescriptor());
+ data.writeInt32(command);
+ if (inParcel->dataAvail())
+ data.appendFrom(inParcel, inParcel->dataPosition(),
+ inParcel->dataAvail());
+ status_t result = remote()->transact(NOTIFY_CALLBACK, data, reply);
+ return result;
+ }
+};
+
+IMPLEMENT_META_INTERFACE(QClient, "android.display.IQClient");
+
+// ----------------------------------------------------------------------
+//Stub implementation - nothing needed here
+status_t BnQClient::onTransact(
+ uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
+{
+ switch(code) {
+ case NOTIFY_CALLBACK: {
+ CHECK_INTERFACE(IQClient, data, reply);
+ uint32_t command = data.readInt32();
+ notifyCallback(command, &data, reply);
+ return NO_ERROR;
+ } break;
+ default:
+ return BBinder::onTransact(code, data, reply, flags);
+ }
+
+}
+
+}; // namespace qClient
diff --git a/libqservice/IQClient.h b/libqservice/IQClient.h
new file mode 100644
index 0000000..7d816d2
--- /dev/null
+++ b/libqservice/IQClient.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved.
+ *
+ * Not a Contribution, Apache license notifications and license are
+ * retained for attribution purposes only.
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_IQCLIENT_H
+#define ANDROID_IQCLIENT_H
+
+#include <stdint.h>
+#include <sys/types.h>
+#include <utils/Errors.h>
+#include <utils/RefBase.h>
+#include <binder/IInterface.h>
+
+namespace qClient {
+// ----------------------------------------------------------------------------
+class IQClient : public android::IInterface
+{
+public:
+ DECLARE_META_INTERFACE(QClient);
+ virtual android::status_t notifyCallback(uint32_t command,
+ const android::Parcel* inParcel,
+ android::Parcel* outParcel) = 0;
+};
+
+// ----------------------------------------------------------------------------
+
+class BnQClient : public android::BnInterface<IQClient>
+{
+public:
+ virtual android::status_t onTransact( uint32_t code,
+ const android::Parcel& data,
+ android::Parcel* reply,
+ uint32_t flags = 0);
+};
+
+// ----------------------------------------------------------------------------
+}; // namespace qClient
+
+#endif // ANDROID_IQCLIENT_H
diff --git a/libqservice/IQHDMIClient.cpp b/libqservice/IQHDMIClient.cpp
new file mode 100644
index 0000000..6379e57
--- /dev/null
+++ b/libqservice/IQHDMIClient.cpp
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2014 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+#include <log/log.h>
+#include <binder/Parcel.h>
+#include "IQHDMIClient.h"
+
+using namespace android;
+namespace qClient {
+
+enum {
+ HDMI_CONNECTED = IBinder::FIRST_CALL_TRANSACTION,
+ CEC_MESSAGE_RECEIVED
+};
+
+class BpQHDMIClient : public BpInterface<IQHDMIClient>
+{
+public:
+ BpQHDMIClient(const sp<IBinder>& impl)
+ :BpInterface<IQHDMIClient>(impl)
+ {
+ }
+
+ void onHdmiHotplug(int connected)
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(IQHDMIClient::getInterfaceDescriptor());
+ data.writeInt32(connected);
+ remote()->transact(HDMI_CONNECTED, data, &reply, IBinder::FLAG_ONEWAY);
+ }
+
+ void onCECMessageRecieved(char *msg, ssize_t len)
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(IQHDMIClient::getInterfaceDescriptor());
+ data.writeInt32((int32_t)len);
+ void *buf = data.writeInplace(len);
+ if (buf != NULL)
+ memcpy(buf, msg, len);
+ remote()->transact(CEC_MESSAGE_RECEIVED, data, &reply,
+ IBinder::FLAG_ONEWAY);
+ }
+};
+
+IMPLEMENT_META_INTERFACE(QHDMIClient,
+ "android.display.IQHDMIClient");
+
+status_t BnQHDMIClient::onTransact(uint32_t code, const Parcel& data,
+ Parcel* reply, uint32_t flags)
+{
+ switch(code) {
+ case HDMI_CONNECTED: {
+ CHECK_INTERFACE(IQHDMIClient, data, reply);
+ int connected = data.readInt32();
+ onHdmiHotplug(connected);
+ return NO_ERROR;
+ }
+ case CEC_MESSAGE_RECEIVED: {
+ CHECK_INTERFACE(IQHDMIClient, data, reply);
+ ssize_t len = data.readInt32();
+ const void* msg;
+ if(len >= 0 && len <= (ssize_t) data.dataAvail()) {
+ msg = data.readInplace(len);
+ } else {
+ msg = NULL;
+ len = 0;
+ }
+ if (msg != NULL)
+ onCECMessageRecieved((char*) msg, len);
+ return NO_ERROR;
+ }
+ default: {
+ return BBinder::onTransact(code, data, reply, flags);
+ }
+ }
+}
+
+}; //namespace qClient
diff --git a/libqservice/IQHDMIClient.h b/libqservice/IQHDMIClient.h
new file mode 100644
index 0000000..c3d012a
--- /dev/null
+++ b/libqservice/IQHDMIClient.h
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2014 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef HDMI_EVENTS_LISTENER_H_
+#define HDMI_EVENTS_LISTENER_H_
+
+#include <utils/RefBase.h>
+#include <binder/IInterface.h>
+
+namespace qClient {
+
+class IQHDMIClient : public android::IInterface
+{
+public:
+ DECLARE_META_INTERFACE(QHDMIClient);
+ virtual void onHdmiHotplug(int connected) = 0;
+ virtual void onCECMessageRecieved(char *msg, ssize_t len) = 0;
+};
+
+class BnQHDMIClient : public android::BnInterface<IQHDMIClient>
+{
+public:
+ virtual android::status_t onTransact( uint32_t code,
+ const android::Parcel& data,
+ android::Parcel* reply, uint32_t flags = 0);
+};
+
+}; //namespace qhdmi
+
+#endif // HDMI_EVENTS_LISTENER_H_
+
diff --git a/libqservice/IQService.cpp b/libqservice/IQService.cpp
new file mode 100644
index 0000000..d45a141
--- /dev/null
+++ b/libqservice/IQService.cpp
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2012-2016, The Linux Foundation. All rights reserved.
+ *
+ * Not a Contribution, Apache license notifications and license are
+ * retained for attribution purposes only.
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <fcntl.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <binder/Parcel.h>
+#include <binder/IBinder.h>
+#include <binder/IInterface.h>
+#include <binder/IPCThreadState.h>
+#include <cutils/android_filesystem_config.h>
+#include <utils/Errors.h>
+#include <IQService.h>
+
+#define QSERVICE_DEBUG 0
+
+using namespace android;
+using namespace qClient;
+
+// ---------------------------------------------------------------------------
+
+namespace qService {
+
+class BpQService : public BpInterface<IQService>
+{
+public:
+ BpQService(const sp<IBinder>& impl)
+ : BpInterface<IQService>(impl) {}
+
+ virtual void connect(const sp<IQClient>& client) {
+ ALOGD_IF(QSERVICE_DEBUG, "%s: connect HWC client", __FUNCTION__);
+ Parcel data, reply;
+ data.writeInterfaceToken(IQService::getInterfaceDescriptor());
+ data.writeStrongBinder(IInterface::asBinder(client));
+ remote()->transact(CONNECT_HWC_CLIENT, data, &reply);
+ }
+
+ virtual void connect(const sp<IQHDMIClient>& client) {
+ ALOGD_IF(QSERVICE_DEBUG, "%s: connect HDMI client", __FUNCTION__);
+ Parcel data, reply;
+ data.writeInterfaceToken(IQService::getInterfaceDescriptor());
+ data.writeStrongBinder(IInterface::asBinder(client));
+ remote()->transact(CONNECT_HDMI_CLIENT, data, &reply);
+ }
+
+
+ virtual android::status_t dispatch(uint32_t command, const Parcel* inParcel,
+ Parcel* outParcel) {
+ ALOGD_IF(QSERVICE_DEBUG, "%s: dispatch in:%p", __FUNCTION__, inParcel);
+ status_t err = (status_t) android::FAILED_TRANSACTION;
+ Parcel data;
+ Parcel *reply = outParcel;
+ data.writeInterfaceToken(IQService::getInterfaceDescriptor());
+ if (inParcel && inParcel->dataSize() > 0)
+ data.appendFrom(inParcel, 0, inParcel->dataSize());
+ err = remote()->transact(command, data, reply);
+ return err;
+ }
+};
+
+IMPLEMENT_META_INTERFACE(QService, "android.display.IQService");
+
+// ----------------------------------------------------------------------
+
+status_t BnQService::onTransact(
+ uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
+{
+ ALOGD_IF(QSERVICE_DEBUG, "%s: code: %d", __FUNCTION__, code);
+ // IPC should be from certain processes only
+ IPCThreadState* ipc = IPCThreadState::self();
+ const int callerPid = ipc->getCallingPid();
+ const int callerUid = ipc->getCallingUid();
+
+ const bool permission = (callerUid == AID_MEDIA ||
+ callerUid == AID_GRAPHICS ||
+ callerUid == AID_ROOT ||
+ callerUid == AID_CAMERASERVER ||
+ callerUid == AID_AUDIO ||
+ callerUid == AID_SYSTEM ||
+ callerUid == AID_MEDIA_CODEC);
+
+ if (code == CONNECT_HWC_CLIENT) {
+ CHECK_INTERFACE(IQService, data, reply);
+ if(callerUid != AID_GRAPHICS) {
+ ALOGE("display.qservice CONNECT_HWC_CLIENT access denied: pid=%d uid=%d",
+ callerPid, callerUid);
+ return PERMISSION_DENIED;
+ }
+ sp<IQClient> client =
+ interface_cast<IQClient>(data.readStrongBinder());
+ connect(client);
+ return NO_ERROR;
+ } else if(code == CONNECT_HDMI_CLIENT) {
+ CHECK_INTERFACE(IQService, data, reply);
+ if(callerUid != AID_SYSTEM && callerUid != AID_ROOT) {
+ ALOGE("display.qservice CONNECT_HDMI_CLIENT access denied: pid=%d uid=%d",
+ callerPid, callerUid);
+ return PERMISSION_DENIED;
+ }
+ sp<IQHDMIClient> client =
+ interface_cast<IQHDMIClient>(data.readStrongBinder());
+ connect(client);
+ return NO_ERROR;
+ } else if (code > COMMAND_LIST_START && code < COMMAND_LIST_END) {
+ if(!permission) {
+ ALOGE("display.qservice access denied: command=%d pid=%d uid=%d",
+ code, callerPid, callerUid);
+ return PERMISSION_DENIED;
+ }
+ CHECK_INTERFACE(IQService, data, reply);
+ dispatch(code, &data, reply);
+ return NO_ERROR;
+ } else {
+ return BBinder::onTransact(code, data, reply, flags);
+ }
+}
+
+}; // namespace qService
diff --git a/libqservice/IQService.h b/libqservice/IQService.h
new file mode 100644
index 0000000..1236ed5
--- /dev/null
+++ b/libqservice/IQService.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2012-2014, 2016-2019 The Linux Foundation. All rights reserved.
+ *
+ * Not a Contribution, Apache license notifications and license are
+ * retained for attribution purposes only.
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_IQSERVICE_H
+#define ANDROID_IQSERVICE_H
+
+#include <stdint.h>
+#include <sys/types.h>
+#include <utils/Errors.h>
+#include <utils/RefBase.h>
+#include <binder/IInterface.h>
+#include <binder/IBinder.h>
+#include <IQClient.h>
+#include <IQHDMIClient.h>
+
+
+namespace qService {
+// ----------------------------------------------------------------------------
+
+class IQService : public android::IInterface
+{
+public:
+ DECLARE_META_INTERFACE(QService);
+ enum {
+ COMMAND_LIST_START = android::IBinder::FIRST_CALL_TRANSACTION,
+ GET_PANEL_BRIGHTNESS = 2, // Provides ability to set the panel brightness
+ SET_PANEL_BRIGHTNESS = 3, // Provides ability to get the panel brightness
+ CONNECT_HWC_CLIENT = 4, // Connect to qservice
+ SCREEN_REFRESH = 5, // Refresh screen through SF invalidate
+ EXTERNAL_ORIENTATION = 6,// Set external orientation
+ BUFFER_MIRRORMODE = 7, // Buffer mirrormode
+ CHECK_EXTERNAL_STATUS = 8,// Check status of external display
+ GET_DISPLAY_ATTRIBUTES = 9,// Get display attributes
+ SET_HSIC_DATA = 10, // Set HSIC on dspp
+ GET_DISPLAY_VISIBLE_REGION = 11,// Get the visibleRegion for dpy
+ SET_SECONDARY_DISPLAY_STATUS = 12,// Sets secondary display status
+ SET_MAX_PIPES_PER_MIXER = 13,// Set max pipes per mixer for MDPComp
+ SET_VIEW_FRAME = 14, // Set view frame of display
+ DYNAMIC_DEBUG = 15, // Enable more logging on the fly
+ SET_IDLE_TIMEOUT = 16, // Set idle timeout for GPU fallback
+ TOGGLE_BWC = 17, // Toggle BWC On/Off on targets that support
+ /* Enable/Disable/Set refresh rate dynamically */
+ CONFIGURE_DYN_REFRESH_RATE = 18,
+ CONTROL_PARTIAL_UPDATE = 19, // Provides ability to enable/disable partial update
+ TOGGLE_SCREEN_UPDATES = 20, // Provides ability to pause/resume display updates
+ SET_FRAME_DUMP_CONFIG = 21, // Provides ability to set the frame dump config
+ SET_S3D_MODE = 22, // Set the 3D mode as specified in msm_hdmi_modes.h
+ CONNECT_HDMI_CLIENT = 23, // Connect HDMI CEC HAL Client
+ QDCM_SVC_CMDS = 24, // request QDCM services.
+ SET_ACTIVE_CONFIG = 25, //Set a specified display config
+ GET_ACTIVE_CONFIG = 26, //Get the current config index
+ GET_CONFIG_COUNT = 27, //Get the number of supported display configs
+ GET_DISPLAY_ATTRIBUTES_FOR_CONFIG = 28, //Get attr for specified config
+ SET_DISPLAY_MODE = 29, // Set display mode to command or video mode
+ SET_CAMERA_STATUS = 30, // To notify display when camera is on and off
+ MIN_HDCP_ENCRYPTION_LEVEL_CHANGED = 31,
+ GET_BW_TRANSACTION_STATUS = 32, //Client can query BW transaction status.
+ SET_LAYER_MIXER_RESOLUTION = 33, // Enables client to set layer mixer resolution.
+ SET_COLOR_MODE = 34, // Overrides the QDCM mode on the display
+ GET_HDR_CAPABILITIES = 35, // Get HDR capabilities for legacy HWC interface
+ SET_COLOR_MODE_BY_ID = 36, // Overrides the QDCM mode using the given mode ID
+ GET_COMPOSER_STATUS = 37, // Get composer init status-true if primary display init is done
+ SET_QSYNC_MODE = 38, // Set qsync mode. 0 - (none)disable qsync, 1 - continuous mode.
+ SET_COLOR_MODE_WITH_RENDER_INTENT = 39,
+ SET_IDLE_PC = 40, // Enable/disable Idle power collapse
+ SET_DPPS_AD4_ROI_CONFIG = 41, // Set ad4 roi config for debug
+ SET_DSI_CLK = 42, // Set DSI Clk.
+ GET_DSI_CLK = 43, // Get DSI Clk.
+ GET_SUPPORTED_DSI_CLK = 44, // Get supported DSI Clk.
+ SET_COLOR_MODE_FROM_CLIENT = 45, // Overrides the QDCM mode using the given mode ID
+ SET_PANEL_LUMINANCE = 46, // Set Panel Luminance attributes.
+ COMMAND_LIST_END = 400,
+ };
+
+ enum {
+ END = 0,
+ START,
+ };
+
+ enum {
+ DEBUG_ALL,
+ DEBUG_MDPCOMP,
+ DEBUG_VSYNC,
+ DEBUG_VD,
+ DEBUG_PIPE_LIFECYCLE,
+ DEBUG_DRIVER_CONFIG,
+ DEBUG_ROTATOR,
+ DEBUG_QDCM,
+ DEBUG_SCALAR,
+ DEBUG_CLIENT,
+ DEBUG_DISPLAY,
+ DEBUG_MAX_VAL = DEBUG_DISPLAY, // Used to check each bit of the debug command paramater.
+ // Update DEBUG_MAX_VAL when adding new debug tag.
+ };
+
+ enum {
+ PREF_POST_PROCESSING,
+ PREF_PARTIAL_UPDATE,
+ ENABLE_PARTIAL_UPDATE,
+ };
+
+ enum {
+ QSYNC_MODE_NONE,
+ QSYNC_MODE_CONTINUOUS,
+ QSYNC_MODE_ONESHOT, // Not supported
+ };
+
+ // Register a HWC client that can be notified
+ // This client is generic and is intended to get
+ // dispatches of all events calling into QService
+ virtual void connect(const android::sp<qClient::IQClient>& client) = 0;
+ // Register an HDMI client. This client gets notification of HDMI events
+ // such as plug/unplug and CEC messages
+ virtual void connect(const android::sp<qClient::IQHDMIClient>& client) = 0;
+ // Generic function to dispatch binder commands
+ // The type of command decides how the data is parceled
+ virtual android::status_t dispatch(uint32_t command,
+ const android::Parcel* inParcel,
+ android::Parcel* outParcel) = 0;
+};
+
+// ----------------------------------------------------------------------------
+
+class BnQService : public android::BnInterface<IQService>
+{
+public:
+ virtual android::status_t onTransact( uint32_t code,
+ const android::Parcel& data,
+ android::Parcel* reply,
+ uint32_t flags = 0);
+};
+
+// ----------------------------------------------------------------------------
+}; // namespace qService
+
+#endif // ANDROID_IQSERVICE_H
diff --git a/libqservice/Makefile.am b/libqservice/Makefile.am
new file mode 100644
index 0000000..a8c9f6a
--- /dev/null
+++ b/libqservice/Makefile.am
@@ -0,0 +1,21 @@
+h_sources = IQService.h \
+ IQClient.h \
+ QService.h \
+ QServiceUtils.h \
+ IQHDMIClient.h
+
+cpp_sources = QService.cpp \
+ IQService.cpp \
+ IQClient.cpp \
+ IQHDMIClient.cpp
+
+qservice_includedir = $(pkgincludedir)/display
+qservice_include_HEADERS = $(h_sources)
+
+lib_LTLIBRARIES = libqservice.la
+libqservice_la_CC = @CC@
+libqservice_la_SOURCES = $(cpp_sources)
+libqservice_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"qdqservice\"
+libqservice_la_CPPFLAGS = $(AM_CPPFLAGS)
+libqservice_la_LIBADD = -lhardware -lcutils -llog -lbinder
+libqservice_la_LDFLAGS = -shared -avoid-version
\ No newline at end of file
diff --git a/libqservice/QService.cpp b/libqservice/QService.cpp
new file mode 100644
index 0000000..546ad7e
--- /dev/null
+++ b/libqservice/QService.cpp
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2012-2014, 2016, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#include <QService.h>
+#include <binder/Parcel.h>
+#include <binder/IPCThreadState.h>
+
+#define QSERVICE_DEBUG 0
+
+using namespace android;
+
+namespace qService {
+
+QService* QService::sQService = NULL;
+// ----------------------------------------------------------------------------
+QService::QService()
+{
+ ALOGD_IF(QSERVICE_DEBUG, "QService Constructor invoked");
+}
+
+QService::~QService()
+{
+ ALOGD_IF(QSERVICE_DEBUG,"QService Destructor invoked");
+}
+
+void QService::connect(const sp<qClient::IQClient>& client) {
+ ALOGD_IF(QSERVICE_DEBUG,"HWC client connected");
+ mClient = client;
+}
+
+void QService::connect(const sp<qClient::IQHDMIClient>& client) {
+ ALOGD_IF(QSERVICE_DEBUG,"HDMI client connected");
+ mHDMIClient = client;
+}
+
+status_t QService::dispatch(uint32_t command, const Parcel* inParcel,
+ Parcel* outParcel) {
+ status_t err = (status_t) FAILED_TRANSACTION;
+ IPCThreadState* ipc = IPCThreadState::self();
+ //Rewind parcel in case we're calling from the same process
+ bool sameProcess = (ipc->getCallingPid() == getpid());
+ if(sameProcess)
+ inParcel->setDataPosition(0);
+ if (mClient.get()) {
+ ALOGD_IF(QSERVICE_DEBUG, "Dispatching command: %d", command);
+ err = mClient->notifyCallback(command, inParcel, outParcel);
+ //Rewind parcel in case we're calling from the same process
+ if (sameProcess)
+ outParcel->setDataPosition(0);
+ }
+ return err;
+}
+
+void QService::onHdmiHotplug(int connected) {
+ if(mHDMIClient.get()) {
+ ALOGD_IF(QSERVICE_DEBUG, "%s: HDMI hotplug", __FUNCTION__);
+ mHDMIClient->onHdmiHotplug(connected);
+ } else {
+ ALOGW("%s: Failed to get a valid HDMI client", __FUNCTION__);
+ }
+}
+
+void QService::onCECMessageReceived(char *msg, ssize_t len) {
+ if(mHDMIClient.get()) {
+ ALOGD_IF(QSERVICE_DEBUG, "%s: CEC message received", __FUNCTION__);
+ mHDMIClient->onCECMessageRecieved(msg, len);
+ } else {
+ ALOGW("%s: Failed to get a valid HDMI client", __FUNCTION__);
+ }
+}
+
+
+void QService::init()
+{
+ if(!sQService) {
+ sQService = new QService();
+ sp<IServiceManager> sm = defaultServiceManager();
+ sm->addService(String16("display.qservice"), sQService);
+ if(sm->checkService(String16("display.qservice")) != NULL)
+ ALOGD_IF(QSERVICE_DEBUG, "adding display.qservice succeeded");
+ else
+ ALOGD_IF(QSERVICE_DEBUG, "adding display.qservice failed");
+ }
+}
+
+}
diff --git a/libqservice/QService.h b/libqservice/QService.h
new file mode 100644
index 0000000..6bb4d7d
--- /dev/null
+++ b/libqservice/QService.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2012-2013, 2016, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef ANDROID_QSERVICE_H
+#define ANDROID_QSERVICE_H
+
+#include <utils/Errors.h>
+#include <sys/types.h>
+#include <log/log.h>
+#include <binder/IServiceManager.h>
+#include <IQService.h>
+#include <IQClient.h>
+
+struct hwc_context_t;
+
+namespace qService {
+// ----------------------------------------------------------------------------
+
+class QService : public BnQService {
+public:
+ virtual ~QService();
+ virtual void connect(const android::sp<qClient::IQClient>& client);
+ virtual void connect(const android::sp<qClient::IQHDMIClient>& client);
+ virtual android::status_t dispatch(uint32_t command,
+ const android::Parcel* data,
+ android::Parcel* reply);
+ virtual void onHdmiHotplug(int connected);
+ virtual void onCECMessageReceived(char *msg, ssize_t len);
+ static void init();
+private:
+ QService();
+ android::sp<qClient::IQClient> mClient;
+ android::sp<qClient::IQHDMIClient> mHDMIClient;
+ static QService *sQService;
+};
+}; // namespace qService
+#endif // ANDROID_QSERVICE_H
diff --git a/libqservice/QServiceUtils.h b/libqservice/QServiceUtils.h
new file mode 100644
index 0000000..61ff037
--- /dev/null
+++ b/libqservice/QServiceUtils.h
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2013-14, 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef QSERVICEUTILS_H
+#define QSERVICEUTILS_H
+#include <binder/Parcel.h>
+#include <binder/IServiceManager.h>
+#include <utils/RefBase.h>
+#include <IQService.h>
+
+// ----------------------------------------------------------------------------
+// Helpers
+// ----------------------------------------------------------------------------
+inline android::sp<qService::IQService> getBinder() {
+ android::sp<android::IServiceManager> sm = android::defaultServiceManager();
+ android::sp<qService::IQService> binder =
+ android::interface_cast<qService::IQService>
+ (sm->getService(android::String16("display.qservice")));
+ if (binder == NULL) {
+ ALOGE("%s: invalid binder object", __FUNCTION__);
+ }
+ return binder;
+}
+
+inline android::status_t sendSingleParam(uint32_t command, uint32_t value) {
+ android::status_t err = (android::status_t) android::FAILED_TRANSACTION;
+ android::sp<qService::IQService> binder = getBinder();
+ android::Parcel inParcel, outParcel;
+ inParcel.writeInt32(value);
+ if(binder != NULL) {
+ err = binder->dispatch(command, &inParcel , &outParcel);
+ }
+ return err;
+}
+
+// ----------------------------------------------------------------------------
+// Convenience wrappers that clients can call
+// ----------------------------------------------------------------------------
+inline android::status_t screenRefresh(int dpy) {
+ return sendSingleParam(qService::IQService::SCREEN_REFRESH, dpy);
+}
+
+inline android::status_t toggleScreenUpdate(uint32_t on) {
+ return sendSingleParam(qService::IQService::TOGGLE_SCREEN_UPDATES, on);
+}
+
+inline android::status_t setExtOrientation(uint32_t orientation) {
+ return sendSingleParam(qService::IQService::EXTERNAL_ORIENTATION,
+ orientation);
+}
+
+inline android::status_t setBufferMirrorMode(uint32_t enable) {
+ return sendSingleParam(qService::IQService::BUFFER_MIRRORMODE, enable);
+}
+
+inline android::status_t setCameraLaunchStatus(uint32_t on) {
+ return sendSingleParam(qService::IQService::SET_CAMERA_STATUS, on);
+}
+
+inline bool displayBWTransactionPending() {
+ android::status_t err = (android::status_t) android::FAILED_TRANSACTION;
+ bool ret = false;
+ android::sp<qService::IQService> binder = getBinder();
+ android::Parcel inParcel, outParcel;
+ if(binder != NULL) {
+ err = binder->dispatch(qService::IQService::GET_BW_TRANSACTION_STATUS,
+ &inParcel , &outParcel);
+ if(err != android::NO_ERROR){
+ ALOGE("GET_BW_TRANSACTION_STATUS binder call failed err=%d", err);
+ return ret;
+ }
+ }
+ ret = outParcel.readInt32();
+ return ret;
+}
+#endif /* end of include guard: QSERVICEUTILS_H */
diff --git a/sdm/include/core/buffer_allocator.h b/sdm/include/core/buffer_allocator.h
new file mode 100644
index 0000000..54fcf97
--- /dev/null
+++ b/sdm/include/core/buffer_allocator.h
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2015 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+/*! @file buffer_allocator.h
+ @brief Interface file for platform specific buffer allocator.
+
+ @details This interface is used by SDM to allocate internal buffers.
+*/
+
+#ifndef __BUFFER_ALLOCATOR_H__
+#define __BUFFER_ALLOCATOR_H__
+
+#include <cstddef>
+#include "layer_buffer.h"
+
+namespace sdm {
+/*! @brief Input configuration set by the client for buffer allocation.
+
+ @sa BufferInfo::BufferConfig
+*/
+
+struct BufferConfig {
+ uint32_t width = 0; //!< Specifies buffer width for buffer allocation.
+ uint32_t height = 0; //!< Specifies buffer height for buffer allocation.
+ LayerBufferFormat format = kFormatInvalid; //!< Specifies buffer format for buffer allocation.
+ uint32_t buffer_count = 0; //!< Specifies number of buffers to be allocated.
+ bool secure = false; //!< Specifies buffer to be allocated from
+ //!< secure region.
+ bool cache = false; //!< Specifies whether the buffer needs to be cache.
+ bool secure_camera = false; //!< Specifies buffer to be allocated from specific
+ //!< secure heap and with a specific alignment.
+ bool gfx_client = false; //!< Specifies whether buffer is used by gfx.
+};
+
+/*! @brief Holds the information about the allocated buffer.
+
+ @sa BufferAllocator::AllocateBuffer
+ @sa BufferAllocator::FreeBuffer
+ @sa BufferAllocator::GetAllocatedBufferInfo
+*/
+struct AllocatedBufferInfo {
+ int fd = -1; //!< Specifies the fd of the allocated buffer.
+ uint32_t stride = 0; //!< Specifies allocated buffer stride in bytes.
+ uint32_t aligned_width = 0; //!< Specifies aligned allocated buffer width in pixels.
+ uint32_t aligned_height = 0; //!< Specifies aligned allocated buffer height in pixels.
+ LayerBufferFormat format = kFormatInvalid; // Specifies buffer format for allocated buffer.
+ uint32_t size = 0; //!< Specifies the size of the allocated buffer.
+ uint64_t id = 0; //!< Specifies the Id of the allocated buffer.
+};
+
+/*! @brief Holds the information about the input/output configuration of an output buffer.
+
+ @sa BufferAllocator::AllocateBuffer
+ @sa BufferAllocator::FreeBuffer
+*/
+struct BufferInfo {
+ BufferConfig buffer_config; //!< Specifies configuration of a buffer to be allocated.
+ AllocatedBufferInfo alloc_buffer_info; //!< Specifies buffer information of allocated buffer.
+
+ void *private_data = NULL; //!< Pointer to private data.
+};
+
+/*! @brief Buffer allocator implemented by the client
+
+ @details This class declares prototype for BufferAllocator methods which must be
+ implemented by the client. Buffer manager in display manager will use these methods to
+ allocate/deallocate buffers for display manager.
+
+ @sa CoreInterface::CreateCore
+*/
+class BufferAllocator {
+ public:
+ /*! @brief Method to allocate ouput buffer for the given input configuration.
+
+ @details This method allocates memory based on input configuration.
+
+ @param[in] buffer_info \link BufferInfo \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError AllocateBuffer(BufferInfo *buffer_info) = 0;
+
+
+ /*! @brief Method to deallocate the ouput buffer.
+
+ @details This method deallocates the memory allocated using AllocateBuffer method.
+
+ @param[in] buffer_info \link BufferInfo \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError FreeBuffer(BufferInfo *buffer_info) = 0;
+
+
+ /*! @brief Method to get the buffer size.
+
+ @details This method returns buffer size for a specific configuration mentioned in buffer info.
+
+ @param[in] buffer_info \link BufferInfo \endlink
+
+ @return \link unsigned int \endlink
+ */
+ virtual uint32_t GetBufferSize(BufferInfo *buffer_info) = 0;
+
+ /*! @brief Method to Get the AllocatedBufferInfo only.
+
+ @details This method populates the AllocatedBufferInfo as per the configuration in BufferInfo,
+ but fd will be invalid.
+
+ @param[in] buffer_info \link BufferInfo \endlink
+
+ @param[out] allocated_buffer_info \link AllocatedBufferInfo \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetAllocatedBufferInfo(const BufferConfig &buffer_config,
+ AllocatedBufferInfo *allocated_buffer_info) = 0;
+
+ /*
+ * Retuns a buffer's layout in terms of number of planes, stride and offset of each plane
+ * Input: AllocatedBufferInfo with a valid aligned width, aligned height, SDM format
+ * Output: stride for each plane, offset of each plane from base, number of planes
+ */
+ virtual DisplayError GetBufferLayout(const AllocatedBufferInfo &buf_info,
+ uint32_t stride[4], uint32_t offset[4],
+ uint32_t *num_planes) {
+ (void) buf_info;
+ (void) stride;
+ (void) offset;
+ (void) num_planes;
+ return kErrorNotSupported; }
+
+ protected:
+ virtual ~BufferAllocator() { }
+};
+
+} // namespace sdm
+
+#endif // __BUFFER_ALLOCATOR_H__
+
diff --git a/sdm/include/core/buffer_sync_handler.h b/sdm/include/core/buffer_sync_handler.h
new file mode 100644
index 0000000..1dc5413
--- /dev/null
+++ b/sdm/include/core/buffer_sync_handler.h
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+/*! @file buffer_sync_handler.h
+ @brief Interface file for platform specific buffer allocator.
+
+ @details SDM will use this interface to wait for buffer sync fd to be signaled/merge
+ the two buffer sync fds into one.
+*/
+
+#ifndef __BUFFER_SYNC_HANDLER_H__
+#define __BUFFER_SYNC_HANDLER_H__
+
+#include "sdm_types.h"
+
+namespace sdm {
+
+/*! @brief Buffer sync handler implemented by the client
+
+ @details This class declares prototype for BufferSyncHandler methods which must be
+ implemented by the client. SDM will use these methods to wait for buffer sync fd to be
+ signaled/merge two buffer sync fds into one.
+
+ @sa CoreInterface::CreateCore
+*/
+class BufferSyncHandler {
+ public:
+ /*! @brief Method to wait for ouput buffer to be released.
+
+ @details This method waits for fd to be signaled by the producer/consumer.
+ It is responsibility of the caller to close file descriptor.
+
+ @param[in] fd
+
+ @return \link DisplayError \endlink
+ */
+
+ virtual DisplayError SyncWait(int fd) = 0;
+
+ /*! @brief Method to merge two sync fds into one sync fd
+
+ @details This method merges two buffer sync fds into one sync fd, if a producer/consumer
+ requires to wait for more than one sync fds. It is responsibility of the caller to close file
+ descriptor.
+
+ @param[in] fd1
+ @param[in] fd2
+ @param[out] merged_fd
+
+ @return \link DisplayError \endlink
+ */
+
+ virtual DisplayError SyncMerge(int fd1, int fd2, int *merged_fd) = 0;
+
+ /*! @brief Method to detect if sync fd is signaled
+
+ @details This method detects if sync fd is signaled. It is responsibility of the caller to
+ close file descriptor.
+
+ @param[in] fd
+
+ @return \link Tue if fd has been signaled \endlink
+ */
+ virtual bool IsSyncSignaled(int fd) = 0;
+
+ protected:
+ virtual ~BufferSyncHandler() { }
+};
+
+} // namespace sdm
+
+#endif // __BUFFER_SYNC_HANDLER_H__
+
diff --git a/sdm/include/core/core_interface.h b/sdm/include/core/core_interface.h
new file mode 100644
index 0000000..2165155
--- /dev/null
+++ b/sdm/include/core/core_interface.h
@@ -0,0 +1,270 @@
+/*
+* Copyright (c) 2014 - 2016, 2018 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+/*! @file core_interface.h
+ @brief Interface file for core of the display subsystem.
+
+ @details Display core is primarily used for loading and unloading different display device
+ components viz primary, external and virtual. Display core is a statically linked library which
+ runs in caller's process context.
+*/
+#ifndef __CORE_INTERFACE_H__
+#define __CORE_INTERFACE_H__
+
+#include <stdint.h>
+#include <map>
+#include <vector>
+
+#include "display_interface.h"
+#include "sdm_types.h"
+#include "buffer_allocator.h"
+#include "buffer_sync_handler.h"
+#include "socket_handler.h"
+
+/*! @brief Display manager interface version.
+
+ @details Display manager interfaces are version tagged to maintain backward compatibility. This
+ version is supplied as a default argument during display core initialization.
+
+ Client may use an older version of interfaces and link to a higher version of display manager
+ library, but vice versa is not allowed.
+
+ A 32-bit client must use 32-bit display core library and a 64-bit client must use 64-bit display
+ core library.
+
+ Display manager interfaces follow default data structures alignment. Client must not override the
+ default padding rules while using these interfaces.
+
+ @warning It is assumed that client upgrades or downgrades display core interface all at once
+ and recompile all binaries which use these interfaces. Mix and match of these interfaces can
+ lead to unpredictable behaviour.
+
+ @sa CoreInterface::CreateCore
+*/
+#define SDM_REVISION_MAJOR (1)
+#define SDM_REVISION_MINOR (0)
+
+#define SDM_VERSION_TAG ((uint32_t) ((SDM_REVISION_MAJOR << 24) | (SDM_REVISION_MINOR << 16) | \
+ (sizeof(SDMCompatibility) << 8) | sizeof(int *)))
+
+namespace sdm {
+
+/*! @brief This enum represents max bandwidth limit mode.
+
+ @sa DisplayInterface::SetMaxBandwidthMode
+*/
+enum HWBwModes {
+ kBwDefault, //!< Default state. No change in device bandwidth limit.
+ kBwCamera, //!< Camera is on. Bandwidth limit should be reduced accordingly.
+ kBwVFlip, //!< VFlip is required. Reduce bandwidth limit accordingly.
+ kBwHFlip, //!< HFlip is required. Reduce bandwidth limit accordingly.
+ kBwModeMax, //!< Limiter for maximum available bandwidth modes.
+};
+
+/*! @brief Information on hardware for the first display
+
+ @details This structure returns the display type of the first display on the device
+ (internal display or HDMI etc) and whether it is currently connected.
+*/
+struct HWDisplayInterfaceInfo {
+ DisplayType type = kDisplayTypeMax;
+ bool is_connected = false;
+};
+
+/*! @brief Information about a single display/monitor/screen
+
+ @details This structure returns the display configuration and status of a single display. A
+ list of this structure type 'HWDisplaysInfo' is used to return information on all available
+ displays. See \link HWDisplaysInfo \endlink
+*/
+struct HWDisplayInfo {
+ int32_t display_id = -1; //!< ID of this display (Display ID).
+ DisplayType display_type = kDisplayTypeMax; //!< Type of display: BuiltIn/Pluggable/Virtual
+ bool is_connected = false; //!< Connection status of the display.
+ bool is_primary = false; //!< True only if this is the main display of the
+ //!< device.
+ bool is_wb_ubwc_supported = true; //!< check hardware wb ubwc support
+};
+
+/*! @brief Information on all displays as a map with display_id as key.
+
+ @details This map returns the display configuration and status of all displays.
+*/
+typedef std::map<int32_t, HWDisplayInfo> HWDisplaysInfo;
+
+/*! @brief Display core interface.
+
+ @details This class defines display core interfaces. It contains methods which client shall use
+ to create/destroy different display devices. This interface is created during display core
+ CreateCore() and remains valid until DestroyCore().
+
+ @sa CoreInterface::CreateCore
+ @sa CoreInterface::DestroyCore
+*/
+class CoreInterface {
+ public:
+ /*! @brief Method to create and get handle to display core interface.
+
+ @details This method is the entry point into the display core. Client can create and operate on
+ different display devices only through a valid interface handle obtained using this method. An
+ object of display core is created and handle to this object is returned via output parameter.
+ This interface shall be called only once.
+
+ @param[in] buffer_allocator \link BufferAllocator \endlink
+ @param[in] buffer_sync_handler \link BufferSyncHandler \endlink
+ @param[in] socket_handler \link SocketHandler \endlink
+ @param[out] interface \link CoreInterface \endlink
+ @param[in] version \link SDM_VERSION_TAG \endlink. Client must not override this argument.
+
+ @return \link DisplayError \endlink
+
+ @sa DestroyCore
+ */
+ static DisplayError CreateCore(BufferAllocator *buffer_allocator,
+ BufferSyncHandler *buffer_sync_handler,
+ SocketHandler *socket_handler, CoreInterface **interface,
+ uint32_t version = SDM_VERSION_TAG);
+
+ /*! @brief Method to release handle to display core interface.
+
+ @details The object of corresponding display core is destroyed when this method is invoked.
+ Client must explicitly destroy all created display device objects associated with this handle
+ before invoking this method.
+
+ @param[in] interface \link CoreInterface \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa CreateCore
+ */
+ static DisplayError DestroyCore();
+
+ /*! @brief Method to create a display device for a given type.
+
+ @details Client shall use this method to create each of the connected display type. A handle to
+ interface associated with this object is returned via output parameter which can be used to
+ interact further with the display device.
+
+ @param[in] type \link DisplayType \endlink
+ @param[in] event_handler \link DisplayEventHandler \endlink
+ @param[out] interface \link DisplayInterface \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa DestroyDisplay
+ */
+ virtual DisplayError CreateDisplay(DisplayType type, DisplayEventHandler *event_handler,
+ DisplayInterface **interface) = 0;
+
+ /*! @brief Method to create a display device for a given display ID.
+
+ @details Client shall use this method to create a DisplayInterface to a discovered display
+ identified by its display ID. A handle to the DisplayInterface is returned via the 'interface'
+ output parameter which can be used to interact further with the display device. Displays and
+ their IDs must be discovered using GetDisplaysStatus().
+
+ @param[in] display_id A display ID got from \link GetDisplaysStatus() \endlink
+ @param[in] event_handler \link DisplayEventHandler \endlink
+ @param[out] interface \link DisplayInterface \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa DestroyDisplay
+ */
+ virtual DisplayError CreateDisplay(int32_t display_id, DisplayEventHandler *event_handler,
+ DisplayInterface **interface) = 0;
+
+ /*! @brief Method to destroy a display device.
+
+ @details Client shall use this method to destroy each of the created display device objects.
+
+ @param[in] interface \link DisplayInterface \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa CreateDisplay
+ */
+ virtual DisplayError DestroyDisplay(DisplayInterface *interface) = 0;
+
+ /*! @brief Method to update the bandwidth limit as per given mode.
+
+ @param[in] mode indicate the mode or use case
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetMaxBandwidthMode(HWBwModes mode) = 0;
+
+ /*! @brief Method to get characteristics of the first display.
+
+ @details Client shall use this method to determine if the first display is HDMI, and whether
+ it is currently connected.
+
+ @param[in] hw_disp_info structure that this method will fill up with info.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetFirstDisplayInterfaceType(HWDisplayInterfaceInfo *hw_disp_info) = 0;
+
+ /*! @brief Method to get an up-to-date list of all available displays.
+
+ @details Client shall use this method to get the updated list of all available displays and
+ their properties, usually in response to a hot-plug event. Client must use one of the returned
+ HWDisplayInfo::display_ids when using CreateDisplay(int32_t display_id, ...) to create the
+ DisplayInterface to the display.
+
+ @param[out] hw_displays_info \link HWDisplaysInfo \endlink which is a map of \link HWDisplayInfo
+ \endlink structures with display_id as the key.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetDisplaysStatus(HWDisplaysInfo *hw_displays_info) = 0;
+
+ /*! @brief Method to get the maximum supported number of concurrent displays of a particular type.
+
+ @details Client shall use this method to get the maximum number of DisplayInterface instances
+ that can be created for a particular \link DisplayType \endlink display. For the maximum
+ number of concurrent DisplayInterfaces supported of all types, call with type kDisplayTypeMax.
+
+ @param[in] type Type of display: BuiltIn/Pluggable/Virtual/kDisplayTypeMax
+ key.
+
+ @param[out] max_displays Maximum number of DisplayInterface instances possible.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetMaxDisplaysSupported(DisplayType type, int32_t *max_displays) = 0;
+
+ protected:
+ virtual ~CoreInterface() { }
+};
+
+} // namespace sdm
+
+#endif // __CORE_INTERFACE_H__
+
diff --git a/sdm/include/core/display_interface.h b/sdm/include/core/display_interface.h
new file mode 100644
index 0000000..8341f52
--- /dev/null
+++ b/sdm/include/core/display_interface.h
@@ -0,0 +1,881 @@
+/*
+* Copyright (c) 2014 - 2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+/*! @file display_interface.h
+ @brief Interface file for display device which represents a physical panel or an output buffer
+ where contents can be rendered.
+
+ @details Display device is used to send layer buffers for composition and get them rendered onto
+ the target device. Each display device represents a unique display target which may be either a
+ physical panel or an output buffer..
+*/
+#ifndef __DISPLAY_INTERFACE_H__
+#define __DISPLAY_INTERFACE_H__
+
+#include <stdint.h>
+#include <string>
+#include <vector>
+#include <utility>
+
+#include "layer_stack.h"
+#include "sdm_types.h"
+
+namespace sdm {
+
+typedef std::vector<std::pair<std::string, std::string>> AttrVal;
+
+/*! @brief This enum represents display device types where contents can be rendered.
+
+ @sa CoreInterface::CreateDisplay
+ @sa CoreInterface::IsDisplaySupported
+*/
+enum DisplayType {
+ kPrimary, //!< Main physical display which is attached to the handheld device.
+ kBuiltIn = kPrimary, //!< Type name for all non-detachable physical displays. Use kBuiltIn
+ //!< instead of kPrimary.
+ kHDMI, //!< HDMI physical display which is generally detachable.
+ kPluggable = kHDMI, //!< Type name for all pluggable physical displays. Use kPluggable
+ //!< instead of kHDMI.
+ kVirtual, //!< Contents would be rendered into the output buffer provided by the
+ //!< client e.g. wireless display.
+ kDisplayMax,
+ kDisplayTypeMax = kDisplayMax
+};
+
+/*! @brief This enum represents states of a display device.
+
+ @sa DisplayInterface::GetDisplayState
+ @sa DisplayInterface::SetDisplayState
+*/
+enum DisplayState {
+ kStateOff, //!< Display is OFF. Contents are not rendered in this state. Client will not
+ //!< receive VSync events in this state. This is default state as well.
+
+ kStateOn, //!< Display is ON. Contents are rendered in this state.
+
+ kStateDoze, //!< Display is ON and it is configured in a low power state.
+
+ kStateDozeSuspend,
+ //!< Display is ON in a low power state and continue showing its current
+ //!< contents indefinitely until the mode changes.
+
+ kStateStandby, //!< Display is OFF. Client will continue to receive VSync events in this state
+ //!< if VSync is enabled. Contents are not rendered in this state.
+};
+
+/*! @brief This enum represents flags to override detail enhancer parameters.
+
+ @sa DisplayInterface::SetDetailEnhancerData
+*/
+enum DetailEnhancerOverrideFlags {
+ kOverrideDEEnable = 0x1, // Specifies to enable detail enhancer
+ kOverrideDESharpen1 = 0x2, // Specifies user defined Sharpening/smooth for noise
+ kOverrideDESharpen2 = 0x4, // Specifies user defined Sharpening/smooth for signal
+ kOverrideDEClip = 0x8, // Specifies user defined DE clip shift
+ kOverrideDELimit = 0x10, // Specifies user defined DE limit value
+ kOverrideDEThrQuiet = 0x20, // Specifies user defined DE quiet threshold
+ kOverrideDEThrDieout = 0x40, // Specifies user defined DE dieout threshold
+ kOverrideDEThrLow = 0x80, // Specifies user defined DE low threshold
+ kOverrideDEThrHigh = 0x100, // Specifies user defined DE high threshold
+ kOverrideDEFilterConfig = 0x200, // Specifies user defined scaling filter config
+ kOverrideDEMax = 0xFFFFFFFF,
+};
+
+/*! @brief This enum represents Y/RGB scaling filter configuration.
+
+ @sa DisplayInterface::SetDetailEnhancerData
+*/
+enum ScalingFilterConfig {
+ kFilterEdgeDirected,
+ kFilterCircular,
+ kFilterSeparable,
+ kFilterBilinear,
+ kFilterMax,
+};
+
+/*! @brief This enum represents the quality level of the content.
+
+ @sa DisplayInterface::SetDetailEnhancerData
+*/
+enum ContentQuality {
+ kContentQualityUnknown, // Default: high artifact and noise
+ kContentQualityLow, // Low quality content, high artifact and noise,
+ kContentQualityMedium, // Medium quality, medium artifact and noise,
+ kContentQualityHigh, // High quality content, low artifact and noise
+ kContentQualityMax,
+};
+
+/*! @brief This enum represents the display port.
+
+ @sa DisplayInterface::GetDisplayPort
+*/
+enum DisplayPort {
+ kPortDefault,
+ kPortDSI, // Display is connected to DSI port.
+ kPortDTV, // Display is connected to DTV port
+ kPortWriteBack, // Display is connected to writeback port
+ kPortLVDS, // Display is connected to LVDS port
+ kPortEDP, // Display is connected to EDP port
+ kPortDP, // Display is connected to DP port.
+};
+
+/*! @brief This enum represents the events received by Display HAL. */
+enum DisplayEvent {
+ kIdleTimeout, // Event triggered by Idle Timer.
+ kThermalEvent, // Event triggered by Thermal.
+ kIdlePowerCollapse, // Event triggered by Idle Power Collapse.
+ kPanelDeadEvent, // Event triggered by ESD.
+ kDisplayPowerResetEvent, // Event triggered by Hardware Recovery.
+ kInvalidateDisplay, // Event triggered to Invalidate display.
+};
+
+/*! @brief This enum represents the secure events received by Display HAL. */
+enum SecureEvent {
+ kSecureDisplayStart, // Client sets it to notify secure display session start
+ kSecureDisplayEnd, // Client sets it to notify secure display session end
+ kSecureEventMax,
+};
+
+/*! @brief This enum represents the QSync modes supported by the hardware. */
+enum QSyncMode {
+ kQSyncModeNone, // This is set by the client to disable qsync
+ kQSyncModeContinuous, // This is set by the client to enable qsync forever
+ kQsyncModeOneShot, // This is set by client to enable qsync only for current frame.
+ kQsyncModeOneShotContinuous, // This is set by client to enable qsync only for every commit.
+};
+
+/*! @brief This structure defines configuration for display dpps ad4 region of interest. */
+struct DisplayDppsAd4RoiCfg {
+ uint32_t h_start; //!< start in hotizontal direction
+ uint32_t h_end; //!< end in hotizontal direction
+ uint32_t v_start; //!< start in vertical direction
+ uint32_t v_end; //!< end in vertical direction
+ uint32_t factor_in; //!< the strength factor of inside ROI region
+ uint32_t factor_out; //!< the strength factor of outside ROI region
+};
+
+/*! @brief This structure defines configuration for fixed properties of a display device.
+
+ @sa DisplayInterface::GetConfig
+ @sa DisplayInterface::SetConfig
+*/
+struct DisplayConfigFixedInfo {
+ bool underscan = false; //!< If display support CE underscan.
+ bool secure = false; //!< If this display is capable of handling secure content.
+ bool is_cmdmode = false; //!< If panel is command mode panel.
+ bool hdr_supported = false; //!< if HDR is enabled
+ bool hdr_metadata_type_one = false; //!< Metadata type one obtained from HDR sink
+ uint32_t hdr_eotf = 0; //!< Electro optical transfer function
+ float max_luminance = 0.0f; //!< From Panel's peak luminance
+ float average_luminance = 0.0f; //!< From Panel's average luminance
+ float min_luminance = 0.0f; //!< From Panel's blackness level
+ bool partial_update = false; //!< If display supports Partial Update.
+};
+
+/*! @brief This structure defines configuration for variable properties of a display device.
+
+ @sa DisplayInterface::GetConfig
+ @sa DisplayInterface::SetConfig
+*/
+struct DisplayConfigGroupInfo {
+ uint32_t x_pixels = 0; //!< Total number of pixels in X-direction on the display panel.
+ uint32_t y_pixels = 0; //!< Total number of pixels in Y-direction on the display panel.
+ float x_dpi = 0.0f; //!< Dots per inch in X-direction.
+ float y_dpi = 0.0f; //!< Dots per inch in Y-direction.
+ bool is_yuv = false; //!< If the display output is in YUV format.
+ bool smart_panel = false; //!< If the display config has smart panel.
+
+ bool operator==(const DisplayConfigGroupInfo& info) const {
+ return ((x_pixels == info.x_pixels) && (y_pixels == info.y_pixels) && (x_dpi == info.x_dpi) &&
+ (y_dpi == info.y_dpi) && (is_yuv == info.is_yuv) && (smart_panel == info.smart_panel));
+ }
+};
+
+struct DisplayConfigVariableInfo : public DisplayConfigGroupInfo {
+ uint32_t fps = 0; //!< Frame rate per second.
+ uint32_t vsync_period_ns = 0; //!< VSync period in nanoseconds.
+
+ bool operator==(const DisplayConfigVariableInfo& info) const {
+ return ((x_pixels == info.x_pixels) && (y_pixels == info.y_pixels) && (x_dpi == info.x_dpi) &&
+ (y_dpi == info.y_dpi) && (fps == info.fps) && (vsync_period_ns == info.vsync_period_ns)
+ && (is_yuv == info.is_yuv) && (smart_panel == info.smart_panel));
+ }
+};
+
+/*! @brief Event data associated with VSync event.
+
+ @sa DisplayEventHandler::VSync
+*/
+struct DisplayEventVSync {
+ int64_t timestamp = 0; //!< System monotonic clock timestamp in nanoseconds.
+};
+
+/*! @brief The structure defines the user input for detail enhancer module.
+
+ @sa DisplayInterface::SetDetailEnhancerData
+*/
+struct DisplayDetailEnhancerData {
+ uint32_t override_flags = 0; // flags to specify which data to be set.
+ uint16_t enable = 0; // Detail enchancer enable
+ int16_t sharpen_level1 = 0; // Sharpening/smooth strenght for noise
+ int16_t sharpen_level2 = 0; // Sharpening/smooth strenght for signal
+ uint16_t clip = 0; // DE clip shift
+ uint16_t limit = 0; // DE limit value
+ uint16_t thr_quiet = 0; // DE quiet threshold
+ uint16_t thr_dieout = 0; // DE dieout threshold
+ uint16_t thr_low = 0; // DE low threshold
+ uint16_t thr_high = 0; // DE high threshold
+ int32_t sharp_factor = 50; // sharp_factor specifies sharpness/smoothness level,
+ // range -100..100 positive for sharpness and negative for
+ // smoothness
+ ContentQuality quality_level = kContentQualityUnknown;
+ // Specifies context quality level
+ ScalingFilterConfig filter_config = kFilterEdgeDirected;
+ // Y/RGB filter configuration
+};
+
+/*! @brief Display device event handler implemented by the client.
+
+ @details This class declares prototype for display device event handler methods which must be
+ implemented by the client. Display device will use these methods to notify events to the client.
+ Client must post heavy-weight event handling to a separate thread and unblock display manager
+ thread instantly.
+
+ @sa CoreInterface::CreateDisplay
+*/
+class DisplayEventHandler {
+ public:
+ /*! @brief Event handler for VSync event.
+
+ @details This event is dispatched on every vertical synchronization. The event is disabled by
+ default.
+
+ @param[in] vsync \link DisplayEventVSync \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa DisplayInterface::GetDisplayState
+ @sa DisplayInterface::SetDisplayState
+ */
+ virtual DisplayError VSync(const DisplayEventVSync &vsync) = 0;
+
+ /*! @brief Event handler for Refresh event.
+
+ @details This event is dispatched to trigger a screen refresh. Client must call Prepare() and
+ Commit() in response to it from a separate thread. There is no data associated with this
+ event.
+
+ @return \link DisplayError \endlink
+
+ @sa DisplayInterface::Prepare
+ @sa DisplayInterface::Commit
+ */
+ virtual DisplayError Refresh() = 0;
+
+ /*! @brief Event handler for CEC messages.
+
+ @details This event is dispatched to send CEC messages to the CEC HAL.
+
+ @param[in] message message to be sent
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError CECMessage(char *message) = 0;
+
+ /*! @brief Event handler for events received by Display HAL. */
+ virtual DisplayError HandleEvent(DisplayEvent event) = 0;
+
+ protected:
+ virtual ~DisplayEventHandler() { }
+};
+
+struct PPDisplayAPIPayload;
+struct PPPendingParams;
+
+/*! @brief Display device interface.
+
+ @details This class defines display device interface. It contains methods which client shall use
+ to configure or submit layers for composition on the display device. This interface is created
+ during display device creation and remains valid until destroyed.
+
+ @sa CoreInterface::CreateDisplay
+ @sa CoreInterface::DestroyDisplay
+*/
+class DisplayInterface {
+ public:
+ /*! @brief Method to determine hardware capability to compose layers associated with given frame.
+
+ @details Client shall send all layers associated with a frame targeted for current display
+ using this method and check the layers which can be handled completely in display manager.
+
+ Client shall mark composition type for one of the layer as kCompositionGPUTarget; the GPU
+ composed output would be rendered at the specified layer if some of the layers are not handled
+ by SDM.
+
+ Display manager will set each layer as kCompositionGPU or kCompositionSDE upon return. Client
+ shall render all the layers marked as kCompositionGPU using GPU.
+
+ This method can be called multiple times but only last call prevails. This method must be
+ followed by Commit().
+
+ @param[inout] layer_stack \link LayerStack \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa Commit
+ */
+ virtual DisplayError Prepare(LayerStack *layer_stack) = 0;
+
+ /*! @brief Method to commit layers of a frame submitted in a former call to Prepare().
+
+ @details Client shall call this method to submit layers for final composition. The composed
+ output would be displayed on the panel or written in output buffer.
+
+ Client must ensure that layer stack is same as previous call to Prepare.
+
+ This method shall be called only once for each frame.
+
+ In the event of an error as well, this call will cause any fences returned in the previous call
+ to Commit() to eventually become signaled, so the client's wait on fences can be released to
+ prevent deadlocks.
+
+ @param[in] layer_stack \link LayerStack \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa Prepare
+ */
+ virtual DisplayError Commit(LayerStack *layer_stack) = 0;
+
+ /*! @brief Method to flush any pending buffers/fences submitted previously via Commit() call.
+
+ @details Client shall call this method to request the Display manager to release all buffers and
+ respective fences currently in use. This operation may result in a blank display on the panel
+ until a new frame is submitted for composition.
+
+ For virtual displays this would result in output buffer getting cleared with border color.
+
+ @param[in] layer_stack \link LayerStack \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa Prepare
+ @sa Commit
+ */
+ virtual DisplayError Flush(LayerStack *layer_stack) = 0;
+
+ /*! @brief Method to get current state of the display device.
+
+ @param[out] state \link DisplayState \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa SetDisplayState
+ */
+ virtual DisplayError GetDisplayState(DisplayState *state) = 0;
+
+ /*! @brief Method to get number of configurations(variable properties) supported on the display
+ device.
+
+ @param[out] count Number of modes supported; mode index starts with 0.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count) = 0;
+
+ /*! @brief Method to get configuration for fixed properties of the display device.
+
+ @param[out] fixed_info \link DisplayConfigFixedInfo \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetConfig(DisplayConfigFixedInfo *fixed_info) = 0;
+
+ /*! @brief Method to get configuration for variable properties of the display device.
+
+ @param[in] index index of the mode
+ @param[out] variable_info \link DisplayConfigVariableInfo \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetConfig(uint32_t index, DisplayConfigVariableInfo *variable_info) = 0;
+
+ /*! @brief Method to get index of active configuration of the display device.
+
+ @param[out] index index of the mode corresponding to variable properties.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetActiveConfig(uint32_t *index) = 0;
+
+ /*! @brief Method to get VSync event state. Default event state is disabled.
+
+ @param[out] enabled vsync state
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetVSyncState(bool *enabled) = 0;
+
+ /*! @brief Method to set current state of the display device.
+
+ @param[in] state \link DisplayState \endlink
+ @param[in] flag to force full bridge teardown for pluggable displays, no-op for other displays,
+ if requested state is kStateOff
+ @param[in] pointer to release fence
+
+ @return \link DisplayError \endlink
+
+ @sa SetDisplayState
+ */
+ virtual DisplayError SetDisplayState(DisplayState state, bool teardown,
+ int *release_fence) = 0;
+
+ /*! @brief Method to set active configuration for variable properties of the display device.
+
+ @param[in] variable_info \link DisplayConfigVariableInfo \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetActiveConfig(DisplayConfigVariableInfo *variable_info) = 0;
+
+ /*! @brief Method to set active configuration for variable properties of the display device.
+
+ @param[in] index index of the mode corresponding to variable properties.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetActiveConfig(uint32_t index) = 0;
+
+ /*! @brief Method to set VSync event state. Default event state is disabled.
+
+ @param[out] enabled vsync state
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetVSyncState(bool enable) = 0;
+
+ /*! @brief Method to set idle timeout value. Idle fallback is disabled with timeout value 0.
+
+ @param[in] active_ms value in milliseconds.
+
+ @return \link void \endlink
+ */
+ virtual void SetIdleTimeoutMs(uint32_t active_ms) = 0;
+
+ /*! @brief Method to set maximum number of mixer stages for each display.
+
+ @param[in] max_mixer_stages maximum number of mixer stages.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetMaxMixerStages(uint32_t max_mixer_stages) = 0;
+
+ /*! @brief Method to control partial update feature for each display.
+
+ @param[in] enable partial update feature control flag
+ @param[out] pending whether the operation is completed or pending for completion
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending) = 0;
+
+ /*! @brief Method to disable partial update for at least 1 frame.
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError DisablePartialUpdateOneFrame() = 0;
+
+ /*! @brief Method to set the mode of the primary display.
+
+ @param[in] mode the new display mode.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetDisplayMode(uint32_t mode) = 0;
+
+ /*! @brief Method to get the min and max refresh rate of a display.
+
+ @param[out] min and max refresh rate.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate,
+ uint32_t *max_refresh_rate) = 0;
+
+ /*! @brief Method to set the refresh rate of a display.
+
+ @param[in] refresh_rate new refresh rate of the display.
+
+ @param[in] final_rate indicates whether refresh rate is final rate or can be changed by sdm
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetRefreshRate(uint32_t refresh_rate, bool final_rate) = 0;
+
+ /*! @brief Method to get the refresh rate of a display.
+
+ @param[in] refresh_rate refresh rate of the display.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetRefreshRate(uint32_t *refresh_rate) = 0;
+
+ /*! @brief Method to query whether scanning is support for the HDMI display.
+
+ @return \link DisplayError \endlink
+ */
+ virtual bool IsUnderscanSupported() = 0;
+
+ /*! @brief Method to set brightness of the builtin display.
+
+ @param[in] brightness the new backlight level 0.0f(min) to 1.0f(max) where -1.0f represents off.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetPanelBrightness(float brightness) = 0;
+
+ /*! @brief Method to notify display about change in min HDCP encryption level.
+
+ @param[in] min_enc_level minimum encryption level value.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) = 0;
+
+ /*! @brief Method to route display API requests to color service.
+
+ @param[in] in_payload \link PPDisplayAPIPayload \endlink
+ @param[out] out_payload \link PPDisplayPayload \endlink
+ @param[out] pending_action \link PPPendingParams \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
+ PPDisplayAPIPayload *out_payload,
+ PPPendingParams *pending_action) = 0;
+
+ /*! @brief Method to request the number of color modes supported.
+
+ @param[out] mode_count Number of modes
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetColorModeCount(uint32_t *mode_count) = 0;
+
+ /*! @brief Method to request the information of supported color modes.
+
+ @param[inout] mode_count Number of updated modes
+ @param[out] vector of mode strings
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetColorModes(uint32_t *mode_count,
+ std::vector<std::string> *color_modes) = 0;
+
+ /*! @brief Method to request the attributes of color mode.
+
+ @param[in] mode name
+ @param[out] vector of mode attributes
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetColorModeAttr(const std::string &color_mode,
+ AttrVal *attr_map) = 0;
+
+ /*! @brief Method to set the color mode
+
+ @param[in] mode_name Mode name which needs to be set
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetColorMode(const std::string &color_mode) = 0;
+
+ /*! @brief Method to set the color mode by ID. This method is used for debugging only.
+
+ @param[in] Mode ID which needs to be set
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetColorModeById(int32_t color_mode_id) = 0;
+
+ /*! @brief Method to get the color mode name.
+
+ @param[in] Mode ID
+ @param[out] Mode name
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetColorModeName(int32_t mode_id, std::string *mode_name) = 0;
+
+ /*! @brief Method to set the color transform
+
+ @param[in] length Mode name which needs to be set
+ @param[in] color_transform 4x4 Matrix for color transform
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetColorTransform(const uint32_t length, const double *color_transform) = 0;
+
+ /*! @brief Method to get the default color mode.
+
+ @param[out] default mode name
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetDefaultColorMode(std::string *color_mode) = 0;
+
+ /*! @brief Method to set the position of the hw cursor.
+
+ @param[in] x \link x position \endlink
+ @param[in] y \link y position \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetCursorPosition(int x, int y) = 0;
+
+ /*! @brief Method to get the brightness level of the display
+
+ @param[out] brightness brightness percentage
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetPanelBrightness(float *brightness) = 0;
+
+ /*! @brief Method to set layer mixer resolution.
+
+ @param[in] width layer mixer width
+ @param[in] height layer mixer height
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetMixerResolution(uint32_t width, uint32_t height) = 0;
+
+ /*! @brief Method to get layer mixer resolution.
+
+ @param[out] width layer mixer width
+ @param[out] height layer mixer height
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetMixerResolution(uint32_t *width, uint32_t *height) = 0;
+
+ /*! @brief Method to set frame buffer configuration.
+
+ @param[in] variable_info \link DisplayConfigVariableInfo \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetFrameBufferConfig(const DisplayConfigVariableInfo &variable_info) = 0;
+
+ /*! @brief Method to get frame buffer configuration.
+
+ @param[out] variable_info \link DisplayConfigVariableInfo \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info) = 0;
+
+ /*! @brief Method to set detail enhancement data.
+
+ @param[in] de_data \link DisplayDetailEnhancerData \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetDetailEnhancerData(const DisplayDetailEnhancerData &de_data) = 0;
+
+ /*! @brief Method to get display port information.
+
+ @param[out] port \link DisplayPort \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetDisplayPort(DisplayPort *port) = 0;
+
+ /*! @brief Method to get display ID information.
+
+ @param[out] display_id Current display's ID as can be discovered using
+ CoreInterface::GetDisplaysStatus().
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetDisplayId(int32_t *display_id) = 0;
+
+ /*! @brief Method to get the display's type.
+
+ @param[out] display_type Current display's type.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetDisplayType(DisplayType *display_type) = 0;
+
+ /*! @brief Method to query whether it is Primrary device.
+
+ @return true if this interface is primary.
+ */
+ virtual bool IsPrimaryDisplay() = 0;
+
+ /*! @brief Method to toggle composition types handling by SDM.
+
+ @details Client shall call this method to request SDM to enable/disable a specific type of
+ layer composition. If client disables a composition type, SDM will not handle any of the layer
+ composition using the disabled method in a draw cycle. On lack of resources to handle all
+ layers using other enabled composition methods, Prepare() will return an error.
+
+ Request to toggle composition type is applied from subsequent draw cycles.
+
+ Default state of all defined composition types is enabled.
+
+ @param[in] composition_type \link LayerComposition \endlink
+ @param[in] enable \link enable composition type \endlink
+
+ @return \link DisplayError \endlink
+
+ @sa Prepare
+ */
+ virtual DisplayError SetCompositionState(LayerComposition composition_type, bool enable) = 0;
+
+ /*! @brief Method to check whether a client target with the given properties
+ can be supported/handled by hardware.
+
+ @param[in] width client target width
+ @param[in] height client target height
+ @param[in] format client target format
+ @param[in] colorMetaData client target colorMetaData
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetClientTargetSupport(uint32_t width, uint32_t height,
+ LayerBufferFormat format,
+ const ColorMetaData &color_metadata) = 0;
+
+ /*! @brief Method to handle secure events.
+
+ @param[in] secure_event \link SecureEvent \endlink
+
+ @param[inout] layer_stack \link LayerStack \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError HandleSecureEvent(SecureEvent secure_event, LayerStack *layer_stack) = 0;
+
+ /*! @brief Method to set dpps ad roi.
+
+ @param[in] roi config parmas
+
+ @return \link DisplayError \endlink
+ */
+
+ virtual DisplayError SetDisplayDppsAdROI(void *payload) = 0;
+
+ /*! @brief Method to set the Qsync mode.
+
+ @param[in] qsync_mode: \link QSyncMode \endlink
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetQSyncMode(QSyncMode qsync_mode) = 0;
+
+ /*! @brief Method to control idle power collapse feature for primary display.
+
+ @param[in] enable idle power collapse feature control flag
+ @param[in] synchronous commit flag
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError ControlIdlePowerCollapse(bool enable, bool synchronous) = 0;
+
+ /*! @brief Method to query whether it is supprt sspp tonemap.
+
+ @return true if support sspp tonemap.
+ */
+ virtual bool IsSupportSsppTonemap() = 0;
+
+ /*! @brief Method to free concurrent writeback resoures for primary display.
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError TeardownConcurrentWriteback(void) = 0;
+
+ /*
+ * Returns a string consisting of a dump of SDM's display and layer related state
+ * as programmed to driver
+ */
+ virtual std::string Dump() = 0;
+
+ /*! @brief Method to dynamically set DSI clock rate.
+
+ @param[in] bit_clk_rate DSI bit clock rate in HZ.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetDynamicDSIClock(uint64_t bit_clk_rate) = 0;
+
+ /*! @brief Method to get the current DSI clock rate
+
+ @param[out] bit_clk_rate DSI bit clock rate in HZ
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetDynamicDSIClock(uint64_t *bit_clk_rate) = 0;
+
+ /*! @brief Method to get the supported DSI clock rates
+
+ @param[out] bitclk DSI bit clock in HZ
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetSupportedDSIClock(std::vector<uint64_t> *bitclk_rates) = 0;
+
+ /*! @brief Method to retrieve the EDID information and HW port ID for display
+
+ @param[out] HW port ID
+ @param[out] size of EDID blob data
+ @param[out] EDID blob
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data) = 0;
+
+ /*! @brief Method to set min/max luminance for dynamic tonemapping of external device over WFD.
+
+ @param[in] min_lum min luminance supported by external device.
+ @param[in] max_lum max luminance supported by external device.
+
+ @return \link DisplayError \endlink
+ */
+ virtual DisplayError SetPanelLuminanceAttributes(float min_lum, float max_lum) = 0;
+
+ /*! @brief Method to query if there is a need to validate.
+
+ @return \link boolean \endlink
+ */
+ virtual bool CanSkipValidate() = 0;
+
+ protected:
+ virtual ~DisplayInterface() { }
+};
+
+} // namespace sdm
+
+#endif // __DISPLAY_INTERFACE_H__
+
diff --git a/sdm/include/core/dpps_interface.h b/sdm/include/core/dpps_interface.h
new file mode 100644
index 0000000..0c8fd48
--- /dev/null
+++ b/sdm/include/core/dpps_interface.h
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DPPS_INTERFACE_H__
+#define __DPPS_INTERFACE_H__
+
+#include <core/sdm_types.h>
+#include <string>
+
+namespace sdm {
+
+enum DppsOps {
+ kDppsSetFeature,
+ kDppsGetFeatureInfo,
+ kDppsScreenRefresh,
+ kDppsPartialUpdate,
+ kDppsRequestCommit,
+ kDppsOpMax,
+};
+
+enum DppsNotifyOps {
+ kDppsCommitEvent,
+ kDppsNotifyMax,
+};
+
+class DppsPropIntf {
+ public:
+ virtual DisplayError DppsProcessOps(enum DppsOps op, void *payload, size_t size) = 0;
+
+ protected:
+ virtual ~DppsPropIntf() { }
+};
+
+class DppsInterface {
+ public:
+ virtual int Init(DppsPropIntf* intf, const std::string &panel_name) = 0;
+ virtual int Deinit() = 0;
+ virtual int DppsNotifyOps(enum DppsNotifyOps op, void *payload, size_t size) = 0;
+
+ protected:
+ virtual ~DppsInterface() { }
+};
+
+class DppsDummyImpl : public DppsInterface {
+ public:
+ int Init(DppsPropIntf* intf, const std::string &panel_name) {
+ (void)intf;
+ (void)panel_name;
+ return 0;
+ }
+ int Deinit() {
+ delete this;
+ return 0;
+ }
+ int DppsNotifyOps(enum DppsNotifyOps op, void *payload, size_t size) {
+ (void)op;
+ (void)payload;
+ (void)size;
+ return 0;
+ }
+};
+
+} // namespace sdm
+
+#endif // __DPPS_INTERFACE_H__
diff --git a/sdm/include/core/layer_buffer.h b/sdm/include/core/layer_buffer.h
new file mode 100644
index 0000000..1114dbd
--- /dev/null
+++ b/sdm/include/core/layer_buffer.h
@@ -0,0 +1,312 @@
+/*
+* Copyright (c) 2014, 2016-2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+/*! @file layer_buffer.h
+ @brief File for layer buffer structure.
+
+*/
+#ifndef __LAYER_BUFFER_H__
+#define __LAYER_BUFFER_H__
+
+#include <stdint.h>
+#include <color_metadata.h>
+#include <utility>
+#include <vector>
+
+#include "sdm_types.h"
+
+namespace sdm {
+
+#define NUM_UBWC_CR_STATS_LAYERS 2
+typedef std::vector<std::pair<int, int>> UbwcCrStatsVector;
+
+/*! @brief This enum represents display layer inverse gamma correction (IGC) types.
+
+ @sa Layer
+*/
+enum LayerIGC {
+ kIGCNotSpecified, //!< IGC is not specified.
+ kIGCsRGB, //!< sRGB IGC type.
+};
+
+/*! @brief This enum represents different buffer formats supported by display manager.
+
+ @sa LayerBuffer
+*/
+enum LayerBufferFormat {
+ /* All RGB formats, Any new format will be added towards end of this group to maintain backward
+ compatibility.
+ */
+ kFormatARGB8888, //!< 8-bits Alpha, Red, Green, Blue interleaved in ARGB order.
+ kFormatRGBA8888, //!< 8-bits Red, Green, Blue, Alpha interleaved in RGBA order.
+ kFormatBGRA8888, //!< 8-bits Blue, Green, Red, Alpha interleaved in BGRA order.
+ kFormatXRGB8888, //!< 8-bits Padding, Red, Green, Blue interleaved in XRGB order. No Alpha.
+ kFormatRGBX8888, //!< 8-bits Red, Green, Blue, Padding interleaved in RGBX order. No Alpha.
+ kFormatBGRX8888, //!< 8-bits Blue, Green, Red, Padding interleaved in BGRX order. No Alpha.
+ kFormatRGBA5551, //!< 5-bits Red, Green, Blue, and 1 bit Alpha interleaved in RGBA order.
+ kFormatRGBA4444, //!< 4-bits Red, Green, Blue, Alpha interleaved in RGBA order.
+ kFormatRGB888, //!< 8-bits Red, Green, Blue interleaved in RGB order. No Alpha.
+ kFormatBGR888, //!< 8-bits Blue, Green, Red interleaved in BGR order. No Alpha.
+ kFormatRGB565, //!< 5-bit Red, 6-bit Green, 5-bit Blue interleaved in RGB order. No Alpha.
+ kFormatBGR565, //!< 5-bit Blue, 6-bit Green, 5-bit Red interleaved in BGR order. No Alpha.
+ kFormatRGBA8888Ubwc, //!< UBWC aligned RGBA8888 format
+ kFormatRGBX8888Ubwc, //!< UBWC aligned RGBX8888 format
+ kFormatBGR565Ubwc, //!< UBWC aligned BGR565 format
+ kFormatRGBA1010102, //!< 10-bits Red, Green, Blue, Alpha interleaved in RGBA order.
+ kFormatARGB2101010, //!< 10-bits Alpha, Red, Green, Blue interleaved in ARGB order.
+ kFormatRGBX1010102, //!< 10-bits Red, Green, Blue, Padding interleaved in RGBX order. No Alpha.
+ kFormatXRGB2101010, //!< 10-bits Padding, Red, Green, Blue interleaved in XRGB order. No Alpha.
+ kFormatBGRA1010102, //!< 10-bits Blue, Green, Red, Alpha interleaved in BGRA order.
+ kFormatABGR2101010, //!< 10-bits Alpha, Blue, Green, Red interleaved in ABGR order.
+ kFormatBGRX1010102, //!< 10-bits Blue, Green, Red, Padding interleaved in BGRX order. No Alpha.
+ kFormatXBGR2101010, //!< 10-bits Padding, Blue, Green, Red interleaved in XBGR order. No Alpha.
+ kFormatRGBA1010102Ubwc, //!< UBWC aligned RGBA1010102 format
+ kFormatRGBX1010102Ubwc, //!< UBWC aligned RGBX1010102 format
+ kFormatRGB101010, // 10-bits Red, Green, Blue, interleaved in RGB order. No Alpha.
+
+ /* All YUV-Planar formats, Any new format will be added towards end of this group to maintain
+ backward compatibility.
+ */
+ kFormatYCbCr420Planar = 0x100, //!< Y-plane: y(0), y(1), y(2) ... y(n)
+ //!< 2x2 subsampled U-plane: u(0), u(2) ... u(n-1)
+ //!< 2x2 subsampled V-plane: v(0), v(2) ... v(n-1)
+
+ kFormatYCrCb420Planar, //!< Y-plane: y(0), y(1), y(2) ... y(n)
+ //!< 2x2 subsampled V-plane: v(0), v(2) ... v(n-1)
+ //!< 2x2 subsampled U-plane: u(0), u(2) ... u(n-1)
+
+ kFormatYCrCb420PlanarStride16, //!< kFormatYCrCb420Planar with stride aligned to 16 bytes
+
+ /* All YUV-Semiplanar formats, Any new format will be added towards end of this group to
+ maintain backward compatibility.
+ */
+ kFormatYCbCr420SemiPlanar = 0x200, //!< Y-plane: y(0), y(1), y(2) ... y(n)
+ //!< 2x2 subsampled interleaved UV-plane:
+ //!< u(0), v(0), u(2), v(2) ... u(n-1), v(n-1)
+ //!< aka NV12.
+
+ kFormatYCrCb420SemiPlanar, //!< Y-plane: y(0), y(1), y(2) ... y(n)
+ //!< 2x2 subsampled interleaved VU-plane:
+ //!< v(0), u(0), v(2), u(2) ... v(n-1), u(n-1)
+ //!< aka NV21.
+
+ kFormatYCbCr420SemiPlanarVenus, //!< Y-plane: y(0), y(1), y(2) ... y(n)
+ //!< 2x2 subsampled interleaved UV-plane:
+ //!< u(0), v(0), u(2), v(2) ... u(n-1), v(n-1)
+
+ kFormatYCbCr422H1V2SemiPlanar, //!< Y-plane: y(0), y(1), y(2) ... y(n)
+ //!< vertically subsampled interleaved UV-plane:
+ //!< u(0), v(1), u(2), v(3) ... u(n-1), v(n)
+
+ kFormatYCrCb422H1V2SemiPlanar, //!< Y-plane: y(0), y(1), y(2) ... y(n)
+ //!< vertically subsampled interleaved VU-plane:
+ //!< v(0), u(1), v(2), u(3) ... v(n-1), u(n)
+
+ kFormatYCbCr422H2V1SemiPlanar, //!< Y-plane: y(0), y(1), y(2) ... y(n)
+ //!< horizontally subsampled interleaved UV-plane:
+ //!< u(0), v(1), u(2), v(3) ... u(n-1), v(n)
+
+ kFormatYCrCb422H2V1SemiPlanar, //!< Y-plane: y(0), y(1), y(2) ... y(n)
+ //!< horizontally subsampled interleaved VU-plane:
+ //!< v(0), u(1), v(2), u(3) ... v(n-1), u(n)
+
+ kFormatYCbCr420SPVenusUbwc, //!< UBWC aligned YCbCr420SemiPlanarVenus format
+
+ kFormatYCrCb420SemiPlanarVenus, //!< Y-plane: y(0), y(1), y(2) ... y(n)
+ //!< 2x2 subsampled interleaved UV-plane:
+ //!< v(0), u(0), v(2), u(2) ... v(n-1), u(n-1)
+
+ kFormatYCbCr420P010, //!< 16 bit Y-plane with 5 MSB bits set to 0:
+ //!< y(0), y(1), y(2) ... y(n)
+ //!< 2x2 subsampled interleaved 10 bit UV-plane with
+ //!< 5 MSB bits set to 0:
+ //!< u(0), v(0), u(2), v(2) ... u(n-1), v(n-1)
+ //!< aka P010.
+
+ kFormatYCbCr420TP10Ubwc, //!< UBWC aligned YCbCr420TP10 format.
+
+ kFormatYCbCr420P010Ubwc, //!< UBWC aligned YCbCr420P010 format.
+
+ kFormatYCbCr420P010Venus, //!< Venus aligned YCbCr420P010 format.
+ //!
+ kFormatYCbCr420SPVenusTile, //!< Tiled & uncompressed YCbCr420SemiPlanarVenus format
+ kFormatYCbCr420TP10Tile, //!< Tiled & uncompressed YCbCr420TP10 format.
+ kFormatYCbCr420P010Tile, //!< Tiled & uncompressed YCbCr420P010 format.
+
+ /* All YUV-Packed formats, Any new format will be added towards end of this group to maintain
+ backward compatibility.
+ */
+ kFormatYCbCr422H2V1Packed = 0x300, //!< Y-plane interleaved with horizontally subsampled U/V by
+ //!< factor of 2
+ //!< y(0), u(0), y(1), v(0), y(2), u(2), y(3), v(2)
+ //!< y(n-1), u(n-1), y(n), v(n-1)
+
+ kFormatCbYCrY422H2V1Packed,
+ kFormatInvalid = 0xFFFFFFFF,
+};
+
+
+/*! @brief This enum represents different types of 3D formats supported.
+
+ @sa LayerBufferS3DFormat
+*/
+enum LayerBufferS3DFormat {
+ kS3dFormatNone, //!< Layer buffer content is not 3D content.
+ kS3dFormatLeftRight, //!< Left and Right view of a 3D content stitched left and right.
+ kS3dFormatRightLeft, //!< Right and Left view of a 3D content stitched left and right.
+ kS3dFormatTopBottom, //!< Left and RightView of a 3D content stitched top and bottom.
+ kS3dFormatFramePacking //!< Left and right view of 3D content coded in consecutive frames.
+};
+
+/*! @brief This structure defines a color sample plane belonging to a buffer format. RGB buffer
+ formats have 1 plane whereas YUV buffer formats may have upto 4 planes.
+
+ @sa LayerBuffer
+*/
+struct LayerBufferPlane {
+ int fd = -1; //!< File descriptor referring to the buffer associated with this plane.
+ uint32_t offset = 0; //!< Offset of the plane in bytes from beginning of the buffer.
+ uint32_t stride = 0; //!< Stride in bytes i.e. length of a scanline including padding.
+};
+
+/*! @brief This structure defines flags associated with a layer buffer. The 1-bit flag can be set
+ to ON(1) or OFF(0).
+
+ @sa LayerBuffer
+*/
+struct LayerBufferFlags {
+ union {
+ struct {
+ uint32_t secure : 1; //!< This flag shall be set by client to indicate that the
+ //!< buffer need to be handled securely.
+
+ uint32_t video : 1; //!< This flag shall be set by client to indicate that the
+ //!< buffer is video/ui buffer.
+
+ uint32_t macro_tile : 1; //!< This flag shall be set by client to indicate that the
+ //!< buffer format is macro tiled.
+
+ uint32_t interlace : 1; //!< This flag shall be set by the client to indicate that
+ //!< the buffer has interlaced content.
+
+ uint32_t secure_display : 1; //!< This flag shall be set by the client to indicate that the
+ //!< secure display session is in progress. Secure display
+ //!< session can not coexist with non-secure session.
+
+ uint32_t secure_camera : 1; //!< This flag shall be set by the client to indicate that the
+ //!< buffer is associated with secure camera session. A secure
+ //!< camera layer can co-exist with non-secure layer(s).
+
+ uint32_t hdr : 1; //!< This flag shall be set by the client to indicate that the
+ //!< the content is HDR.
+
+ uint32_t mask_layer : 1; //!< This flag shall be set by client to indicate that the layer
+ //!< is union of solid fill regions typically transparent pixels
+ //!< and black pixels.
+ };
+
+ uint32_t flags = 0; //!< For initialization purpose only.
+ //!< Client shall not refer to it directly.
+ };
+};
+
+/*! @brief This structure defines a layer buffer handle which contains raw buffer and its associated
+ properties.
+
+ @sa LayerBuffer
+ @sa LayerStack
+*/
+struct LayerBuffer {
+ uint32_t width = 0; //!< Aligned width of the Layer that this buffer is for.
+ uint32_t height = 0; //!< Aligned height of the Layer that this buffer is for.
+ uint32_t unaligned_width = 0;
+ //!< Unaligned width of the Layer that this buffer is for.
+ uint32_t unaligned_height = 0;
+ //!< Unaligned height of the Layer that this buffer is for.
+ uint32_t size = 0; //!< Size of a single buffer (even if multiple clubbed together)
+ LayerBufferFormat format = kFormatRGBA8888; //!< Format of the buffer content.
+ ColorMetaData color_metadata = {}; //!< CSC + Range + Transfer + Matrix + HDR Info
+ LayerIGC igc = kIGCNotSpecified; //!< IGC that will be applied on this layer.
+ LayerBufferPlane planes[4] = {};
+ //!< Array of planes that this buffer contains. RGB buffer formats
+ //!< have 1 plane whereas YUV buffer formats may have upto 4 planes
+ //!< Total number of planes for the buffer will be interpreted based
+ //!< on the buffer format specified.
+
+ int acquire_fence_fd = -1; //!< File descriptor referring to a sync fence object which will be
+ //!< signaled when buffer can be read/write by display manager.
+ //!< This fence object is set by the client during Commit(). For
+ //!< input buffers client shall signal this fence when buffer
+ //!< content is available and can be read by display manager. For
+ //!< output buffers, client shall signal fence when buffer is ready
+ //!< to be written by display manager.
+
+ //!< This field is used only during Commit() and shall be set to -1
+ //!< by the client when buffer is already available for read/write.
+
+ int release_fence_fd = -1; //!< File descriptor referring to a sync fence object which will be
+ //!< signaled when buffer has been read/written by display manager.
+ //!< This fence object is set by display manager during Commit().
+ //!< For input buffers display manager will signal this fence when
+ //!< buffer has been consumed. For output buffers, display manager
+ //!< will signal this fence when buffer is produced.
+
+ //!< This field is used only during Commit() and will be set to -1
+ //!< by display manager when buffer is already available for
+ //!< read/write.
+
+ LayerBufferFlags flags; //!< Flags associated with this buffer.
+
+ LayerBufferS3DFormat s3d_format = kS3dFormatNone;
+ //!< Represents the format of the buffer content in 3D. This field
+ //!< could be modified by both client and SDM.
+ uint64_t buffer_id __attribute__((aligned(8))) = 0;
+ //!< Specifies the buffer id.
+ UbwcCrStatsVector ubwc_crstats[NUM_UBWC_CR_STATS_LAYERS] = {};
+ //! < UBWC Compression ratio,stats. Stored as a vector of pair of
+ //! of (tile size, #of tiles)
+ LayerBuffer() {
+ color_metadata.colorPrimaries = ColorPrimaries_BT709_5;
+ color_metadata.transfer = Transfer_sRGB;
+ }
+
+ uint64_t handle_id = 0;
+};
+
+// This enum represents buffer layout types.
+enum BufferLayout {
+ kLinear, //!< Linear data
+ kUBWC, //!< UBWC aligned data
+ kTPTiled //!< Tightly Packed data
+};
+
+class LayerBufferObject {
+ public:
+ virtual ~LayerBufferObject() {}
+};
+
+} // namespace sdm
+
+#endif // __LAYER_BUFFER_H__
+
diff --git a/sdm/include/core/layer_stack.h b/sdm/include/core/layer_stack.h
new file mode 100644
index 0000000..b49c425
--- /dev/null
+++ b/sdm/include/core/layer_stack.h
@@ -0,0 +1,457 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+/*! @file layer_stack.h
+ @brief File for display layer stack structure which represents a drawing buffer.
+
+ @details Display layer is a drawing buffer object which will be blended with other drawing buffers
+ under blending rules.
+*/
+#ifndef __LAYER_STACK_H__
+#define __LAYER_STACK_H__
+
+#include <stdint.h>
+#include <utils/constants.h>
+
+#include <vector>
+#include <utility>
+#include <unordered_map>
+#include <memory>
+#include <bitset>
+
+#include "layer_buffer.h"
+#include "sdm_types.h"
+
+namespace sdm {
+
+/*! @brief This enum represents display layer blending types.
+
+ @sa Layer
+*/
+enum LayerBlending {
+ kBlendingPremultiplied, //!< Pixel color is expressed using premultiplied alpha in RGBA tuples.
+ //!< If plane alpha is less than 0xFF, apply modulation as well.
+ //!< pixel.rgb = src.rgb + dest.rgb x (1 - src.a)
+
+ kBlendingOpaque, //!< Pixel color is expressed using straight alpha in color tuples. It
+ //!< is constant blend operation. The layer would appear opaque if plane
+ //!< alpha is 0xFF.
+
+ kBlendingCoverage, //!< Pixel color is expressed using straight alpha in color tuples. If
+ //!< plane alpha is less than 0xff, apply modulation as well.
+ //!< pixel.rgb = src.rgb x src.a + dest.rgb x (1 - src.a)
+};
+
+/*! @brief This enum represents display layer composition types.
+
+ @sa Layer
+*/
+enum LayerComposition {
+ /* ==== List of composition types set by SDM === */
+ /* These composition types represent SDM composition decision for the layers which need to
+ be blended. Composition types are set during Prepare() by SDM.
+ Client can set default composition type to any of the below before calling into Prepare(),
+ however client's input value is ignored and does not play any role in composition decision.
+ */
+ kCompositionGPU, //!< This layer will be drawn onto the target buffer by GPU. Display
+ //!< device will mark the layer for GPU composition if it can not
+ //!< handle composition for it.
+ //!< This composition type is used only if GPUTarget layer is provided
+ //!< in a composition cycle.
+
+ kCompositionGPUS3D, //!< This layer will be drawn onto the target buffer in s3d mode by GPU.
+ //!< Display device will mark the layer for GPU composition if it can
+ //!< not handle composition for it.
+ //!< This composition type is used only if GPUTarget layer is provided
+ //!< in a composition cycle.
+
+ kCompositionSDE, //!< This layer will be composed by SDE. It must not be composed by
+ //!< GPU or Blit.
+
+ kCompositionCursor, // This cursor layer can receive async position updates irrespective of
+ // dedicated h/w cursor usage. It must not be composed by GPU or Blit
+
+ kCompositionHybrid, //!< This layer will be drawn by a blit engine and SDE together.
+ //!< Display device will split the layer, update the blit rectangle
+ //!< that need to be composed by a blit engine and update original
+ //!< source rectangle that will be composed by SDE.
+ //!< This composition type is used only if GPUTarget and BlitTarget
+ //!< layers are provided in a composition cycle.
+
+ kCompositionBlit, //!< This layer will be composed using Blit Engine.
+ //!< This composition type is used only if BlitTarget layer is provided
+ //!< in a composition cycle.
+ kCompositionNone, //!< This layer will not be composed by any hardware.
+
+ /* === List of composition types set by Client === */
+ /* These composition types represent target buffer layers onto which GPU or Blit will draw if SDM
+ decide to have some or all layers drawn by respective composition engine.
+ Client must provide a target buffer layer, if respective composition type is not disabled by
+ an explicit call to SetCompositionState() method. If a composition type is not disabled,
+ providing a target buffer layer is optional. If SDM is unable to handle layers without support
+ of such a composition engine, Prepare() call will return failure.
+ */
+ kCompositionGPUTarget, //!< This layer will hold result of composition for layers marked for
+ //!< GPU composition.
+ //!< If display device does not set any layer for GPU composition then
+ //!< this layer would be ignored. Else, this layer will be composed
+ //!< with other layers marked for SDE composition by SDE.
+ //!< Only one layer shall be marked as target buffer by the caller.
+ //!< GPU target layer shall be placed after all application layers
+ //!< in the layer stack.
+
+ kCompositionBlitTarget, //!< This layer will hold result of composition for blit rectangles
+ //!< from the layers marked for hybrid composition. Nth blit rectangle
+ //!< in a layer shall be composed onto Nth blit target.
+ //!< If display device does not set any layer for hybrid composition
+ //!< then this would be ignored.
+ //!< Blit target layers shall be placed after GPUTarget in the layer
+ //!< stack.
+};
+
+enum LayerUpdate {
+ kSecurity,
+ kMetadataUpdate,
+ kSurfaceDamage,
+ kSurfaceInvalidate,
+ kClientCompRequest,
+ kLayerUpdateMax,
+};
+
+
+/*! @brief This structure defines rotation and flip values for a display layer.
+
+ @sa Layer
+*/
+struct LayerTransform {
+ float rotation = 0.0f; //!< Left most pixel coordinate.
+ bool flip_horizontal = false; //!< Mirror reversal of the layer across a horizontal axis.
+ bool flip_vertical = false; //!< Mirror reversal of the layer across a vertical axis.
+
+ bool operator==(const LayerTransform& transform) const {
+ return (rotation == transform.rotation && flip_horizontal == transform.flip_horizontal &&
+ flip_vertical == transform.flip_vertical);
+ }
+
+ bool operator!=(const LayerTransform& transform) const {
+ return !operator==(transform);
+ }
+};
+
+/*! @brief This structure defines flags associated with a layer. The 1-bit flag can be set to ON(1)
+ or OFF(0).
+
+ @sa LayerBuffer
+*/
+struct LayerFlags {
+ union {
+ struct {
+ uint32_t skip : 1; //!< This flag shall be set by client to indicate that this layer
+ //!< will be handled by GPU. Display Device will not consider it
+ //!< for composition.
+
+ uint32_t updating : 1; //!< This flag shall be set by client to indicate that this is
+ //!< updating non-updating. so strategy manager will mark them for
+ //!< SDE/GPU composition respectively when the layer stack qualifies
+ //!< for cache based composition.
+
+ uint32_t solid_fill : 1;
+ //!< This flag shall be set by client to indicate that this layer
+ //!< is for solid fill without input buffer. Display Device will
+ //!< use SDE HW feature to achieve it.
+
+ uint32_t cursor : 1; //!< This flag shall be set by client to indicate that this layer
+ //!< is a cursor
+ //!< Display Device may handle this layer using HWCursor
+
+ uint32_t single_buffer : 1; //!< This flag shall be set by client to indicate that the layer
+ //!< uses only a single buffer that will not be swapped out
+ };
+
+ uint32_t flags = 0; //!< For initialization purpose only.
+ //!< Client shall not refer it directly.
+ };
+};
+
+/*! @brief This structure defines flags associated with the layer requests. The 1-bit flag can be
+ set to ON(1) or OFF(0).
+
+ @sa Layer
+*/
+struct LayerRequestFlags {
+ union {
+ struct {
+ uint32_t tone_map : 1; //!< This flag will be set by SDM when the layer needs tone map
+ uint32_t secure: 1; //!< This flag will be set by SDM when the layer must be secure
+ uint32_t flip_buffer: 1; //!< This flag will be set by SDM when the layer needs FBT flip
+ uint32_t dest_tone_map : 1; //!< This flag will be set by SDM when the layer needs
+ //!< destination tone map
+ uint32_t src_tone_map: 1; //!< This flag will be set by SDM when the layer needs
+ //!< source tone map.
+ };
+ uint32_t request_flags = 0; //!< For initialization purpose only.
+ //!< Shall not be refered directly.
+ };
+};
+
+/*! @brief This structure defines LayerRequest.
+ Includes width/height/format of the LayerRequest.
+
+ SDM shall set the properties of LayerRequest to be used by the client
+
+ @sa LayerRequest
+*/
+struct LayerRequest {
+ LayerRequestFlags flags; // Flags associated with this request
+ LayerBufferFormat format = kFormatRGBA8888; // Requested format
+ uint32_t width = 0; // Requested unaligned width.
+ uint32_t height = 0; // Requested unalighed height
+};
+
+/*! @brief This structure defines flags associated with a layer stack. The 1-bit flag can be set to
+ ON(1) or OFF(0).
+
+ @sa LayerBuffer
+*/
+struct LayerStackFlags {
+ union {
+ struct {
+ uint32_t geometry_changed : 1; //!< This flag shall be set by client to indicate that the
+ //!< layer set passed to Prepare() has changed by more than
+ //!< just the buffer handles and acquire fences.
+
+ uint32_t skip_present : 1; //!< This flag will be set to true, if the current layer
+ //!< stack contains skip layers.
+
+ uint32_t video_present : 1; //!< This flag will be set to true, if current layer stack
+ //!< contains video.
+
+ uint32_t secure_present : 1; //!< This flag will be set to true, if the current layer
+ //!< stack contains secure layers.
+
+ uint32_t animating : 1; //!< This flag shall be set by client to indicate that the
+ //!< current frame is animating.i
+
+ uint32_t attributes_changed : 1;
+ //!< This flag shall be set by client to indicate that the
+ //!< current frame has some properties changed and
+ //!< needs re-config.
+
+ uint32_t cursor_present : 1; //!< This flag will be set to true if the current layer
+ //!< stack contains cursor layer.
+
+ uint32_t single_buffered_layer_present : 1; //!< Set if stack has single buffered layer
+
+ uint32_t s3d_mode_present : 1; //!< This flag will be set to true, if the current layer
+ //!< stack contains s3d layer, and the layer stack can enter
+ //!< s3d mode.
+
+ uint32_t post_processed_output : 1; // If output_buffer should contain post processed output
+ // This applies only to primary displays currently
+
+ uint32_t hdr_present : 1; //!< Set if stack has HDR content
+
+ uint32_t fast_path : 1; //!< Preference for fast/slow path draw-cycle, set by client.
+
+ uint32_t config_changed : 1; //!< This flag indicates Display config must be validated.
+
+ uint32_t mask_present : 1; //!< Set if layer stack has mask layers.
+ };
+
+ uint32_t flags = 0; //!< For initialization purpose only.
+ //!< Client shall not refer it directly.
+ };
+};
+
+/*! @brief This structure defines a rectanglular area inside a display layer.
+
+ @sa LayerRectArray
+*/
+struct LayerRect {
+ float left = 0.0f; //!< Left-most pixel coordinate.
+ float top = 0.0f; //!< Top-most pixel coordinate.
+ float right = 0.0f; //!< Right-most pixel coordinate.
+ float bottom = 0.0f; //!< Bottom-most pixel coordinate.
+
+ LayerRect() = default;
+
+ LayerRect(float l, float t, float r, float b) : left(l), top(t), right(r), bottom(b) { }
+
+ bool operator==(const LayerRect& rect) const {
+ return left == rect.left && right == rect.right && top == rect.top && bottom == rect.bottom;
+ }
+
+ bool operator!=(const LayerRect& rect) const {
+ return !operator==(rect);
+ }
+};
+
+/*! @brief This structure defines an array of display layer rectangles.
+
+ @sa LayerRect
+*/
+struct LayerRectArray {
+ LayerRect *rect = NULL; //!< Pointer to first element of array.
+ uint32_t count = 0; //!< Number of elements in the array.
+};
+
+/*! @brief This structure defines solidfill structure.
+
+ @sa LayerSolidFill
+*/
+struct LayerSolidFill {
+ uint32_t bit_depth = 0; //!< Bit depth of solid fill colors
+ uint32_t red = 0; //!< Red value
+ uint32_t green = 0; //!< Green value
+ uint32_t blue = 0; //!< Blue value
+ uint32_t alpha = 0; //!< Alpha value
+};
+
+struct LayerBufferMap {
+ std::unordered_map<uint64_t, std::shared_ptr<LayerBufferObject>> buffer_map;
+};
+
+/*! @brief This structure defines display layer object which contains layer properties and a drawing
+ buffer.
+
+ @sa LayerArray
+*/
+struct Layer {
+ LayerBuffer input_buffer = {}; //!< Buffer to be composed.
+ //!< If this remains unchanged between two
+ //!< consecutive Prepare() calls and
+ //!< geometry_changed flag is not set for the
+ //!< second call, then the display device will
+ //!< assume that buffer content has not
+ //!< changed.
+
+ LayerComposition composition = kCompositionGPU; //!< Composition type which can be set by either
+ //!< the client or the display device. This value
+ //!< should be preserved between Prepare() and
+ //!< Commit() calls.
+
+ LayerRect src_rect = {}; //!< Rectangular area of the layer buffer to
+ //!< consider for composition.
+
+ LayerRect dst_rect = {}; //!< The target position where the frame will be
+ //!< displayed. Cropping rectangle is scaled to
+ //!< fit into this rectangle. The origin is the
+ //!< top-left corner of the screen.
+
+ std::vector<LayerRect> visible_regions = {}; //!< Visible rectangular areas in screen space.
+ //!< The visible region includes areas overlapped
+ //!< by a translucent layer.
+
+ std::vector<LayerRect> dirty_regions = {}; //!< Rectangular areas in the current frames
+ //!< that have changed in comparison to
+ //!< previous frame.
+
+ std::vector<LayerRect> blit_regions = {}; //!< Rectangular areas of this layer which need
+ //!< to be composed to blit target. Display
+ //!< device will update blit rectangles if a
+ //!< layer composition is set as hybrid. Nth blit
+ //!< rectangle shall be composed onto Nth blit
+ //!< target.
+
+ LayerBlending blending = kBlendingPremultiplied; //!< Blending operation which need to be
+ //!< applied on the layer buffer during
+ //!< composition.
+
+ LayerTransform transform = {}; //!< Rotation/Flip operations which need to be
+ //!< applied to the layer buffer during
+ //!< composition.
+
+ uint8_t plane_alpha = 0xff; //!< Alpha value applied to the whole layer.
+ //!< Value of each pixel is computed as:
+ //!< if(kBlendingPremultiplied) {
+ //!< pixel.RGB = pixel.RGB * planeAlpha/255
+ //!< }
+ //!< pixel.a = pixel.a * planeAlpha
+
+ uint32_t frame_rate = 0; //!< Rate at which frames are being updated for
+ //!< this layer.
+
+ uint32_t solid_fill_color = 0; //!< TODO: Remove this field when fb support
+ //! is deprecated.
+ //!< Solid color used to fill the layer when
+ //!< no content is associated with the layer.
+
+ LayerFlags flags; //!< Flags associated with this layer.
+
+ LayerRequest request = {}; //!< o/p - request on this Layer by SDM.
+
+ Lut3d lut_3d = {}; //!< o/p - Populated by SDM when tone mapping is
+ //!< needed on this layer.
+ LayerSolidFill solid_fill_info = {}; //!< solid fill info along with depth.
+ std::shared_ptr<LayerBufferMap> buffer_map = nullptr; //!< Map of handle_id and fb_id.
+ std::bitset<kLayerUpdateMax> update_mask = 0;
+};
+
+/*! @brief This structure defines the color space + transfer of a given layer.
+
+ @sa PrimariesTransfer
+*/
+
+struct PrimariesTransfer {
+ ColorPrimaries primaries = ColorPrimaries_BT709_5;
+ GammaTransfer transfer = Transfer_sRGB;
+
+ bool operator==(const PrimariesTransfer& blend_cs) const {
+ return ((primaries == blend_cs.primaries) && (transfer == blend_cs.transfer));
+ }
+};
+
+
+/*! @brief This structure defines a layer stack that contains layers which need to be composed and
+ rendered onto the target.
+
+ @sa DisplayInterface::Prepare
+ @sa DisplayInterface::Commit
+*/
+
+struct LayerStack {
+ std::vector<Layer *> layers = {}; //!< Vector of layer pointers.
+
+ int retire_fence_fd = -1; //!< File descriptor referring to a sync fence object which
+ //!< will be signaled when this composited frame has been
+ //!< replaced on screen by a subsequent frame on a physical
+ //!< display. The fence object is created and returned during
+ //!< Commit(). Client shall close the returned file
+ //!< descriptor.
+ //!< NOTE: This field applies to a physical display only.
+
+ LayerBuffer *output_buffer = NULL; //!< Pointer to the buffer where composed buffer would be
+ //!< rendered for virtual displays.
+ //!< NOTE: This field applies to a virtual display only.
+
+ LayerStackFlags flags; //!< Flags associated with this layer set.
+
+
+ PrimariesTransfer blend_cs = {}; //!< o/p - Blending color space of the frame, updated by SDM
+};
+
+} // namespace sdm
+
+#endif // __LAYER_STACK_H__
+
diff --git a/sdm/include/core/sdm_types.h b/sdm/include/core/sdm_types.h
new file mode 100644
index 0000000..6ba1538
--- /dev/null
+++ b/sdm/include/core/sdm_types.h
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2014 - 2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+/*! @file sdm_types.h
+ @brief This file contains miscellaneous data types used across display interfaces.
+*/
+#ifndef __SDM_TYPES_H__
+#define __SDM_TYPES_H__
+
+namespace sdm {
+
+/*! @brief This enum represents different error codes that display interfaces may return.
+*/
+enum DisplayError {
+ kErrorNone, //!< Call executed successfully.
+ kErrorUndefined, //!< An unspecified error has occured.
+ kErrorNotSupported, //!< Requested operation is not supported.
+ kErrorPermission, //!< Operation is not permitted in current state.
+ kErrorVersion, //!< Client is using advanced version of interfaces and calling into an
+ //!< older version of display library.
+ kErrorDataAlignment, //!< Client data structures are not aligned on naturual boundaries.
+ kErrorInstructionSet, //!< 32-bit client is calling into 64-bit library or vice versa.
+ kErrorParameters, //!< Invalid parameters passed to a method.
+ kErrorFileDescriptor, //!< Invalid file descriptor.
+ kErrorMemory, //!< System is running low on memory.
+ kErrorResources, //!< Not enough hardware resources available to execute call.
+ kErrorHardware, //!< A hardware error has occured.
+ kErrorTimeOut, //!< The operation has timed out to prevent client from waiting forever.
+ kErrorShutDown, //!< Driver is processing shutdown sequence
+ kErrorPerfValidation, //!< Bandwidth or Clock requirement validation failure.
+ kErrorNoAppLayers, //!< No App layer(s) in the draw cycle.
+ kErrorRotatorValidation, //!< Rotator configuration validation failure.
+ kErrorNotValidated, //!< Draw cycle has not been validated.
+ kErrorCriticalResource, //!< Critical resource allocation has failed.
+ kErrorDeviceRemoved, //!< A device was removed unexpectedly.
+ kErrorDriverData, //!< Expected information from the driver is missing
+ kErrorDeferred, //!< Call's intended action is being deferred to a later time
+};
+
+/*! @brief This structure is defined for client and library compatibility check purpose only. This
+ structure is used in SDM_VERSION_TAG definition only. Client should not refer it directly for
+ any purpose.
+*/
+struct SDMCompatibility {
+ char c1;
+ int i1;
+ char c2;
+ int i2;
+};
+
+/*! @brief This enum represents different modules/logical unit tags that a log message may
+ be associated with. Client may use this to filter messages for dynamic logging.
+
+*/
+enum DebugTag {
+ kTagNone, //!< Debug log is not tagged. This type of logs should always be printed.
+ kTagResources, //!< Debug log is tagged for resource management.
+ kTagStrategy, //!< Debug log is tagged for strategy decisions.
+ kTagCompManager, //!< Debug log is tagged for composition manager.
+ kTagDriverConfig, //!< Debug log is tagged for driver config.
+ kTagRotator, //!< Debug log is tagged for rotator.
+ kTagScalar, //!< Debug log is tagged for Scalar Helper.
+ kTagQDCM, //!< Debug log is tagged for display QDCM color managing.
+ kTagQOSClient, //!< Debug log is tagged for Qos client.
+ kTagDisplay, //!< Debug log is tagged for display core logs.
+ kTagClient, //!< Debug log is tagged for SDM client.
+};
+
+} // namespace sdm
+
+#endif // __SDM_TYPES_H__
+
diff --git a/sdm/include/core/socket_handler.h b/sdm/include/core/socket_handler.h
new file mode 100644
index 0000000..e7fe00e
--- /dev/null
+++ b/sdm/include/core/socket_handler.h
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+/*! @file socket_handler.h
+ @brief Interface file for platform specific Socket Handler.
+
+ @details SDM will use this interface to get the platform specific Socket fd.
+*/
+
+#ifndef __SOCKET_HANDLER_H__
+#define __SOCKET_HANDLER_H__
+
+namespace sdm {
+
+/*! @brief This enum represents Socket types, for which SDM can request the fd.
+
+*/
+enum SocketType {
+ kDpps, //!< Socket for Dpps
+};
+
+/*! @brief Socket handler implemented by the client
+
+ @details This class declares prototype for SocketHandler methods which must be
+ implemented by client. SDM will use these methods to get the platform specific Socket fd.
+
+ @sa CoreInterface::CreateCore
+*/
+class SocketHandler {
+ public:
+ /*! @brief Method to get the platform specific Socket fd for a given socket type.
+
+ @details This method returns the platform specific Socket fd for a given socket type.
+ It is the responsibility of the caller to close the file descriptor.
+
+ @param[in] socket_type
+
+ @return \link int \endlink
+ */
+
+ virtual int GetSocketFd(SocketType socket_type) = 0;
+
+ protected:
+ virtual ~SocketHandler() { }
+};
+
+} // namespace sdm
+
+#endif // __SOCKET_HANDLER_H__
diff --git a/sdm/include/private/color_interface.h b/sdm/include/private/color_interface.h
new file mode 100644
index 0000000..d7b5e5f
--- /dev/null
+++ b/sdm/include/private/color_interface.h
@@ -0,0 +1,103 @@
+/* Copyright (c) 2015-2019, The Linux Foundataion. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*
+*/
+
+#ifndef __COLOR_INTERFACE_H__
+#define __COLOR_INTERFACE_H__
+
+#include "core/sdm_types.h"
+#include "color_params.h"
+
+namespace sdm {
+
+#define COLORMGR_LIBRARY_NAME "libsdm-color.so"
+#define CREATE_COLOR_INTERFACE_NAME "CreateColorInterface"
+#define DESTROY_COLOR_INTERFACE_NAME "DestroyColorInterface"
+#define COLOR_REVISION_MAJOR (1)
+#define COLOR_REVISION_MINOR (0)
+
+#define COLOR_VERSION_TAG ((uint16_t)((COLOR_REVISION_MAJOR << 8) | COLOR_REVISION_MINOR))
+
+class ColorInterface;
+
+typedef DisplayError (*CreateColorInterface)(uint16_t version, int32_t display_id,
+ DisplayType type,
+ const PPHWAttributes &attributes,
+ ColorInterface **interface);
+
+typedef DisplayError (*DestroyColorInterface)(int32_t display_id);
+
+class ColorModeInterface {
+ public:
+ virtual DisplayError ColorIntfGetActiveColorParam(uint32_t hint, uint32_t display_id,
+ void* data) = 0;
+ virtual DisplayError ColorIntfSetActiveColorParam(uint32_t hint, uint32_t display_id,
+ void* data) = 0;
+ virtual DisplayError ColorIntfSetHdrInterface(void *hdr_intf) = 0;
+
+ protected:
+ virtual ~ColorModeInterface() {}
+};
+
+extern "C" ColorModeInterface* GetColorModeInterface(int32_t display_id, DisplayType type);
+extern "C" void ReleaseColorModeInterface(int32_t display_id);
+
+class ColorInterface {
+ public:
+ virtual DisplayError ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
+ PPDisplayAPIPayload *out_payload,
+ PPFeaturesConfig *out_features,
+ PPPendingParams *pending_action) = 0;
+
+ virtual DisplayError ColorIntfSetColorTransform(PPFeaturesConfig *out_features,
+ uint32_t disp_id, uint32_t length,
+ const double *trans_data) = 0;
+
+ virtual DisplayError ColorIntfSetDisplayMode(PPFeaturesConfig *out_features,
+ uint32_t disp_id, int32_t mode_id) = 0;
+
+ virtual DisplayError ColorIntfGetNumDisplayModes(PPFeaturesConfig *out_features,
+ uint32_t disp_id, uint32_t *mode_cnt) = 0;
+
+ virtual DisplayError ColorIntfEnumerateDisplayModes(PPFeaturesConfig *out_features,
+ uint32_t disp_id, SDEDisplayMode *modes,
+ uint32_t *mode_cnt) = 0;
+ virtual DisplayError ColorIntfGetModeInfo(PPFeaturesConfig *out_features,
+ uint32_t disp_id, int32_t mode_id,
+ AttrVal *query) = 0;
+ virtual DisplayError ColorIntfGetDefaultModeID(PPFeaturesConfig *out_features,
+ uint32_t disp_id, int32_t *mode_id) = 0;
+ virtual DisplayError ColorIntfCombineColorModes() = 0;
+
+ protected:
+ virtual ~ColorInterface() {}
+};
+
+} // namespace sdm
+
+#endif // __COLOR_INTERFACE_H__
diff --git a/sdm/include/private/color_params.h b/sdm/include/private/color_params.h
new file mode 100644
index 0000000..835b1a7
--- /dev/null
+++ b/sdm/include/private/color_params.h
@@ -0,0 +1,657 @@
+/* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*
+*/
+
+#ifndef __COLOR_PARAMS_H__
+#define __COLOR_PARAMS_H__
+
+#include <stdio.h>
+#include <string.h>
+#include <utils/locker.h>
+#include <utils/constants.h>
+#include <core/sdm_types.h>
+#include <core/display_interface.h>
+
+#include <string>
+
+#include "hw_info_types.h"
+
+namespace sdm {
+
+// Bitmap Pending action to indicate to the caller what's pending to be taken care of.
+enum PendingAction {
+ kInvalidating = BITMAP(0),
+ kApplySolidFill = BITMAP(1),
+ kDisableSolidFill = BITMAP(2),
+ kEnterQDCMMode = BITMAP(3),
+ kExitQDCMMode = BITMAP(4),
+ kSetPanelBrightness = BITMAP(5),
+ kEnableFrameCapture = BITMAP(6),
+ kDisableFrameCapture = BITMAP(7),
+ kConfigureDetailedEnhancer = BITMAP(8),
+ kModeSet = BITMAP(10),
+ kMultiDispProc = BITMAP(11),
+ kMultiDispGetId = BITMAP(12),
+ kSetModeFromClient = BITMAP(13),
+ kGetDetailedEnhancerData = BITMAP(21),
+ kNoAction = BITMAP(31),
+};
+
+static const uint32_t kOpsEnable = BITMAP(0);
+static const uint32_t kOpsRead = BITMAP(1);
+static const uint32_t kOpsWrite = BITMAP(2);
+static const uint32_t kOpsDisable = BITMAP(3);
+
+static const uint32_t kOpsGc8BitRoundEnable = BITMAP(4);
+
+static const uint32_t kPaHueEnable = BITMAP(4);
+static const uint32_t kPaSatEnable = BITMAP(5);
+static const uint32_t kPaValEnable = BITMAP(6);
+static const uint32_t kPaContEnable = BITMAP(7);
+
+static const uint32_t kPaSixZoneEnable = BITMAP(8);
+static const uint32_t kPaSkinEnable = BITMAP(9);
+static const uint32_t kPaSkyEnable = BITMAP(10);
+static const uint32_t kPaFoliageEnable = BITMAP(11);
+
+static const uint32_t kLeftSplitMode = BITMAP(28); // 0x10000000
+static const uint32_t kRightSplitMode = BITMAP(29); // 0x20000000
+
+static const int32_t kInvalidModeId = -1;
+
+static const std::string kDynamicRangeAttribute = "DynamicRange";
+static const std::string kColorGamutAttribute = "ColorGamut";
+static const std::string kPictureQualityAttribute = "PictureQuality";
+static const std::string kGammaTransferAttribute = "GammaTransfer";
+
+static const std::string kHdr = "hdr";
+static const std::string kSdr = "sdr";
+
+static const std::string kNative = "native";
+static const std::string kDcip3 = "dcip3";
+static const std::string kSrgb = "srgb";
+static const std::string kDisplayP3 = "display_p3";
+static const std::string kBt2020 = "bt2020";
+
+static const std::string kHlg = "hlg";
+static const std::string kSt2084 = "st2084";
+static const std::string kGamma2_2 = "gamma2_2";
+
+static const std::string kVivid = "vivid";
+static const std::string kSharp = "sharp";
+static const std::string kStandard = "standard";
+static const std::string kAmazon = "amazon";
+static const std::string kNetflix = "netflix";
+static const std::string kEnhanced = "enhanced";
+
+// Enum to identify type of dynamic range of color mode.
+enum DynamicRangeType {
+ kSdrType,
+ kHdrType,
+};
+
+// ENUM to identify different Postprocessing feature block to program.
+// Note: For each new entry added here, also need update hw_interface::GetPPFeaturesVersion<>
+// AND HWPrimary::SetPPFeatures<>.
+enum PPGlobalColorFeatureID {
+ kGlobalColorFeaturePcc,
+ kGlobalColorFeatureIgc,
+ kGlobalColorFeaturePgc,
+ kMixerColorFeatureGc,
+ kGlobalColorFeaturePaV2,
+ kGlobalColorFeatureDither,
+ kGlobalColorFeatureGamut,
+ kGlobalColorFeaturePADither,
+ kMaxNumPPFeatures,
+};
+
+enum PPSourceColorFeatureID {
+ kSourceColorFeatureIgc = kMaxNumPPFeatures + 1,
+ kSourceColorFeatureGc,
+ kSourceColorFeatureGamut,
+ kMaxNumSourcePPFeatures,
+};
+
+struct PPPendingParams {
+ int32_t action = kNoAction;
+ void *params = NULL;
+};
+
+struct PPColorInfo {
+ uint32_t r_bitdepth = 0;
+ uint32_t r = 0;
+ uint32_t g_bitdepth = 0;
+ uint32_t g = 0;
+ uint32_t b_bitdepth = 0;
+ uint32_t b = 0;
+};
+
+struct PPColorFillParams {
+ uint32_t flags = 0;
+ struct {
+ uint32_t width = 0;
+ uint32_t height = 0;
+ int32_t x = 0;
+ int32_t y = 0;
+ } rect;
+
+ PPColorInfo color;
+};
+
+struct PPFeatureVersion {
+ // SDE ASIC versioning its PP block at each specific feature level.
+ static const uint32_t kSDEPpVersionInvalid = 0;
+ static const uint32_t kSDEIgcV17 = 1;
+ static const uint32_t kSDEPgcV17 = 5;
+ static const uint32_t kSDEDitherV17 = 7;
+ static const uint32_t kSDEGamutV17 = 9;
+ static const uint32_t kSDEPaV17 = 11;
+ static const uint32_t kSDEPccV17 = 13;
+ static const uint32_t kSDELegacyPP = 15;
+ static const uint32_t kSDEPADitherV17 = 16;
+ static const uint32_t kSDEIgcV30 = 17;
+ static const uint32_t kSDEGamutV4 = 18;
+ static const uint32_t kSDEPccV4 = 19;
+
+ uint32_t version[kMaxNumPPFeatures];
+ PPFeatureVersion() { memset(version, 0, sizeof(version)); }
+};
+
+struct PPHWAttributes : HWResourceInfo, HWPanelInfo, DisplayConfigVariableInfo {
+ char panel_name[256] = "generic_panel";
+ PPFeatureVersion version;
+
+ void Set(const HWResourceInfo &hw_res, const HWPanelInfo &panel_info,
+ const DisplayConfigVariableInfo &attr, const PPFeatureVersion &feature_ver);
+};
+
+struct PPDisplayAPIPayload {
+ bool own_payload = false; // to indicate if *payload is owned by this or just a reference.
+ uint32_t size = 0;
+ uint8_t *payload = NULL;
+ int fd = -1;
+
+ PPDisplayAPIPayload() = default;
+ PPDisplayAPIPayload(uint32_t size, uint8_t *param)
+ : size(size), payload(param) {}
+
+ template <typename T>
+ DisplayError CreatePayload(T *&output) {
+ DisplayError ret = kErrorNone;
+
+ payload = new uint8_t[sizeof(T)]();
+ if (!payload) {
+ ret = kErrorMemory;
+ output = NULL;
+ } else {
+ this->size = sizeof(T);
+ output = reinterpret_cast<T *>(payload);
+ own_payload = true;
+ }
+ return ret;
+ }
+
+ DisplayError CreatePayloadBytes(uint32_t size_in_bytes, uint8_t **output) {
+ DisplayError ret = kErrorNone;
+
+ payload = new uint8_t[size_in_bytes]();
+ if (!payload) {
+ ret = kErrorMemory;
+ *output = NULL;
+ } else {
+ this->size = size_in_bytes;
+ *output = payload;
+ own_payload = true;
+ }
+ return ret;
+ }
+
+ inline void DestroyPayload() {
+ if (payload && own_payload) {
+ delete[] payload;
+ payload = NULL;
+ size = 0;
+ } else {
+ payload = NULL;
+ size = 0;
+ }
+ }
+};
+
+struct PPRectInfo {
+ uint32_t width;
+ uint32_t height;
+ int32_t x;
+ int32_t y;
+};
+
+typedef enum {
+ PP_PIXEL_FORMAT_NONE = 0,
+ PP_PIXEL_FORMAT_RGB_888,
+ PP_PIXEL_FORMAT_RGB_2101010,
+ PP_PIXEL_FORMAT_MAX,
+ PP_PIXEL_FORMAT_FORCE32BIT = 0x7FFFFFFF,
+} PPPixelFormats;
+
+struct PPFrameCaptureInputParams {
+ PPRectInfo rect;
+ PPPixelFormats out_pix_format;
+ uint32_t flags;
+};
+
+struct PPFrameCaptureData {
+ PPFrameCaptureInputParams input_params;
+ uint8_t *buffer;
+ uint32_t buffer_stride;
+ uint32_t buffer_size;
+};
+
+static const uint32_t kDeTuningFlagSharpFactor = 0x01;
+static const uint32_t kDeTuningFlagClip = 0x02;
+static const uint32_t kDeTuningFlagThrQuiet = 0x04;
+static const uint32_t kDeTuningFlagThrDieout = 0x08;
+static const uint32_t kDeTuningFlagThrLow = 0x10;
+static const uint32_t kDeTuningFlagThrHigh = 0x20;
+static const uint32_t kDeTuningFlagContentQualLevel = 0x40;
+
+typedef enum {
+ kDeContentQualUnknown,
+ kDeContentQualLow,
+ kDeContentQualMedium,
+ kDeContentQualHigh,
+ kDeContentQualMax,
+} PPDEContentQualLevel;
+
+typedef enum {
+ kDeContentTypeUnknown,
+ kDeContentTypeVideo,
+ kDeContentTypeGraphics,
+ kDeContentTypeMax,
+} PPDEContentType;
+
+struct PPDETuningCfg {
+ uint32_t flags = 0;
+ int32_t sharp_factor = 0;
+ uint16_t thr_quiet = 0;
+ uint16_t thr_dieout = 0;
+ uint16_t thr_low = 0;
+ uint16_t thr_high = 0;
+ uint16_t clip = 0;
+ PPDEContentQualLevel quality = kDeContentQualUnknown;
+ PPDEContentType content_type = kDeContentTypeUnknown;
+};
+
+struct PPDETuningCfgData {
+ uint32_t cfg_en = 0;
+ PPDETuningCfg params;
+ bool cfg_pending = false;
+};
+
+struct SDEGamutCfg {
+ static const int kGamutTableNum = 4;
+ static const int kGamutScaleoffTableNum = 3;
+ static const int kGamutTableSize = 1229;
+ static const int kGamutTableCoarse13Size = 550;
+ static const int kGamutTableCoarseSize = 32;
+ static const int kGamutScaleoffSize = 16;
+ uint32_t mode;
+ uint32_t map_en;
+ uint32_t tbl_size[kGamutTableNum];
+ uint32_t *c0_data[kGamutTableNum];
+ uint32_t *c1_c2_data[kGamutTableNum];
+ uint32_t tbl_scale_off_sz[kGamutScaleoffTableNum];
+ uint32_t *scale_off_data[kGamutScaleoffTableNum];
+};
+
+struct SDEPccCoeff {
+ uint32_t c = 0;
+ uint32_t r = 0;
+ uint32_t g = 0;
+ uint32_t b = 0;
+ uint32_t rg = 0;
+ uint32_t gb = 0;
+ uint32_t rb = 0;
+ uint32_t rgb = 0;
+};
+
+struct SDEPccCfg {
+ SDEPccCoeff red;
+ SDEPccCoeff green;
+ SDEPccCoeff blue;
+
+ static SDEPccCfg *Init(uint32_t arg __attribute__((__unused__)));
+ SDEPccCfg *GetConfig() { return this; }
+};
+
+struct SDEPccV4Coeff {
+ uint32_t c = 0;
+ uint32_t r = 0;
+ uint32_t g = 0;
+ uint32_t b = 0;
+ uint32_t rg = 0;
+ uint32_t gb = 0;
+ uint32_t rb = 0;
+ uint32_t rgb = 0;
+ uint32_t rr = 0;
+ uint32_t gg = 0;
+ uint32_t bb = 0;
+};
+
+struct SDEPccV4Cfg {
+ SDEPccV4Coeff red;
+ SDEPccV4Coeff green;
+ SDEPccV4Coeff blue;
+
+ static SDEPccV4Cfg *Init(uint32_t arg __attribute__((__unused__)));
+ SDEPccV4Cfg *GetConfig() { return this; }
+};
+
+struct SDEDitherCfg {
+ uint32_t g_y_depth;
+ uint32_t r_cr_depth;
+ uint32_t b_cb_depth;
+ uint32_t length;
+ uint32_t dither_matrix[16];
+ uint32_t temporal_en;
+
+ static SDEDitherCfg *Init(uint32_t arg __attribute__((__unused__)));
+ SDEDitherCfg *GetConfig() { return this; }
+};
+
+struct SDEPADitherData {
+ uint64_t data_flags;
+ uint32_t matrix_size;
+ uint64_t matrix_data_addr;
+ uint32_t strength;
+ uint32_t offset_en;
+};
+
+class SDEPADitherWrapper : private SDEPADitherData {
+ public:
+ static SDEPADitherWrapper *Init(uint32_t arg __attribute__((__unused__)));
+ ~SDEPADitherWrapper() {
+ if (buffer_)
+ delete[] buffer_;
+ }
+ inline SDEPADitherData *GetConfig(void) { return this; }
+
+ private:
+ SDEPADitherWrapper() {}
+ uint32_t *buffer_ = NULL;
+};
+
+struct SDEPaMemColorData {
+ uint32_t adjust_p0 = 0;
+ uint32_t adjust_p1 = 0;
+ uint32_t adjust_p2 = 0;
+ uint32_t blend_gain = 0;
+ uint8_t sat_hold = 0;
+ uint8_t val_hold = 0;
+ uint32_t hue_region = 0;
+ uint32_t sat_region = 0;
+ uint32_t val_region = 0;
+};
+
+struct SDEPaData {
+ static const int kSixZoneLUTSize = 384;
+ uint32_t mode = 0;
+ uint32_t hue_adj = 0;
+ uint32_t sat_adj = 0;
+ uint32_t val_adj = 0;
+ uint32_t cont_adj;
+ SDEPaMemColorData skin;
+ SDEPaMemColorData sky;
+ SDEPaMemColorData foliage;
+ uint32_t six_zone_thresh = 0;
+ uint32_t six_zone_adj_p0 = 0;
+ uint32_t six_zone_adj_p1 = 0;
+ uint8_t six_zone_sat_hold = 0;
+ uint8_t six_zone_val_hold = 0;
+ uint32_t six_zone_len = 0;
+ uint32_t *six_zone_curve_p0 = NULL;
+ uint32_t *six_zone_curve_p1 = NULL;
+};
+
+struct SDEIgcLUTData {
+ static const int kMaxIgcLUTEntries = 256;
+ uint32_t table_fmt = 0;
+ uint32_t len = 0;
+ uint32_t *c0_c1_data = NULL;
+ uint32_t *c2_data = NULL;
+};
+
+struct SDEIgcV30LUTData {
+ static const int kMaxIgcLUTEntries = 256;
+ uint32_t table_fmt = 0;
+ uint32_t len = 0;
+ uint64_t c0_c1_data = 0;
+ uint64_t c2_data = 0;
+ uint32_t strength = 0;
+};
+
+struct SDEPgcLUTData {
+ static const int kPgcLUTEntries = 1024;
+ uint32_t len = 0;
+ uint32_t *c0_data = NULL;
+ uint32_t *c1_data = NULL;
+ uint32_t *c2_data = NULL;
+};
+
+struct SDEDisplayMode {
+ static const int kMaxModeNameSize = 256;
+ int32_t id = -1;
+ uint32_t type = 0;
+ char name[kMaxModeNameSize] = {0};
+};
+
+// Wrapper on HW block config data structure to encapsulate the details of allocating
+// and destroying from the caller.
+class SDEGamutCfgWrapper : private SDEGamutCfg {
+ public:
+ enum GamutMode {
+ GAMUT_FINE_MODE = 0x01,
+ GAMUT_COARSE_MODE,
+ GAMUT_COARSE_MODE_13,
+ };
+
+ // This factory method will be used by libsdm-color.so data producer to be populated with
+ // converted config values for SDE feature blocks.
+ static SDEGamutCfgWrapper *Init(uint32_t arg);
+
+ // Data consumer<Commit thread> will be responsible to destroy it once the feature is commited.
+ ~SDEGamutCfgWrapper() {
+ if (buffer_)
+ delete[] buffer_;
+ }
+
+ // Data consumer will use this method to retrieve contained feature configuration.
+ inline SDEGamutCfg *GetConfig(void) { return this; }
+
+ private:
+ SDEGamutCfgWrapper() {}
+ uint32_t *buffer_ = NULL;
+};
+
+class SDEPaCfgWrapper : private SDEPaData {
+ public:
+ static SDEPaCfgWrapper *Init(uint32_t arg = 0);
+ ~SDEPaCfgWrapper() {
+ if (buffer_)
+ delete[] buffer_;
+ }
+ inline SDEPaData *GetConfig(void) { return this; }
+
+ private:
+ SDEPaCfgWrapper() {}
+ uint32_t *buffer_ = NULL;
+};
+
+class SDEIgcLUTWrapper : private SDEIgcLUTData {
+ public:
+ static SDEIgcLUTWrapper *Init(uint32_t arg __attribute__((__unused__)));
+ ~SDEIgcLUTWrapper() {
+ if (buffer_)
+ delete[] buffer_;
+ }
+ inline SDEIgcLUTData *GetConfig(void) { return this; }
+
+ private:
+ SDEIgcLUTWrapper() {}
+ uint32_t *buffer_ = NULL;
+};
+
+class SDEIgcV30LUTWrapper : private SDEIgcV30LUTData {
+ public:
+ static SDEIgcV30LUTWrapper *Init(uint32_t arg __attribute__((__unused__)));
+ ~SDEIgcV30LUTWrapper() {
+ if (buffer_)
+ delete[] buffer_;
+ }
+ inline SDEIgcV30LUTData *GetConfig(void) { return this; }
+
+ private:
+ SDEIgcV30LUTWrapper(const SDEIgcV30LUTWrapper& src __attribute__((__unused__))) {
+ /* do not create copies */ }
+ SDEIgcV30LUTWrapper& operator=(const SDEIgcV30LUTWrapper&) { return *this; }
+ SDEIgcV30LUTWrapper() {}
+ uint32_t *buffer_ = NULL;
+};
+
+class SDEPgcLUTWrapper : private SDEPgcLUTData {
+ public:
+ static SDEPgcLUTWrapper *Init(uint32_t arg __attribute__((__unused__)));
+ ~SDEPgcLUTWrapper() {
+ if (buffer_)
+ delete[] buffer_;
+ }
+ inline SDEPgcLUTData *GetConfig(void) { return this; }
+
+ private:
+ SDEPgcLUTWrapper() {}
+ uint32_t *buffer_ = NULL;
+};
+
+// Individual Postprocessing feature representing physical attributes and information
+// This template class wrapping around abstract data type representing different
+// post-processing features. It will take output from ColorManager converting from raw metadata.
+// The configuration will directly pass into HWInterface to program the hardware accordingly.
+template <typename T>
+class TPPFeatureInfo : public PPFeatureInfo {
+ public:
+ virtual ~TPPFeatureInfo() {
+ if (params_)
+ delete params_;
+ }
+
+ // API for data consumer to get underlying data configs to program into pp hardware block.
+ virtual void *GetConfigData(void) const { return params_->GetConfig(); }
+
+ // API for data producer to get access to underlying data configs to populate it.
+ T *GetParamsReference(void) { return params_; }
+
+ // API for create this template object.
+ static TPPFeatureInfo *Init(uint32_t arg = 0) {
+ TPPFeatureInfo *info = new TPPFeatureInfo();
+ if (info) {
+ info->params_ = T::Init(arg);
+ if (!info->params_) {
+ delete info;
+ info = NULL;
+ }
+ }
+
+ return info;
+ }
+
+ protected:
+ TPPFeatureInfo() = default;
+
+ private:
+ T *params_ = NULL;
+};
+
+// This singleton class serves as data exchanging central between data producer
+// <libsdm-color.so> and data consumer<SDM and HWC.>
+// This class defines PP pending features to be programmed, which generated from
+// ColorManager. Dirty flag indicates some features are available to be programmed.
+// () Lock is needed since the object wil be accessed from 2 tasks.
+// All API exposed are not threadsafe, it's caller's responsiblity to acquire the locker.
+class PPFeaturesConfig {
+ public:
+ PPFeaturesConfig() { memset(feature_, 0, sizeof(feature_)); }
+ ~PPFeaturesConfig() { Reset(); }
+
+ // ColorManager installs one TFeatureInfo<T> to take the output configs computed
+ // from ColorManager, containing all physical features to be programmed and also compute
+ // metadata/populate into T.
+ inline DisplayError AddFeature(uint32_t feature_id, PPFeatureInfo *feature) {
+ if (feature_id < kMaxNumPPFeatures) {
+ if (feature_[feature_id]) {
+ delete feature_[feature_id];
+ feature_[feature_id] = NULL;
+ }
+ feature_[feature_id] = feature;
+ }
+ return kErrorNone;
+ }
+
+ inline PPFeatureInfo* GetFeature(uint32_t feature_id) {
+ PPFeatureInfo* feature = nullptr;
+ if (feature_id < kMaxNumPPFeatures) {
+ if (feature_[feature_id]) {
+ feature = feature_[feature_id];
+ }
+ }
+ return feature;
+ }
+
+ inline Locker &GetLocker(void) { return locker_; }
+ inline PPFrameCaptureData *GetFrameCaptureData(void) { return &frame_capture_data; }
+ inline PPDETuningCfgData *GetDETuningCfgData(void) { return &de_tuning_data_; }
+ // Once all features are consumed, destroy/release all TFeatureInfo<T> on the list,
+ // then clear dirty_ flag and return the lock to the TFeatureInfo<T> producer.
+ void Reset();
+
+ // Consumer to call this to retrieve all the TFeatureInfo<T> on the list to be programmed.
+ DisplayError RetrieveNextFeature(PPFeatureInfo **feature);
+
+ inline bool IsDirty() { return dirty_; }
+ inline void MarkAsDirty() { dirty_ = true; }
+
+ private:
+ bool dirty_ = 0;
+ Locker locker_;
+ PPFeatureInfo *feature_[kMaxNumPPFeatures]; // reference to TFeatureInfo<T>.
+ uint32_t next_idx_ = 0;
+ PPFrameCaptureData frame_capture_data;
+ PPDETuningCfgData de_tuning_data_;
+};
+
+} // namespace sdm
+
+#endif // __COLOR_PARAMS_H__
diff --git a/sdm/include/private/dpps_control_interface.h b/sdm/include/private/dpps_control_interface.h
new file mode 100644
index 0000000..8a44907
--- /dev/null
+++ b/sdm/include/private/dpps_control_interface.h
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __DPPS_CONTROL_INTERFACE_H__
+#define __DPPS_CONTROL_INTERFACE_H__
+
+namespace sdm {
+
+class DppsControlInterface {
+ public:
+ virtual ~DppsControlInterface() { }
+ virtual DisplayError On() = 0;
+ virtual DisplayError Off() = 0;
+};
+
+} // namespace sdm
+
+#endif // __DPPS_CONTROL_INTERFACE_H__
+
diff --git a/sdm/include/private/extension_interface.h b/sdm/include/private/extension_interface.h
new file mode 100644
index 0000000..b889cab
--- /dev/null
+++ b/sdm/include/private/extension_interface.h
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2015 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __EXTENSION_INTERFACE_H__
+#define __EXTENSION_INTERFACE_H__
+
+#include <core/sdm_types.h>
+#include <core/display_interface.h>
+
+#include "partial_update_interface.h"
+#include "strategy_interface.h"
+#include "resource_interface.h"
+#include "dpps_control_interface.h"
+
+namespace sdm {
+
+#define EXTENSION_LIBRARY_NAME "libsdmextension.so"
+#define CREATE_EXTENSION_INTERFACE_NAME "CreateExtensionInterface"
+#define DESTROY_EXTENSION_INTERFACE_NAME "DestroyExtensionInterface"
+
+#define EXTENSION_REVISION_MAJOR (2)
+#define EXTENSION_REVISION_MINOR (0)
+
+#define EXTENSION_VERSION_TAG ((uint16_t) ((EXTENSION_REVISION_MAJOR << 8) \
+ | EXTENSION_REVISION_MINOR))
+
+class ExtensionInterface;
+
+typedef DisplayError (*CreateExtensionInterface)(uint16_t version, ExtensionInterface **interface);
+typedef DisplayError (*DestroyExtensionInterface)(ExtensionInterface *interface);
+
+class ExtensionInterface {
+ public:
+ virtual DisplayError CreatePartialUpdate(int32_t display_id, DisplayType type,
+ const HWResourceInfo &hw_resource_info,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes,
+ const HWDisplayAttributes &display_attributes,
+ const DisplayConfigVariableInfo &fb_config,
+ PartialUpdateInterface **interface) = 0;
+ virtual DisplayError DestroyPartialUpdate(PartialUpdateInterface *interface) = 0;
+
+ virtual DisplayError CreateStrategyExtn(int32_t display_id, DisplayType type,
+ BufferAllocator *buffer_allocator,
+ const HWResourceInfo &hw_resource_info,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes,
+ const DisplayConfigVariableInfo &fb_config,
+ StrategyInterface **interface) = 0;
+ virtual DisplayError DestroyStrategyExtn(StrategyInterface *interface) = 0;
+
+ virtual DisplayError CreateResourceExtn(const HWResourceInfo &hw_resource_info,
+ BufferAllocator *buffer_allocator,
+ BufferSyncHandler *buffer_sync_handler,
+ ResourceInterface **interface) = 0;
+ virtual DisplayError DestroyResourceExtn(ResourceInterface *interface) = 0;
+ virtual DisplayError CreateDppsControlExtn(DppsControlInterface **dpps_control_interface,
+ SocketHandler *socket_handler) = 0;
+ virtual DisplayError DestroyDppsControlExtn(DppsControlInterface *interface) = 0;
+
+ protected:
+ virtual ~ExtensionInterface() { }
+};
+
+} // namespace sdm
+
+#endif // __EXTENSION_INTERFACE_H__
+
diff --git a/sdm/include/private/hw_info_types.h b/sdm/include/private/hw_info_types.h
new file mode 100644
index 0000000..240b1c4
--- /dev/null
+++ b/sdm/include/private/hw_info_types.h
@@ -0,0 +1,795 @@
+/*
+* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_INFO_TYPES_H__
+#define __HW_INFO_TYPES_H__
+
+#include <stdint.h>
+#include <core/display_interface.h>
+#include <core/core_interface.h>
+#include <utils/locker.h>
+#include <utils/debug.h>
+#include <vector>
+#include <map>
+#include <string>
+#include <bitset>
+#include <memory>
+#include <utility>
+
+namespace sdm {
+using std::string;
+using std::pair;
+using std::vector;
+
+const int kMaxSDELayers = 16; // Maximum number of layers that can be handled by MDP5 hardware
+ // in a given layer stack.
+#define MAX_PLANES 4
+#define MAX_DETAIL_ENHANCE_CURVE 3
+#define MAJOR 28
+#define MINOR 16
+#define SDEVERSION(major, minor, hw_rev) ((major) << MAJOR) | ((minor) << MINOR) | (hw_rev)
+
+// CSC Max Size
+#define MAX_CSC_MATRIX_COEFF_SIZE 9
+#define MAX_CSC_CLAMP_SIZE 6
+#define MAX_CSC_BIAS_SIZE 3
+
+enum HWDeviceType {
+ kDeviceBuiltIn,
+ kDevicePluggable,
+ kDeviceVirtual,
+ kDeviceRotator,
+ kDeviceMax,
+};
+
+enum HWBlockType {
+ kHWBuiltIn,
+ kHWPluggable,
+ kHWWriteback0,
+ kHWWriteback1,
+ kHWWriteback2,
+ kHWBlockMax
+};
+
+enum HWDisplayMode {
+ kModeDefault,
+ kModeVideo,
+ kModeCommand,
+};
+
+enum PipeType {
+ kPipeTypeUnused,
+ kPipeTypeVIG,
+ kPipeTypeRGB,
+ kPipeTypeDMA,
+ kPipeTypeCursor,
+};
+
+enum HWSubBlockType {
+ kHWVIGPipe,
+ kHWRGBPipe,
+ kHWDMAPipe,
+ kHWCursorPipe,
+ kHWRotatorInput,
+ kHWRotatorOutput,
+ kHWWBIntfOutput,
+ kHWDestinationScalar,
+ kHWSubBlockMax,
+};
+
+enum HWAlphaInterpolation {
+ kInterpolationPixelRepeat,
+ kInterpolationBilinear,
+ kInterpolation2D,
+ kInterpolationMax,
+};
+
+enum HWBlendingFilter {
+ kBlendFilterCircular,
+ kBlendFilterSeparable,
+ kBlendFilterMax,
+};
+
+enum HWPipeFlags {
+ kIGC = 1 << 0,
+ kMultiRect = 1 << 1,
+ kMultiRectParallelMode = 1 << 2,
+ kFlipVertical = 1 << 5,
+ kFlipHorizontal = 1 << 6,
+ kSecure = 1 << 7,
+ kDisplaySecure = 1 << 8,
+ kCameraSecure = 1 << 9,
+ kInterlaced = 1 << 10,
+ kUpdating = 1 < 11,
+ kSolidFill = 1 << 12,
+ kTonemap1d = 1 << 13,
+ kTonemap3d = 1 << 14,
+};
+
+enum HWAVRModes {
+ kQsyncNone, // Disables Qsync.
+ kContinuousMode, // Mode to enable AVR feature for every frame.
+ kOneShotMode, // Mode to enable AVR feature for particular frame.
+};
+
+enum HWTopology {
+ kUnknown,
+ kSingleLM,
+ kSingleLMDSC,
+ kDualLM,
+ kDualLMDSC,
+ kDualLMMerge,
+ kDualLMMergeDSC,
+ kDualLMDSCMerge,
+ kPPSplit,
+};
+
+enum HwHdrEotf {
+ kHdrEOTFInvalid = 0,
+ kHdrEOTFSDR = 0x1,
+ kHdrEOTFHdrLumRange = 0x2,
+ kHdrEOTFHDR10 = 0x4,
+ kHdrEOTFHLG = 0x8,
+};
+
+enum HWSrcTonemap {
+ kSrcTonemapNone,
+ kSrcTonemap1d, // DMA
+ kSrcTonemap3d, // VIG
+};
+
+enum HWToneMapLut {
+ kLutNone, // No valid lut
+ kDma1dIgc, // DMA IGC Lut
+ kDma1dGc, // DMA GC Lut
+ kVig1dIgc, // VIG IGC Lut
+ kVig3dGamut, // 3D Gamut Lut
+};
+
+enum HWWriteOperation {
+ kNoOp, // No-op, previously set config holds good
+ kSet, // Sets the new config
+ kReset, // Resets/Clears the previously set config
+};
+
+enum class HWRecoveryEvent : uint32_t {
+ kSuccess, // driver succeeded recovery
+ kCapture, // driver PP_TIMEOUT, capture logs
+ kDisplayPowerReset, // driver requesting display power cycle
+};
+
+enum SDMVersion {
+ kVersionSDM855V1 = SDEVERSION(5, 0, 0),
+ kVersionSDM855V2 = SDEVERSION(5, 0, 1),
+ kVersionSM6150V1 = SDEVERSION(5, 3, 0),
+ kVersionSM7150V1 = SDEVERSION(5, 2, 0),
+ kVersionSM8250V1 = SDEVERSION(6, 0, 0),
+ kVersionSM7250V1 = SDEVERSION(6, 1, 0),
+ kVersionSM6250V1 = SDEVERSION(6, 2, 0),
+};
+
+typedef std::map<HWSubBlockType, std::vector<LayerBufferFormat>> FormatsMap;
+typedef std::map<LayerBufferFormat, float> CompRatioMap;
+
+// Base Postprocessing features information.
+class PPFeatureInfo {
+ public:
+ uint32_t enable_flags_ = 0; // bitmap to indicate subset of parameters enabling or not.
+ uint32_t feature_version_ = 0;
+ uint32_t feature_id_ = 0;
+ uint32_t disp_id_ = 0;
+ uint32_t pipe_id_ = 0;
+
+ virtual ~PPFeatureInfo() {}
+ virtual void *GetConfigData(void) const = 0;
+};
+
+struct HWDynBwLimitInfo {
+ uint32_t cur_mode = kBwDefault;
+ uint64_t total_bw_limit[kBwModeMax] = { 0 };
+ uint64_t pipe_bw_limit[kBwModeMax] = { 0 };
+};
+
+struct HWPipeCaps {
+ PipeType type = kPipeTypeUnused;
+ uint32_t id = 0;
+ uint32_t master_pipe_id = 0;
+ uint32_t max_rects = 1;
+ bool inverse_pma = 0;
+ uint32_t dgm_csc_version = 0;
+ std::map<HWToneMapLut, uint32_t> tm_lut_version_map = {};
+ bool block_sec_ui = false;
+ // Allow all pipelines to be usable on all displays by default
+ std::bitset<32> hw_block_mask = std::bitset<32>().set();
+};
+
+struct HWRotatorInfo {
+ enum { ROT_TYPE_MDSS, ROT_TYPE_V4L2 };
+ uint32_t type = ROT_TYPE_MDSS;
+ uint32_t num_rotator = 0;
+ bool has_downscale = false;
+ std::string device_path = "";
+ float min_downscale = 2.0f;
+ bool downscale_compression = false;
+ uint64_t max_line_width = 0;
+};
+
+enum HWQseedStepVersion {
+ kQseed3v2,
+ kQseed3v3,
+ kQseed3v4,
+ kQseed3litev4,
+ kQseed3litev5,
+};
+
+struct HWDestScalarInfo {
+ uint32_t count = 0;
+ uint32_t max_input_width = 0;
+ uint32_t max_output_width = 0;
+ uint32_t max_scale_up = 1;
+ uint32_t prefill_lines = 4;
+};
+
+enum SmartDMARevision {
+ V1,
+ V2,
+ V2p5
+};
+
+enum InlineRotationVersion {
+ kInlineRotationNone,
+ kInlineRotationV1,
+ kInlineRotationV1p1,
+};
+
+const int kPipeVigLimit = (1 << 0);
+const int kPipeDmaLimit = (1 << 1);
+const int kPipeScalingLimit = (1 << 2);
+const int kPipeRotationLimit = (1 << 3);
+
+struct HWResourceInfo {
+ uint32_t hw_version = 0;
+ uint32_t hw_revision = 0;
+ uint32_t num_dma_pipe = 0;
+ uint32_t num_vig_pipe = 0;
+ uint32_t num_rgb_pipe = 0;
+ uint32_t num_cursor_pipe = 0;
+ uint32_t num_blending_stages = 0;
+ uint32_t num_solidfill_stages = 0;
+ uint32_t num_control = 0;
+ uint32_t num_mixer_to_disp = 0;
+ uint32_t smp_total = 0;
+ uint32_t smp_size = 0;
+ uint32_t num_smp_per_pipe = 0;
+ uint32_t max_scale_up = 1;
+ uint32_t max_scale_down = 1;
+ uint64_t max_bandwidth_low = 0;
+ uint64_t max_bandwidth_high = 0;
+ uint32_t max_mixer_width = 2048;
+ uint32_t max_pipe_width = 2048;
+ uint32_t max_scaler_pipe_width = 2560;
+ uint32_t max_cursor_size = 0;
+ uint64_t max_pipe_bw = 0;
+ uint32_t max_sde_clk = 0;
+ float clk_fudge_factor = 1.0f;
+ uint32_t macrotile_nv12_factor = 0;
+ uint32_t macrotile_factor = 0;
+ uint32_t linear_factor = 0;
+ uint32_t scale_factor = 0;
+ uint32_t extra_fudge_factor = 0;
+ uint32_t amortizable_threshold = 0;
+ uint32_t system_overhead_lines = 0;
+ bool has_bwc = false;
+ bool has_ubwc = false;
+ bool has_decimation = false;
+ bool has_macrotile = false;
+ bool has_non_scalar_rgb = false;
+ bool is_src_split = false;
+ bool has_dyn_bw_support = false;
+ bool separate_rotator = false;
+ bool has_qseed3 = false;
+ bool has_concurrent_writeback = false;
+ bool has_ppp = false;
+ bool has_excl_rect = false;
+ uint32_t writeback_index = kHWBlockMax;
+ HWDynBwLimitInfo dyn_bw_info;
+ std::vector<HWPipeCaps> hw_pipes;
+ FormatsMap supported_formats_map;
+ HWRotatorInfo hw_rot_info;
+ HWDestScalarInfo hw_dest_scalar_info;
+ bool has_avr = false;
+ bool has_hdr = false;
+ SmartDMARevision smart_dma_rev = SmartDMARevision::V1;
+ float ib_fudge_factor = 1.0f;
+ uint32_t undersized_prefill_lines = 0;
+ CompRatioMap comp_ratio_rt_map;
+ CompRatioMap comp_ratio_nrt_map;
+ uint32_t cache_size = 0; // cache size in bytes
+ HWQseedStepVersion pipe_qseed3_version = kQseed3v2; // only valid when has_qseed3=true
+ uint32_t min_prefill_lines = 0;
+ InlineRotationVersion inrot_version = kInlineRotationNone;
+ std::bitset<32> src_tone_map = 0; //!< Stores the bit mask of src tone map capability
+ int secure_disp_blend_stage = -1;
+ uint32_t num_mnocports = 2;
+ uint32_t mnoc_bus_width = 32;
+ bool use_baselayer_for_stage = false;
+ uint32_t line_width_constraints_count = 0;
+ vector< pair <uint32_t, uint32_t> > line_width_limits;
+ vector< pair <uint32_t, uint32_t> > line_width_constraints;
+ float vbif_cmd_ff = 0.0f;
+};
+
+struct HWSplitInfo {
+ uint32_t left_split = 0;
+ uint32_t right_split = 0;
+
+ bool operator !=(const HWSplitInfo &split_info) {
+ return ((left_split != split_info.left_split) || (right_split != split_info.right_split));
+ }
+
+ bool operator ==(const HWSplitInfo &split_info) {
+ return !(operator !=(split_info));
+ }
+};
+
+enum HWS3DMode {
+ kS3DModeNone,
+ kS3DModeLR,
+ kS3DModeRL,
+ kS3DModeTB,
+ kS3DModeFP,
+ kS3DModeMax,
+};
+
+struct HWColorPrimaries {
+ uint32_t white_point[2] = {}; // White point
+ uint32_t red[2] = {}; // Red color primary
+ uint32_t green[2] = {}; // Green color primary
+ uint32_t blue[2] = {}; // Blue color primary
+};
+
+struct HWPanelOrientation {
+ bool rotation = false;
+ bool flip_horizontal = false;
+ bool flip_vertical = false;
+};
+
+struct HWPanelInfo {
+ DisplayPort port = kPortDefault; // Display port
+ HWDisplayMode mode = kModeDefault; // Display mode
+ bool partial_update = false; // Partial update feature
+ int left_align = 1; // ROI left alignment restriction
+ int width_align = 1; // ROI width alignment restriction
+ int top_align = 1; // ROI top alignment restriction
+ int height_align = 1; // ROI height alignment restriction
+ int min_roi_width = 1; // Min width needed for ROI
+ int min_roi_height = 1; // Min height needed for ROI
+ bool needs_roi_merge = false; // Merge ROI's of both the DSI's
+ bool dynamic_fps = false; // Panel Supports dynamic fps
+ bool dfps_porch_mode = false; // dynamic fps VFP or HFP mode
+ bool ping_pong_split = false; // Supports Ping pong split
+ uint32_t min_fps = 0; // Min fps supported by panel
+ uint32_t max_fps = 0; // Max fps supported by panel
+ bool is_primary_panel = false; // Panel is primary display
+ bool is_pluggable = false; // Panel is pluggable
+ HWSplitInfo split_info; // Panel split configuration
+ char panel_name[256] = {0}; // Panel name
+ HWS3DMode s3d_mode = kS3DModeNone; // Panel's current s3d mode.
+ float panel_max_brightness = 255.0f; // Max panel brightness
+ float panel_min_brightness = 1.0f; // Min panel brightness
+ uint32_t left_roi_count = 1; // Number if ROI supported on left panel
+ uint32_t right_roi_count = 1; // Number if ROI supported on right panel
+ bool hdr_enabled = false; // HDR feature supported
+ bool hdr_metadata_type_one = false; // Static HDR metadata type one
+ uint32_t hdr_eotf = 0; // Electro optical transfer function
+ float peak_luminance = 0.0f; // Panel's peak luminance level
+ float average_luminance = 0.0f; // Panel's average luminance level
+ float blackness_level = 0.0f; // Panel's blackness level
+ HWColorPrimaries primaries = {}; // WRGB color primaries
+ HWPanelOrientation panel_orientation = {}; // Panel Orientation
+ uint32_t transfer_time_us = 0; // transfer time in micro seconds to panel's active region
+ bool qsync_support = false; // Specifies panel supports qsync feature or not.
+ bool dyn_bitclk_support = false; // Bit clk can be updated to avoid RF interference.
+ std::vector<uint64_t> bitclk_rates; // Supported bit clk levels.
+
+ bool operator !=(const HWPanelInfo &panel_info) {
+ return ((port != panel_info.port) || (mode != panel_info.mode) ||
+ (partial_update != panel_info.partial_update) ||
+ (left_align != panel_info.left_align) || (width_align != panel_info.width_align) ||
+ (top_align != panel_info.top_align) || (height_align != panel_info.height_align) ||
+ (min_roi_width != panel_info.min_roi_width) ||
+ (min_roi_height != panel_info.min_roi_height) ||
+ (needs_roi_merge != panel_info.needs_roi_merge) ||
+ (dynamic_fps != panel_info.dynamic_fps) || (min_fps != panel_info.min_fps) ||
+ (dfps_porch_mode != panel_info.dfps_porch_mode) ||
+ (ping_pong_split != panel_info.ping_pong_split) ||
+ (max_fps != panel_info.max_fps) || (is_primary_panel != panel_info.is_primary_panel) ||
+ (split_info != panel_info.split_info) || (s3d_mode != panel_info.s3d_mode) ||
+ (left_roi_count != panel_info.left_roi_count) ||
+ (right_roi_count != panel_info.right_roi_count) ||
+ (transfer_time_us != panel_info.transfer_time_us) ||
+ (qsync_support != panel_info.qsync_support) ||
+ (dyn_bitclk_support != panel_info.dyn_bitclk_support) ||
+ (bitclk_rates != panel_info.bitclk_rates));
+ }
+
+ bool operator ==(const HWPanelInfo &panel_info) {
+ return !(operator !=(panel_info));
+ }
+};
+
+struct HWSessionConfig {
+ LayerRect src_rect {};
+ LayerRect dst_rect {};
+ uint32_t buffer_count = 0;
+ bool secure = false;
+ uint32_t frame_rate = 0;
+ LayerTransform transform;
+ bool secure_camera = false;
+
+ bool operator==(const HWSessionConfig& config) const {
+ return (src_rect == config.src_rect &&
+ dst_rect == config.dst_rect &&
+ buffer_count == config.buffer_count &&
+ secure == config.secure &&
+ frame_rate == config.frame_rate &&
+ transform == config.transform &&
+ secure_camera == config.secure_camera);
+ }
+
+ bool operator!=(const HWSessionConfig& config) const {
+ return !operator==(config);
+ }
+};
+
+enum HWRotatorMode {
+ kRotatorNone,
+ kRotatorOffline,
+ kRotatorInline
+};
+
+struct HWRotateInfo {
+ int pipe_id = -1; // Not actual pipe id, but the relative DMA id
+ int writeback_id = -1; // Writeback block id, but this is the same as DMA id
+ LayerRect src_roi {}; // Source crop of each split
+ LayerRect dst_roi {}; // Destination crop of each split
+ bool valid = false;
+ int rotate_id = -1; // Actual rotator session id with driver
+};
+
+struct HWRotatorSession {
+ HWRotateInfo hw_rotate_info[kMaxRotatePerLayer] {};
+ uint32_t hw_block_count = 0; // number of rotator hw blocks used by rotator session
+ int session_id = -1; // A handle with Session Manager
+ HWSessionConfig hw_session_config {};
+ LayerBuffer input_buffer {}; // Input to rotator
+ LayerBuffer output_buffer {}; // Output of rotator, crop width and stride are same
+ float input_compression = 1.0f;
+ float output_compression = 1.0f;
+ bool is_buffer_cached = false;
+ HWRotatorMode mode = kRotatorNone;
+};
+
+struct HWScaleLutInfo {
+ uint32_t dir_lut_size = 0;
+ uint32_t cir_lut_size = 0;
+ uint32_t sep_lut_size = 0;
+ uint64_t dir_lut = 0;
+ uint64_t cir_lut = 0;
+ uint64_t sep_lut = 0;
+};
+
+struct HWDetailEnhanceData : DisplayDetailEnhancerData {
+ uint16_t prec_shift = 0;
+ int16_t adjust_a[MAX_DETAIL_ENHANCE_CURVE] = {0};
+ int16_t adjust_b[MAX_DETAIL_ENHANCE_CURVE] = {0};
+ int16_t adjust_c[MAX_DETAIL_ENHANCE_CURVE] = {0};
+};
+
+struct HWPixelExtension {
+ int32_t extension = 0; // Number of pixels extension in left, right, top and bottom directions
+ // for all color components. This pixel value for each color component
+ // should be sum of fetch and repeat pixels.
+
+ int32_t overfetch = 0; // Number of pixels need to be overfetched in left, right, top and bottom
+ // directions from source image for scaling.
+
+ int32_t repeat = 0; // Number of pixels need to be repeated in left, right, top and bottom
+ // directions for scaling.
+};
+
+struct HWPlane {
+ int32_t init_phase_x = 0;
+ int32_t phase_step_x = 0;
+ int32_t init_phase_y = 0;
+ int32_t phase_step_y = 0;
+ HWPixelExtension left {};
+ HWPixelExtension top {};
+ HWPixelExtension right {};
+ HWPixelExtension bottom {};
+ uint32_t roi_width = 0;
+ int32_t preload_x = 0;
+ int32_t preload_y = 0;
+ uint32_t src_width = 0;
+ uint32_t src_height = 0;
+};
+
+struct HWCsc {
+ int64_t ctm_coeff[MAX_CSC_MATRIX_COEFF_SIZE] = {0};
+ uint32_t pre_bias[MAX_CSC_BIAS_SIZE] = {0};
+ uint32_t post_bias[MAX_CSC_BIAS_SIZE] = {0};
+ uint32_t pre_clamp[MAX_CSC_CLAMP_SIZE] = {0};
+ uint32_t post_clamp[MAX_CSC_CLAMP_SIZE] = {0};
+};
+
+struct HWScaleData {
+ struct enable {
+ uint8_t scale = 0;
+ uint8_t direction_detection = 0;
+ uint8_t detail_enhance = 0;
+ } enable;
+ uint32_t dst_width = 0;
+ uint32_t dst_height = 0;
+ uint32_t dir_weight = 0;
+ HWPlane plane[MAX_PLANES] {};
+ // scale_v2_data fields
+ ScalingFilterConfig y_rgb_filter_cfg = kFilterEdgeDirected;
+ ScalingFilterConfig uv_filter_cfg = kFilterEdgeDirected;
+ HWAlphaInterpolation alpha_filter_cfg = kInterpolationPixelRepeat;
+ HWBlendingFilter blend_cfg = kBlendFilterCircular;
+
+ struct lut_flags {
+ uint8_t lut_swap = 0;
+ uint8_t lut_dir_wr = 0;
+ uint8_t lut_y_cir_wr = 0;
+ uint8_t lut_uv_cir_wr = 0;
+ uint8_t lut_y_sep_wr = 0;
+ uint8_t lut_uv_sep_wr = 0;
+ } lut_flag;
+
+ uint32_t dir_lut_idx = 0;
+ /* for Y(RGB) and UV planes*/
+ uint32_t y_rgb_cir_lut_idx = 0;
+ uint32_t uv_cir_lut_idx = 0;
+ uint32_t y_rgb_sep_lut_idx = 0;
+ uint32_t uv_sep_lut_idx = 0;
+ HWDetailEnhanceData detail_enhance {};
+};
+
+struct HWDestScaleInfo {
+ uint32_t mixer_width = 0;
+ uint32_t mixer_height = 0;
+ bool scale_update = false;
+ HWScaleData scale_data = {};
+ LayerRect panel_roi = {};
+};
+
+typedef std::map<uint32_t, HWDestScaleInfo *> DestScaleInfoMap;
+
+struct HWAVRInfo {
+ bool update = false; // Update avr setting.
+ HWAVRModes mode = kContinuousMode; // Specifies the AVR mode
+};
+
+struct HWPipeCscInfo {
+ HWWriteOperation op = kNoOp;
+ HWCsc csc = {};
+};
+
+struct HWPipeTonemapLutInfo {
+ HWWriteOperation op = kNoOp;
+ HWToneMapLut type = kLutNone;
+ std::shared_ptr<PPFeatureInfo> pay_load = nullptr;
+};
+
+struct HWPipeTonemapInversePma {
+ HWWriteOperation op = kNoOp;
+ bool inverse_pma = false;
+};
+
+struct HWPipeInfo {
+ HWPipeInfo *pair = NULL;
+ uint8_t rect = 255;
+ uint32_t pipe_id = 0;
+ HWSubBlockType sub_block_type = kHWSubBlockMax;
+ LayerRect src_roi {};
+ LayerRect dst_roi {};
+ LayerRect excl_rect {}; // exclusion rectangle per pipe rectangle
+ uint8_t horizontal_decimation = 0;
+ uint8_t vertical_decimation = 0;
+ HWScaleData scale_data {};
+ uint32_t z_order = 0;
+ uint32_t flags = 0;
+ bool valid = false;
+ bool is_virtual = 0;
+ HWPipeTonemapInversePma inverse_pma_info = {};
+ HWPipeCscInfo dgm_csc_info = {};
+ std::vector<HWPipeTonemapLutInfo> lut_info = {};
+ HWSrcTonemap tonemap = kSrcTonemapNone;
+ LayerTransform transform;
+};
+
+struct HWSolidfillStage {
+ uint32_t z_order = kMaxSDELayers;
+ uint32_t color = 0;
+ LayerRect roi = {};
+ bool is_exclusion_rect = false;
+ LayerSolidFill solid_fill_info = {};
+};
+
+struct HWLayerConfig {
+ HWPipeInfo left_pipe {}; // pipe for left side of output
+ HWPipeInfo right_pipe {}; // pipe for right side of output
+ HWRotatorSession hw_rotator_session {};
+ HWSolidfillStage hw_solidfill_stage {};
+ float compression = 1.0f;
+ bool use_solidfill_stage = false;
+};
+
+struct HWHDRLayerInfo {
+ enum HDROperation {
+ kNoOp, // No-op.
+ kSet, // Sets the HDR MetaData - Start of HDR
+ kReset, // resets the previously set HDR Metadata, End of HDR
+ };
+
+ int32_t layer_index = -1;
+ HDROperation operation = kNoOp;
+};
+
+struct LayerExt {
+ std::vector<LayerRect> excl_rects = {}; // list of exclusion rects
+};
+
+struct HWLayersInfo {
+ LayerStack *stack = NULL; // Input layer stack. Set by the caller.
+ uint32_t app_layer_count = 0; // Total number of app layers. Must not be 0.
+ uint32_t gpu_target_index = 0; // GPU target layer index. 0 if not present.
+ std::vector<ColorPrimaries> wide_color_primaries = {}; // list of wide color primaries
+
+ std::vector<Layer> hw_layers = {}; // Layers which need to be programmed on the HW
+ std::vector<LayerExt> layer_exts = {}; // Extention layer having list of
+ // exclusion rectangles for each layer
+ std::vector<uint32_t> index {}; // Indexes of the layers from the layer stack which need to
+ // be programmed on hardware.
+ std::vector<uint32_t> roi_index {}; // Stores the ROI index where the layers are visible.
+ int sync_handle = -1; // Release fence id for current draw cycle.
+ int set_idle_time_ms = -1; // Set idle time to the new specified value.
+ // -1 indicates no change in idle time since last set value.
+ std::vector<LayerRect> left_frame_roi = {}; // Left ROI.
+ std::vector<LayerRect> right_frame_roi = {}; // Right ROI.
+ LayerRect partial_fb_roi = {}; // Damaged area in framebuffer.
+ bool roi_split = false; // Indicates separated left and right ROI
+ bool async_cursor_updates = false; // Cursor layer allowed to have async updates
+ bool fast_path_composition = false; // Indicates frame has fast path composition
+ DestScaleInfoMap dest_scale_info_map = {};
+ HWHDRLayerInfo hdr_layer_info = {};
+ Handle pvt_data = NULL; // Private data used by sdm extension only.
+};
+
+struct HWQosData {
+ uint64_t core_ab_bps = 0;
+ uint64_t core_ib_bps = 0;
+ uint64_t llcc_ab_bps = 0;
+ uint64_t llcc_ib_bps = 0;
+ uint64_t dram_ab_bps = 0;
+ uint64_t dram_ib_bps = 0;
+ uint64_t rot_prefill_bw_bps = 0;
+ uint32_t clock_hz = 0;
+ uint32_t rot_clock_hz = 0;
+};
+
+enum UpdateType {
+ kUpdateResources, // Indicates Strategy & RM execution, which can update resources.
+ kUpdateMax,
+};
+
+struct HWLayers {
+ HWLayersInfo info {};
+ HWLayerConfig config[kMaxSDELayers] {};
+ float output_compression = 1.0f;
+ HWQosData qos_data = {};
+ HWAVRInfo hw_avr_info = {};
+ std::bitset<kUpdateMax> updates_mask = 0;
+};
+
+struct HWDisplayAttributes : DisplayConfigVariableInfo {
+ bool is_device_split = false;
+ uint32_t v_front_porch = 0; //!< Vertical front porch of panel
+ uint32_t v_back_porch = 0; //!< Vertical back porch of panel
+ uint32_t v_pulse_width = 0; //!< Vertical pulse width of panel
+ uint32_t h_total = 0; //!< Total width of panel (hActive + hFP + hBP + hPulseWidth)
+ uint32_t v_total = 0; //!< Total height of panel (vActive + vFP + vBP + vPulseWidth)
+ std::bitset<32> s3d_config {}; //!< Stores the bit mask of S3D modes
+ uint32_t clock_khz = 0; //!< Stores the pixel clock of panel in khz
+ HWTopology topology = kUnknown; //!< Stores the topology information.
+
+ bool operator !=(const HWDisplayAttributes &display_attributes) {
+ return ((is_device_split != display_attributes.is_device_split) ||
+ (x_pixels != display_attributes.x_pixels) ||
+ (y_pixels != display_attributes.y_pixels) ||
+ (x_dpi != display_attributes.x_dpi) ||
+ (y_dpi != display_attributes.y_dpi) ||
+ (fps != display_attributes.fps) ||
+ (vsync_period_ns != display_attributes.vsync_period_ns) ||
+ (v_front_porch != display_attributes.v_front_porch) ||
+ (v_back_porch != display_attributes.v_back_porch) ||
+ (v_pulse_width != display_attributes.v_pulse_width) ||
+ (h_total != display_attributes.h_total) ||
+ (is_yuv != display_attributes.is_yuv) ||
+ (s3d_config != display_attributes.s3d_config) ||
+ (clock_khz != display_attributes.clock_khz) ||
+ (topology != display_attributes.topology));
+ }
+
+ bool operator ==(const HWDisplayAttributes &display_attributes) {
+ return !(operator !=(display_attributes));
+ }
+
+ bool OnlyFpsChanged(const HWDisplayAttributes &display_attributes) {
+ return ((fps != display_attributes.fps) &&
+ (vsync_period_ns != display_attributes.vsync_period_ns) &&
+ (x_pixels == display_attributes.x_pixels) &&
+ (y_pixels == display_attributes.y_pixels) &&
+ (x_dpi == display_attributes.x_dpi) &&
+ (y_dpi == display_attributes.y_dpi) &&
+ (topology == display_attributes.topology) &&
+ (is_device_split == display_attributes.is_device_split) &&
+ (v_front_porch == display_attributes.v_front_porch) &&
+ (v_back_porch == display_attributes.v_back_porch) &&
+ (v_pulse_width == display_attributes.v_pulse_width) &&
+ (h_total == display_attributes.h_total) &&
+ (is_yuv == display_attributes.is_yuv) &&
+ (s3d_config == display_attributes.s3d_config) &&
+ (clock_khz == display_attributes.clock_khz));
+ }
+};
+
+struct HWMixerAttributes {
+ uint32_t width = 0; // Layer mixer width
+ uint32_t height = 0; // Layer mixer height
+ uint32_t split_left = 0;
+ LayerBufferFormat output_format = kFormatRGB101010; // Layer mixer output format
+ uint32_t mixer_index = 0;
+
+ bool operator !=(const HWMixerAttributes &mixer_attributes) {
+ return ((width != mixer_attributes.width) ||
+ (height != mixer_attributes.height) ||
+ (output_format != mixer_attributes.output_format) ||
+ (split_left != mixer_attributes.split_left));
+ }
+
+ bool operator ==(const HWMixerAttributes &mixer_attributes) {
+ return !(operator !=(mixer_attributes));
+ }
+
+ bool IsValid() {
+ return (width > 0 && height > 0);
+ }
+};
+
+} // namespace sdm
+
+#endif // __HW_INFO_TYPES_H__
+
diff --git a/sdm/include/private/partial_update_interface.h b/sdm/include/private/partial_update_interface.h
new file mode 100644
index 0000000..a1c2382
--- /dev/null
+++ b/sdm/include/private/partial_update_interface.h
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __PARTIAL_UPDATE_INTERFACE_H__
+#define __PARTIAL_UPDATE_INTERFACE_H__
+
+#include <core/display_interface.h>
+#include <core/buffer_allocator.h>
+#include <core/buffer_sync_handler.h>
+
+#include "hw_info_types.h"
+
+namespace sdm {
+
+struct PUConstraints {
+ bool enable = true; //!< If this is set, PU will be enabled or it will be disabled
+};
+
+class PartialUpdateInterface {
+ public:
+ virtual DisplayError Start(const PUConstraints &pu_constraints) = 0;
+ virtual DisplayError GenerateROI(HWLayersInfo *hw_layers_info) = 0;
+ virtual DisplayError Stop() = 0;
+
+ protected:
+ virtual ~PartialUpdateInterface() { }
+};
+
+} // namespace sdm
+
+#endif // __PARTIAL_UPDATE_INTERFACE_H__
+
diff --git a/sdm/include/private/resource_interface.h b/sdm/include/private/resource_interface.h
new file mode 100644
index 0000000..338af95
--- /dev/null
+++ b/sdm/include/private/resource_interface.h
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2015 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __RESOURCE_INTERFACE_H__
+#define __RESOURCE_INTERFACE_H__
+
+#include <core/display_interface.h>
+#include "hw_info_types.h"
+
+namespace sdm {
+
+class ResourceInterface {
+ public:
+ enum ResourceCmd {
+ kCmdResetLUT,
+ kCmdGetDefaultClk,
+ kCmdDisableRotatorOneFrame,
+ kCmdSetDisplayState,
+ kCmdUpdateSyncHandle,
+ kCmdCheckEnforceSplit,
+ kCmdMax,
+ };
+
+ virtual DisplayError RegisterDisplay(int32_t display_id, DisplayType type,
+ const HWDisplayAttributes &display_attributes,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes,
+ Handle *display_ctx) = 0;
+ virtual DisplayError UnregisterDisplay(Handle display_ctx) = 0;
+ virtual DisplayError ReconfigureDisplay(Handle display_ctx,
+ const HWDisplayAttributes &display_attributes,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes) = 0;
+ virtual DisplayError Start(Handle display_ctx) = 0;
+ virtual DisplayError Stop(Handle display_ctx, HWLayers *hw_layers) = 0;
+ virtual DisplayError Prepare(Handle display_ctx, HWLayers *hw_layers) = 0;
+ virtual DisplayError PostPrepare(Handle display_ctx, HWLayers *hw_layers) = 0;
+ virtual DisplayError Commit(Handle display_ctx, HWLayers *hw_layers) = 0;
+ virtual DisplayError PostCommit(Handle display_ctx, HWLayers *hw_layers) = 0;
+ virtual void Purge(Handle display_ctx) = 0;
+ virtual DisplayError SetMaxMixerStages(Handle display_ctx, uint32_t max_mixer_stages) = 0;
+ virtual DisplayError ValidateScaling(const LayerRect &crop, const LayerRect &dst,
+ bool rotate90, BufferLayout layout,
+ bool use_rotator_downscale) = 0;
+ virtual DisplayError ValidateAndSetCursorPosition(Handle display_ctx, HWLayers *hw_layers,
+ int x, int y,
+ DisplayConfigVariableInfo *fb_config) = 0;
+ virtual DisplayError SetMaxBandwidthMode(HWBwModes mode) = 0;
+ virtual DisplayError GetScaleLutConfig(HWScaleLutInfo *lut_info) = 0;
+ virtual DisplayError SetDetailEnhancerData(Handle display_ctx,
+ const DisplayDetailEnhancerData &de_data) = 0;
+ virtual DisplayError Perform(int cmd, ...) = 0;
+ virtual ~ResourceInterface() { }
+};
+
+} // namespace sdm
+
+#endif // __RESOURCE_INTERFACE_H__
+
diff --git a/sdm/include/private/strategy_interface.h b/sdm/include/private/strategy_interface.h
new file mode 100644
index 0000000..31fda2a
--- /dev/null
+++ b/sdm/include/private/strategy_interface.h
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __STRATEGY_INTERFACE_H__
+#define __STRATEGY_INTERFACE_H__
+
+#include <core/sdm_types.h>
+#include <core/display_interface.h>
+#include <vector>
+
+#include "hw_info_types.h"
+
+namespace sdm {
+
+struct StrategyConstraints {
+ bool safe_mode = false; //!< In this mode, strategy manager chooses the composition strategy
+ //!< that requires minimum number of pipe for the current frame. i.e.,
+ //!< video only composition, secure only composition or GPU composition
+
+ uint32_t max_layers = kMaxSDELayers; //!< Maximum number of layers that shall be programmed
+ //!< on hardware for the given layer stack.
+};
+
+class StrategyInterface {
+ public:
+ virtual DisplayError Start(HWLayersInfo *hw_layers_info, uint32_t *max_attempts) = 0;
+ virtual DisplayError GetNextStrategy(StrategyConstraints *constraints) = 0;
+ virtual DisplayError Stop() = 0;
+ virtual DisplayError Reconfigure(const HWPanelInfo &hw_panel_info,
+ const HWResourceInfo &hw_res_info,
+ const HWMixerAttributes &mixer_attributes,
+ const DisplayConfigVariableInfo &fb_config) = 0;
+ virtual DisplayError SetCompositionState(LayerComposition composition_type, bool enable) = 0;
+ virtual DisplayError Purge() = 0;
+ virtual DisplayError SetIdleTimeoutMs(uint32_t active_ms) = 0;
+ /* Sets the list of color modes supported on a display */
+ virtual DisplayError SetColorModesInfo(const std::vector<PrimariesTransfer> &colormodes_cs) = 0;
+ virtual DisplayError SetBlendSpace(const PrimariesTransfer &blend_space) = 0;
+ virtual bool CanSkipValidate() = 0;
+
+ virtual ~StrategyInterface() { }
+};
+
+} // namespace sdm
+
+#endif // __STRATEGY_INTERFACE_H__
+
diff --git a/sdm/include/utils/constants.h b/sdm/include/utils/constants.h
new file mode 100644
index 0000000..ffa8d12
--- /dev/null
+++ b/sdm/include/utils/constants.h
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2014 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __CONSTANTS_H__
+#define __CONSTANTS_H__
+
+#include <stdlib.h>
+#include <inttypes.h>
+
+#ifndef PRIu64
+#define PRIu64 "llu"
+#endif
+
+#ifndef PRIu32
+#define PRIu32 "lu"
+#endif
+
+#define INT(exp) static_cast<int>(exp)
+#define FLOAT(exp) static_cast<float>(exp)
+#define UINT8(exp) static_cast<uint8_t>(exp)
+#define UINT16(exp) static_cast<uint16_t>(exp)
+#define UINT32(exp) static_cast<uint32_t>(exp)
+#define INT32(exp) static_cast<int32_t>(exp)
+#define UINT64(exp) static_cast<uint64_t>(exp)
+
+#define ROUND_UP(number, step) ((((number) + ((step) - 1)) / (step)) * (step))
+
+#define BITMAP(bit) (1 << (bit))
+
+#define ROUND_UP_ALIGN_DOWN(value, a) FLOAT(FloorToMultipleOf(UINT32(value + 0.5f), UINT32(a)))
+#define ROUND_UP_ALIGN_UP(value, a) FLOAT(CeilToMultipleOf(UINT32(value + 0.5f), UINT32(a)))
+
+#define IDLE_TIMEOUT_DEFAULT_MS 70
+#define IDLE_TIMEOUT_ACTIVE_MS IDLE_TIMEOUT_DEFAULT_MS
+#define IDLE_TIMEOUT_INACTIVE_MS 520
+
+#define IS_RGB_FORMAT(format) (((format) < kFormatYCbCr420Planar) ? true: false)
+
+#define BITS_PER_BYTE 8
+#define BITS_TO_BYTES(x) (((x) + (BITS_PER_BYTE - 1)) / (BITS_PER_BYTE))
+
+// factor value should be in powers of 2(eg: 1, 2, 4, 8)
+template <class T1, class T2>
+inline T1 FloorToMultipleOf(const T1 &value, const T2 &factor) {
+ return (T1)(value & (~(factor - 1)));
+}
+
+template <class T1, class T2>
+inline T1 CeilToMultipleOf(const T1 &value, const T2 &factor) {
+ return (T1)((value + (factor - 1)) & (~(factor - 1)));
+}
+
+namespace sdm {
+
+ const int kThreadPriorityUrgent = -9;
+ const int kMaxRotatePerLayer = 2;
+ const uint32_t kMaxBlitTargetLayers = 2;
+ const int kPageSize = 4096;
+ const uint32_t kGridSize = 129; // size used for non-linear transformation before Tone-mapping
+ const uint32_t kLutDim = 17; // Dim of the 3d LUT for tone-mapping.
+
+ typedef void * Handle;
+
+} // namespace sdm
+
+#endif // __CONSTANTS_H__
+
diff --git a/sdm/include/utils/debug.h b/sdm/include/utils/debug.h
new file mode 100644
index 0000000..b4334b7
--- /dev/null
+++ b/sdm/include/utils/debug.h
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2014 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DEBUG_H__
+#define __DEBUG_H__
+
+#include <stdint.h>
+#include <debug_handler.h>
+#include <core/sdm_types.h>
+#include <core/display_interface.h>
+#include <display_properties.h>
+
+namespace sdm {
+
+using display::DebugHandler;
+
+class Debug {
+ public:
+ static inline DebugHandler* Get() { return DebugHandler::Get(); }
+ static int GetSimulationFlag();
+ static bool GetExternalResolution(char *val);
+ static void GetIdleTimeoutMs(uint32_t *active_ms, uint32_t *inactive_ms);
+ static int GetBootAnimLayerCount();
+ static bool IsRotatorDownScaleDisabled();
+ static bool IsDecimationDisabled();
+ static int GetMaxPipesPerMixer(DisplayType display_type);
+ static int GetMaxUpscale();
+ static bool IsVideoModeEnabled();
+ static bool IsRotatorUbwcDisabled();
+ static bool IsRotatorSplitDisabled();
+ static bool IsScalarDisabled();
+ static bool IsUbwcTiledFrameBuffer();
+ static bool IsAVRDisabled();
+ static bool IsExtAnimDisabled();
+ static bool IsPartialSplitDisabled();
+ static bool IsSrcSplitPreferred();
+ static DisplayError GetMixerResolution(uint32_t *width, uint32_t *height);
+ static DisplayError GetReducedConfig(uint32_t *num_vig_pipes, uint32_t *num_dma_pipes);
+ static int GetExtMaxlayers();
+ static DisplayError GetProperty(const char *property_name, char *value);
+ static DisplayError GetProperty(const char *property_name, int *value);
+};
+
+} // namespace sdm
+
+#endif // __DEBUG_H__
+
diff --git a/sdm/include/utils/factory.h b/sdm/include/utils/factory.h
new file mode 100644
index 0000000..f77a299
--- /dev/null
+++ b/sdm/include/utils/factory.h
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __FACTORY_H__
+#define __FACTORY_H__
+
+#include <utility>
+#include <map>
+#include <string>
+
+namespace sdm {
+
+template <class Creator>
+class Factory {
+ public:
+ int Add(const std::string &name, const Creator &creator) {
+ map_.insert(std::pair<std::string, Creator>(name, creator));
+
+ return 0;
+ }
+
+ Creator Get(const std::string &name) {
+ typename std::map<std::string, Creator>::iterator it = map_.find(name);
+ if (it != map_.end()) {
+ return it->second;
+ }
+
+ return nullptr;
+ }
+
+ private:
+ std::map<std::string, Creator> map_;
+};
+
+} // namespace sdm
+
+#endif // __FACTORY_H__
diff --git a/sdm/include/utils/formats.h b/sdm/include/utils/formats.h
new file mode 100644
index 0000000..48c0571
--- /dev/null
+++ b/sdm/include/utils/formats.h
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2016 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __FORMATS_H__
+#define __FORMATS_H__
+
+#include <core/layer_stack.h>
+
+namespace sdm {
+
+struct FormatTileSize {
+ /*< Tile width in pixels. For YUV formats this will give only the
+ tile width for Y plane*/
+ uint32_t tile_width = 0;
+ /*< Tile height in pixels. For YUV formats this will give only the
+ tile height for Y plane*/
+ uint32_t tile_height = 0;
+
+ /*< Tile width in pixels. Only valid for YUV formats where this will
+ give tile width for UV plane*/
+ uint32_t uv_tile_width = 0;
+ /*< Tile height in pixels. Only valid for YUV formats where this will
+ give tile height for UV plane*/
+ uint32_t uv_tile_height = 0;
+};
+
+bool IsUBWCFormat(LayerBufferFormat format);
+bool Is10BitFormat(LayerBufferFormat format);
+const char *GetFormatString(const LayerBufferFormat &format);
+BufferLayout GetBufferLayout(LayerBufferFormat format);
+DisplayError GetBufferFormatTileSize(LayerBufferFormat format, FormatTileSize *tile_size);
+float GetBufferFormatBpp(LayerBufferFormat format);
+bool HasAlphaChannel(LayerBufferFormat format);
+bool IsWideColor(const ColorPrimaries &color_primary);
+
+} // namespace sdm
+
+#endif // __FORMATS_H__
+
diff --git a/sdm/include/utils/locker.h b/sdm/include/utils/locker.h
new file mode 100755
index 0000000..4b3f3c6
--- /dev/null
+++ b/sdm/include/utils/locker.h
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2014 - 2016, 2018 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __LOCKER_H__
+#define __LOCKER_H__
+
+#include <stdint.h>
+#include <errno.h>
+#include <pthread.h>
+#include <sys/time.h>
+
+#define SCOPE_LOCK(locker) Locker::ScopeLock lock(locker)
+#define SEQUENCE_ENTRY_SCOPE_LOCK(locker) Locker::SequenceEntryScopeLock lock(locker)
+#define SEQUENCE_EXIT_SCOPE_LOCK(locker) Locker::SequenceExitScopeLock lock(locker)
+#define SEQUENCE_WAIT_SCOPE_LOCK(locker) Locker::SequenceWaitScopeLock lock(locker)
+#define SEQUENCE_CANCEL_SCOPE_LOCK(locker) Locker::SequenceCancelScopeLock lock(locker)
+
+namespace sdm {
+
+class Locker {
+ public:
+ class ScopeLock {
+ public:
+ explicit ScopeLock(Locker& locker) : locker_(locker) {
+ locker_.Lock();
+ }
+
+ ~ScopeLock() {
+ locker_.Unlock();
+ }
+
+ private:
+ Locker &locker_;
+ };
+
+ class SequenceEntryScopeLock {
+ public:
+ explicit SequenceEntryScopeLock(Locker& locker) : locker_(locker) {
+ locker_.Lock();
+ locker_.sequence_wait_ = 1;
+ }
+
+ ~SequenceEntryScopeLock() {
+ locker_.Unlock();
+ }
+
+ private:
+ Locker &locker_;
+ };
+
+ class SequenceExitScopeLock {
+ public:
+ explicit SequenceExitScopeLock(Locker& locker) : locker_(locker) {
+ locker_.Lock();
+ locker_.sequence_wait_ = 0;
+ }
+
+ ~SequenceExitScopeLock() {
+ locker_.Broadcast();
+ locker_.Unlock();
+ }
+
+ private:
+ Locker &locker_;
+ };
+
+ class SequenceWaitScopeLock {
+ public:
+ explicit SequenceWaitScopeLock(Locker& locker) : locker_(locker), error_(false) {
+ locker_.Lock();
+
+ while (locker_.sequence_wait_ == 1) {
+ locker_.Wait();
+ error_ = (locker_.sequence_wait_ == -1);
+ }
+ }
+
+ ~SequenceWaitScopeLock() {
+ locker_.Unlock();
+ }
+
+ bool IsError() {
+ return error_;
+ }
+
+ private:
+ Locker &locker_;
+ bool error_;
+ };
+
+ class SequenceCancelScopeLock {
+ public:
+ explicit SequenceCancelScopeLock(Locker& locker) : locker_(locker) {
+ locker_.Lock();
+ locker_.sequence_wait_ = -1;
+ }
+
+ ~SequenceCancelScopeLock() {
+ locker_.Broadcast();
+ locker_.Unlock();
+ }
+
+ private:
+ Locker &locker_;
+ };
+
+ Locker() : sequence_wait_(0) {
+#ifdef SDM_VIRTUAL_DRIVER
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_init(&attr);
+ pthread_mutexattr_setrobust(&attr, PTHREAD_MUTEX_ROBUST);
+ pthread_mutex_init(&mutex_, &attr);
+#else
+ pthread_mutex_init(&mutex_, 0);
+#endif
+ pthread_condattr_init(&cond_attr_);
+ pthread_condattr_setclock(&cond_attr_, CLOCK_MONOTONIC);
+ pthread_cond_init(&condition_, &cond_attr_);
+ }
+
+ ~Locker() {
+ pthread_mutex_destroy(&mutex_);
+ pthread_cond_destroy(&condition_);
+ pthread_condattr_destroy(&cond_attr_);
+ }
+
+ void Lock() { pthread_mutex_lock(&mutex_); }
+ int32_t TryLock() { return pthread_mutex_trylock(&mutex_); }
+ void Unlock() { pthread_mutex_unlock(&mutex_); }
+ void Signal() { pthread_cond_signal(&condition_); }
+ void Broadcast() { pthread_cond_broadcast(&condition_); }
+ void Wait() { pthread_cond_wait(&condition_, &mutex_); }
+ int WaitFinite(uint32_t ms) {
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts)) {
+ return EINVAL;
+ }
+ uint64_t ns = (uint64_t)ts.tv_nsec + (ms * 1000000L);
+ ts.tv_sec = ts.tv_sec + (time_t)(ns / 1000000000L);
+ ts.tv_nsec = ns % 1000000000L;
+ return pthread_cond_timedwait(&condition_, &mutex_, &ts);
+ }
+
+ private:
+ pthread_mutex_t mutex_;
+ pthread_cond_t condition_;
+ pthread_condattr_t cond_attr_;
+ int sequence_wait_; // This flag is set to 1 on sequence entry, 0 on exit, and -1 on cancel.
+ // Some routines will wait for sequence of function calls to finish
+ // so that capturing a transitionary snapshot of context is prevented.
+ // If flag is set to -1, these routines will exit without doing any
+ // further processing.
+};
+
+} // namespace sdm
+
+#endif // __LOCKER_H__
+
diff --git a/sdm/include/utils/rect.h b/sdm/include/utils/rect.h
new file mode 100644
index 0000000..c3fd492
--- /dev/null
+++ b/sdm/include/utils/rect.h
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __RECT_H__
+#define __RECT_H__
+
+#include <stdint.h>
+#include <core/sdm_types.h>
+#include <core/layer_stack.h>
+#include <utils/debug.h>
+
+namespace sdm {
+
+ enum RectOrientation {
+ kOrientationPortrait,
+ kOrientationLandscape,
+ kOrientationUnknown,
+ };
+
+ bool IsValid(const LayerRect &rect);
+ bool IsCongruent(const LayerRect &rect1, const LayerRect &rect2);
+ void LogI(DebugTag debug_tag, const char *prefix, const LayerRect &roi);
+ void Log(DebugTag debug_tag, const char *prefix, const LayerRect &roi);
+ void Normalize(const uint32_t &align_x, const uint32_t &align_y, LayerRect *rect);
+ LayerRect Union(const LayerRect &rect1, const LayerRect &rect2);
+ LayerRect Intersection(const LayerRect &rect1, const LayerRect &rect2);
+ LayerRect Subtract(const LayerRect &rect1, const LayerRect &rect2);
+ void Subtract(const LayerRect &rect1, const LayerRect &rect2, LayerRect *res);
+ bool Contains(const LayerRect &rect1, const LayerRect &rect2);
+ LayerRect Reposition(const LayerRect &rect1, const int &x_offset, const int &y_offset);
+ void SplitLeftRight(const LayerRect &in_rect, uint32_t split_count, uint32_t align_x,
+ bool flip_horizontal, LayerRect *out_rects);
+ void SplitTopBottom(const LayerRect &in_rect, uint32_t split_count, uint32_t align_y,
+ bool flip_horizontal, LayerRect *out_rects);
+ void MapRect(const LayerRect &src_domain, const LayerRect &dst_domain, const LayerRect &in_rect,
+ LayerRect *out_rect);
+ void TransformHV(const LayerRect &src_domain, const LayerRect &in_rect,
+ const LayerTransform &transform, LayerRect *out_rect);
+ RectOrientation GetOrientation(const LayerRect &in_rect);
+ DisplayError GetCropAndDestination(const LayerRect &crop, const LayerRect &dst,
+ bool rotate90, float *crop_width, float *crop_height,
+ float *dst_width, float *dst_height);
+ DisplayError GetScaleFactor(const LayerRect &crop, const LayerRect &dst, bool rotate90,
+ float *scale_x, float *scale_y);
+} // namespace sdm
+
+#endif // __RECT_H__
+
diff --git a/sdm/include/utils/sync_task.h b/sdm/include/utils/sync_task.h
new file mode 100644
index 0000000..725460a
--- /dev/null
+++ b/sdm/include/utils/sync_task.h
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __SYNC_TASK_H__
+#define __SYNC_TASK_H__
+
+#include <thread>
+#include <mutex>
+#include <condition_variable> // NOLINT
+
+namespace sdm {
+
+template <class TaskCode>
+class SyncTask {
+ public:
+ // This class need to be overridden by caller to pass on a task context.
+ class TaskContext {
+ public:
+ virtual ~TaskContext() { }
+ };
+
+ // Methods to callback into caller for command codes executions in worker thread.
+ class TaskHandler {
+ public:
+ virtual ~TaskHandler() { }
+ virtual void OnTask(const TaskCode &task_code, TaskContext *task_context) = 0;
+ };
+
+ explicit SyncTask(TaskHandler &task_handler) : task_handler_(task_handler) {
+ // Block caller thread until worker thread has started and ready to listen to task commands.
+ // Worker thread will signal as soon as callback is received in the new thread.
+ std::unique_lock<std::mutex> caller_lock(caller_mutex_);
+ std::thread worker_thread(SyncTaskThread, this);
+ worker_thread_.swap(worker_thread);
+ caller_cv_.wait(caller_lock);
+ }
+
+ ~SyncTask() {
+ // Task code does not matter here.
+ PerformTask(task_code_, nullptr, true);
+ worker_thread_.join();
+ }
+
+ void PerformTask(const TaskCode &task_code, TaskContext *task_context) {
+ PerformTask(task_code, task_context, false);
+ }
+
+ private:
+ void PerformTask(const TaskCode &task_code, TaskContext *task_context, bool terminate) {
+ std::unique_lock<std::mutex> caller_lock(caller_mutex_);
+
+ // New scope to limit scope of worker lock to this block.
+ {
+ // Set task command code and notify worker thread.
+ std::unique_lock<std::mutex> worker_lock(worker_mutex_);
+ task_code_ = task_code;
+ task_context_ = task_context;
+ worker_thread_exit_ = terminate;
+ pending_code_ = true;
+ worker_cv_.notify_one();
+ }
+
+ // Wait for worker thread to finish and signal.
+ caller_cv_.wait(caller_lock);
+ }
+
+ static void SyncTaskThread(SyncTask *sync_task) {
+ if (sync_task) {
+ sync_task->OnThreadCallback();
+ }
+ }
+
+ void OnThreadCallback() {
+ // Acquire worker lock and start waiting for events.
+ // Wait must start before caller thread can post events, otherwise posted events will be lost.
+ // Caller thread will be blocked until worker thread signals readiness.
+ std::unique_lock<std::mutex> worker_lock(worker_mutex_);
+
+ // New scope to limit scope of caller lock to this block.
+ {
+ // Signal caller thread that worker thread is ready to listen to events.
+ std::unique_lock<std::mutex> caller_lock(caller_mutex_);
+ caller_cv_.notify_one();
+ }
+
+ while (!worker_thread_exit_) {
+ // Add predicate to handle spurious interrupts.
+ // Wait for caller thread to signal new command codes.
+ worker_cv_.wait(worker_lock, [this] { return pending_code_; });
+
+ // Call task handler which is implemented by the caller.
+ if (!worker_thread_exit_) {
+ task_handler_.OnTask(task_code_, task_context_);
+ }
+
+ pending_code_ = false;
+ // Notify completion of current task to the caller thread which is blocked.
+ std::unique_lock<std::mutex> caller_lock(caller_mutex_);
+ caller_cv_.notify_one();
+ }
+ }
+
+ TaskHandler &task_handler_;
+ TaskCode task_code_;
+ TaskContext *task_context_ = nullptr;
+ std::thread worker_thread_;
+ std::mutex caller_mutex_;
+ std::mutex worker_mutex_;
+ std::condition_variable caller_cv_;
+ std::condition_variable worker_cv_;
+ bool worker_thread_exit_ = false;
+ bool pending_code_ = false;
+};
+
+} // namespace sdm
+
+#endif // __SYNC_TASK_H__
diff --git a/sdm/include/utils/sys.h b/sdm/include/utils/sys.h
new file mode 100644
index 0000000..6b40df4
--- /dev/null
+++ b/sdm/include/utils/sys.h
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __SYS_H__
+#define __SYS_H__
+
+#include <sys/eventfd.h>
+#include <dlfcn.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <poll.h>
+#include <pthread.h>
+#include <fstream>
+
+#ifdef SDM_VIRTUAL_DRIVER
+#include <virtual_driver.h>
+#endif
+
+namespace sdm {
+
+class Sys {
+ public:
+#ifndef SDM_VIRTUAL_DRIVER
+ typedef std::fstream fstream;
+#else
+ typedef VirtualFStream fstream;
+#endif
+
+ // Pointers to system calls which are either mapped to actual system call or virtual driver.
+#ifdef TARGET_HEADLESS
+ typedef int (*ioctl)(int, unsigned long int, ...); // NOLINT
+#else
+ typedef int (*ioctl)(int, int, ...);
+#endif
+ typedef int (*access)(const char *, int);
+ typedef int (*open)(const char *, int, ...);
+ typedef int (*close)(int);
+ typedef int (*poll)(struct pollfd *, nfds_t, int);
+ typedef ssize_t (*pread)(int, void *, size_t, off_t);
+ typedef ssize_t (*pwrite)(int, const void *, size_t, off_t);
+ typedef int (*pthread_cancel)(pthread_t thread);
+ typedef int (*dup)(int fd);
+ typedef ssize_t (*read)(int, void *, size_t);
+ typedef ssize_t (*write)(int, const void *, size_t);
+ typedef int (*eventfd)(unsigned int, int);
+
+ static bool getline_(fstream &fs, std::string &line); // NOLINT
+
+ static ioctl ioctl_;
+ static access access_;
+ static open open_;
+ static close close_;
+ static poll poll_;
+ static pread pread_;
+ static pwrite pwrite_;
+ static pthread_cancel pthread_cancel_;
+ static dup dup_;
+ static read read_;
+ static write write_;
+ static eventfd eventfd_;
+};
+
+class DynLib {
+ public:
+ ~DynLib();
+ bool Open(const char *lib_name);
+ bool Sym(const char *func_name, void **func_ptr);
+ const char * Error() { return ::dlerror(); }
+ operator bool() const { return lib_ != NULL; }
+
+ private:
+ void Close();
+
+ void *lib_ = NULL;
+};
+
+} // namespace sdm
+
+#endif // __SYS_H__
diff --git a/sdm/include/utils/utils.h b/sdm/include/utils/utils.h
new file mode 100644
index 0000000..b10fd6b
--- /dev/null
+++ b/sdm/include/utils/utils.h
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2016 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __UTILS_H__
+#define __UTILS_H__
+
+#include <cstring>
+
+namespace sdm {
+
+float gcd(float a, float b);
+float lcm(float a, float b);
+void CloseFd(int *fd);
+
+enum class DriverType {
+ FB = 0,
+ DRM,
+};
+
+DriverType GetDriverType();
+
+template<class T>
+bool SameConfig(T *t1, T *t2, unsigned int size) {
+ return !(std::memcmp(t1, t2, size));
+}
+
+} // namespace sdm
+
+#endif // __UTILS_H__
+
diff --git a/sdm/libs/core/Android.mk b/sdm/libs/core/Android.mk
new file mode 100644
index 0000000..c934de0
--- /dev/null
+++ b/sdm/libs/core/Android.mk
@@ -0,0 +1,91 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+include $(LOCAL_PATH)/../../../common.mk
+
+LOCAL_MODULE := libsdmcore
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := $(common_includes) $(kernel_includes)
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_CFLAGS := -fno-operator-names -Wno-unused-parameter -DLOG_TAG=\"SDM\" \
+ $(common_flags)
+LOCAL_HW_INTF_PATH_1 := fb
+LOCAL_SHARED_LIBRARIES := libdl libdisplaydebug libsdmutils
+
+ifneq ($(TARGET_IS_HEADLESS), true)
+ LOCAL_CFLAGS += -isystem external/libdrm
+ LOCAL_SHARED_LIBRARIES += libdrm libdrmutils
+ LOCAL_HW_INTF_PATH_2 := drm
+endif
+
+ifeq ($(TARGET_USES_DRM_PP),true)
+ LOCAL_CFLAGS += -DPP_DRM_ENABLE
+endif
+
+ifeq ($(ENABLE_HYP),true)
+ LOCAL_CFLAGS += -DHYPERVISOR
+endif
+
+LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_SRC_FILES := core_interface.cpp \
+ core_impl.cpp \
+ display_base.cpp \
+ display_builtin.cpp \
+ display_pluggable.cpp \
+ display_virtual.cpp \
+ comp_manager.cpp \
+ strategy.cpp \
+ resource_default.cpp \
+ color_manager.cpp \
+ hw_events_interface.cpp \
+ hw_info_interface.cpp \
+ hw_interface.cpp \
+ $(LOCAL_HW_INTF_PATH_1)/hw_info.cpp \
+ $(LOCAL_HW_INTF_PATH_1)/hw_device.cpp \
+ $(LOCAL_HW_INTF_PATH_1)/hw_primary.cpp \
+ $(LOCAL_HW_INTF_PATH_1)/hw_hdmi.cpp \
+ $(LOCAL_HW_INTF_PATH_1)/hw_virtual.cpp \
+ $(LOCAL_HW_INTF_PATH_1)/hw_color_manager.cpp \
+ $(LOCAL_HW_INTF_PATH_1)/hw_scale.cpp \
+ $(LOCAL_HW_INTF_PATH_1)/hw_events.cpp
+
+ifneq ($(TARGET_IS_HEADLESS), true)
+ LOCAL_SRC_FILES += $(LOCAL_HW_INTF_PATH_2)/hw_info_drm.cpp \
+ $(LOCAL_HW_INTF_PATH_2)/hw_device_drm.cpp \
+ $(LOCAL_HW_INTF_PATH_2)/hw_peripheral_drm.cpp \
+ $(LOCAL_HW_INTF_PATH_2)/hw_tv_drm.cpp \
+ $(LOCAL_HW_INTF_PATH_2)/hw_events_drm.cpp \
+ $(LOCAL_HW_INTF_PATH_2)/hw_scale_drm.cpp \
+ $(LOCAL_HW_INTF_PATH_2)/hw_virtual_drm.cpp \
+ $(LOCAL_HW_INTF_PATH_2)/hw_color_manager_drm.cpp
+endif
+
+include $(BUILD_SHARED_LIBRARY)
+
+SDM_HEADER_PATH := ../../include
+include $(CLEAR_VARS)
+LOCAL_VENDOR_MODULE := true
+LOCAL_COPY_HEADERS_TO := $(common_header_export_path)/sdm/core
+LOCAL_COPY_HEADERS = $(SDM_HEADER_PATH)/core/buffer_allocator.h \
+ $(SDM_HEADER_PATH)/core/buffer_sync_handler.h \
+ $(SDM_HEADER_PATH)/core/core_interface.h \
+ $(SDM_HEADER_PATH)/core/display_interface.h \
+ $(SDM_HEADER_PATH)/core/layer_buffer.h \
+ $(SDM_HEADER_PATH)/core/layer_stack.h \
+ $(SDM_HEADER_PATH)/core/sdm_types.h \
+ $(SDM_HEADER_PATH)/core/socket_handler.h \
+ $(SDM_HEADER_PATH)/core/dpps_interface.h
+include $(BUILD_COPY_HEADERS)
+
+include $(CLEAR_VARS)
+LOCAL_VENDOR_MODULE := true
+LOCAL_COPY_HEADERS_TO := $(common_header_export_path)/sdm/private
+LOCAL_COPY_HEADERS = $(SDM_HEADER_PATH)/private/color_interface.h \
+ $(SDM_HEADER_PATH)/private/color_params.h \
+ $(SDM_HEADER_PATH)/private/extension_interface.h \
+ $(SDM_HEADER_PATH)/private/hw_info_types.h \
+ $(SDM_HEADER_PATH)/private/partial_update_interface.h \
+ $(SDM_HEADER_PATH)/private/resource_interface.h \
+ $(SDM_HEADER_PATH)/private/strategy_interface.h \
+ $(SDM_HEADER_PATH)/private/dpps_control_interface.h
+include $(BUILD_COPY_HEADERS)
diff --git a/sdm/libs/core/Makefile.am b/sdm/libs/core/Makefile.am
new file mode 100644
index 0000000..fc9d237
--- /dev/null
+++ b/sdm/libs/core/Makefile.am
@@ -0,0 +1,54 @@
+HEADER_PATH := ${WORKSPACE}/display/display-hal/sdm/include
+
+c_sources = core_interface.cpp \
+ core_impl.cpp \
+ display_base.cpp \
+ display_builtin.cpp \
+ display_pluggable.cpp \
+ display_virtual.cpp \
+ comp_manager.cpp \
+ strategy.cpp \
+ resource_default.cpp \
+ color_manager.cpp \
+ hw_interface.cpp \
+ hw_info_interface.cpp \
+ hw_events_interface.cpp \
+ drm/hw_color_manager_drm.cpp \
+ drm/hw_device_drm.cpp \
+ drm/hw_events_drm.cpp \
+ drm/hw_info_drm.cpp \
+ drm/hw_peripheral_drm.cpp \
+ drm/hw_scale_drm.cpp \
+ drm/hw_tv_drm.cpp \
+ drm/hw_virtual_drm.cpp \
+ fb/hw_info.cpp \
+ fb/hw_device.cpp \
+ fb/hw_primary.cpp \
+ fb/hw_hdmi.cpp \
+ fb/hw_virtual.cpp \
+ fb/hw_color_manager.cpp \
+ fb/hw_scale.cpp \
+ fb/hw_events.cpp
+
+core_h_sources = $(HEADER_PATH)/core/*.h
+
+core_includedir = $(includedir)/sdm/core
+core_include_HEADERS = $(core_h_sources)
+
+private_h_sources = $(HEADER_PATH)/private/*.h
+
+private_includedir = $(includedir)/sdm/private
+private_include_HEADERS = $(private_h_sources)
+
+utils_h_sources = $(HEADER_PATH)/utils/*.h
+
+utils_includedir = $(includedir)/sdm/utils
+utils_include_HEADERS = $(utils_h_sources)
+
+lib_LTLIBRARIES = libsdmcore.la
+libsdmcore_la_CC = @CC@
+libsdmcore_la_SOURCES = $(c_sources)
+libsdmcore_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"SDM\"
+libsdmcore_la_CPPFLAGS = $(AM_CPPFLAGS)
+libsdmcore_la_LIBADD = ../utils/libsdmutils.la
+libsdmcore_la_LDFLAGS = -shared -avoid-version
diff --git a/sdm/libs/core/color_manager.cpp b/sdm/libs/core/color_manager.cpp
new file mode 100644
index 0000000..27f7eab
--- /dev/null
+++ b/sdm/libs/core/color_manager.cpp
@@ -0,0 +1,247 @@
+/* Copyright (c) 2015 - 2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*
+*/
+
+#include <dlfcn.h>
+#include <private/color_interface.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include "color_manager.h"
+
+#define __CLASS__ "ColorManager"
+
+namespace sdm {
+
+DynLib ColorManagerProxy::color_lib_;
+CreateColorInterface ColorManagerProxy::create_intf_ = NULL;
+DestroyColorInterface ColorManagerProxy::destroy_intf_ = NULL;
+HWResourceInfo ColorManagerProxy::hw_res_info_;
+
+// Below two functions are part of concrete implementation for SDM core private
+// color_params.h
+void PPFeaturesConfig::Reset() {
+ for (int i = 0; i < kMaxNumPPFeatures; i++) {
+ if (feature_[i]) {
+ delete feature_[i];
+ feature_[i] = NULL;
+ }
+ }
+ dirty_ = false;
+ next_idx_ = 0;
+}
+
+DisplayError PPFeaturesConfig::RetrieveNextFeature(PPFeatureInfo **feature) {
+ DisplayError ret = kErrorNone;
+ uint32_t i(0);
+
+ for (i = next_idx_; i < kMaxNumPPFeatures; i++) {
+ if (feature_[i]) {
+ *feature = feature_[i];
+ next_idx_ = i + 1;
+ break;
+ }
+ }
+
+ if (i == kMaxNumPPFeatures) {
+ ret = kErrorParameters;
+ next_idx_ = 0;
+ }
+
+ return ret;
+}
+
+DisplayError ColorManagerProxy::Init(const HWResourceInfo &hw_res_info) {
+ DisplayError error = kErrorNone;
+
+ // Load color service library and retrieve its entry points.
+ if (color_lib_.Open(COLORMGR_LIBRARY_NAME)) {
+ if (!color_lib_.Sym(CREATE_COLOR_INTERFACE_NAME, reinterpret_cast<void **>(&create_intf_)) ||
+ !color_lib_.Sym(DESTROY_COLOR_INTERFACE_NAME, reinterpret_cast<void **>(&destroy_intf_))) {
+ DLOGW("Fail to retrieve = %s from %s", CREATE_COLOR_INTERFACE_NAME, COLORMGR_LIBRARY_NAME);
+ error = kErrorResources;
+ }
+ } else {
+ DLOGW("Fail to load = %s", COLORMGR_LIBRARY_NAME);
+ error = kErrorResources;
+ }
+
+ hw_res_info_ = hw_res_info;
+
+ return error;
+}
+
+void ColorManagerProxy::Deinit() {
+ color_lib_.~DynLib();
+}
+
+ColorManagerProxy::ColorManagerProxy(int32_t id, DisplayType type, HWInterface *intf,
+ const HWDisplayAttributes &attr,
+ const HWPanelInfo &info)
+ : display_id_(id), device_type_(type), pp_hw_attributes_(), hw_intf_(intf),
+ color_intf_(NULL), pp_features_() {}
+
+ColorManagerProxy *ColorManagerProxy::CreateColorManagerProxy(DisplayType type,
+ HWInterface *hw_intf,
+ const HWDisplayAttributes &attribute,
+ const HWPanelInfo &panel_info) {
+ DisplayError error = kErrorNone;
+ PPFeatureVersion versions;
+ int32_t display_id = -1;
+ ColorManagerProxy *color_manager_proxy = NULL;
+
+ // check if all resources are available before invoking factory method from libsdm-color.so.
+ if (!color_lib_ || !create_intf_ || !destroy_intf_) {
+ DLOGW("Information for %s isn't available!", COLORMGR_LIBRARY_NAME);
+ return NULL;
+ }
+
+ hw_intf->GetDisplayId(&display_id);
+ color_manager_proxy = new ColorManagerProxy(display_id, type, hw_intf, attribute, panel_info);
+
+ if (color_manager_proxy) {
+ // 1. need query post-processing feature version from HWInterface.
+ error = color_manager_proxy->hw_intf_->GetPPFeaturesVersion(&versions);
+ PPHWAttributes &hw_attr = color_manager_proxy->pp_hw_attributes_;
+ if (error != kErrorNone) {
+ DLOGW("Fail to get DSPP feature versions");
+ } else {
+ hw_attr.Set(hw_res_info_, panel_info, attribute, versions);
+ DLOGI("PAV2 version is versions = %d, version = %d ",
+ hw_attr.version.version[kGlobalColorFeaturePaV2],
+ versions.version[kGlobalColorFeaturePaV2]);
+ }
+
+ // 2. instantiate concrete ColorInterface from libsdm-color.so, pass all hardware info in.
+ error = create_intf_(COLOR_VERSION_TAG, color_manager_proxy->display_id_,
+ color_manager_proxy->device_type_, hw_attr,
+ &color_manager_proxy->color_intf_);
+ if (error != kErrorNone) {
+ DLOGW("Unable to instantiate concrete ColorInterface from %s", COLORMGR_LIBRARY_NAME);
+ delete color_manager_proxy;
+ color_manager_proxy = NULL;
+ }
+ }
+
+ return color_manager_proxy;
+}
+
+ColorManagerProxy::~ColorManagerProxy() {
+ if (destroy_intf_)
+ destroy_intf_(display_id_);
+ color_intf_ = NULL;
+}
+
+DisplayError ColorManagerProxy::ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
+ PPDisplayAPIPayload *out_payload,
+ PPPendingParams *pending_action) {
+ DisplayError ret = kErrorNone;
+
+ // On completion, dspp_features_ will be populated and mark dirty with all resolved dspp
+ // feature list with paramaters being transformed into target requirement.
+ ret = color_intf_->ColorSVCRequestRoute(in_payload, out_payload, &pp_features_, pending_action);
+
+ return ret;
+}
+
+bool ColorManagerProxy::NeedsPartialUpdateDisable() {
+ Locker &locker(pp_features_.GetLocker());
+ SCOPE_LOCK(locker);
+
+ return pp_features_.IsDirty();
+}
+
+DisplayError ColorManagerProxy::Commit() {
+ if (first_cycle_) {
+ first_cycle_ = false;
+ return kErrorNone;
+ }
+
+ Locker &locker(pp_features_.GetLocker());
+ SCOPE_LOCK(locker);
+
+ DisplayError ret = kErrorNone;
+ if (pp_features_.IsDirty()) {
+ ret = hw_intf_->SetPPFeatures(&pp_features_);
+ }
+
+ return ret;
+}
+
+void PPHWAttributes::Set(const HWResourceInfo &hw_res,
+ const HWPanelInfo &panel_info,
+ const DisplayConfigVariableInfo &attr,
+ const PPFeatureVersion &feature_ver) {
+ HWResourceInfo &res = *this;
+ res = hw_res;
+ HWPanelInfo &panel = *this;
+ panel = panel_info;
+ DisplayConfigVariableInfo &attributes = *this;
+ attributes = attr;
+ version = feature_ver;
+
+ if (strlen(panel_info.panel_name)) {
+ snprintf(&panel_name[0], sizeof(panel_name), "%s", &panel_info.panel_name[0]);
+ char *tmp = panel_name;
+ while ((tmp = strstr(tmp, " ")) != NULL)
+ *tmp = '_';
+ if ((tmp = strstr(panel_name, "\n")) != NULL)
+ *tmp = '\0';
+ }
+}
+
+DisplayError ColorManagerProxy::ColorMgrGetNumOfModes(uint32_t *mode_cnt) {
+ return color_intf_->ColorIntfGetNumDisplayModes(&pp_features_, 0, mode_cnt);
+}
+
+DisplayError ColorManagerProxy::ColorMgrGetModes(uint32_t *mode_cnt,
+ SDEDisplayMode *modes) {
+ return color_intf_->ColorIntfEnumerateDisplayModes(&pp_features_, 0, modes, mode_cnt);
+}
+
+DisplayError ColorManagerProxy::ColorMgrSetMode(int32_t color_mode_id) {
+ return color_intf_->ColorIntfSetDisplayMode(&pp_features_, 0, color_mode_id);
+}
+
+DisplayError ColorManagerProxy::ColorMgrGetModeInfo(int32_t mode_id, AttrVal *query) {
+ return color_intf_->ColorIntfGetModeInfo(&pp_features_, 0, mode_id, query);
+}
+
+DisplayError ColorManagerProxy::ColorMgrSetColorTransform(uint32_t length,
+ const double *trans_data) {
+ return color_intf_->ColorIntfSetColorTransform(&pp_features_, 0, length, trans_data);
+}
+
+DisplayError ColorManagerProxy::ColorMgrGetDefaultModeID(int32_t *mode_id) {
+ return color_intf_->ColorIntfGetDefaultModeID(&pp_features_, 0, mode_id);
+}
+
+DisplayError ColorManagerProxy::ColorMgrCombineColorModes() {
+ return color_intf_->ColorIntfCombineColorModes();
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/color_manager.h b/sdm/libs/core/color_manager.h
new file mode 100644
index 0000000..5b604b7
--- /dev/null
+++ b/sdm/libs/core/color_manager.h
@@ -0,0 +1,100 @@
+/* Copyright (c) 2015-2019, The Linux Foundataion. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*
+*/
+
+#ifndef __COLOR_MANAGER_H__
+#define __COLOR_MANAGER_H__
+
+#include <stdlib.h>
+#include <core/sdm_types.h>
+#include <utils/locker.h>
+#include <private/color_interface.h>
+#include <utils/sys.h>
+#include <utils/debug.h>
+#include "hw_interface.h"
+
+namespace sdm {
+
+/*
+ * ColorManager proxy to maintain necessary information to interact with underlying color service.
+ * Each display object has its own proxy.
+ */
+class ColorManagerProxy {
+ public:
+ static DisplayError Init(const HWResourceInfo &hw_res_info);
+ static void Deinit();
+
+ /* Create ColorManagerProxy for this display object, following things need to be happening
+ * 1. Instantiates concrete ColorInerface implementation.
+ * 2. Pass all display object specific informations into it.
+ * 3. Populate necessary resources.
+ * 4. Need get panel name for hw_panel_info_.
+ */
+ static ColorManagerProxy *CreateColorManagerProxy(DisplayType type, HWInterface *hw_intf,
+ const HWDisplayAttributes &attribute,
+ const HWPanelInfo &panel_info);
+
+ /* need reverse the effect of CreateColorManagerProxy. */
+ ~ColorManagerProxy();
+
+ DisplayError ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
+ PPDisplayAPIPayload *out_payload,
+ PPPendingParams *pending_action);
+ DisplayError ColorMgrGetNumOfModes(uint32_t *mode_cnt);
+ DisplayError ColorMgrGetModes(uint32_t *mode_cnt, SDEDisplayMode *modes);
+ DisplayError ColorMgrSetMode(int32_t color_mode_id);
+ DisplayError ColorMgrGetModeInfo(int32_t mode_id, AttrVal *query);
+ DisplayError ColorMgrSetColorTransform(uint32_t length, const double *trans_data);
+ DisplayError ColorMgrGetDefaultModeID(int32_t *mode_id);
+ DisplayError ColorMgrCombineColorModes();
+ bool NeedsPartialUpdateDisable();
+ DisplayError Commit();
+
+ protected:
+ ColorManagerProxy() {}
+ ColorManagerProxy(int32_t id, DisplayType type, HWInterface *intf,
+ const HWDisplayAttributes &attr, const HWPanelInfo &info);
+
+ private:
+ static DynLib color_lib_;
+ static CreateColorInterface create_intf_;
+ static DestroyColorInterface destroy_intf_;
+ static HWResourceInfo hw_res_info_;
+
+ int32_t display_id_;
+ bool first_cycle_ = true;
+ DisplayType device_type_;
+ PPHWAttributes pp_hw_attributes_;
+ HWInterface *hw_intf_;
+ ColorInterface *color_intf_;
+ PPFeaturesConfig pp_features_;
+};
+
+} // namespace sdm
+
+#endif // __COLOR_MANAGER_H__
diff --git a/sdm/libs/core/comp_manager.cpp b/sdm/libs/core/comp_manager.cpp
new file mode 100644
index 0000000..5246aae
--- /dev/null
+++ b/sdm/libs/core/comp_manager.cpp
@@ -0,0 +1,679 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#include <core/buffer_allocator.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <set>
+#include <string>
+#include <vector>
+
+#include "comp_manager.h"
+#include "strategy.h"
+
+#define __CLASS__ "CompManager"
+
+namespace sdm {
+
+DisplayError CompManager::Init(const HWResourceInfo &hw_res_info,
+ ExtensionInterface *extension_intf,
+ BufferAllocator *buffer_allocator,
+ BufferSyncHandler *buffer_sync_handler,
+ SocketHandler *socket_handler) {
+ SCOPE_LOCK(locker_);
+
+ DisplayError error = kErrorNone;
+
+ if (extension_intf) {
+ error = extension_intf->CreateResourceExtn(hw_res_info, buffer_allocator, buffer_sync_handler,
+ &resource_intf_);
+ extension_intf->CreateDppsControlExtn(&dpps_ctrl_intf_, socket_handler);
+ } else {
+ error = ResourceDefault::CreateResourceDefault(hw_res_info, &resource_intf_);
+ }
+
+ if (error != kErrorNone) {
+ if (extension_intf) {
+ extension_intf->DestroyDppsControlExtn(dpps_ctrl_intf_);
+ }
+ return error;
+ }
+
+ hw_res_info_ = hw_res_info;
+ buffer_allocator_ = buffer_allocator;
+ extension_intf_ = extension_intf;
+
+ return error;
+}
+
+DisplayError CompManager::Deinit() {
+ SCOPE_LOCK(locker_);
+
+ if (extension_intf_) {
+ extension_intf_->DestroyResourceExtn(resource_intf_);
+ extension_intf_->DestroyDppsControlExtn(dpps_ctrl_intf_);
+ } else {
+ ResourceDefault::DestroyResourceDefault(resource_intf_);
+ }
+
+ return kErrorNone;
+}
+
+DisplayError CompManager::RegisterDisplay(int32_t display_id, DisplayType type,
+ const HWDisplayAttributes &display_attributes,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes,
+ const DisplayConfigVariableInfo &fb_config,
+ Handle *display_ctx, uint32_t *default_clk_hz) {
+ SCOPE_LOCK(locker_);
+
+ DisplayError error = kErrorNone;
+
+ DisplayCompositionContext *display_comp_ctx = new DisplayCompositionContext();
+ if (!display_comp_ctx) {
+ return kErrorMemory;
+ }
+
+ Strategy *&strategy = display_comp_ctx->strategy;
+ strategy = new Strategy(extension_intf_, buffer_allocator_, display_id, type, hw_res_info_,
+ hw_panel_info, mixer_attributes, display_attributes, fb_config);
+ if (!strategy) {
+ DLOGE("Unable to create strategy");
+ delete display_comp_ctx;
+ return kErrorMemory;
+ }
+
+ error = strategy->Init();
+ if (error != kErrorNone) {
+ delete strategy;
+ delete display_comp_ctx;
+ return error;
+ }
+
+ error =
+ resource_intf_->RegisterDisplay(display_id, type, display_attributes, hw_panel_info,
+ mixer_attributes, &display_comp_ctx->display_resource_ctx);
+ if (error != kErrorNone) {
+ strategy->Deinit();
+ delete strategy;
+ delete display_comp_ctx;
+ display_comp_ctx = NULL;
+ return error;
+ }
+
+ error = resource_intf_->Perform(ResourceInterface::kCmdGetDefaultClk,
+ display_comp_ctx->display_resource_ctx, default_clk_hz);
+ if (error != kErrorNone) {
+ strategy->Deinit();
+ delete strategy;
+ resource_intf_->UnregisterDisplay(display_comp_ctx->display_resource_ctx);
+ delete display_comp_ctx;
+ display_comp_ctx = NULL;
+ return error;
+ }
+
+ registered_displays_.insert(display_id);
+ display_comp_ctx->is_primary_panel = hw_panel_info.is_primary_panel;
+ display_comp_ctx->display_id = display_id;
+ display_comp_ctx->display_type = type;
+ display_comp_ctx->fb_config = fb_config;
+ *display_ctx = display_comp_ctx;
+ // New non-primary display device has been added, so move the composition mode to safe mode until
+ // resources for the added display is configured properly.
+ if (!display_comp_ctx->is_primary_panel) {
+ safe_mode_ = true;
+ max_sde_ext_layers_ = UINT32(Debug::GetExtMaxlayers());
+ }
+
+ DLOGV_IF(kTagCompManager, "Registered displays [%s], configured displays [%s], display %d-%d",
+ StringDisplayList(registered_displays_).c_str(),
+ StringDisplayList(configured_displays_).c_str(),
+ display_comp_ctx->display_id, display_comp_ctx->display_type);
+
+ return kErrorNone;
+}
+
+DisplayError CompManager::UnregisterDisplay(Handle display_ctx) {
+ SCOPE_LOCK(locker_);
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ if (!display_comp_ctx) {
+ return kErrorParameters;
+ }
+
+ resource_intf_->UnregisterDisplay(display_comp_ctx->display_resource_ctx);
+
+ Strategy *&strategy = display_comp_ctx->strategy;
+ strategy->Deinit();
+ delete strategy;
+
+ registered_displays_.erase(display_comp_ctx->display_id);
+ configured_displays_.erase(display_comp_ctx->display_id);
+ powered_on_displays_.erase(display_comp_ctx->display_id);
+
+ if (display_comp_ctx->display_type == kPluggable) {
+ max_layers_ = kMaxSDELayers;
+ }
+
+ DLOGV_IF(kTagCompManager, "Registered displays [%s], configured displays [%s], display %d-%d",
+ StringDisplayList(registered_displays_).c_str(),
+ StringDisplayList(configured_displays_).c_str(),
+ display_comp_ctx->display_id, display_comp_ctx->display_type);
+
+ delete display_comp_ctx;
+ display_comp_ctx = NULL;
+ return kErrorNone;
+}
+
+DisplayError CompManager::CheckEnforceSplit(Handle comp_handle,
+ uint32_t new_refresh_rate) {
+ SCOPE_LOCK(locker_);
+ DisplayError error = kErrorNone;
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(comp_handle);
+
+ error = resource_intf_->Perform(ResourceInterface::kCmdCheckEnforceSplit,
+ display_comp_ctx->display_resource_ctx, new_refresh_rate);
+ return error;
+}
+
+DisplayError CompManager::ReconfigureDisplay(Handle comp_handle,
+ const HWDisplayAttributes &display_attributes,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes,
+ const DisplayConfigVariableInfo &fb_config,
+ uint32_t *default_clk_hz) {
+ SCOPE_LOCK(locker_);
+ DTRACE_SCOPED();
+
+ DisplayError error = kErrorNone;
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(comp_handle);
+
+ error = resource_intf_->ReconfigureDisplay(display_comp_ctx->display_resource_ctx,
+ display_attributes, hw_panel_info, mixer_attributes);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = resource_intf_->Perform(ResourceInterface::kCmdGetDefaultClk,
+ display_comp_ctx->display_resource_ctx, default_clk_hz);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = resource_intf_->Perform(ResourceInterface::kCmdCheckEnforceSplit,
+ display_comp_ctx->display_resource_ctx, display_attributes.fps);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ if (display_comp_ctx->strategy) {
+ error = display_comp_ctx->strategy->Reconfigure(hw_panel_info, display_attributes,
+ mixer_attributes, fb_config);
+ if (error != kErrorNone) {
+ DLOGE("Unable to Reconfigure strategy.");
+ display_comp_ctx->strategy->Deinit();
+ delete display_comp_ctx->strategy;
+ display_comp_ctx->strategy = NULL;
+ return error;
+ }
+ }
+
+ // For HDMI S3D mode, set max_layers_ to 0 so that primary display would fall back
+ // to GPU composition to release pipes for HDMI.
+ if (display_comp_ctx->display_type == kPluggable) {
+ if (hw_panel_info.s3d_mode != kS3DModeNone) {
+ max_layers_ = 0;
+ } else {
+ max_layers_ = kMaxSDELayers;
+ }
+ }
+
+ // Update new resolution.
+ display_comp_ctx->fb_config = fb_config;
+ return error;
+}
+
+void CompManager::PrepareStrategyConstraints(Handle comp_handle, HWLayers *hw_layers) {
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(comp_handle);
+ StrategyConstraints *constraints = &display_comp_ctx->constraints;
+
+ constraints->safe_mode = safe_mode_;
+ constraints->max_layers = max_layers_;
+
+ // Limit 2 layer SDE Comp if its not a Primary Display.
+ // Safe mode is the policy for External display on a low end device.
+ if (!display_comp_ctx->is_primary_panel) {
+ bool low_end_hw = ((hw_res_info_.num_vig_pipe + hw_res_info_.num_rgb_pipe +
+ hw_res_info_.num_dma_pipe) <= kSafeModeThreshold);
+ constraints->max_layers = display_comp_ctx->display_type == kBuiltIn ?
+ max_sde_builtin_layers_ : max_sde_ext_layers_;
+ constraints->safe_mode = (low_end_hw && !hw_res_info_.separate_rotator) ? true : safe_mode_;
+ }
+
+ // If a strategy fails after successfully allocating resources, then set safe mode
+ if (display_comp_ctx->remaining_strategies != display_comp_ctx->max_strategies) {
+ constraints->safe_mode = true;
+ }
+
+ // TODO(user): App layer count will change for hybrid composition
+ uint32_t app_layer_count = UINT32(hw_layers->info.stack->layers.size()) - 1;
+ if (display_comp_ctx->idle_fallback || display_comp_ctx->thermal_fallback_) {
+ // Handle the idle timeout by falling back
+ constraints->safe_mode = true;
+ }
+
+ // Avoid safe mode, if there is only one app layer.
+ if (app_layer_count == 1) {
+ constraints->safe_mode = false;
+ }
+}
+
+void CompManager::GenerateROI(Handle display_ctx, HWLayers *hw_layers) {
+ SCOPE_LOCK(locker_);
+ DisplayCompositionContext *disp_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+ return disp_comp_ctx->strategy->GenerateROI(&hw_layers->info, disp_comp_ctx->pu_constraints);
+}
+
+void CompManager::PrePrepare(Handle display_ctx, HWLayers *hw_layers) {
+ SCOPE_LOCK(locker_);
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+ display_comp_ctx->strategy->Start(&hw_layers->info, &display_comp_ctx->max_strategies);
+ display_comp_ctx->remaining_strategies = display_comp_ctx->max_strategies;
+}
+
+DisplayError CompManager::Prepare(Handle display_ctx, HWLayers *hw_layers) {
+ SCOPE_LOCK(locker_);
+
+ DTRACE_SCOPED();
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+ Handle &display_resource_ctx = display_comp_ctx->display_resource_ctx;
+
+ DisplayError error = kErrorUndefined;
+
+ PrepareStrategyConstraints(display_ctx, hw_layers);
+
+ // Select a composition strategy, and try to allocate resources for it.
+ resource_intf_->Start(display_resource_ctx);
+
+ bool exit = false;
+ uint32_t &count = display_comp_ctx->remaining_strategies;
+ for (; !exit && count > 0; count--) {
+ error = display_comp_ctx->strategy->GetNextStrategy(&display_comp_ctx->constraints);
+ if (error != kErrorNone) {
+ // Composition strategies exhausted. Resource Manager could not allocate resources even for
+ // GPU composition. This will never happen.
+ exit = true;
+ }
+
+ if (!exit) {
+ error = resource_intf_->Prepare(display_resource_ctx, hw_layers);
+ // Exit if successfully prepared resource, else try next strategy.
+ exit = (error == kErrorNone);
+ }
+ }
+
+ if (error != kErrorNone) {
+ resource_intf_->Stop(display_resource_ctx, hw_layers);
+ DLOGE("Composition strategies exhausted for display = %d", display_comp_ctx->display_type);
+ return error;
+ }
+
+ return error;
+}
+
+DisplayError CompManager::PostPrepare(Handle display_ctx, HWLayers *hw_layers) {
+ SCOPE_LOCK(locker_);
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+ Handle &display_resource_ctx = display_comp_ctx->display_resource_ctx;
+
+ DisplayError error = kErrorNone;
+ error = resource_intf_->PostPrepare(display_resource_ctx, hw_layers);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ display_comp_ctx->strategy->Stop();
+
+ return kErrorNone;
+}
+
+DisplayError CompManager::Commit(Handle display_ctx, HWLayers *hw_layers) {
+ SCOPE_LOCK(locker_);
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ return resource_intf_->Commit(display_comp_ctx->display_resource_ctx, hw_layers);
+}
+
+DisplayError CompManager::ReConfigure(Handle display_ctx, HWLayers *hw_layers) {
+ SCOPE_LOCK(locker_);
+
+ DTRACE_SCOPED();
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+ Handle &display_resource_ctx = display_comp_ctx->display_resource_ctx;
+
+ DisplayError error = kErrorUndefined;
+ resource_intf_->Start(display_resource_ctx);
+ error = resource_intf_->Prepare(display_resource_ctx, hw_layers);
+
+ if (error != kErrorNone) {
+ DLOGE("Reconfigure failed for display = %d", display_comp_ctx->display_type);
+ }
+
+ resource_intf_->Stop(display_resource_ctx, hw_layers);
+ if (error != kErrorNone) {
+ error = resource_intf_->PostPrepare(display_resource_ctx, hw_layers);
+ }
+
+ return error;
+}
+
+DisplayError CompManager::PostCommit(Handle display_ctx, HWLayers *hw_layers) {
+ SCOPE_LOCK(locker_);
+
+ DisplayError error = kErrorNone;
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+ configured_displays_.insert(display_comp_ctx->display_id);
+
+ // Check if all poweredon displays are in the configured display list.
+ if ((powered_on_displays_.size() == configured_displays_.size())) {
+ safe_mode_ = false;
+ }
+
+ error = resource_intf_->PostCommit(display_comp_ctx->display_resource_ctx, hw_layers);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ display_comp_ctx->idle_fallback = false;
+
+ Handle &display_resource_ctx = display_comp_ctx->display_resource_ctx;
+ error = resource_intf_->Stop(display_resource_ctx, hw_layers);
+
+ DLOGV_IF(kTagCompManager, "Registered displays [%s], configured displays [%s], display %d-%d",
+ StringDisplayList(registered_displays_).c_str(),
+ StringDisplayList(configured_displays_).c_str(),
+ display_comp_ctx->display_id, display_comp_ctx->display_type);
+
+ return error;
+}
+
+void CompManager::Purge(Handle display_ctx) {
+ SCOPE_LOCK(locker_);
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ resource_intf_->Purge(display_comp_ctx->display_resource_ctx);
+
+ display_comp_ctx->strategy->Purge();
+}
+
+DisplayError CompManager::SetIdleTimeoutMs(Handle display_ctx, uint32_t active_ms) {
+ SCOPE_LOCK(locker_);
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ return display_comp_ctx->strategy->SetIdleTimeoutMs(active_ms);
+}
+
+void CompManager::ProcessIdleTimeout(Handle display_ctx) {
+ SCOPE_LOCK(locker_);
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ if (!display_comp_ctx) {
+ return;
+ }
+
+ display_comp_ctx->idle_fallback = true;
+}
+
+void CompManager::ProcessThermalEvent(Handle display_ctx, int64_t thermal_level) {
+ SCOPE_LOCK(locker_);
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ if (thermal_level >= kMaxThermalLevel) {
+ display_comp_ctx->thermal_fallback_ = true;
+ } else {
+ display_comp_ctx->thermal_fallback_ = false;
+ }
+}
+
+void CompManager::ProcessIdlePowerCollapse(Handle display_ctx) {
+ SCOPE_LOCK(locker_);
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ if (display_comp_ctx) {
+ resource_intf_->Perform(ResourceInterface::kCmdResetLUT,
+ display_comp_ctx->display_resource_ctx);
+ }
+}
+
+DisplayError CompManager::SetMaxMixerStages(Handle display_ctx, uint32_t max_mixer_stages) {
+ SCOPE_LOCK(locker_);
+
+ DisplayError error = kErrorNone;
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ if (display_comp_ctx) {
+ error = resource_intf_->SetMaxMixerStages(display_comp_ctx->display_resource_ctx,
+ max_mixer_stages);
+ }
+
+ return error;
+}
+
+void CompManager::ControlPartialUpdate(Handle display_ctx, bool enable) {
+ SCOPE_LOCK(locker_);
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+ display_comp_ctx->pu_constraints.enable = enable;
+}
+
+DisplayError CompManager::ValidateScaling(const LayerRect &crop, const LayerRect &dst,
+ bool rotate90) {
+ BufferLayout layout = Debug::IsUbwcTiledFrameBuffer() ? kUBWC : kLinear;
+ return resource_intf_->ValidateScaling(crop, dst, rotate90, layout, true);
+}
+
+DisplayError CompManager::ValidateAndSetCursorPosition(Handle display_ctx, HWLayers *hw_layers,
+ int x, int y) {
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+ Handle &display_resource_ctx = display_comp_ctx->display_resource_ctx;
+ return resource_intf_->ValidateAndSetCursorPosition(display_resource_ctx, hw_layers, x, y,
+ &display_comp_ctx->fb_config);
+}
+
+DisplayError CompManager::SetMaxBandwidthMode(HWBwModes mode) {
+ if ((!hw_res_info_.has_dyn_bw_support) || (mode >= kBwModeMax)) {
+ return kErrorNotSupported;
+ }
+
+ return resource_intf_->SetMaxBandwidthMode(mode);
+}
+
+DisplayError CompManager::GetScaleLutConfig(HWScaleLutInfo *lut_info) {
+ return resource_intf_->GetScaleLutConfig(lut_info);
+}
+
+DisplayError CompManager::SetDetailEnhancerData(Handle display_ctx,
+ const DisplayDetailEnhancerData &de_data) {
+ SCOPE_LOCK(locker_);
+ if (!hw_res_info_.hw_dest_scalar_info.count) {
+ return kErrorResources;
+ }
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ return resource_intf_->SetDetailEnhancerData(display_comp_ctx->display_resource_ctx, de_data);
+}
+
+DisplayError CompManager::SetCompositionState(Handle display_ctx,
+ LayerComposition composition_type, bool enable) {
+ SCOPE_LOCK(locker_);
+
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ return display_comp_ctx->strategy->SetCompositionState(composition_type, enable);
+}
+
+DisplayError CompManager::ControlDpps(bool enable) {
+ // DPPS feature and HDR using SSPP tone mapping can co-exist
+ // DPPS feature and HDR using DSPP tone mapping are mutually exclusive
+ if (dpps_ctrl_intf_ && hw_res_info_.src_tone_map.none()) {
+ return enable ? dpps_ctrl_intf_->On() : dpps_ctrl_intf_->Off();
+ }
+
+ return kErrorNone;
+}
+
+bool CompManager::SetDisplayState(Handle display_ctx, DisplayState state, int sync_handle) {
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ resource_intf_->Perform(ResourceInterface::kCmdSetDisplayState,
+ display_comp_ctx->display_resource_ctx, state);
+
+ switch (state) {
+ case kStateOff:
+ Purge(display_ctx);
+ configured_displays_.erase(display_comp_ctx->display_id);
+ DLOGV_IF(kTagCompManager, "Configured displays = [%s]",
+ StringDisplayList(configured_displays_).c_str());
+ powered_on_displays_.erase(display_comp_ctx->display_id);
+ break;
+
+ case kStateOn:
+ case kStateDoze:
+ // Setting safe mode if there are multiple displays and one of display is already active.
+ if ((registered_displays_.size() > 1) && powered_on_displays_.size()) {
+ safe_mode_ = true;
+ DLOGV_IF(kTagCompManager, "safe_mode = %d", safe_mode_);
+ }
+ powered_on_displays_.insert(display_comp_ctx->display_id);
+ break;
+
+ case kStateDozeSuspend:
+ configured_displays_.erase(display_comp_ctx->display_id);
+ powered_on_displays_.erase(display_comp_ctx->display_id);
+ break;
+
+ default:
+ break;
+ }
+
+ bool inactive = (state == kStateOff) || (state == kStateDozeSuspend);
+ UpdateStrategyConstraints(display_comp_ctx->is_primary_panel, inactive);
+
+ resource_intf_->Perform(ResourceInterface::kCmdUpdateSyncHandle,
+ display_comp_ctx->display_resource_ctx, sync_handle);
+ return true;
+}
+
+DisplayError CompManager::SetColorModesInfo(Handle display_ctx,
+ const std::vector<PrimariesTransfer> &colormodes_cs) {
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ display_comp_ctx->strategy->SetColorModesInfo(colormodes_cs);
+
+ return kErrorNone;
+}
+
+std::string CompManager::StringDisplayList(const std::set<int32_t> &displays) {
+ std::string displays_str;
+ for (auto disps : displays) {
+ if (displays_str.empty()) {
+ displays_str = std::to_string(disps);
+ } else {
+ displays_str += ", " + std::to_string(disps);
+ }
+ }
+ return displays_str;
+}
+
+DisplayError CompManager::SetBlendSpace(Handle display_ctx, const PrimariesTransfer &blend_space) {
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ display_comp_ctx->strategy->SetBlendSpace(blend_space);
+
+ return kErrorNone;
+}
+
+void CompManager::HandleSecureEvent(Handle display_ctx, SecureEvent secure_event) {
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+ // Disable rotator for non secure layers at the end of secure display session, because scm call
+ // has been made to end secure display session during the display commit. Since then access to
+ // non secure memory is unavailable. So this results in smmu page fault when rotator tries to
+ // access the non secure memory.
+ if (secure_event == kSecureDisplayEnd) {
+ resource_intf_->Perform(ResourceInterface::kCmdDisableRotatorOneFrame,
+ display_comp_ctx->display_resource_ctx);
+ }
+}
+
+void CompManager::UpdateStrategyConstraints(bool is_primary, bool disabled) {
+ if (!is_primary) {
+ return;
+ }
+
+ // Allow builtin display to use all pipes when primary is suspended.
+ // Restore it back to 2 after primary poweron.
+ max_sde_builtin_layers_ = (disabled && (powered_on_displays_.size() <= 1)) ? kMaxSDELayers : 2;
+}
+
+bool CompManager::CanSkipValidate(Handle display_ctx) {
+ DisplayCompositionContext *display_comp_ctx =
+ reinterpret_cast<DisplayCompositionContext *>(display_ctx);
+
+ return display_comp_ctx->strategy->CanSkipValidate();
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/comp_manager.h b/sdm/libs/core/comp_manager.h
new file mode 100644
index 0000000..c3158f0
--- /dev/null
+++ b/sdm/libs/core/comp_manager.h
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __COMP_MANAGER_H__
+#define __COMP_MANAGER_H__
+
+#include <core/display_interface.h>
+#include <private/extension_interface.h>
+#include <utils/locker.h>
+#include <bitset>
+#include <set>
+#include <vector>
+#include <string>
+
+#include "strategy.h"
+#include "resource_default.h"
+#include "hw_interface.h"
+
+namespace sdm {
+
+class CompManager {
+ public:
+ DisplayError Init(const HWResourceInfo &hw_res_info_, ExtensionInterface *extension_intf,
+ BufferAllocator *buffer_allocator, BufferSyncHandler *buffer_sync_handler,
+ SocketHandler *socket_handler);
+ DisplayError Deinit();
+ DisplayError RegisterDisplay(int32_t display_id, DisplayType type,
+ const HWDisplayAttributes &display_attributes,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes,
+ const DisplayConfigVariableInfo &fb_config, Handle *display_ctx,
+ uint32_t *default_clk_hz);
+ DisplayError UnregisterDisplay(Handle display_ctx);
+ DisplayError ReconfigureDisplay(Handle display_ctx, const HWDisplayAttributes &display_attributes,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes,
+ const DisplayConfigVariableInfo &fb_config,
+ uint32_t *default_clk_hz);
+ void PrePrepare(Handle display_ctx, HWLayers *hw_layers);
+ DisplayError Prepare(Handle display_ctx, HWLayers *hw_layers);
+ DisplayError Commit(Handle display_ctx, HWLayers *hw_layers);
+ DisplayError PostPrepare(Handle display_ctx, HWLayers *hw_layers);
+ DisplayError ReConfigure(Handle display_ctx, HWLayers *hw_layers);
+ DisplayError PostCommit(Handle display_ctx, HWLayers *hw_layers);
+ void Purge(Handle display_ctx);
+ DisplayError SetIdleTimeoutMs(Handle display_ctx, uint32_t active_ms);
+ void ProcessIdleTimeout(Handle display_ctx);
+ void ProcessThermalEvent(Handle display_ctx, int64_t thermal_level);
+ void ProcessIdlePowerCollapse(Handle display_ctx);
+ DisplayError SetMaxMixerStages(Handle display_ctx, uint32_t max_mixer_stages);
+ void ControlPartialUpdate(Handle display_ctx, bool enable);
+ DisplayError ValidateScaling(const LayerRect &crop, const LayerRect &dst, bool rotate90);
+ DisplayError ValidateAndSetCursorPosition(Handle display_ctx, HWLayers *hw_layers, int x, int y);
+ bool SetDisplayState(Handle display_ctx, DisplayState state, int sync_handle);
+ DisplayError SetMaxBandwidthMode(HWBwModes mode);
+ DisplayError GetScaleLutConfig(HWScaleLutInfo *lut_info);
+ DisplayError SetDetailEnhancerData(Handle display_ctx, const DisplayDetailEnhancerData &de_data);
+ DisplayError SetCompositionState(Handle display_ctx, LayerComposition composition_type,
+ bool enable);
+ DisplayError ControlDpps(bool enable);
+ DisplayError SetColorModesInfo(Handle display_ctx,
+ const std::vector<PrimariesTransfer> &colormodes_cs);
+ DisplayError SetBlendSpace(Handle display_ctx, const PrimariesTransfer &blend_space);
+ void HandleSecureEvent(Handle display_ctx, SecureEvent secure_event);
+ void SetSafeMode(bool enable) { safe_mode_ = enable; }
+ bool IsSafeMode() { return safe_mode_; }
+ void GenerateROI(Handle display_ctx, HWLayers *hw_layers);
+ bool CanSkipValidate(Handle display_ctx);
+ DisplayError CheckEnforceSplit(Handle comp_handle, uint32_t new_refresh_rate);
+
+ private:
+ static const int kMaxThermalLevel = 3;
+ static const int kSafeModeThreshold = 4;
+
+ void PrepareStrategyConstraints(Handle display_ctx, HWLayers *hw_layers);
+ void UpdateStrategyConstraints(bool is_primary, bool disabled);
+ std::string StringDisplayList(const std::set<int32_t> &displays);
+
+ struct DisplayCompositionContext {
+ Strategy *strategy = NULL;
+ StrategyConstraints constraints;
+ Handle display_resource_ctx = NULL;
+ int32_t display_id = -1;
+ DisplayType display_type = kBuiltIn;
+ uint32_t max_strategies = 0;
+ uint32_t remaining_strategies = 0;
+ bool idle_fallback = false;
+ bool thermal_fallback_ = false;
+ // Using primary panel flag of hw panel to configure Constraints. We do not need other hw
+ // panel parameters for now.
+ bool is_primary_panel = false;
+ PUConstraints pu_constraints = {};
+ DisplayConfigVariableInfo fb_config = {};
+ };
+
+ Locker locker_;
+ ResourceInterface *resource_intf_ = NULL;
+ std::set<int32_t> registered_displays_; // List of registered displays
+ std::set<int32_t> configured_displays_; // List of sucessfully configured displays
+ std::set<int32_t> powered_on_displays_; // List of powered on displays.
+ bool safe_mode_ = false; // Flag to notify all displays to be in resource crunch
+ // mode, where strategy manager chooses the best strategy
+ // that uses optimal number of pipes for each display
+ HWResourceInfo hw_res_info_;
+ BufferAllocator *buffer_allocator_ = NULL;
+ ExtensionInterface *extension_intf_ = NULL;
+ uint32_t max_layers_ = kMaxSDELayers;
+ uint32_t max_sde_ext_layers_ = 0;
+ uint32_t max_sde_builtin_layers_ = 2;
+ DppsControlInterface *dpps_ctrl_intf_ = NULL;
+};
+
+} // namespace sdm
+
+#endif // __COMP_MANAGER_H__
+
diff --git a/sdm/libs/core/core_impl.cpp b/sdm/libs/core/core_impl.cpp
new file mode 100644
index 0000000..8aaac7c
--- /dev/null
+++ b/sdm/libs/core/core_impl.cpp
@@ -0,0 +1,258 @@
+/*
+* Copyright (c) 2014 - 2016, 2018 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#include <dlfcn.h>
+#include <signal.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/locker.h>
+#include <utils/utils.h>
+
+#include "color_manager.h"
+#include "core_impl.h"
+#include "display_builtin.h"
+#include "display_pluggable.h"
+#include "display_virtual.h"
+#include "hw_info_interface.h"
+
+#define __CLASS__ "CoreImpl"
+
+namespace sdm {
+
+CoreImpl::CoreImpl(BufferAllocator *buffer_allocator,
+ BufferSyncHandler *buffer_sync_handler,
+ SocketHandler *socket_handler)
+ : buffer_allocator_(buffer_allocator), buffer_sync_handler_(buffer_sync_handler),
+ socket_handler_(socket_handler) {
+}
+
+DisplayError CoreImpl::Init() {
+ SCOPE_LOCK(locker_);
+ DisplayError error = kErrorNone;
+
+ // Try to load extension library & get handle to its interface.
+ if (extension_lib_.Open(EXTENSION_LIBRARY_NAME)) {
+ if (!extension_lib_.Sym(CREATE_EXTENSION_INTERFACE_NAME,
+ reinterpret_cast<void **>(&create_extension_intf_)) ||
+ !extension_lib_.Sym(DESTROY_EXTENSION_INTERFACE_NAME,
+ reinterpret_cast<void **>(&destroy_extension_intf_))) {
+ DLOGE("Unable to load symbols, error = %s", extension_lib_.Error());
+ return kErrorUndefined;
+ }
+
+ error = create_extension_intf_(EXTENSION_VERSION_TAG, &extension_intf_);
+ if (error != kErrorNone) {
+ DLOGE("Unable to create interface");
+ return error;
+ }
+ } else {
+ DLOGW("Unable to load = %s, error = %s", EXTENSION_LIBRARY_NAME, extension_lib_.Error());
+ }
+
+ error = HWInfoInterface::Create(&hw_info_intf_);
+ if (error != kErrorNone) {
+ goto CleanupOnError;
+ }
+
+ error = hw_info_intf_->GetHWResourceInfo(&hw_resource_);
+ if (error != kErrorNone) {
+ goto CleanupOnError;
+ }
+
+ error = comp_mgr_.Init(hw_resource_, extension_intf_, buffer_allocator_,
+ buffer_sync_handler_, socket_handler_);
+
+ if (error != kErrorNone) {
+ goto CleanupOnError;
+ }
+
+ error = ColorManagerProxy::Init(hw_resource_);
+ // if failed, doesn't affect display core functionalities.
+ if (error != kErrorNone) {
+ DLOGW("Unable creating color manager and continue without it.");
+ }
+
+ // Populate hw_displays_info_ once.
+ error = hw_info_intf_->GetDisplaysStatus(&hw_displays_info_);
+ if (error != kErrorNone) {
+ DLOGW("Failed getting displays status. Error = %d", error);
+ }
+
+ signal(SIGPIPE, SIG_IGN);
+ return kErrorNone;
+
+CleanupOnError:
+ if (hw_info_intf_) {
+ HWInfoInterface::Destroy(hw_info_intf_);
+ }
+
+ return error;
+}
+
+DisplayError CoreImpl::Deinit() {
+ SCOPE_LOCK(locker_);
+
+ ColorManagerProxy::Deinit();
+
+ comp_mgr_.Deinit();
+ HWInfoInterface::Destroy(hw_info_intf_);
+
+ return kErrorNone;
+}
+
+DisplayError CoreImpl::CreateDisplay(DisplayType type, DisplayEventHandler *event_handler,
+ DisplayInterface **intf) {
+ SCOPE_LOCK(locker_);
+
+ if (!event_handler || !intf) {
+ return kErrorParameters;
+ }
+
+ DisplayBase *display_base = NULL;
+
+ switch (type) {
+ case kBuiltIn:
+ display_base = new DisplayBuiltIn(event_handler, hw_info_intf_, buffer_sync_handler_,
+ buffer_allocator_, &comp_mgr_);
+ break;
+ case kPluggable:
+ display_base = new DisplayPluggable(event_handler, hw_info_intf_, buffer_sync_handler_,
+ buffer_allocator_, &comp_mgr_);
+ break;
+ case kVirtual:
+ display_base = new DisplayVirtual(event_handler, hw_info_intf_, buffer_sync_handler_,
+ buffer_allocator_, &comp_mgr_);
+ break;
+ default:
+ DLOGE("Spurious display type %d", type);
+ return kErrorParameters;
+ }
+
+ if (!display_base) {
+ return kErrorMemory;
+ }
+
+ DisplayError error = display_base->Init();
+ if (error != kErrorNone) {
+ delete display_base;
+ return error;
+ }
+
+ *intf = display_base;
+ return kErrorNone;
+}
+
+DisplayError CoreImpl::CreateDisplay(int32_t display_id, DisplayEventHandler *event_handler,
+ DisplayInterface **intf) {
+ SCOPE_LOCK(locker_);
+
+ if (!event_handler || !intf) {
+ return kErrorParameters;
+ }
+
+ auto iter = hw_displays_info_.find(display_id);
+
+ if (iter == hw_displays_info_.end()) {
+ DLOGE("Spurious display id %d", display_id);
+ return kErrorParameters;
+ }
+
+ DisplayBase *display_base = NULL;
+ DisplayType display_type = iter->second.display_type;
+
+ switch (display_type) {
+ case kBuiltIn:
+ display_base = new DisplayBuiltIn(display_id, event_handler, hw_info_intf_,
+ buffer_sync_handler_, buffer_allocator_, &comp_mgr_);
+ break;
+ case kPluggable:
+ display_base = new DisplayPluggable(display_id, event_handler, hw_info_intf_,
+ buffer_sync_handler_, buffer_allocator_, &comp_mgr_);
+ break;
+ case kVirtual:
+ display_base = new DisplayVirtual(display_id, event_handler, hw_info_intf_,
+ buffer_sync_handler_, buffer_allocator_, &comp_mgr_);
+ break;
+ default:
+ DLOGE("Spurious display type %d", display_type);
+ return kErrorParameters;
+ }
+
+ if (!display_base) {
+ return kErrorMemory;
+ }
+
+ DisplayError error = display_base->Init();
+ if (error != kErrorNone) {
+ delete display_base;
+ return error;
+ }
+
+ *intf = display_base;
+
+ return kErrorNone;
+}
+
+DisplayError CoreImpl::DestroyDisplay(DisplayInterface *intf) {
+ SCOPE_LOCK(locker_);
+
+ if (!intf) {
+ return kErrorParameters;
+ }
+
+ DisplayBase *display_base = static_cast<DisplayBase *>(intf);
+ display_base->Deinit();
+ delete display_base;
+
+ return kErrorNone;
+}
+
+DisplayError CoreImpl::SetMaxBandwidthMode(HWBwModes mode) {
+ SCOPE_LOCK(locker_);
+
+ return comp_mgr_.SetMaxBandwidthMode(mode);
+}
+
+DisplayError CoreImpl::GetFirstDisplayInterfaceType(HWDisplayInterfaceInfo *hw_disp_info) {
+ SCOPE_LOCK(locker_);
+ return hw_info_intf_->GetFirstDisplayInterfaceType(hw_disp_info);
+}
+
+DisplayError CoreImpl::GetDisplaysStatus(HWDisplaysInfo *hw_displays_info) {
+ SCOPE_LOCK(locker_);
+ DisplayError error = hw_info_intf_->GetDisplaysStatus(hw_displays_info);
+ if (kErrorNone == error) {
+ // Needed for error-checking in CreateDisplay(int32_t display_id, ...) and getting display-type.
+ hw_displays_info_ = *hw_displays_info;
+ }
+ return error;
+}
+
+DisplayError CoreImpl::GetMaxDisplaysSupported(DisplayType type, int32_t *max_displays) {
+ SCOPE_LOCK(locker_);
+ return hw_info_intf_->GetMaxDisplaysSupported(type, max_displays);
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/core/core_impl.h b/sdm/libs/core/core_impl.h
new file mode 100644
index 0000000..94e61d7
--- /dev/null
+++ b/sdm/libs/core/core_impl.h
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2014 - 2016, 2018 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __CORE_IMPL_H__
+#define __CORE_IMPL_H__
+
+#include <core/core_interface.h>
+#include <private/extension_interface.h>
+#include <private/color_interface.h>
+#include <utils/locker.h>
+#include <utils/sys.h>
+
+#include "hw_interface.h"
+#include "comp_manager.h"
+
+#define SET_REVISION(major, minor) ((major << 8) | minor)
+
+namespace sdm {
+
+class CoreImpl : public CoreInterface {
+ public:
+ // This class implements display core interface revision 1.0.
+ static const uint16_t kRevision = SET_REVISION(1, 0);
+ CoreImpl(BufferAllocator *buffer_allocator, BufferSyncHandler *buffer_sync_handler,
+ SocketHandler *socket_handler);
+ virtual ~CoreImpl() { }
+
+ // This method returns the interface revision for the current display core object.
+ // Future revisions will override this method and return the appropriate revision upon query.
+ virtual uint16_t GetRevision() { return kRevision; }
+ virtual DisplayError Init();
+ virtual DisplayError Deinit();
+
+ // Methods from core interface
+ virtual DisplayError CreateDisplay(DisplayType type, DisplayEventHandler *event_handler,
+ DisplayInterface **intf);
+ virtual DisplayError CreateDisplay(int32_t display_id, DisplayEventHandler *event_handler,
+ DisplayInterface **intf);
+ virtual DisplayError DestroyDisplay(DisplayInterface *intf);
+ virtual DisplayError SetMaxBandwidthMode(HWBwModes mode);
+ virtual DisplayError GetFirstDisplayInterfaceType(HWDisplayInterfaceInfo *hw_disp_info);
+ virtual DisplayError GetDisplaysStatus(HWDisplaysInfo *hw_displays_info);
+ virtual DisplayError GetMaxDisplaysSupported(DisplayType type, int32_t *max_displays);
+
+ protected:
+ Locker locker_;
+ BufferAllocator *buffer_allocator_ = NULL;
+ BufferSyncHandler *buffer_sync_handler_ = NULL;
+ HWResourceInfo hw_resource_;
+ CompManager comp_mgr_;
+ HWInfoInterface *hw_info_intf_ = NULL;
+ DynLib extension_lib_;
+ ExtensionInterface *extension_intf_ = NULL;
+ CreateExtensionInterface create_extension_intf_ = NULL;
+ DestroyExtensionInterface destroy_extension_intf_ = NULL;
+ SocketHandler *socket_handler_ = NULL;
+ HWDisplaysInfo hw_displays_info_ = {};
+};
+
+} // namespace sdm
+
+#endif // __CORE_IMPL_H__
+
diff --git a/sdm/libs/core/core_interface.cpp b/sdm/libs/core/core_interface.cpp
new file mode 100644
index 0000000..b880298
--- /dev/null
+++ b/sdm/libs/core/core_interface.cpp
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2014 - 2015, 2018 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <utils/locker.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <core/buffer_sync_handler.h>
+
+#include "core_impl.h"
+
+#define __CLASS__ "CoreInterface"
+
+#define GET_REVISION(version) (version >> 16)
+#define GET_DATA_ALIGNMENT(version) ((version >> 8) & 0xFF)
+#define GET_INSTRUCTION_SET(version) (version & 0xFF)
+
+namespace sdm {
+
+// Currently, we support only one client and one session for display core. So, create a global
+// singleton core object.
+struct CoreSingleton {
+ CoreSingleton() : core_impl(NULL) { }
+
+ CoreImpl *core_impl;
+ Locker locker;
+} g_core;
+
+DisplayError CoreInterface::CreateCore(BufferAllocator *buffer_allocator,
+ BufferSyncHandler *buffer_sync_handler,
+ SocketHandler *socket_handler,
+ CoreInterface **interface, uint32_t client_version) {
+ SCOPE_LOCK(g_core.locker);
+
+ if (!buffer_allocator || !buffer_sync_handler || !interface) {
+ return kErrorParameters;
+ }
+
+ // Check compatibility of client and core.
+ uint32_t lib_version = SDM_VERSION_TAG;
+ if (GET_REVISION(client_version) > GET_REVISION(lib_version)) {
+ return kErrorVersion;
+ } else if (GET_DATA_ALIGNMENT(client_version) != GET_DATA_ALIGNMENT(lib_version)) {
+ return kErrorDataAlignment;
+ } else if (GET_INSTRUCTION_SET(client_version) != GET_INSTRUCTION_SET(lib_version)) {
+ return kErrorInstructionSet;
+ }
+
+ CoreImpl *&core_impl = g_core.core_impl;
+ if (core_impl) {
+ return kErrorUndefined;
+ }
+
+ // Create appropriate CoreImpl object based on client version.
+ if (GET_REVISION(client_version) == CoreImpl::kRevision) {
+ core_impl = new CoreImpl(buffer_allocator, buffer_sync_handler, socket_handler);
+ } else {
+ return kErrorNotSupported;
+ }
+
+ if (!core_impl) {
+ return kErrorMemory;
+ }
+
+ DisplayError error = core_impl->Init();
+ if (error != kErrorNone) {
+ delete core_impl;
+ core_impl = NULL;
+ return error;
+ }
+
+ *interface = core_impl;
+ DLOGI("Open interface handle = %p", *interface);
+
+ return kErrorNone;
+}
+
+DisplayError CoreInterface::DestroyCore() {
+ SCOPE_LOCK(g_core.locker);
+
+ DLOGI("Close handle");
+
+ CoreImpl *&core_impl = g_core.core_impl;
+ if (!core_impl) {
+ return kErrorUndefined;
+ }
+
+ core_impl->Deinit();
+ delete core_impl;
+ core_impl = NULL;
+
+ return kErrorNone;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/core/display_base.cpp b/sdm/libs/core/display_base.cpp
new file mode 100755
index 0000000..cc2855e
--- /dev/null
+++ b/sdm/libs/core/display_base.cpp
@@ -0,0 +1,2031 @@
+/*
+* Copyright (c) 2014 - 2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#include <stdio.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/formats.h>
+#include <utils/rect.h>
+#include <utils/utils.h>
+
+#include <iomanip>
+#include <map>
+#include <sstream>
+#include <string>
+#include <vector>
+#include <algorithm>
+
+#include "display_base.h"
+#include "hw_info_interface.h"
+
+#define __CLASS__ "DisplayBase"
+
+namespace sdm {
+
+bool DisplayBase::display_power_reset_pending_ = false;
+Locker DisplayBase::display_power_reset_lock_;
+
+static ColorPrimaries GetColorPrimariesFromAttribute(const std::string &gamut) {
+ if (gamut.find(kDisplayP3) != std::string::npos || gamut.find(kDcip3) != std::string::npos) {
+ return ColorPrimaries_DCIP3;
+ } else if (gamut.find(kHdr) != std::string::npos || gamut.find("bt2020") != std::string::npos ||
+ gamut.find("BT2020") != std::string::npos) {
+ // BT2020 is hdr, but the dynamicrange of kHdr means its BT2020
+ return ColorPrimaries_BT2020;
+ } else if (gamut.find(kSrgb) != std::string::npos) {
+ return ColorPrimaries_BT709_5;
+ } else if (gamut.find(kNative) != std::string::npos) {
+ DLOGW("Native Gamut found, returning default: sRGB");
+ return ColorPrimaries_BT709_5;
+ }
+
+ return ColorPrimaries_BT709_5;
+}
+
+// TODO(user): Have a single structure handle carries all the interface pointers and variables.
+DisplayBase::DisplayBase(DisplayType display_type, DisplayEventHandler *event_handler,
+ HWDeviceType hw_device_type, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager,
+ HWInfoInterface *hw_info_intf)
+ : display_type_(display_type), event_handler_(event_handler), hw_device_type_(hw_device_type),
+ buffer_sync_handler_(buffer_sync_handler), buffer_allocator_(buffer_allocator),
+ comp_manager_(comp_manager), hw_info_intf_(hw_info_intf) {
+}
+
+DisplayBase::DisplayBase(int32_t display_id, DisplayType display_type,
+ DisplayEventHandler *event_handler, HWDeviceType hw_device_type,
+ BufferSyncHandler *buffer_sync_handler, BufferAllocator *buffer_allocator,
+ CompManager *comp_manager, HWInfoInterface *hw_info_intf)
+ : display_id_(display_id),
+ display_type_(display_type),
+ event_handler_(event_handler),
+ hw_device_type_(hw_device_type),
+ buffer_sync_handler_(buffer_sync_handler),
+ buffer_allocator_(buffer_allocator),
+ comp_manager_(comp_manager),
+ hw_info_intf_(hw_info_intf) {}
+
+DisplayError DisplayBase::Init() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+ hw_panel_info_ = HWPanelInfo();
+ hw_intf_->GetHWPanelInfo(&hw_panel_info_);
+ if (hw_info_intf_) {
+ hw_info_intf_->GetHWResourceInfo(&hw_resource_info_);
+ }
+ auto max_mixer_stages = hw_resource_info_.num_blending_stages;
+ int property_value = Debug::GetMaxPipesPerMixer(display_type_);
+
+ uint32_t active_index = 0;
+ int drop_vsync = 0;
+ hw_intf_->GetActiveConfig(&active_index);
+ hw_intf_->GetDisplayAttributes(active_index, &display_attributes_);
+ fb_config_ = display_attributes_;
+
+ error = Debug::GetMixerResolution(&mixer_attributes_.width, &mixer_attributes_.height);
+ if (error == kErrorNone) {
+ hw_intf_->SetMixerAttributes(mixer_attributes_);
+ custom_mixer_resolution_ = true;
+ }
+
+ error = hw_intf_->GetMixerAttributes(&mixer_attributes_);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ // Override x_pixels and y_pixels of frame buffer with mixer width and height
+ fb_config_.x_pixels = mixer_attributes_.width;
+ fb_config_.y_pixels = mixer_attributes_.height;
+
+ if (IsPrimaryDisplay()) {
+ HWScaleLutInfo lut_info = {};
+ error = comp_manager_->GetScaleLutConfig(&lut_info);
+ if (error == kErrorNone) {
+ error = hw_intf_->SetScaleLutConfig(&lut_info);
+ if (error != kErrorNone) {
+ goto CleanupOnError;
+ }
+ }
+ }
+
+ // ColorManager supported for built-in display.
+ if (kBuiltIn == display_type_) {
+ color_mgr_ = ColorManagerProxy::CreateColorManagerProxy(display_type_, hw_intf_,
+ display_attributes_, hw_panel_info_);
+
+ if (color_mgr_) {
+ if (InitializeColorModes() != kErrorNone) {
+ DLOGW("InitColorModes failed for display %d-%d", display_id_, display_type_);
+ }
+ color_mgr_->ColorMgrCombineColorModes();
+ } else {
+ DLOGW("Unable to create ColorManagerProxy for display %d-%d", display_id_, display_type_);
+ }
+ }
+
+ error = comp_manager_->RegisterDisplay(display_id_, display_type_, display_attributes_,
+ hw_panel_info_, mixer_attributes_, fb_config_,
+ &display_comp_ctx_, &(default_qos_data_.clock_hz));
+ if (error != kErrorNone) {
+ DLOGW("Display %d comp manager registration failed!", display_id_);
+ goto CleanupOnError;
+ }
+
+ if (color_modes_cs_.size() > 0) {
+ error = comp_manager_->SetColorModesInfo(display_comp_ctx_, color_modes_cs_);
+ if (error) {
+ DLOGW("SetColorModesInfo failed on display = %d", display_type_);
+ }
+ }
+
+ if (property_value >= 0) {
+ max_mixer_stages = std::min(UINT32(property_value), hw_resource_info_.num_blending_stages);
+ }
+ DisplayBase::SetMaxMixerStages(max_mixer_stages);
+
+ Debug::GetProperty(DISABLE_HDR_LUT_GEN, &disable_hdr_lut_gen_);
+ // TODO(user): Temporary changes, to be removed when DRM driver supports
+ // Partial update with Destination scaler enabled.
+ SetPUonDestScaler();
+
+ Debug::GetProperty(DISABLE_HW_RECOVERY_DUMP_PROP, &disable_hw_recovery_dump_);
+ DLOGI("disable_hw_recovery_dump_ set to %d", disable_hw_recovery_dump_);
+
+ Debug::Get()->GetProperty(DROP_SKEWED_VSYNC, &drop_vsync);
+ drop_skewed_vsync_ = (drop_vsync == 1);
+
+ return kErrorNone;
+
+CleanupOnError:
+ ClearColorInfo();
+ if (display_comp_ctx_) {
+ comp_manager_->UnregisterDisplay(display_comp_ctx_);
+ }
+
+ return error;
+}
+
+DisplayError DisplayBase::Deinit() {
+ { // Scope for lock
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ ClearColorInfo();
+ comp_manager_->UnregisterDisplay(display_comp_ctx_);
+ if (IsPrimaryDisplay()) {
+ hw_intf_->UnsetScaleLutConfig();
+ }
+ }
+ HWEventsInterface::Destroy(hw_events_intf_);
+ HWInterface::Destroy(hw_intf_);
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::BuildLayerStackStats(LayerStack *layer_stack) {
+ std::vector<Layer *> &layers = layer_stack->layers;
+ HWLayersInfo &hw_layers_info = hw_layers_.info;
+ hw_layers_info.app_layer_count = 0;
+
+ hw_layers_info.stack = layer_stack;
+
+ for (auto &layer : layers) {
+ if (layer->buffer_map == nullptr) {
+ layer->buffer_map = std::make_shared<LayerBufferMap>();
+ }
+ if (layer->composition == kCompositionGPUTarget) {
+ hw_layers_info.gpu_target_index = hw_layers_info.app_layer_count;
+ break;
+ }
+ hw_layers_info.app_layer_count++;
+ if (IsWideColor(layer->input_buffer.color_metadata.colorPrimaries)) {
+ hw_layers_info.wide_color_primaries.push_back(
+ layer->input_buffer.color_metadata.colorPrimaries);
+ }
+ }
+
+ DLOGD_IF(kTagDisplay,
+ "LayerStack layer_count: %d, app_layer_count: %d, gpu_target_index: %d, display: %d-%d",
+ layers.size(), hw_layers_info.app_layer_count, hw_layers_info.gpu_target_index,
+ display_id_, display_type_);
+
+ if (!hw_layers_info.app_layer_count) {
+ DLOGW("Layer count is zero");
+ return kErrorNoAppLayers;
+ }
+
+ if (hw_layers_info.gpu_target_index) {
+ return ValidateGPUTargetParams();
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::ValidateGPUTargetParams() {
+ HWLayersInfo &hw_layers_info = hw_layers_.info;
+ Layer *gpu_target_layer = hw_layers_info.stack->layers.at(hw_layers_info.gpu_target_index);
+
+ if (!IsValid(gpu_target_layer->src_rect)) {
+ DLOGE("Invalid src rect for GPU target layer");
+ return kErrorParameters;
+ }
+
+ if (!IsValid(gpu_target_layer->dst_rect)) {
+ DLOGE("Invalid dst rect for GPU target layer");
+ return kErrorParameters;
+ }
+
+ float layer_mixer_width = FLOAT(mixer_attributes_.width);
+ float layer_mixer_height = FLOAT(mixer_attributes_.height);
+ float fb_width = FLOAT(fb_config_.x_pixels);
+ float fb_height = FLOAT(fb_config_.y_pixels);
+ LayerRect src_domain = (LayerRect){0.0f, 0.0f, fb_width, fb_height};
+ LayerRect dst_domain = (LayerRect){0.0f, 0.0f, layer_mixer_width, layer_mixer_height};
+ LayerRect out_rect = gpu_target_layer->dst_rect;
+
+ MapRect(src_domain, dst_domain, gpu_target_layer->dst_rect, &out_rect);
+ Normalize(1, 1, &out_rect);
+
+ auto gpu_target_layer_dst_xpixels = out_rect.right - out_rect.left;
+ auto gpu_target_layer_dst_ypixels = out_rect.bottom - out_rect.top;
+
+ if (gpu_target_layer_dst_xpixels > mixer_attributes_.width ||
+ gpu_target_layer_dst_ypixels > mixer_attributes_.height) {
+ DLOGE("GPU target layer dst rect is not with in limits gpu wxh %fx%f, mixer wxh %dx%d",
+ gpu_target_layer_dst_xpixels, gpu_target_layer_dst_ypixels,
+ mixer_attributes_.width, mixer_attributes_.height);
+ return kErrorParameters;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::Prepare(LayerStack *layer_stack) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+ needs_validate_ = true;
+
+ DTRACE_SCOPED();
+ // Allow prepare as pending doze/pending_power_on is handled as a part of draw cycle
+ if (!active_ && !pending_doze_ && !pending_power_on_) {
+ return kErrorPermission;
+ }
+
+ if (!layer_stack) {
+ return kErrorParameters;
+ }
+
+ DLOGI_IF(kTagDisplay, "Entering Prepare for display: %d-%d", display_id_, display_type_);
+ error = BuildLayerStackStats(layer_stack);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ if (color_mgr_ && color_mgr_->NeedsPartialUpdateDisable()) {
+ DisablePartialUpdateOneFrame();
+ }
+ // TODO(user): Temporary changes, to be removed when DRM driver supports
+ // Partial update with Destination scaler enabled.
+ if (!partial_update_control_ || disable_pu_one_frame_ ||
+ disable_pu_on_dest_scaler_) {
+ comp_manager_->ControlPartialUpdate(display_comp_ctx_, false /* enable */);
+ disable_pu_one_frame_ = false;
+ }
+
+ hw_layers_.updates_mask.set(kUpdateResources);
+ comp_manager_->GenerateROI(display_comp_ctx_, &hw_layers_);
+ comp_manager_->PrePrepare(display_comp_ctx_, &hw_layers_);
+
+ while (true) {
+ error = comp_manager_->Prepare(display_comp_ctx_, &hw_layers_);
+ if (error != kErrorNone) {
+ break;
+ }
+
+ if (layer_stack->flags.fast_path && hw_layers_.info.fast_path_composition) {
+ // In Fast Path, driver validation happens in COMMIT Phase.
+ DLOGI_IF(kTagDisplay, "Draw cycle qualifies for Fast Path!");
+ needs_validate_ = false;
+ break;
+ }
+
+ error = hw_intf_->Validate(&hw_layers_);
+ if (error == kErrorNone) {
+ // Strategy is successful now, wait for Commit().
+ needs_validate_ = false;
+ break;
+ }
+ if (error == kErrorShutDown) {
+ comp_manager_->PostPrepare(display_comp_ctx_, &hw_layers_);
+ return error;
+ }
+ }
+
+ comp_manager_->PostPrepare(display_comp_ctx_, &hw_layers_);
+
+ DLOGI_IF(kTagDisplay, "Exiting Prepare for display type : %d error: %d", display_type_, error);
+ return error;
+}
+
+DisplayError DisplayBase::Commit(LayerStack *layer_stack) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+
+ // Allow commit as pending doze/pending_power_on is handled as a part of draw cycle
+ if (!active_ && !pending_doze_ && !pending_power_on_) {
+ needs_validate_ = true;
+ return kErrorPermission;
+ }
+
+ if (!layer_stack) {
+ return kErrorParameters;
+ }
+
+ if (needs_validate_) {
+ DLOGE("Commit: Corresponding Prepare() is not called for display %d-%d", display_id_,
+ display_type_);
+ return kErrorNotValidated;
+ }
+
+ // Layer stack attributes has changed, need to Reconfigure, currently in use for Hybrid Comp
+ if (layer_stack->flags.attributes_changed) {
+ error = comp_manager_->ReConfigure(display_comp_ctx_, &hw_layers_);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = hw_intf_->Validate(&hw_layers_);
+ if (error != kErrorNone) {
+ return error;
+ }
+ }
+
+ DLOGI_IF(kTagDisplay, "Entering commit for display: %d-%d", display_id_, display_type_);
+ CommitLayerParams(layer_stack);
+
+ error = comp_manager_->Commit(display_comp_ctx_, &hw_layers_);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ // check if feature list cache is dirty and pending.
+ // If dirty, need program to hardware blocks.
+ if (color_mgr_)
+ error = color_mgr_->Commit();
+ if (error != kErrorNone) { // won't affect this execution path.
+ DLOGW("ColorManager::Commit(...) isn't working");
+ }
+
+ error = hw_intf_->Commit(&hw_layers_);
+ if (error != kErrorNone) {
+ if (layer_stack->flags.fast_path && hw_layers_.info.fast_path_composition) {
+ // If COMMIT fails on the Fast Path, set Safe Mode.
+ DLOGE("COMMIT failed in Fast Path, set Safe Mode!");
+ comp_manager_->SetSafeMode(true);
+ safe_mode_in_fast_path_ = true;
+ error = kErrorNotValidated;
+ }
+ return error;
+ }
+
+ PostCommitLayerParams(layer_stack);
+ SetLutSwapFlag();
+
+ if (partial_update_control_) {
+ comp_manager_->ControlPartialUpdate(display_comp_ctx_, true /* enable */);
+ }
+
+ error = comp_manager_->PostCommit(display_comp_ctx_, &hw_layers_);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ // Stop dropping vsync when first commit is received after idle fallback.
+ drop_hw_vsync_ = false;
+
+ if (safe_mode_in_fast_path_) {
+ comp_manager_->SetSafeMode(false);
+ safe_mode_in_fast_path_ = false;
+ }
+
+ // Reset pending power state if any after the commit
+ error = HandlePendingPowerState(layer_stack->retire_fence_fd);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ // Handle pending vsync enable if any after the commit
+ error = HandlePendingVSyncEnable(layer_stack->retire_fence_fd);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+
+ DLOGI_IF(kTagDisplay, "Exiting commit for display: %d-%d", display_id_, display_type_);
+
+ return error;
+}
+
+DisplayError DisplayBase::Flush(LayerStack *layer_stack) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+
+ if (!active_) {
+ return kErrorPermission;
+ }
+ hw_layers_.info.hw_layers.clear();
+ hw_layers_.info.stack = layer_stack;
+ error = hw_intf_->Flush(&hw_layers_);
+ if (error == kErrorNone) {
+ comp_manager_->Purge(display_comp_ctx_);
+ needs_validate_ = true;
+ } else {
+ DLOGW("Unable to flush display %d-%d", display_id_, display_type_);
+ }
+
+ return error;
+}
+
+DisplayError DisplayBase::GetDisplayState(DisplayState *state) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!state) {
+ return kErrorParameters;
+ }
+
+ *state = state_;
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetNumVariableInfoConfigs(uint32_t *count) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ return hw_intf_->GetNumDisplayAttributes(count);
+}
+
+DisplayError DisplayBase::GetConfig(uint32_t index, DisplayConfigVariableInfo *variable_info) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ HWDisplayAttributes attrib;
+ if (hw_intf_->GetDisplayAttributes(index, &attrib) == kErrorNone) {
+ *variable_info = attrib;
+ if (custom_mixer_resolution_) {
+ variable_info->x_pixels = fb_config_.x_pixels;
+ variable_info->y_pixels = fb_config_.y_pixels;
+ }
+ return kErrorNone;
+ }
+
+ return kErrorNotSupported;
+}
+
+DisplayError DisplayBase::GetConfig(DisplayConfigFixedInfo *fixed_info) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ fixed_info->is_cmdmode = (hw_panel_info_.mode == kModeCommand);
+
+ HWResourceInfo hw_resource_info = HWResourceInfo();
+ hw_info_intf_->GetHWResourceInfo(&hw_resource_info);
+ bool hdr_supported = hw_resource_info.has_hdr;
+ HWDisplayInterfaceInfo hw_disp_info = {};
+ hw_info_intf_->GetFirstDisplayInterfaceType(&hw_disp_info);
+ if (hw_disp_info.type == kHDMI) {
+ hdr_supported = (hdr_supported && hw_panel_info_.hdr_enabled);
+ }
+
+ fixed_info->hdr_supported = hdr_supported;
+ // Populate luminance values only if hdr will be supported on that display
+ fixed_info->max_luminance = fixed_info->hdr_supported ? hw_panel_info_.peak_luminance: 0;
+ fixed_info->average_luminance = fixed_info->hdr_supported ? hw_panel_info_.average_luminance : 0;
+ fixed_info->min_luminance = fixed_info->hdr_supported ? hw_panel_info_.blackness_level: 0;
+ fixed_info->hdr_eotf = hw_panel_info_.hdr_eotf;
+ fixed_info->hdr_metadata_type_one = hw_panel_info_.hdr_metadata_type_one;
+ fixed_info->partial_update = hw_panel_info_.partial_update;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetActiveConfig(uint32_t *index) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ return hw_intf_->GetActiveConfig(index);
+}
+
+DisplayError DisplayBase::GetVSyncState(bool *enabled) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!enabled) {
+ return kErrorParameters;
+ }
+
+ *enabled = vsync_enable_;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::SetDisplayState(DisplayState state, bool teardown,
+ int *release_fence) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+ bool active = false;
+
+ DLOGI("Set state = %d, display %d-%d, teardown = %d", state, display_id_,
+ display_type_, teardown);
+
+ if (state == state_) {
+ DLOGI("Same state transition is requested.");
+ return kErrorNone;
+ }
+
+ // If vsync is enabled, disable vsync before power off/Doze suspend
+ if (vsync_enable_ && (state == kStateOff || state == kStateDozeSuspend)) {
+ error = SetVSyncState(false /* enable */);
+ if (error == kErrorNone) {
+ vsync_enable_pending_ = true;
+ }
+ }
+
+ switch (state) {
+ case kStateOff:
+ hw_layers_.info.hw_layers.clear();
+ error = hw_intf_->Flush(&hw_layers_);
+ if (error == kErrorNone) {
+ error = hw_intf_->PowerOff(teardown);
+ }
+ break;
+
+ case kStateOn:
+ error = hw_intf_->PowerOn(default_qos_data_, release_fence);
+ if (error != kErrorNone) {
+ if (error == kErrorDeferred) {
+ pending_power_on_ = true;
+ error = kErrorNone;
+ } else {
+ return error;
+ }
+ }
+
+ error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes_,
+ hw_panel_info_, mixer_attributes_, fb_config_,
+ &(default_qos_data_.clock_hz));
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ active = true;
+ break;
+
+ case kStateDoze:
+ error = hw_intf_->Doze(default_qos_data_, release_fence);
+ if (error != kErrorNone) {
+ if (error == kErrorDeferred) {
+ pending_doze_ = true;
+ error = kErrorNone;
+ } else {
+ return error;
+ }
+ }
+ active = true;
+ break;
+
+ case kStateDozeSuspend:
+ error = hw_intf_->DozeSuspend(default_qos_data_, release_fence);
+ if (display_type_ != kBuiltIn) {
+ active = true;
+ }
+ break;
+
+ case kStateStandby:
+ error = hw_intf_->Standby();
+ break;
+
+ default:
+ DLOGE("Spurious state = %d transition requested.", state);
+ return kErrorParameters;
+ }
+
+ error = ReconfigureDisplay();
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ DisablePartialUpdateOneFrame();
+
+ if (error == kErrorNone) {
+ if (!pending_doze_ && !pending_power_on_) {
+ active_ = active;
+ state_ = state;
+ }
+ comp_manager_->SetDisplayState(display_comp_ctx_, state, release_fence ? *release_fence : -1);
+ // If previously requested doze state is still pending reset it on any new display state request
+ // and handle the new request.
+ if (state != kStateDoze) {
+ pending_doze_ = false;
+ }
+ // If previously requested power on state is still pending reset it on any new display state
+ // request and handle the new request.
+ if (state != kStateOn) {
+ pending_power_on_ = false;
+ }
+ }
+
+ // Handle vsync pending on resume, Since the power on commit is synchronous we pass -1 as retire
+ // fence otherwise pass valid retire fence
+ if (state_ == kStateOn) {
+ return HandlePendingVSyncEnable(-1 /* retire fence */);
+ }
+
+ return error;
+}
+
+DisplayError DisplayBase::SetActiveConfig(uint32_t index) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+ uint32_t active_index = 0;
+
+ hw_intf_->GetActiveConfig(&active_index);
+
+ if (active_index == index) {
+ return kErrorNone;
+ }
+
+ // Reject active config changes if qsync is in use.
+ if (needs_avr_update_ || qsync_mode_ != kQSyncModeNone) {
+ DLOGE("Failed: needs_avr_update_: %d, qsync_mode_: %d", needs_avr_update_, qsync_mode_);
+ return kErrorNotSupported;
+ }
+
+ error = hw_intf_->SetDisplayAttributes(index);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ return ReconfigureDisplay();
+}
+
+DisplayError DisplayBase::SetMaxMixerStages(uint32_t max_mixer_stages) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+
+ error = comp_manager_->SetMaxMixerStages(display_comp_ctx_, max_mixer_stages);
+
+ if (error == kErrorNone) {
+ max_mixer_stages_ = max_mixer_stages;
+ }
+
+ return error;
+}
+
+std::string DisplayBase::Dump() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ HWDisplayAttributes attrib;
+ uint32_t active_index = 0;
+ uint32_t num_modes = 0;
+ std::ostringstream os;
+
+ hw_intf_->GetNumDisplayAttributes(&num_modes);
+ hw_intf_->GetActiveConfig(&active_index);
+ hw_intf_->GetDisplayAttributes(active_index, &attrib);
+
+ os << "device type:" << display_type_;
+ os << "\nstate: " << state_ << " vsync on: " << vsync_enable_
+ << " max. mixer stages: " << max_mixer_stages_;
+ os << "\nnum configs: " << num_modes << " active config index: " << active_index;
+ os << "\nDisplay Attributes:";
+ os << "\n Mode:" << (hw_panel_info_.mode == kModeVideo ? "Video" : "Command");
+ os << std::boolalpha;
+ os << " Primary:" << hw_panel_info_.is_primary_panel;
+ os << " DynFPS:" << hw_panel_info_.dynamic_fps;
+ os << "\n HDR Panel:" << hw_panel_info_.hdr_enabled;
+ os << " QSync:" << hw_panel_info_.qsync_support;
+ os << " DynBitclk:" << hw_panel_info_.dyn_bitclk_support;
+ os << "\n Left Split:" << hw_panel_info_.split_info.left_split << " Right Split:"
+ << hw_panel_info_.split_info.right_split;
+ os << "\n PartialUpdate:" << hw_panel_info_.partial_update;
+ if (hw_panel_info_.partial_update) {
+ os << "\n ROI Min w:" << hw_panel_info_.min_roi_width;
+ os << " Min h:" << hw_panel_info_.min_roi_height;
+ os << " NeedsMerge: " << hw_panel_info_.needs_roi_merge;
+ os << " Alignment: l:" << hw_panel_info_.left_align << " w:" << hw_panel_info_.width_align;
+ os << " t:" << hw_panel_info_.top_align << " b:" << hw_panel_info_.height_align;
+ }
+ os << "\n FPS min:" << hw_panel_info_.min_fps << " max:" << hw_panel_info_.max_fps
+ << " cur:" << display_attributes_.fps;
+ os << " TransferTime: " << hw_panel_info_.transfer_time_us <<"us";
+ os << " MaxBrightness:" << hw_panel_info_.panel_max_brightness;
+ os << "\n Display WxH: " << display_attributes_.x_pixels << "x"
+ << display_attributes_.y_pixels;
+ os << " MixerWxH: " << mixer_attributes_.width << "x" << mixer_attributes_.height;
+ os << " DPI: " << display_attributes_.x_dpi << "x" << display_attributes_.y_dpi;
+ os << " LM_Split: " << display_attributes_.is_device_split;
+ os << "\n vsync_period " << display_attributes_.vsync_period_ns;
+ os << " v_back_porch: " << display_attributes_.v_back_porch;
+ os << " v_front_porch: " << display_attributes_.v_front_porch;
+ os << " v_pulse_width: " << display_attributes_.v_pulse_width;
+ os << "\n v_total: " << display_attributes_.v_total;
+ os << " h_total: " << display_attributes_.h_total;
+ os << " clk: " << display_attributes_.clock_khz;
+ os << " Topology: " << display_attributes_.topology;
+ os << std::noboolalpha;
+
+ os << "\nCurrent Color Mode: " << current_color_mode_.c_str();
+ os << "\nAvailable Color Modes:\n";
+ for (auto it : color_mode_map_) {
+ os << " " << it.first << " " << std::setw(35 - INT(it.first.length())) <<
+ it.second->id;
+ os << " ";
+ for (auto attr_it : color_mode_attr_map_[it.first]) {
+ os << std::right << " " << attr_it.first << ": " << attr_it.second;
+ }
+ os << "\n";
+ }
+
+ uint32_t num_hw_layers = 0;
+ if (hw_layers_.info.stack) {
+ num_hw_layers = UINT32(hw_layers_.info.hw_layers.size());
+ }
+
+ if (num_hw_layers == 0) {
+ os << "\nNo hardware layers programmed";
+ return os.str();
+ }
+
+ LayerBuffer *out_buffer = hw_layers_.info.stack->output_buffer;
+ if (out_buffer) {
+ os << "\n Output buffer res: " << out_buffer->width << "x" << out_buffer->height << " format: "
+ << GetFormatString(out_buffer->format);
+ }
+ HWLayersInfo &layer_info = hw_layers_.info;
+ for (uint32_t i = 0; i < layer_info.left_frame_roi.size(); i++) {
+ LayerRect &l_roi = layer_info.left_frame_roi.at(i);
+ LayerRect &r_roi = layer_info.right_frame_roi.at(i);
+
+ os << "\nROI(LTRB)#" << i << " LEFT(" << INT(l_roi.left) << " " << INT(l_roi.top) << " " <<
+ INT(l_roi.right) << " " << INT(l_roi.bottom) << ")";
+ if (IsValid(r_roi)) {
+ os << " RIGHT(" << INT(r_roi.left) << " " << INT(r_roi.top) << " " << INT(r_roi.right) << " "
+ << INT(r_roi.bottom) << ")";
+ }
+ }
+
+ LayerRect &fb_roi = layer_info.partial_fb_roi;
+ if (IsValid(fb_roi)) {
+ os << "\nPartial FB ROI(LTRB):(" << INT(fb_roi.left) << " " << INT(fb_roi.top) << " " <<
+ INT(fb_roi.right) << " " << INT(fb_roi.bottom) << ")";
+ }
+
+ const char *header = "\n| Idx | Comp Type | Split | Pipe | W x H | Format | Src Rect (L T R B) | Dst Rect (L T R B) | Z | Pipe Flags | Deci(HxV) | CS | Rng | Tr |"; //NOLINT
+ const char *newline = "\n|-----|------------|-----------|------|-------------|--------------------------|---------------------|---------------------|----|------------|-----------|----|-----|----|"; //NOLINT
+ const char *format = "\n| %3s | %10s | %9s | %4d | %4d x %4d | %24s | %4d %4d %4d %4d | %4d %4d %4d %4d | %2s | %10s | %9s | %2s | %3s | %2s |"; //NOLINT
+
+ os << "\n";
+ os << newline;
+ os << header;
+ os << newline;
+
+ for (uint32_t i = 0; i < num_hw_layers; i++) {
+ uint32_t layer_index = hw_layers_.info.index.at(i);
+ // sdm-layer from client layer stack
+ Layer *sdm_layer = hw_layers_.info.stack->layers.at(layer_index);
+ // hw-layer from hw layers info
+ Layer &hw_layer = hw_layers_.info.hw_layers.at(i);
+ LayerBuffer *input_buffer = &hw_layer.input_buffer;
+ HWLayerConfig &layer_config = hw_layers_.config[i];
+ HWRotatorSession &hw_rotator_session = layer_config.hw_rotator_session;
+
+ const char *comp_type = GetName(sdm_layer->composition);
+ const char *buffer_format = GetFormatString(input_buffer->format);
+ const char *pipe_split[2] = { "Pipe-1", "Pipe-2" };
+ char idx[8];
+
+ snprintf(idx, sizeof(idx), "%d", layer_index);
+
+ for (uint32_t count = 0; count < hw_rotator_session.hw_block_count; count++) {
+ char row[1024];
+ HWRotateInfo &rotate = hw_rotator_session.hw_rotate_info[count];
+ LayerRect &src_roi = rotate.src_roi;
+ LayerRect &dst_roi = rotate.dst_roi;
+ char rot[12] = { 0 };
+
+ snprintf(rot, sizeof(rot), "Rot-%s-%d", hw_rotator_session.mode == kRotatorInline ?
+ "inl" : "off", count + 1);
+
+ snprintf(row, sizeof(row), format, idx, comp_type, rot,
+ 0, input_buffer->width, input_buffer->height, buffer_format,
+ INT(src_roi.left), INT(src_roi.top), INT(src_roi.right), INT(src_roi.bottom),
+ INT(dst_roi.left), INT(dst_roi.top), INT(dst_roi.right), INT(dst_roi.bottom),
+ "-", "- ", "- ", "-", "-", "-");
+ os << row;
+ // print the below only once per layer block, fill with spaces for rest.
+ idx[0] = 0;
+ comp_type = "";
+ }
+
+ if (hw_rotator_session.hw_block_count > 0) {
+ input_buffer = &hw_rotator_session.output_buffer;
+ buffer_format = GetFormatString(input_buffer->format);
+ }
+
+ if (layer_config.use_solidfill_stage) {
+ LayerRect src_roi = layer_config.hw_solidfill_stage.roi;
+ const char *decimation = "";
+ char flags[16] = { 0 };
+ char z_order[8] = { 0 };
+ const char *color_primary = "";
+ const char *range = "";
+ const char *transfer = "";
+ char row[1024] = { 0 };
+
+ snprintf(z_order, sizeof(z_order), "%d", layer_config.hw_solidfill_stage.z_order);
+ snprintf(flags, sizeof(flags), "0x%08x", hw_layer.flags.flags);
+ snprintf(row, sizeof(row), format, idx, comp_type, pipe_split[0],
+ 0, INT(src_roi.right), INT(src_roi.bottom),
+ buffer_format, INT(src_roi.left), INT(src_roi.top),
+ INT(src_roi.right), INT(src_roi.bottom), INT(src_roi.left),
+ INT(src_roi.top), INT(src_roi.right), INT(src_roi.bottom),
+ z_order, flags, decimation, color_primary, range, transfer);
+ os << row;
+ continue;
+ }
+
+ for (uint32_t count = 0; count < 2; count++) {
+ char decimation[16] = { 0 };
+ char flags[16] = { 0 };
+ char z_order[8] = { 0 };
+ char color_primary[8] = { 0 };
+ char range[8] = { 0 };
+ char transfer[8] = { 0 };
+
+ HWPipeInfo &pipe = (count == 0) ? layer_config.left_pipe : layer_config.right_pipe;
+
+ if (!pipe.valid) {
+ continue;
+ }
+
+ LayerRect src_roi = pipe.src_roi;
+ LayerRect &dst_roi = pipe.dst_roi;
+ if (hw_rotator_session.mode == kRotatorInline) {
+ src_roi = hw_rotator_session.hw_rotate_info[count].dst_roi;
+ }
+
+ snprintf(z_order, sizeof(z_order), "%d", pipe.z_order);
+ snprintf(flags, sizeof(flags), "0x%08x", pipe.flags);
+ snprintf(decimation, sizeof(decimation), "%3d x %3d", pipe.horizontal_decimation,
+ pipe.vertical_decimation);
+ ColorMetaData &color_metadata = hw_layer.input_buffer.color_metadata;
+ snprintf(color_primary, sizeof(color_primary), "%d", color_metadata.colorPrimaries);
+ snprintf(range, sizeof(range), "%d", color_metadata.range);
+ snprintf(transfer, sizeof(transfer), "%d", color_metadata.transfer);
+
+ char row[1024];
+ snprintf(row, sizeof(row), format, idx, comp_type, pipe_split[count],
+ pipe.pipe_id, input_buffer->width, input_buffer->height,
+ buffer_format, INT(src_roi.left), INT(src_roi.top),
+ INT(src_roi.right), INT(src_roi.bottom), INT(dst_roi.left),
+ INT(dst_roi.top), INT(dst_roi.right), INT(dst_roi.bottom),
+ z_order, flags, decimation, color_primary, range, transfer);
+
+ os << row;
+ // print the below only once per layer block, fill with spaces for rest.
+ idx[0] = 0;
+ comp_type = "";
+ }
+ }
+
+ os << newline << "\n";
+
+ return os.str();
+}
+
+const char * DisplayBase::GetName(const LayerComposition &composition) {
+ switch (composition) {
+ case kCompositionGPU: return "GPU";
+ case kCompositionSDE: return "SDE";
+ case kCompositionCursor: return "CURSOR";
+ case kCompositionHybrid: return "HYBRID";
+ case kCompositionBlit: return "BLIT";
+ case kCompositionGPUTarget: return "GPU_TARGET";
+ case kCompositionBlitTarget: return "BLIT_TARGET";
+ default: return "UNKNOWN";
+ }
+}
+
+DisplayError DisplayBase::ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
+ PPDisplayAPIPayload *out_payload,
+ PPPendingParams *pending_action) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (color_mgr_)
+ return color_mgr_->ColorSVCRequestRoute(in_payload, out_payload, pending_action);
+ else
+ return kErrorParameters;
+}
+
+DisplayError DisplayBase::GetColorModeCount(uint32_t *mode_count) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!mode_count) {
+ return kErrorParameters;
+ }
+
+ if (!color_mgr_) {
+ return kErrorNotSupported;
+ }
+
+ DLOGV_IF(kTagQDCM, "Display = %d Number of modes from color manager = %d", display_type_,
+ num_color_modes_);
+
+ *mode_count = num_color_modes_;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetColorModes(uint32_t *mode_count,
+ std::vector<std::string> *color_modes) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!mode_count || !color_modes) {
+ return kErrorParameters;
+ }
+
+ if (!color_mgr_) {
+ return kErrorNotSupported;
+ }
+ uint32_t i = 0;
+ for (ColorModeAttrMap::iterator it = color_mode_attr_map_.begin();
+ ((i < num_color_modes_) && (it != color_mode_attr_map_.end())); i++, it++) {
+ DLOGI("ColorMode name = %s", it->first.c_str());
+ color_modes->at(i) = it->first.c_str();
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetColorModeAttr(const std::string &color_mode, AttrVal *attr) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!attr) {
+ return kErrorParameters;
+ }
+
+ if (!color_mgr_) {
+ return kErrorNotSupported;
+ }
+
+ auto it = color_mode_attr_map_.find(color_mode);
+ if (it == color_mode_attr_map_.end()) {
+ DLOGI("Mode %s has no attribute", color_mode.c_str());
+ return kErrorNotSupported;
+ }
+ *attr = it->second;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::SetColorMode(const std::string &color_mode) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!color_mgr_) {
+ return kErrorNotSupported;
+ }
+
+ DisplayError error = kErrorNone;
+ error = SetColorModeInternal(color_mode);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ std::string dynamic_range = kSdr;
+ if (IsSupportColorModeAttribute(color_mode)) {
+ auto it_mode = color_mode_attr_map_.find(color_mode);
+ GetValueOfModeAttribute(it_mode->second, kDynamicRangeAttribute, &dynamic_range);
+ }
+
+ comp_manager_->ControlDpps(dynamic_range != kHdr);
+
+ current_color_mode_ = color_mode;
+ PrimariesTransfer blend_space = {};
+ blend_space = GetBlendSpaceFromColorMode();
+ error = comp_manager_->SetBlendSpace(display_comp_ctx_, blend_space);
+ if (error != kErrorNone) {
+ DLOGE("SetBlendSpace failed, error = %d display_type_= %d", error, display_type_);
+ }
+
+ return error;
+}
+
+DisplayError DisplayBase::SetColorModeById(int32_t color_mode_id) {
+ return color_mgr_->ColorMgrSetMode(color_mode_id);
+}
+
+DisplayError DisplayBase::SetColorModeInternal(const std::string &color_mode) {
+ DLOGV_IF(kTagQDCM, "Color Mode = %s", color_mode.c_str());
+
+ ColorModeMap::iterator it = color_mode_map_.find(color_mode);
+ if (it == color_mode_map_.end()) {
+ DLOGE("Failed: Unknown Mode : %s", color_mode.c_str());
+ return kErrorNotSupported;
+ }
+
+ SDEDisplayMode *sde_display_mode = it->second;
+
+ DLOGV_IF(kTagQDCM, "Color Mode Name = %s corresponding mode_id = %d", sde_display_mode->name,
+ sde_display_mode->id);
+ DisplayError error = kErrorNone;
+ error = color_mgr_->ColorMgrSetMode(sde_display_mode->id);
+ if (error != kErrorNone) {
+ DLOGE("Failed for mode id = %d", sde_display_mode->id);
+ return error;
+ }
+
+ return error;
+}
+
+DisplayError DisplayBase::GetColorModeName(int32_t mode_id, std::string *mode_name) {
+ if (!mode_name) {
+ DLOGE("Invalid parameters");
+ return kErrorParameters;
+ }
+ for (uint32_t i = 0; i < num_color_modes_; i++) {
+ if (color_modes_[i].id == mode_id) {
+ *mode_name = color_modes_[i].name;
+ return kErrorNone;
+ }
+ }
+
+ DLOGE("Failed to get color mode name for mode id = %d", mode_id);
+ return kErrorUndefined;
+}
+
+DisplayError DisplayBase::GetValueOfModeAttribute(const AttrVal &attr, const std::string &type,
+ std::string *value) {
+ if (!value) {
+ return kErrorParameters;
+ }
+ for (auto &it : attr) {
+ if (it.first.find(type) != std::string::npos) {
+ *value = it.second;
+ }
+ }
+
+ return kErrorNone;
+}
+
+bool DisplayBase::IsSupportColorModeAttribute(const std::string &color_mode) {
+ auto it = color_mode_attr_map_.find(color_mode);
+ if (it == color_mode_attr_map_.end()) {
+ return false;
+ }
+ return true;
+}
+
+DisplayError DisplayBase::SetColorTransform(const uint32_t length, const double *color_transform) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!color_mgr_) {
+ return kErrorNotSupported;
+ }
+
+ if (!color_transform) {
+ return kErrorParameters;
+ }
+
+ return color_mgr_->ColorMgrSetColorTransform(length, color_transform);
+}
+
+DisplayError DisplayBase::GetDefaultColorMode(std::string *color_mode) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!color_mode) {
+ return kErrorParameters;
+ }
+
+ if (!color_mgr_) {
+ return kErrorNotSupported;
+ }
+
+ int32_t default_id = kInvalidModeId;
+ DisplayError error = color_mgr_->ColorMgrGetDefaultModeID(&default_id);
+ if (error != kErrorNone) {
+ DLOGE("Failed for get default color mode id");
+ return error;
+ }
+
+ for (uint32_t i = 0; i < num_color_modes_; i++) {
+ if (color_modes_[i].id == default_id) {
+ *color_mode = color_modes_[i].name;
+ return kErrorNone;
+ }
+ }
+
+ return kErrorNotSupported;
+}
+
+DisplayError DisplayBase::SetCursorPosition(int x, int y) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (state_ != kStateOn) {
+ return kErrorNotSupported;
+ }
+
+ DisplayError error = comp_manager_->ValidateAndSetCursorPosition(display_comp_ctx_, &hw_layers_,
+ x, y);
+ if (error == kErrorNone) {
+ return hw_intf_->SetCursorPosition(&hw_layers_, x, y);
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetRefreshRateRange(uint32_t *min_refresh_rate,
+ uint32_t *max_refresh_rate) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ // The min and max refresh rates will be same when the HWPanelInfo does not contain valid rates.
+ // Usually for secondary displays, command mode panels
+ HWDisplayAttributes display_attributes;
+ uint32_t active_index = 0;
+ hw_intf_->GetActiveConfig(&active_index);
+ DisplayError error = hw_intf_->GetDisplayAttributes(active_index, &display_attributes);
+ if (error) {
+ return error;
+ }
+
+ *min_refresh_rate = display_attributes.fps;
+ *max_refresh_rate = display_attributes.fps;
+
+ return error;
+}
+
+DisplayError DisplayBase::HandlePendingVSyncEnable(int32_t retire_fence) {
+ if (vsync_enable_pending_) {
+ // Retire fence signalling confirms that CRTC enabled, hence wait for retire fence before
+ // we enable vsync
+ buffer_sync_handler_->SyncWait(retire_fence);
+
+ DisplayError error = SetVSyncState(true /* enable */);
+ if (error != kErrorNone) {
+ return error;
+ }
+ vsync_enable_pending_ = false;
+ }
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::SetVSyncState(bool enable) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ if (state_ == kStateOff && enable) {
+ DLOGW("Can't enable vsync when display %d-%d is powered off!! Defer it when display is active",
+ display_id_, display_type_);
+ vsync_enable_pending_ = true;
+ return kErrorNone;
+ }
+ DisplayError error = kErrorNone;
+ if (vsync_enable_ != enable) {
+ error = hw_intf_->SetVSyncState(enable);
+ if (error == kErrorNotSupported) {
+ if (drop_skewed_vsync_ && (hw_panel_info_.mode == kModeVideo) &&
+ enable && (current_refresh_rate_ < hw_panel_info_.max_fps)) {
+ drop_hw_vsync_ = true;
+ }
+ error = hw_events_intf_->SetEventState(HWEvent::VSYNC, enable);
+ }
+ if (error == kErrorNone) {
+ vsync_enable_ = enable;
+ }
+ }
+ vsync_enable_pending_ = !enable ? false : vsync_enable_pending_;
+
+ return error;
+}
+
+DisplayError DisplayBase::ReconfigureDisplay() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+ HWDisplayAttributes display_attributes;
+ HWMixerAttributes mixer_attributes;
+ HWPanelInfo hw_panel_info;
+ uint32_t active_index = 0;
+
+ DTRACE_SCOPED();
+
+ error = hw_intf_->GetActiveConfig(&active_index);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = hw_intf_->GetDisplayAttributes(active_index, &display_attributes);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = hw_intf_->GetMixerAttributes(&mixer_attributes);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = hw_intf_->GetHWPanelInfo(&hw_panel_info);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ bool display_unchanged = (display_attributes == display_attributes_);
+ bool mixer_unchanged = (mixer_attributes == mixer_attributes_);
+ bool panel_unchanged = (hw_panel_info == hw_panel_info_);
+ if (display_unchanged && mixer_unchanged && panel_unchanged) {
+ return kErrorNone;
+ }
+
+ error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info,
+ mixer_attributes, fb_config_,
+ &(default_qos_data_.clock_hz));
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ bool disble_pu = true;
+ if (mixer_unchanged && panel_unchanged) {
+ // Do not disable Partial Update for one frame, if only FPS has changed.
+ // Because if first frame after transition, has a partial Frame-ROI and
+ // is followed by Skip Validate frames, then it can benefit those frames.
+ disble_pu = !display_attributes_.OnlyFpsChanged(display_attributes);
+ }
+
+ if (disble_pu) {
+ DisablePartialUpdateOneFrame();
+ }
+
+ display_attributes_ = display_attributes;
+ mixer_attributes_ = mixer_attributes;
+ hw_panel_info_ = hw_panel_info;
+ // TODO(user): Temporary changes, to be removed when DRM driver supports
+ // Partial update with Destination scaler enabled.
+ SetPUonDestScaler();
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::SetMixerResolution(uint32_t width, uint32_t height) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ DisplayError error = ReconfigureMixer(width, height);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ req_mixer_width_ = width;
+ req_mixer_height_ = height;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetMixerResolution(uint32_t *width, uint32_t *height) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!width || !height) {
+ return kErrorParameters;
+ }
+
+ *width = mixer_attributes_.width;
+ *height = mixer_attributes_.height;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::ReconfigureMixer(uint32_t width, uint32_t height) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+
+ DTRACE_SCOPED();
+ if (!width || !height) {
+ return kErrorParameters;
+ }
+
+ DLOGD_IF(kTagQDCM, "Reconfiguring mixer with width : %d, height : %d", width, height);
+ HWMixerAttributes mixer_attributes;
+ mixer_attributes.width = width;
+ mixer_attributes.height = height;
+
+ error = hw_intf_->SetMixerAttributes(mixer_attributes);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ return ReconfigureDisplay();
+}
+
+bool DisplayBase::NeedsDownScale(const LayerRect &src_rect, const LayerRect &dst_rect,
+ bool needs_rotation) {
+ float src_width = FLOAT(src_rect.right - src_rect.left);
+ float src_height = FLOAT(src_rect.bottom - src_rect.top);
+ float dst_width = FLOAT(dst_rect.right - dst_rect.left);
+ float dst_height = FLOAT(dst_rect.bottom - dst_rect.top);
+
+ if (needs_rotation) {
+ std::swap(src_width, src_height);
+ }
+
+ if ((src_width > dst_width) || (src_height > dst_height)) {
+ return true;
+ }
+
+ return false;
+}
+
+bool DisplayBase::NeedsMixerReconfiguration(LayerStack *layer_stack, uint32_t *new_mixer_width,
+ uint32_t *new_mixer_height) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ uint32_t mixer_width = mixer_attributes_.width;
+ uint32_t mixer_height = mixer_attributes_.height;
+
+ if (req_mixer_width_ && req_mixer_height_) {
+ DLOGD_IF(kTagDisplay, "Required mixer width : %d, height : %d",
+ req_mixer_width_, req_mixer_height_);
+ *new_mixer_width = req_mixer_width_;
+ *new_mixer_height = req_mixer_height_;
+ return (req_mixer_width_ != mixer_width || req_mixer_height_ != mixer_height);
+ }
+
+ if (!custom_mixer_resolution_) {
+ return false;
+ }
+
+ uint32_t layer_count = UINT32(layer_stack->layers.size());
+ uint32_t fb_width = fb_config_.x_pixels;
+ uint32_t fb_height = fb_config_.y_pixels;
+ uint32_t fb_area = fb_width * fb_height;
+ LayerRect fb_rect = (LayerRect) {0.0f, 0.0f, FLOAT(fb_width), FLOAT(fb_height)};
+ uint32_t display_width = display_attributes_.x_pixels;
+ uint32_t display_height = display_attributes_.y_pixels;
+
+ RectOrientation fb_orientation = GetOrientation(fb_rect);
+ uint32_t max_layer_area = 0;
+ uint32_t max_area_layer_index = 0;
+ std::vector<Layer *> layers = layer_stack->layers;
+ uint32_t align_x = display_attributes_.is_device_split ? 4 : 2;
+ uint32_t align_y = 2;
+
+ for (uint32_t i = 0; i < layer_count; i++) {
+ Layer *layer = layers.at(i);
+
+ uint32_t layer_width = UINT32(layer->src_rect.right - layer->src_rect.left);
+ uint32_t layer_height = UINT32(layer->src_rect.bottom - layer->src_rect.top);
+ uint32_t layer_area = layer_width * layer_height;
+
+ if (layer_area > max_layer_area) {
+ max_layer_area = layer_area;
+ max_area_layer_index = i;
+ }
+ }
+ DLOGV_IF(kTagDisplay, "Max area layer at index : %d", max_area_layer_index);
+
+ // TODO(user): Mark layer which needs downscaling on GPU fallback as priority layer and use MDP
+ // for composition to avoid quality mismatch between GPU and MDP switch(idle timeout usecase).
+ if (max_layer_area >= fb_area) {
+ Layer *layer = layers.at(max_area_layer_index);
+ bool needs_rotation = (layer->transform.rotation == 90.0f);
+
+ uint32_t layer_width = UINT32(layer->src_rect.right - layer->src_rect.left);
+ uint32_t layer_height = UINT32(layer->src_rect.bottom - layer->src_rect.top);
+ LayerRect layer_dst_rect = {};
+
+ RectOrientation layer_orientation = GetOrientation(layer->src_rect);
+ if (layer_orientation != kOrientationUnknown &&
+ fb_orientation != kOrientationUnknown) {
+ if (layer_orientation != fb_orientation) {
+ std::swap(layer_width, layer_height);
+ }
+ }
+
+ // Align the width and height according to fb's aspect ratio
+ *new_mixer_width = FloorToMultipleOf(UINT32((FLOAT(fb_width) / FLOAT(fb_height)) *
+ layer_height), align_x);
+ *new_mixer_height = FloorToMultipleOf(layer_height, align_y);
+
+ LayerRect dst_domain = {0.0f, 0.0f, FLOAT(*new_mixer_width), FLOAT(*new_mixer_height)};
+
+ MapRect(fb_rect, dst_domain, layer->dst_rect, &layer_dst_rect);
+ if (NeedsDownScale(layer->src_rect, layer_dst_rect, needs_rotation)) {
+ *new_mixer_width = display_width;
+ *new_mixer_height = display_height;
+ }
+ if (*new_mixer_width > display_width || *new_mixer_height > display_height) {
+ *new_mixer_width = display_width;
+ *new_mixer_height = display_height;
+ }
+ return ((*new_mixer_width != mixer_width) || (*new_mixer_height != mixer_height));
+ }
+
+ return false;
+}
+
+DisplayError DisplayBase::SetFrameBufferConfig(const DisplayConfigVariableInfo &variable_info) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ uint32_t width = variable_info.x_pixels;
+ uint32_t height = variable_info.y_pixels;
+
+ if (width == 0 || height == 0) {
+ DLOGE("Unsupported resolution: (%dx%d)", width, height);
+ return kErrorParameters;
+ }
+
+ // Create rects to represent the new source and destination crops
+ LayerRect crop = LayerRect(0, 0, FLOAT(width), FLOAT(height));
+ LayerRect dst = LayerRect(0, 0, FLOAT(mixer_attributes_.width), FLOAT(mixer_attributes_.height));
+ // Set rotate90 to false since this is taken care of during regular composition.
+ bool rotate90 = false;
+
+ DisplayError error = comp_manager_->ValidateScaling(crop, dst, rotate90);
+ if (error != kErrorNone) {
+ DLOGE("Unsupported resolution: (%dx%d)", width, height);
+ return kErrorParameters;
+ }
+
+ error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes_, hw_panel_info_,
+ mixer_attributes_, variable_info,
+ &(default_qos_data_.clock_hz));
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ fb_config_.x_pixels = width;
+ fb_config_.y_pixels = height;
+
+ DLOGI("New framebuffer resolution (%dx%d)", fb_config_.x_pixels, fb_config_.y_pixels);
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!variable_info) {
+ return kErrorParameters;
+ }
+
+ *variable_info = fb_config_;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::SetDetailEnhancerData(const DisplayDetailEnhancerData &de_data) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = comp_manager_->SetDetailEnhancerData(display_comp_ctx_, de_data);
+ if (error != kErrorNone) {
+ return error;
+ }
+ // TODO(user): Temporary changes, to be removed when DRM driver supports
+ // Partial update with Destination scaler enabled.
+ if (GetDriverType() == DriverType::DRM) {
+ if (de_data.enable) {
+ disable_pu_on_dest_scaler_ = true;
+ } else {
+ SetPUonDestScaler();
+ }
+ } else {
+ DisablePartialUpdateOneFrame();
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetDisplayPort(DisplayPort *port) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ if (!port) {
+ return kErrorParameters;
+ }
+
+ *port = hw_panel_info_.port;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetDisplayId(int32_t *display_id) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ if (!display_id) {
+ return kErrorParameters;
+ }
+
+ *display_id = display_id_;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetDisplayType(DisplayType *display_type) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ if (!display_type) {
+ return kErrorParameters;
+ }
+
+ *display_type = display_type_;
+
+ return kErrorNone;
+}
+
+bool DisplayBase::IsPrimaryDisplay() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ return hw_panel_info_.is_primary_panel;
+}
+
+DisplayError DisplayBase::SetCompositionState(LayerComposition composition_type, bool enable) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ return comp_manager_->SetCompositionState(display_comp_ctx_, composition_type, enable);
+}
+
+void DisplayBase::CommitLayerParams(LayerStack *layer_stack) {
+ // Copy the acquire fence from clients layers to HWLayers
+ uint32_t hw_layers_count = UINT32(hw_layers_.info.hw_layers.size());
+
+ for (uint32_t i = 0; i < hw_layers_count; i++) {
+ uint32_t sdm_layer_index = hw_layers_.info.index.at(i);
+ Layer *sdm_layer = layer_stack->layers.at(sdm_layer_index);
+ Layer &hw_layer = hw_layers_.info.hw_layers.at(i);
+
+ hw_layer.input_buffer.planes[0].fd = sdm_layer->input_buffer.planes[0].fd;
+ hw_layer.input_buffer.planes[0].offset = sdm_layer->input_buffer.planes[0].offset;
+ hw_layer.input_buffer.planes[0].stride = sdm_layer->input_buffer.planes[0].stride;
+ hw_layer.input_buffer.size = sdm_layer->input_buffer.size;
+ hw_layer.input_buffer.acquire_fence_fd = sdm_layer->input_buffer.acquire_fence_fd;
+ hw_layer.input_buffer.handle_id = sdm_layer->input_buffer.handle_id;
+ hw_layer.input_buffer.buffer_id = sdm_layer->input_buffer.buffer_id;
+ // TODO(user): Other FBT layer attributes like surface damage, dataspace, secure camera and
+ // secure display flags are also updated during SetClientTarget() called between validate and
+ // commit. Need to revist this and update it accordingly for FBT layer.
+ if (hw_layers_.info.gpu_target_index == sdm_layer_index) {
+ hw_layer.input_buffer.flags.secure = sdm_layer->input_buffer.flags.secure;
+ hw_layer.input_buffer.format = sdm_layer->input_buffer.format;
+ hw_layer.input_buffer.width = sdm_layer->input_buffer.width;
+ hw_layer.input_buffer.height = sdm_layer->input_buffer.height;
+ hw_layer.input_buffer.unaligned_width = sdm_layer->input_buffer.unaligned_width;
+ hw_layer.input_buffer.unaligned_height = sdm_layer->input_buffer.unaligned_height;
+ }
+ }
+
+ return;
+}
+
+void DisplayBase::PostCommitLayerParams(LayerStack *layer_stack) {
+ // Copy the release fence from HWLayers to clients layers
+ uint32_t hw_layers_count = UINT32(hw_layers_.info.hw_layers.size());
+
+ std::vector<uint32_t> fence_dup_flag;
+
+ for (uint32_t i = 0; i < hw_layers_count; i++) {
+ uint32_t sdm_layer_index = hw_layers_.info.index.at(i);
+ Layer *sdm_layer = layer_stack->layers.at(sdm_layer_index);
+ Layer &hw_layer = hw_layers_.info.hw_layers.at(i);
+
+ // Copy the release fence only once for a SDM Layer.
+ // In S3D use case, two hw layers can share the same input buffer, So make sure to merge the
+ // output fence fd and assign it to layer's input buffer release fence fd.
+ if (std::find(fence_dup_flag.begin(), fence_dup_flag.end(), sdm_layer_index) ==
+ fence_dup_flag.end()) {
+ sdm_layer->input_buffer.release_fence_fd = hw_layer.input_buffer.release_fence_fd;
+ fence_dup_flag.push_back(sdm_layer_index);
+ } else {
+ int temp = -1;
+ buffer_sync_handler_->SyncMerge(hw_layer.input_buffer.release_fence_fd,
+ sdm_layer->input_buffer.release_fence_fd, &temp);
+
+ if (hw_layer.input_buffer.release_fence_fd >= 0) {
+ Sys::close_(hw_layer.input_buffer.release_fence_fd);
+ hw_layer.input_buffer.release_fence_fd = -1;
+ }
+
+ if (sdm_layer->input_buffer.release_fence_fd >= 0) {
+ Sys::close_(sdm_layer->input_buffer.release_fence_fd);
+ sdm_layer->input_buffer.release_fence_fd = -1;
+ }
+
+ sdm_layer->input_buffer.release_fence_fd = temp;
+ }
+ }
+
+ return;
+}
+
+DisplayError DisplayBase::InitializeColorModes() {
+ if (!color_mgr_) {
+ return kErrorNotSupported;
+ }
+
+ DisplayError error = color_mgr_->ColorMgrGetNumOfModes(&num_color_modes_);
+ if (error != kErrorNone || !num_color_modes_) {
+ DLOGV_IF(kTagQDCM, "GetNumModes failed = %d count = %d", error, num_color_modes_);
+ return kErrorNotSupported;
+ }
+ DLOGI("Number of Color Modes = %d", num_color_modes_);
+
+ if (!color_modes_.size()) {
+ color_modes_.resize(num_color_modes_);
+
+ DisplayError error = color_mgr_->ColorMgrGetModes(&num_color_modes_, color_modes_.data());
+ if (error != kErrorNone) {
+ color_modes_.clear();
+ DLOGE("Failed");
+ return error;
+ }
+ int32_t default_id = kInvalidModeId;
+ error = color_mgr_->ColorMgrGetDefaultModeID(&default_id);
+
+ AttrVal var;
+ for (uint32_t i = 0; i < num_color_modes_; i++) {
+ DLOGV_IF(kTagQDCM, "Color Mode[%d]: Name = %s mode_id = %d", i, color_modes_[i].name,
+ color_modes_[i].id);
+ // get the name of default color mode
+ if (color_modes_[i].id == default_id) {
+ current_color_mode_ = color_modes_[i].name;
+ }
+ auto it = color_mode_map_.find(color_modes_[i].name);
+ if (it != color_mode_map_.end()) {
+ if (it->second->id < color_modes_[i].id) {
+ color_mode_map_.erase(it);
+ color_mode_map_.insert(std::make_pair(color_modes_[i].name, &color_modes_[i]));
+ }
+ } else {
+ color_mode_map_.insert(std::make_pair(color_modes_[i].name, &color_modes_[i]));
+ }
+
+ var.clear();
+ error = color_mgr_->ColorMgrGetModeInfo(color_modes_[i].id, &var);
+ if (error != kErrorNone) {
+ DLOGE("Failed for get attributes of mode_id = %d", color_modes_[i].id);
+ continue;
+ }
+ if (!var.empty()) {
+ auto it = color_mode_attr_map_.find(color_modes_[i].name);
+ if (it == color_mode_attr_map_.end()) {
+ color_mode_attr_map_.insert(std::make_pair(color_modes_[i].name, var));
+ // If target doesn't support SSPP tone maping and color mode is HDR,
+ // add bt2020pq and bt2020hlg color modes.
+ if (hw_resource_info_.src_tone_map.none() && IsHdrMode(var)) {
+ color_mode_map_.insert(std::make_pair(kBt2020Pq, &color_modes_[i]));
+ color_mode_map_.insert(std::make_pair(kBt2020Hlg, &color_modes_[i]));
+ InsertBT2020PqHlgModes();
+ }
+ }
+ std::vector<PrimariesTransfer> pt_list = {};
+ GetColorPrimaryTransferFromAttributes(var, &pt_list);
+ for (const PrimariesTransfer &pt : pt_list) {
+ if (std::find(color_modes_cs_.begin(), color_modes_cs_.end(), pt) ==
+ color_modes_cs_.end()) {
+ color_modes_cs_.push_back(pt);
+ }
+ }
+ }
+ }
+ PrimariesTransfer pt = {};
+ if (std::find(color_modes_cs_.begin(), color_modes_cs_.end(), pt) ==
+ color_modes_cs_.end()) {
+ color_modes_cs_.push_back(pt);
+ }
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data) {
+ if (!out_port || !out_data_size) {
+ return kErrorParameters;
+ }
+
+ return hw_intf_->GetDisplayIdentificationData(out_port, out_data_size, out_data);
+}
+
+DisplayError DisplayBase::GetClientTargetSupport(uint32_t width, uint32_t height,
+ LayerBufferFormat format,
+ const ColorMetaData &color_metadata) {
+ if (format != kFormatRGBA8888 && format != kFormatRGBA1010102) {
+ DLOGW("Unsupported format = %d", format);
+ return kErrorNotSupported;
+ } else if (ValidateScaling(width, height) != kErrorNone) {
+ DLOGW("Unsupported width = %d height = %d", width, height);
+ return kErrorNotSupported;
+ } else if (color_metadata.transfer && color_metadata.colorPrimaries) {
+ DisplayError error = ValidateDataspace(color_metadata);
+ if (error != kErrorNone) {
+ DLOGW("Unsupported Transfer Request = %d Color Primary = %d",
+ color_metadata.transfer, color_metadata.colorPrimaries);
+ return error;
+ }
+
+ // Check for BT2020 support
+ if (color_metadata.colorPrimaries == ColorPrimaries_BT2020) {
+ DLOGW("Unsupported Color Primary = %d", color_metadata.colorPrimaries);
+ return kErrorNotSupported;
+ }
+ }
+
+ return kErrorNone;
+}
+
+bool DisplayBase::IsSupportSsppTonemap() {
+ if (hw_resource_info_.src_tone_map.none()) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+DisplayError DisplayBase::ValidateScaling(uint32_t width, uint32_t height) {
+ uint32_t display_width = display_attributes_.x_pixels;
+ uint32_t display_height = display_attributes_.y_pixels;
+
+ float max_scale_down = FLOAT(hw_resource_info_.max_scale_down);
+ float max_scale_up = FLOAT(hw_resource_info_.max_scale_up);
+
+ float scale_x = FLOAT(width / display_width);
+ float scale_y = FLOAT(height / display_height);
+
+ if (scale_x > max_scale_down || scale_y > max_scale_down) {
+ return kErrorNotSupported;
+ }
+
+ if (UINT32(scale_x) < 1 && scale_x > 0.0f) {
+ if ((1.0f / scale_x) > max_scale_up) {
+ return kErrorNotSupported;
+ }
+ }
+
+ if (UINT32(scale_y) < 1 && scale_y > 0.0f) {
+ if ((1.0f / scale_y) > max_scale_up) {
+ return kErrorNotSupported;
+ }
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBase::ValidateDataspace(const ColorMetaData &color_metadata) {
+ // Handle transfer
+ switch (color_metadata.transfer) {
+ case Transfer_sRGB:
+ case Transfer_SMPTE_170M:
+ case Transfer_SMPTE_ST2084:
+ case Transfer_HLG:
+ case Transfer_Linear:
+ case Transfer_Gamma2_2:
+ break;
+ default:
+ DLOGW("Unsupported Transfer Request = %d", color_metadata.transfer);
+ return kErrorNotSupported;
+ }
+
+ // Handle colorPrimaries
+ switch (color_metadata.colorPrimaries) {
+ case ColorPrimaries_BT709_5:
+ case ColorPrimaries_BT601_6_525:
+ case ColorPrimaries_BT601_6_625:
+ case ColorPrimaries_DCIP3:
+ case ColorPrimaries_BT2020:
+ break;
+ default:
+ DLOGW("Unsupported Color Primary = %d", color_metadata.colorPrimaries);
+ return kErrorNotSupported;
+ }
+
+ return kErrorNone;
+}
+
+// TODO(user): Temporary changes, to be removed when DRM driver supports
+// Partial update with Destination scaler enabled.
+void DisplayBase::SetPUonDestScaler() {
+ if (GetDriverType() == DriverType::FB) {
+ return;
+ }
+ uint32_t mixer_width = mixer_attributes_.width;
+ uint32_t mixer_height = mixer_attributes_.height;
+ uint32_t display_width = display_attributes_.x_pixels;
+ uint32_t display_height = display_attributes_.y_pixels;
+
+ disable_pu_on_dest_scaler_ = (mixer_width != display_width ||
+ mixer_height != display_height);
+}
+
+void DisplayBase::ClearColorInfo() {
+ color_modes_.clear();
+ color_mode_map_.clear();
+ color_mode_attr_map_.clear();
+ color_modes_cs_.clear();
+
+ if (color_mgr_) {
+ delete color_mgr_;
+ color_mgr_ = NULL;
+ }
+}
+
+void DisplayBase::DeInitializeColorModes() {
+ color_mode_map_.clear();
+ color_modes_.clear();
+ color_mode_attr_map_.clear();
+ num_color_modes_ = 0;
+}
+
+void DisplayBase::GetColorPrimaryTransferFromAttributes(const AttrVal &attr,
+ std::vector<PrimariesTransfer> *supported_pt) {
+ std::string attribute_field = {};
+ if (attr.empty()) {
+ return;
+ }
+
+ for (auto &it : attr) {
+ if ((it.first.find(kColorGamutAttribute) != std::string::npos) ||
+ (it.first.find(kDynamicRangeAttribute) != std::string::npos)) {
+ attribute_field = it.second;
+ PrimariesTransfer pt = {};
+ pt.primaries = GetColorPrimariesFromAttribute(attribute_field);
+ if (pt.primaries == ColorPrimaries_BT709_5) {
+ pt.transfer = Transfer_sRGB;
+ supported_pt->push_back(pt);
+ } else if (pt.primaries == ColorPrimaries_DCIP3) {
+ pt.transfer = Transfer_sRGB;
+ supported_pt->push_back(pt);
+ } else if (pt.primaries == ColorPrimaries_BT2020) {
+ pt.transfer = Transfer_SMPTE_ST2084;
+ supported_pt->push_back(pt);
+ pt.transfer = Transfer_HLG;
+ supported_pt->push_back(pt);
+ }
+ }
+ }
+}
+
+void DisplayBase::HwRecovery(const HWRecoveryEvent sdm_event_code) {
+ DLOGI("Handling event = %" PRIu32, sdm_event_code);
+ if (DisplayPowerResetPending()) {
+ DLOGI("Skipping handling for display = %d, display power reset in progress", display_type_);
+ return;
+ }
+ switch (sdm_event_code) {
+ case HWRecoveryEvent::kSuccess:
+ hw_recovery_logs_captured_ = false;
+ break;
+ case HWRecoveryEvent::kCapture:
+ if (!disable_hw_recovery_dump_ && !hw_recovery_logs_captured_) {
+ hw_intf_->DumpDebugData();
+ hw_recovery_logs_captured_ = true;
+ DLOGI("Captured debugfs data for display = %d", display_type_);
+ } else if (!disable_hw_recovery_dump_) {
+ DLOGI("Multiple capture events without intermediate success event, skipping debugfs"
+ "capture for display = %d", display_type_);
+ } else {
+ DLOGI("Debugfs data dumping is disabled for display = %d", display_type_);
+ }
+ break;
+ case HWRecoveryEvent::kDisplayPowerReset:
+ DLOGI("display = %d attempting to start display power reset", display_type_);
+ if (StartDisplayPowerReset()) {
+ DLOGI("display = %d allowed to start display power reset", display_type_);
+ event_handler_->HandleEvent(kDisplayPowerResetEvent);
+ EndDisplayPowerReset();
+ DLOGI("display = %d has finished display power reset", display_type_);
+ }
+ break;
+ default:
+ return;
+ }
+}
+
+bool DisplayBase::DisplayPowerResetPending() {
+ SCOPE_LOCK(display_power_reset_lock_);
+ return display_power_reset_pending_;
+}
+
+bool DisplayBase::StartDisplayPowerReset() {
+ SCOPE_LOCK(display_power_reset_lock_);
+ if (!display_power_reset_pending_) {
+ display_power_reset_pending_ = true;
+ return true;
+ }
+ return false;
+}
+
+void DisplayBase::EndDisplayPowerReset() {
+ SCOPE_LOCK(display_power_reset_lock_);
+ display_power_reset_pending_ = false;
+}
+
+bool DisplayBase::SetHdrModeAtStart(LayerStack *layer_stack) {
+ return (hw_resource_info_.src_tone_map.none() && layer_stack->flags.hdr_present);
+}
+
+PrimariesTransfer DisplayBase::GetBlendSpaceFromColorMode() {
+ PrimariesTransfer pt = {};
+ auto current_color_attr_ = color_mode_attr_map_.find(current_color_mode_);
+ AttrVal attr = current_color_attr_->second;
+ std::string color_gamut = kNative, dynamic_range = kSdr, pic_quality = kStandard;
+ std::string transfer = {};
+
+ if (attr.begin() != attr.end()) {
+ for (auto &it : attr) {
+ if (it.first.find(kColorGamutAttribute) != std::string::npos) {
+ color_gamut = it.second;
+ } else if (it.first.find(kDynamicRangeAttribute) != std::string::npos) {
+ dynamic_range = it.second;
+ } else if (it.first.find(kPictureQualityAttribute) != std::string::npos) {
+ pic_quality = it.second;
+ } else if (it.first.find(kGammaTransferAttribute) != std::string::npos) {
+ transfer = it.second;
+ }
+ }
+ }
+ // TODO(user): Check is if someone calls with hal_display_p3
+ if (hw_resource_info_.src_tone_map.none() &&
+ (pic_quality == kStandard && color_gamut == kBt2020)) {
+ pt.primaries = GetColorPrimariesFromAttribute(color_gamut);
+ if (transfer == kHlg) {
+ pt.transfer = Transfer_HLG;
+ } else {
+ pt.transfer = Transfer_SMPTE_ST2084;
+ }
+ } else if (color_gamut == kDcip3) {
+ pt.primaries = GetColorPrimariesFromAttribute(color_gamut);
+ pt.transfer = Transfer_sRGB;
+ }
+
+ return pt;
+}
+
+void DisplayBase::InsertBT2020PqHlgModes() {
+ AttrVal hdr_var = {};
+ hdr_var.push_back(std::make_pair(kColorGamutAttribute, kBt2020));
+ hdr_var.push_back(std::make_pair(kPictureQualityAttribute, kStandard));
+ hdr_var.push_back(std::make_pair(kGammaTransferAttribute, kSt2084));
+ color_mode_attr_map_.insert(std::make_pair(kBt2020Pq, hdr_var));
+ hdr_var.pop_back();
+ hdr_var.push_back(std::make_pair(kGammaTransferAttribute, kHlg));
+ color_mode_attr_map_.insert(std::make_pair(kBt2020Hlg, hdr_var));
+
+ return;
+}
+
+bool DisplayBase::IsHdrMode(const AttrVal &attr) {
+ std::string color_gamut, dynamic_range;
+ GetValueOfModeAttribute(attr, kColorGamutAttribute, &color_gamut);
+ GetValueOfModeAttribute(attr, kDynamicRangeAttribute, &dynamic_range);
+ if (color_gamut == kDcip3 && dynamic_range == kHdr) {
+ return true;
+ }
+
+ return false;
+}
+
+bool DisplayBase::CanSkipValidate() {
+ return comp_manager_->CanSkipValidate(display_comp_ctx_) && !lut_swap_;
+}
+
+void DisplayBase::SetLutSwapFlag() {
+ uint32_t hw_layer_count = UINT32(hw_layers_.info.hw_layers.size());
+ for (uint32_t i = 0; i < hw_layer_count; i++) {
+ HWPipeInfo *left_pipe = &hw_layers_.config[i].left_pipe;
+ HWPipeInfo *right_pipe = &hw_layers_.config[i].right_pipe;
+ for (uint32_t count = 0; count < 2; count++) {
+ HWPipeInfo *pipe_info = (count == 0) ? left_pipe : right_pipe;
+ if (!pipe_info->valid || !pipe_info->scale_data.lut_flag.lut_swap) {
+ continue;
+ }
+ lut_swap_ = true;
+ return;
+ }
+ }
+
+ // No pipe needs lut swap.
+ lut_swap_ = false;
+ return;
+}
+
+DisplayError DisplayBase::HandlePendingPowerState(int32_t retire_fence) {
+ if (pending_doze_ || pending_power_on_) {
+ // Retire fence signalling confirms that CRTC enabled, hence wait for retire fence before
+ // we enable vsync
+ buffer_sync_handler_->SyncWait(retire_fence);
+
+ if (pending_doze_) {
+ state_ = kStateDoze;
+ DisplayError error = ReconfigureDisplay();
+ if (error != kErrorNone) {
+ return error;
+ }
+ event_handler_->Refresh();
+ }
+ if (pending_power_on_) {
+ state_ = kStateOn;
+ }
+ active_ = true;
+
+ pending_doze_ = false;
+ pending_power_on_ = false;
+ }
+ return kErrorNone;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/display_base.h b/sdm/libs/core/display_base.h
new file mode 100644
index 0000000..d18d4a4
--- /dev/null
+++ b/sdm/libs/core/display_base.h
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __DISPLAY_BASE_H__
+#define __DISPLAY_BASE_H__
+
+#include <core/display_interface.h>
+#include <private/strategy_interface.h>
+#include <private/color_interface.h>
+
+#include <map>
+#include <mutex>
+#include <string>
+#include <vector>
+
+#include "hw_interface.h"
+#include "comp_manager.h"
+#include "color_manager.h"
+#include "hw_events_interface.h"
+
+namespace sdm {
+
+using std::recursive_mutex;
+using std::lock_guard;
+
+class DisplayBase : public DisplayInterface {
+ public:
+ DisplayBase(DisplayType display_type, DisplayEventHandler *event_handler,
+ HWDeviceType hw_device_type, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager,
+ HWInfoInterface *hw_info_intf);
+ DisplayBase(int32_t display_id, DisplayType display_type, DisplayEventHandler *event_handler,
+ HWDeviceType hw_device_type, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager,
+ HWInfoInterface *hw_info_intf);
+ virtual ~DisplayBase() { }
+ virtual DisplayError Init();
+ virtual DisplayError Deinit();
+ DisplayError Prepare(LayerStack *layer_stack);
+ DisplayError Commit(LayerStack *layer_stack);
+ virtual DisplayError Flush(LayerStack *layer_stack);
+ virtual DisplayError GetDisplayState(DisplayState *state);
+ virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
+ virtual DisplayError GetConfig(uint32_t index, DisplayConfigVariableInfo *variable_info);
+ virtual DisplayError GetConfig(DisplayConfigFixedInfo *variable_info);
+ virtual DisplayError GetActiveConfig(uint32_t *index);
+ virtual DisplayError GetVSyncState(bool *enabled);
+ virtual DisplayError SetDisplayState(DisplayState state, bool teardown,
+ int *release_fence);
+ virtual DisplayError SetActiveConfig(uint32_t index);
+ virtual DisplayError SetActiveConfig(DisplayConfigVariableInfo *variable_info) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetMaxMixerStages(uint32_t max_mixer_stages);
+ virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError DisablePartialUpdateOneFrame() {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetDisplayMode(uint32_t mode) {
+ return kErrorNotSupported;
+ }
+ virtual bool IsUnderscanSupported() {
+ return false;
+ }
+ virtual DisplayError SetPanelBrightness(float brightness) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
+ PPDisplayAPIPayload *out_payload,
+ PPPendingParams *pending_action);
+ virtual DisplayError SetDynamicDSIClock(uint64_t bit_clk_rate) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError GetDynamicDSIClock(uint64_t *bit_clk_rate) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError GetSupportedDSIClock(std::vector<uint64_t> *bitclk_rates) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetPanelLuminanceAttributes(float min_lum, float max_lum) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError GetColorModeCount(uint32_t *mode_count);
+ virtual DisplayError GetColorModes(uint32_t *mode_count, std::vector<std::string> *color_modes);
+ virtual DisplayError GetColorModeAttr(const std::string &color_mode, AttrVal *attr);
+ virtual DisplayError SetColorMode(const std::string &color_mode);
+ virtual DisplayError SetColorModeById(int32_t color_mode_id);
+ virtual DisplayError GetColorModeName(int32_t mode_id, std::string *mode_name);
+ virtual DisplayError SetColorTransform(const uint32_t length, const double *color_transform);
+ virtual DisplayError GetDefaultColorMode(std::string *color_mode);
+ virtual DisplayError SetCursorPosition(int x, int y);
+ virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
+ virtual DisplayError GetPanelBrightness(float *brightness) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetVSyncState(bool enable);
+ virtual void SetIdleTimeoutMs(uint32_t active_ms) {}
+ virtual DisplayError SetMixerResolution(uint32_t width, uint32_t height);
+ virtual DisplayError GetMixerResolution(uint32_t *width, uint32_t *height);
+ virtual DisplayError SetFrameBufferConfig(const DisplayConfigVariableInfo &variable_info);
+ virtual DisplayError GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info);
+ virtual DisplayError SetDetailEnhancerData(const DisplayDetailEnhancerData &de_data);
+ virtual DisplayError GetDisplayPort(DisplayPort *port);
+ virtual DisplayError GetDisplayId(int32_t *display_id);
+ virtual DisplayError GetDisplayType(DisplayType *display_type);
+ virtual bool IsPrimaryDisplay();
+ virtual DisplayError SetCompositionState(LayerComposition composition_type, bool enable);
+ virtual DisplayError GetClientTargetSupport(uint32_t width, uint32_t height,
+ LayerBufferFormat format,
+ const ColorMetaData &color_metadata);
+ virtual DisplayError HandleSecureEvent(SecureEvent secure_event, LayerStack *layer_stack) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetDisplayDppsAdROI(void *payload) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetQSyncMode(QSyncMode qsync_mode) { return kErrorNotSupported; }
+ virtual std::string Dump();
+ virtual DisplayError InitializeColorModes();
+ virtual DisplayError ControlIdlePowerCollapse(bool enable, bool synchronous) {
+ return kErrorNotSupported;
+ }
+ virtual bool IsSupportSsppTonemap();
+ virtual DisplayError GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data);
+ virtual bool CanSkipValidate();
+ virtual DisplayError GetRefreshRate(uint32_t *refresh_rate) { return kErrorNotSupported; }
+ virtual DisplayError ReconfigureDisplay();
+
+ protected:
+ const char *kBt2020Pq = "bt2020_pq";
+ const char *kBt2020Hlg = "bt2020_hlg";
+ DisplayError BuildLayerStackStats(LayerStack *layer_stack);
+ virtual DisplayError ValidateGPUTargetParams();
+ void CommitLayerParams(LayerStack *layer_stack);
+ void PostCommitLayerParams(LayerStack *layer_stack);
+ DisplayError ValidateScaling(uint32_t width, uint32_t height);
+ DisplayError ValidateDataspace(const ColorMetaData &color_metadata);
+ void HwRecovery(const HWRecoveryEvent sdm_event_code);
+
+ const char *GetName(const LayerComposition &composition);
+ bool NeedsMixerReconfiguration(LayerStack *layer_stack, uint32_t *new_mixer_width,
+ uint32_t *new_mixer_height);
+ DisplayError ReconfigureMixer(uint32_t width, uint32_t height);
+ bool NeedsDownScale(const LayerRect &src_rect, const LayerRect &dst_rect, bool needs_rotation);
+ void DeInitializeColorModes();
+ DisplayError SetColorModeInternal(const std::string &color_mode);
+ DisplayError GetValueOfModeAttribute(const AttrVal &attr, const std::string &type,
+ std::string *value);
+ bool IsSupportColorModeAttribute(const std::string &color_mode);
+ void SetPUonDestScaler();
+ void ClearColorInfo();
+ void GetColorPrimaryTransferFromAttributes(const AttrVal &attr,
+ std::vector<PrimariesTransfer> *supported_pt);
+ bool DisplayPowerResetPending();
+ bool SetHdrModeAtStart(LayerStack *layer_stack);
+ PrimariesTransfer GetBlendSpaceFromColorMode();
+ bool IsHdrMode(const AttrVal &attr);
+ void InsertBT2020PqHlgModes();
+ DisplayError HandlePendingVSyncEnable(int32_t retire_fence);
+ DisplayError HandlePendingPowerState(int32_t retire_fence);
+
+ recursive_mutex recursive_mutex_;
+ int32_t display_id_ = -1;
+ DisplayType display_type_;
+ DisplayEventHandler *event_handler_ = NULL;
+ HWDeviceType hw_device_type_;
+ HWInterface *hw_intf_ = NULL;
+ HWPanelInfo hw_panel_info_;
+ HWResourceInfo hw_resource_info_ = {};
+ BufferSyncHandler *buffer_sync_handler_ = NULL;
+ BufferAllocator *buffer_allocator_ {};
+ CompManager *comp_manager_ = NULL;
+ DisplayState state_ = kStateOff;
+ bool active_ = false;
+ Handle hw_device_ = 0;
+ Handle display_comp_ctx_ = 0;
+ HWLayers hw_layers_;
+ bool needs_validate_ = true;
+ bool vsync_enable_ = false;
+ uint32_t max_mixer_stages_ = 0;
+ HWInfoInterface *hw_info_intf_ = NULL;
+ ColorManagerProxy *color_mgr_ = NULL; // each display object owns its ColorManagerProxy
+ bool partial_update_control_ = true;
+ HWEventsInterface *hw_events_intf_ = NULL;
+ bool disable_pu_one_frame_ = false;
+ // TODO(user): Temporary changes, to be removed when DRM driver supports
+ // Partial update with Destination scaler enabled.
+ bool disable_pu_on_dest_scaler_ = false;
+ uint32_t num_color_modes_ = 0;
+ std::vector<SDEDisplayMode> color_modes_;
+ typedef std::map<std::string, SDEDisplayMode *> ColorModeMap;
+ ColorModeMap color_mode_map_ = {};
+ typedef std::map<std::string, AttrVal> ColorModeAttrMap;
+ ColorModeAttrMap color_mode_attr_map_ = {};
+ std::vector<PrimariesTransfer> color_modes_cs_ = {}; // Gamut+Gamma(color space) of color mode
+ HWDisplayAttributes display_attributes_ = {};
+ HWMixerAttributes mixer_attributes_ = {};
+ DisplayConfigVariableInfo fb_config_ = {};
+ uint32_t req_mixer_width_ = 0;
+ uint32_t req_mixer_height_ = 0;
+ std::string current_color_mode_ = "hal_native";
+ int disable_hdr_lut_gen_ = 0;
+ bool hw_recovery_logs_captured_ = false;
+ int disable_hw_recovery_dump_ = 0;
+ HWQosData default_qos_data_;
+ bool drop_hw_vsync_ = false;
+ uint32_t current_refresh_rate_ = 0;
+ bool drop_skewed_vsync_ = false;
+ bool custom_mixer_resolution_ = false;
+ bool vsync_enable_pending_ = false;
+ QSyncMode qsync_mode_ = kQSyncModeNone;
+ bool needs_avr_update_ = false;
+ bool safe_mode_in_fast_path_ = false;
+ bool pending_doze_ = false;
+ bool pending_power_on_ = false;
+
+ static Locker display_power_reset_lock_;
+ static bool display_power_reset_pending_;
+
+ private:
+ bool StartDisplayPowerReset();
+ void EndDisplayPowerReset();
+ void SetLutSwapFlag();
+ bool lut_swap_ = false;
+};
+
+} // namespace sdm
+
+#endif // __DISPLAY_BASE_H__
diff --git a/sdm/libs/core/display_builtin.cpp b/sdm/libs/core/display_builtin.cpp
new file mode 100644
index 0000000..2bd9004
--- /dev/null
+++ b/sdm/libs/core/display_builtin.cpp
@@ -0,0 +1,1004 @@
+/*
+* Copyright (c) 2014 - 2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/rect.h>
+#include <utils/utils.h>
+
+#include <algorithm>
+#include <functional>
+#include <map>
+#include <string>
+#include <vector>
+
+#include "display_builtin.h"
+#include "hw_info_interface.h"
+#include "hw_interface.h"
+
+#define __CLASS__ "DisplayBuiltIn"
+
+namespace sdm {
+
+DisplayBuiltIn::DisplayBuiltIn(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager)
+ : DisplayBase(kBuiltIn, event_handler, kDeviceBuiltIn, buffer_sync_handler, buffer_allocator,
+ comp_manager, hw_info_intf) {}
+
+DisplayBuiltIn::DisplayBuiltIn(int32_t display_id, DisplayEventHandler *event_handler,
+ HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager)
+ : DisplayBase(display_id, kBuiltIn, event_handler, kDeviceBuiltIn, buffer_sync_handler,
+ buffer_allocator, comp_manager, hw_info_intf) {}
+
+DisplayBuiltIn::~DisplayBuiltIn() {
+ CloseFd(&previous_retire_fence_);
+}
+
+DisplayError DisplayBuiltIn::Init() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ DisplayError error = HWInterface::Create(display_id_, kBuiltIn, hw_info_intf_,
+ buffer_sync_handler_, buffer_allocator_, &hw_intf_);
+ if (error != kErrorNone) {
+ DLOGE("Failed to create hardware interface on. Error = %d", error);
+ return error;
+ }
+
+ if (-1 == display_id_) {
+ hw_intf_->GetDisplayId(&display_id_);
+ }
+
+ error = DisplayBase::Init();
+ if (error != kErrorNone) {
+ HWInterface::Destroy(hw_intf_);
+ return error;
+ }
+
+ if (hw_panel_info_.mode == kModeCommand && Debug::IsVideoModeEnabled()) {
+ error = hw_intf_->SetDisplayMode(kModeVideo);
+ if (error != kErrorNone) {
+ DLOGW("Retaining current display mode. Current = %d, Requested = %d", hw_panel_info_.mode,
+ kModeVideo);
+ }
+ }
+
+ if (hw_panel_info_.mode == kModeCommand) {
+ event_list_ = {HWEvent::VSYNC,
+ HWEvent::EXIT,
+ HWEvent::IDLE_NOTIFY,
+ HWEvent::SHOW_BLANK_EVENT,
+ HWEvent::THERMAL_LEVEL,
+ HWEvent::IDLE_POWER_COLLAPSE,
+ HWEvent::PINGPONG_TIMEOUT,
+ HWEvent::PANEL_DEAD,
+ HWEvent::HW_RECOVERY};
+ } else {
+ event_list_ = {HWEvent::VSYNC, HWEvent::EXIT,
+ HWEvent::IDLE_NOTIFY, HWEvent::SHOW_BLANK_EVENT,
+ HWEvent::THERMAL_LEVEL, HWEvent::PINGPONG_TIMEOUT,
+ HWEvent::PANEL_DEAD, HWEvent::HW_RECOVERY};
+ }
+
+ avr_prop_disabled_ = Debug::IsAVRDisabled();
+
+ error = HWEventsInterface::Create(display_id_, kBuiltIn, this, event_list_, hw_intf_,
+ &hw_events_intf_);
+ if (error != kErrorNone) {
+ DisplayBase::Deinit();
+ HWInterface::Destroy(hw_intf_);
+ DLOGE("Failed to create hardware events interface on. Error = %d", error);
+ }
+
+ current_refresh_rate_ = hw_panel_info_.max_fps;
+
+ int value = 0;
+ Debug::Get()->GetProperty(DEFER_FPS_FRAME_COUNT, &value);
+ deferred_config_.frame_count = (value > 0) ? UINT32(value) : 0;
+
+ return error;
+}
+
+DisplayError DisplayBuiltIn::Deinit() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ dpps_info_.Deinit();
+ return DisplayBase::Deinit();
+}
+
+DisplayError DisplayBuiltIn::Prepare(LayerStack *layer_stack) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+ uint32_t new_mixer_width = 0;
+ uint32_t new_mixer_height = 0;
+ uint32_t display_width = display_attributes_.x_pixels;
+ uint32_t display_height = display_attributes_.y_pixels;
+
+ DTRACE_SCOPED();
+ if (NeedsMixerReconfiguration(layer_stack, &new_mixer_width, &new_mixer_height)) {
+ error = ReconfigureMixer(new_mixer_width, new_mixer_height);
+ if (error != kErrorNone) {
+ ReconfigureMixer(display_width, display_height);
+ }
+ } else {
+ if (CanSkipDisplayPrepare(layer_stack)) {
+ hw_layers_.hw_avr_info.update = needs_avr_update_;
+ hw_layers_.hw_avr_info.mode = GetAvrMode(qsync_mode_);
+ return kErrorNone;
+ }
+ }
+
+ // Clean hw layers for reuse.
+ DTRACE_BEGIN("PrepareHWLayers");
+ hw_layers_ = HWLayers();
+ DTRACE_END();
+
+ hw_layers_.hw_avr_info.update = needs_avr_update_;
+ hw_layers_.hw_avr_info.mode = GetAvrMode(qsync_mode_);
+
+ left_frame_roi_ = {};
+ right_frame_roi_ = {};
+
+ error = DisplayBase::Prepare(layer_stack);
+
+ // Cache the Frame ROI.
+ if (error == kErrorNone) {
+ if (hw_layers_.info.left_frame_roi.size() && hw_layers_.info.right_frame_roi.size()) {
+ left_frame_roi_ = hw_layers_.info.left_frame_roi.at(0);
+ right_frame_roi_ = hw_layers_.info.right_frame_roi.at(0);
+ }
+ }
+
+ return error;
+}
+
+HWAVRModes DisplayBuiltIn::GetAvrMode(QSyncMode mode) {
+ switch (mode) {
+ case kQSyncModeNone:
+ return kQsyncNone;
+ case kQSyncModeContinuous:
+ return kContinuousMode;
+ case kQsyncModeOneShot:
+ case kQsyncModeOneShotContinuous:
+ return kOneShotMode;
+ default:
+ return kQsyncNone;
+ }
+}
+
+DisplayError DisplayBuiltIn::Commit(LayerStack *layer_stack) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+ uint32_t app_layer_count = hw_layers_.info.app_layer_count;
+ HWDisplayMode panel_mode = hw_panel_info_.mode;
+
+ DTRACE_SCOPED();
+
+ // Enabling auto refresh is async and needs to happen before commit ioctl
+ if (hw_panel_info_.mode == kModeCommand) {
+ bool enable = (app_layer_count == 1) && layer_stack->flags.single_buffered_layer_present;
+ bool need_refresh = layer_stack->flags.single_buffered_layer_present && (app_layer_count > 1);
+
+ hw_intf_->SetAutoRefresh(enable);
+ if (need_refresh) {
+ event_handler_->Refresh();
+ }
+ }
+
+ if (vsync_enable_) {
+ DTRACE_BEGIN("RegisterVsync");
+ // wait for previous frame's retire fence to signal.
+ buffer_sync_handler_->SyncWait(previous_retire_fence_);
+
+ // Register for vsync and then commit the frame.
+ hw_events_intf_->SetEventState(HWEvent::VSYNC, true);
+ DTRACE_END();
+ }
+
+ error = DisplayBase::Commit(layer_stack);
+ if (error != kErrorNone) {
+ return error;
+ }
+ if (pending_brightness_) {
+ buffer_sync_handler_->SyncWait(layer_stack->retire_fence_fd);
+ SetPanelBrightness(cached_brightness_);
+ pending_brightness_ = false;
+ }
+
+ if (commit_event_enabled_) {
+ dpps_info_.DppsNotifyOps(kDppsCommitEvent, &display_type_, sizeof(display_type_));
+ }
+
+ deferred_config_.UpdateDeferCount();
+
+ ReconfigureDisplay();
+
+ if (deferred_config_.CanApplyDeferredState()) {
+ event_handler_->HandleEvent(kInvalidateDisplay);
+ deferred_config_.Clear();
+ }
+
+ int idle_time_ms = hw_layers_.info.set_idle_time_ms;
+ if (idle_time_ms >= 0) {
+ hw_intf_->SetIdleTimeoutMs(UINT32(idle_time_ms));
+ }
+
+ if (switch_to_cmd_) {
+ uint32_t pending;
+ switch_to_cmd_ = false;
+ ControlPartialUpdate(true /* enable */, &pending);
+ }
+
+ if (panel_mode != hw_panel_info_.mode) {
+ UpdateDisplayModeParams();
+ }
+ dpps_info_.Init(this, hw_panel_info_.panel_name);
+
+ if (qsync_mode_ == kQsyncModeOneShot) {
+ // Reset qsync mode.
+ SetQSyncMode(kQSyncModeNone);
+ } else if (qsync_mode_ == kQsyncModeOneShotContinuous) {
+ // No action needed.
+ } else if (qsync_mode_ == kQSyncModeContinuous) {
+ needs_avr_update_ = false;
+ } else if (qsync_mode_ == kQSyncModeNone) {
+ needs_avr_update_ = false;
+ }
+
+ first_cycle_ = false;
+
+ CloseFd(&previous_retire_fence_);
+ previous_retire_fence_ = Sys::dup_(layer_stack->retire_fence_fd);
+
+ return error;
+}
+
+void DisplayBuiltIn::UpdateDisplayModeParams() {
+ if (hw_panel_info_.mode == kModeVideo) {
+ uint32_t pending = 0;
+ ControlPartialUpdate(false /* enable */, &pending);
+ } else if (hw_panel_info_.mode == kModeCommand) {
+ // Flush idle timeout value currently set.
+ comp_manager_->SetIdleTimeoutMs(display_comp_ctx_, 0);
+ switch_to_cmd_ = true;
+ }
+}
+
+DisplayError DisplayBuiltIn::SetDisplayState(DisplayState state, bool teardown,
+ int *release_fence) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+ HWDisplayMode panel_mode = hw_panel_info_.mode;
+
+ if ((state == kStateOn) && deferred_config_.IsDeferredState()) {
+ SetDeferredFpsConfig();
+ }
+
+ error = DisplayBase::SetDisplayState(state, teardown, release_fence);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ if (hw_panel_info_.mode != panel_mode) {
+ UpdateDisplayModeParams();
+ }
+
+ // Set vsync enable state to false, as driver disables vsync during display power off.
+ if (state == kStateOff) {
+ vsync_enable_ = false;
+ }
+
+ if (pending_doze_ || pending_power_on_) {
+ event_handler_->Refresh();
+ }
+
+ return kErrorNone;
+}
+
+void DisplayBuiltIn::SetIdleTimeoutMs(uint32_t active_ms) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ comp_manager_->SetIdleTimeoutMs(display_comp_ctx_, active_ms);
+}
+
+DisplayError DisplayBuiltIn::SetDisplayMode(uint32_t mode) {
+ DisplayError error = kErrorNone;
+
+ // Limit scope of mutex to this block
+ {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ HWDisplayMode hw_display_mode = static_cast<HWDisplayMode>(mode);
+ uint32_t pending = 0;
+
+ if (!active_) {
+ DLOGW("Invalid display state = %d. Panel must be on.", state_);
+ return kErrorNotSupported;
+ }
+
+ if (hw_display_mode != kModeCommand && hw_display_mode != kModeVideo) {
+ DLOGW("Invalid panel mode parameters. Requested = %d", hw_display_mode);
+ return kErrorParameters;
+ }
+
+ if (hw_display_mode == hw_panel_info_.mode) {
+ DLOGW("Same display mode requested. Current = %d, Requested = %d", hw_panel_info_.mode,
+ hw_display_mode);
+ return kErrorNone;
+ }
+
+ error = hw_intf_->SetDisplayMode(hw_display_mode);
+ if (error != kErrorNone) {
+ DLOGW("Retaining current display mode. Current = %d, Requested = %d", hw_panel_info_.mode,
+ hw_display_mode);
+ return error;
+ }
+
+ DisplayBase::ReconfigureDisplay();
+
+ if (mode == kModeVideo) {
+ ControlPartialUpdate(false /* enable */, &pending);
+ } else if (mode == kModeCommand) {
+ // Flush idle timeout value currently set.
+ comp_manager_->SetIdleTimeoutMs(display_comp_ctx_, 0);
+ switch_to_cmd_ = true;
+ }
+ }
+
+ // Request for a new draw cycle. New display mode will get applied on next draw cycle.
+ // New idle time will get configured as part of this.
+ event_handler_->Refresh();
+
+ return error;
+}
+
+DisplayError DisplayBuiltIn::SetPanelBrightness(float brightness) {
+ lock_guard<recursive_mutex> obj(brightness_lock_);
+
+ if (brightness != -1.0f && !(0.0f <= brightness && brightness <= 1.0f)) {
+ DLOGE("Bad brightness value = %f", brightness);
+ return kErrorParameters;
+ }
+
+ if (state_ == kStateOff) {
+ return kErrorNone;
+ }
+
+ // -1.0f = off, 0.0f = min, 1.0f = max
+ float level_remainder = 0.0f;
+ int level = 0;
+ if (brightness == -1.0f) {
+ level = 0;
+ } else {
+ // Node only supports int level, so store the float remainder for accurate GetPanelBrightness
+ float max = hw_panel_info_.panel_max_brightness;
+ float min = hw_panel_info_.panel_min_brightness;
+ if (min >= max) {
+ DLOGE("Minimum brightness is greater than or equal to maximum brightness");
+ return kErrorDriverData;
+ }
+ float t = (brightness * (max - min)) + min;
+ level = static_cast<int>(t);
+ level_remainder = t - level;
+ }
+
+ DisplayError err = hw_intf_->SetPanelBrightness(level);
+ if (err == kErrorNone) {
+ level_remainder_ = level_remainder;
+ DLOGI_IF(kTagDisplay, "Setting brightness to level %d (%f percent)", level,
+ brightness * 100);
+ } else if (err == kErrorDeferred) {
+ // TODO(user): I8508d64a55c3b30239c6ed2886df391407d22f25 causes mismatch between perceived
+ // power state and actual panel power state. Requires a rework. Below check will set up
+ // deferment of brightness operation if DAL reports defer use case.
+ cached_brightness_ = brightness;
+ pending_brightness_ = true;
+ return kErrorNone;
+ }
+
+ return err;
+}
+
+DisplayError DisplayBuiltIn::GetRefreshRateRange(uint32_t *min_refresh_rate,
+ uint32_t *max_refresh_rate) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+
+ if (hw_panel_info_.min_fps && hw_panel_info_.max_fps) {
+ *min_refresh_rate = hw_panel_info_.min_fps;
+ *max_refresh_rate = hw_panel_info_.max_fps;
+ } else {
+ error = DisplayBase::GetRefreshRateRange(min_refresh_rate, max_refresh_rate);
+ }
+
+ return error;
+}
+
+DisplayError DisplayBuiltIn::TeardownConcurrentWriteback(void) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ return hw_intf_->TeardownConcurrentWriteback();
+}
+
+DisplayError DisplayBuiltIn::SetRefreshRate(uint32_t refresh_rate, bool final_rate) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ if (!active_ || !hw_panel_info_.dynamic_fps || qsync_mode_ != kQSyncModeNone) {
+ return kErrorNotSupported;
+ }
+
+ if (refresh_rate < hw_panel_info_.min_fps || refresh_rate > hw_panel_info_.max_fps) {
+ DLOGE("Invalid Fps = %d request", refresh_rate);
+ return kErrorParameters;
+ }
+
+ if (handle_idle_timeout_ && !final_rate) {
+ refresh_rate = hw_panel_info_.min_fps;
+ }
+
+ if ((current_refresh_rate_ != refresh_rate) || handle_idle_timeout_) {
+ DisplayError error = hw_intf_->SetRefreshRate(refresh_rate);
+ if (error != kErrorNone) {
+ // Attempt to update refresh rate can fail if rf interfenence is detected.
+ // Just drop min fps settting for now.
+ handle_idle_timeout_ = false;
+ return error;
+ }
+
+ error = comp_manager_->CheckEnforceSplit(display_comp_ctx_, refresh_rate);
+ if (error != kErrorNone) {
+ return error;
+ }
+ }
+
+ // On success, set current refresh rate to new refresh rate
+ current_refresh_rate_ = refresh_rate;
+ handle_idle_timeout_ = false;
+ deferred_config_.MarkDirty();
+
+ return ReconfigureDisplay();
+}
+
+DisplayError DisplayBuiltIn::VSync(int64_t timestamp) {
+ if (vsync_enable_ && !drop_hw_vsync_) {
+ DisplayEventVSync vsync;
+ vsync.timestamp = timestamp;
+ event_handler_->VSync(vsync);
+ }
+
+ return kErrorNone;
+}
+
+void DisplayBuiltIn::IdleTimeout() {
+ if (hw_panel_info_.mode == kModeVideo) {
+ if (event_handler_->HandleEvent(kIdleTimeout) != kErrorNone) {
+ return;
+ }
+ handle_idle_timeout_ = true;
+ event_handler_->Refresh();
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ comp_manager_->ProcessIdleTimeout(display_comp_ctx_);
+ }
+}
+
+void DisplayBuiltIn::PingPongTimeout() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ hw_intf_->DumpDebugData();
+}
+
+void DisplayBuiltIn::ThermalEvent(int64_t thermal_level) {
+ event_handler_->HandleEvent(kThermalEvent);
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ comp_manager_->ProcessThermalEvent(display_comp_ctx_, thermal_level);
+}
+
+void DisplayBuiltIn::IdlePowerCollapse() {
+ if (hw_panel_info_.mode == kModeCommand) {
+ event_handler_->HandleEvent(kIdlePowerCollapse);
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ comp_manager_->ProcessIdlePowerCollapse(display_comp_ctx_);
+ }
+}
+
+void DisplayBuiltIn::PanelDead() {
+ event_handler_->HandleEvent(kPanelDeadEvent);
+}
+
+// HWEventHandler overload, not DisplayBase
+void DisplayBuiltIn::HwRecovery(const HWRecoveryEvent sdm_event_code) {
+ DisplayBase::HwRecovery(sdm_event_code);
+}
+
+DisplayError DisplayBuiltIn::GetPanelBrightness(float *brightness) {
+ lock_guard<recursive_mutex> obj(brightness_lock_);
+
+ DisplayError err = kErrorNone;
+ int level = 0;
+ if ((err = hw_intf_->GetPanelBrightness(&level)) != kErrorNone) {
+ return err;
+ }
+
+ // -1.0f = off, 0.0f = min, 1.0f = max
+ float max = hw_panel_info_.panel_max_brightness;
+ float min = hw_panel_info_.panel_min_brightness;
+ if (level == 0) {
+ *brightness = -1.0f;
+ } else if ((max > min) && (min <= level && level <= max)) {
+ *brightness = (static_cast<float>(level) + level_remainder_ - min) / (max - min);
+ } else {
+ min >= max ? DLOGE("Minimum brightness is greater than or equal to maximum brightness") :
+ DLOGE("Invalid brightness level %d", level);
+ return kErrorDriverData;
+ }
+
+
+ DLOGI_IF(kTagDisplay, "Received level %d (%f percent)", level, *brightness * 100);
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBuiltIn::ControlPartialUpdate(bool enable, uint32_t *pending) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!pending) {
+ return kErrorParameters;
+ }
+
+ if (!hw_panel_info_.partial_update) {
+ // Nothing to be done.
+ DLOGI("partial update is not applicable for display id = %d", display_id_);
+ return kErrorNotSupported;
+ }
+
+ *pending = 0;
+ if (enable == partial_update_control_) {
+ DLOGI("Same state transition is requested.");
+ return kErrorNone;
+ }
+
+ partial_update_control_ = enable;
+
+ if (!enable) {
+ // If the request is to turn off feature, new draw call is required to have
+ // the new setting into effect.
+ *pending = 1;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBuiltIn::DisablePartialUpdateOneFrame() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ disable_pu_one_frame_ = true;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBuiltIn::DppsProcessOps(enum DppsOps op, void *payload, size_t size) {
+ DisplayError error = kErrorNone;
+ uint32_t pending;
+ bool enable = false;
+
+ switch (op) {
+ case kDppsSetFeature:
+ if (!payload) {
+ DLOGE("Invalid payload parameter for op %d", op);
+ error = kErrorParameters;
+ break;
+ }
+ {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ error = hw_intf_->SetDppsFeature(payload, size);
+ }
+ break;
+ case kDppsGetFeatureInfo:
+ if (!payload) {
+ DLOGE("Invalid payload parameter for op %d", op);
+ error = kErrorParameters;
+ break;
+ }
+ error = hw_intf_->GetDppsFeatureInfo(payload, size);
+ break;
+ case kDppsScreenRefresh:
+ event_handler_->Refresh();
+ break;
+ case kDppsPartialUpdate:
+ if (!payload) {
+ DLOGE("Invalid payload parameter for op %d", op);
+ error = kErrorParameters;
+ break;
+ }
+ enable = *(reinterpret_cast<bool *>(payload));
+ ControlPartialUpdate(enable, &pending);
+ break;
+ case kDppsRequestCommit:
+ if (!payload) {
+ DLOGE("Invalid payload parameter for op %d", op);
+ error = kErrorParameters;
+ break;
+ }
+ {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ commit_event_enabled_ = *(reinterpret_cast<bool *>(payload));
+ }
+ break;
+ default:
+ DLOGE("Invalid input op %d", op);
+ error = kErrorParameters;
+ break;
+ }
+ return error;
+}
+
+DisplayError DisplayBuiltIn::SetDisplayDppsAdROI(void *payload) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError err = kErrorNone;
+
+ err = hw_intf_->SetDisplayDppsAdROI(payload);
+ if (err != kErrorNone)
+ DLOGE("Failed to set ad roi config, err %d", err);
+
+ return err;
+}
+
+void DppsInfo::Init(DppsPropIntf *intf, const std::string &panel_name) {
+ int error = 0;
+
+ if (dpps_initialized_) {
+ return;
+ }
+
+ if (!dpps_impl_lib.Open(kDppsLib)) {
+ DLOGW("Failed to load Dpps lib %s", kDppsLib);
+ goto exit;
+ }
+
+ if (!dpps_impl_lib.Sym("GetDppsInterface", reinterpret_cast<void **>(&GetDppsInterface))) {
+ DLOGE("GetDppsInterface not found!, err %s", dlerror());
+ goto exit;
+ }
+
+ dpps_intf = GetDppsInterface();
+ if (!dpps_intf) {
+ DLOGE("Failed to get Dpps Interface!");
+ goto exit;
+ }
+
+ error = dpps_intf->Init(intf, panel_name);
+ if (!error) {
+ DLOGI("DPPS Interface init successfully");
+ dpps_initialized_ = true;
+ return;
+ } else {
+ DLOGE("DPPS Interface init failure with err %d", error);
+ }
+
+exit:
+ Deinit();
+ dpps_intf = new DppsDummyImpl();
+ dpps_initialized_ = true;
+}
+
+void DppsInfo::Deinit() {
+ if (dpps_intf) {
+ dpps_intf->Deinit();
+ dpps_intf = NULL;
+ }
+ dpps_impl_lib.~DynLib();
+}
+
+void DppsInfo::DppsNotifyOps(enum DppsNotifyOps op, void *payload, size_t size) {
+ int ret = 0;
+ ret = dpps_intf->DppsNotifyOps(op, payload, size);
+ if (ret)
+ DLOGE("DppsNotifyOps op %d error %d", op, ret);
+}
+
+DisplayError DisplayBuiltIn::HandleSecureEvent(SecureEvent secure_event, LayerStack *layer_stack) {
+ hw_layers_.info.stack = layer_stack;
+ DisplayError err = hw_intf_->HandleSecureEvent(secure_event, &hw_layers_);
+ if (err != kErrorNone) {
+ return err;
+ }
+ comp_manager_->HandleSecureEvent(display_comp_ctx_, secure_event);
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBuiltIn::SetQSyncMode(QSyncMode qsync_mode) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!hw_panel_info_.qsync_support || qsync_mode_ == qsync_mode || first_cycle_) {
+ DLOGE("Failed: qsync_support: %d first_cycle %d mode: %d -> %d", hw_panel_info_.qsync_support,
+ first_cycle_, qsync_mode_, qsync_mode);
+ return kErrorNotSupported;
+ }
+
+ qsync_mode_ = qsync_mode;
+ needs_avr_update_ = true;
+ event_handler_->Refresh();
+
+ return kErrorNone;
+}
+
+DisplayError DisplayBuiltIn::ControlIdlePowerCollapse(bool enable, bool synchronous) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!active_) {
+ DLOGW("Invalid display state = %d. Panel must be on.", state_);
+ return kErrorPermission;
+ }
+ if (hw_panel_info_.mode == kModeVideo) {
+ DLOGW("Idle power collapse not supported for video mode panel.");
+ return kErrorNotSupported;
+ }
+ return hw_intf_->ControlIdlePowerCollapse(enable, synchronous);
+}
+
+DisplayError DisplayBuiltIn::GetSupportedDSIClock(std::vector<uint64_t> *bitclk_rates) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!hw_panel_info_.dyn_bitclk_support) {
+ return kErrorNotSupported;
+ }
+
+ *bitclk_rates = hw_panel_info_.bitclk_rates;
+ return kErrorNone;
+}
+
+DisplayError DisplayBuiltIn::SetDynamicDSIClock(uint64_t bit_clk_rate) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!active_) {
+ DLOGW("Invalid display state = %d. Panel must be on.", state_);
+ return kErrorNotSupported;
+ }
+
+ if (!hw_panel_info_.dyn_bitclk_support) {
+ return kErrorNotSupported;
+ }
+
+ uint64_t current_clk = 0;
+ std::vector<uint64_t> &clk_rates = hw_panel_info_.bitclk_rates;
+ GetDynamicDSIClock(¤t_clk);
+ bool valid = std::find(clk_rates.begin(), clk_rates.end(), bit_clk_rate) != clk_rates.end();
+ if (current_clk == bit_clk_rate || !valid) {
+ DLOGI("Invalid setting %d, Clk. already set %d", !valid, (current_clk == bit_clk_rate));
+ return kErrorNone;
+ }
+
+ return hw_intf_->SetDynamicDSIClock(bit_clk_rate);
+}
+
+DisplayError DisplayBuiltIn::GetDynamicDSIClock(uint64_t *bit_clk_rate) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!hw_panel_info_.dyn_bitclk_support) {
+ return kErrorNotSupported;
+ }
+
+ return hw_intf_->GetDynamicDSIClock(bit_clk_rate);
+}
+
+bool DisplayBuiltIn::CanCompareFrameROI(LayerStack *layer_stack) {
+ // Check Display validation and safe-mode states.
+ if (needs_validate_ || comp_manager_->IsSafeMode()) {
+ return false;
+ }
+
+ // Check Panel and Layer Stack attributes.
+ if (!hw_panel_info_.partial_update || (hw_panel_info_.left_roi_count != 1) ||
+ layer_stack->flags.geometry_changed || layer_stack->flags.config_changed ||
+ (layer_stack->layers.size() != (hw_layers_.info.app_layer_count + 1))) {
+ return false;
+ }
+
+ // Check for Partial Update disable requests/scenarios.
+ if (color_mgr_ && color_mgr_->NeedsPartialUpdateDisable()) {
+ DisablePartialUpdateOneFrame();
+ }
+
+ if (!partial_update_control_ || disable_pu_one_frame_ || disable_pu_on_dest_scaler_) {
+ return false;
+ }
+
+ bool surface_damage = false;
+ uint32_t surface_damage_mask_value = (1 << kSurfaceDamage);
+ for (uint32_t i = 0; i < layer_stack->layers.size(); i++) {
+ Layer *layer = layer_stack->layers.at(i);
+ if (layer->update_mask.none()) {
+ continue;
+ }
+ // Only kSurfaceDamage bit should be set in layer's update-mask.
+ if (layer->update_mask.to_ulong() == surface_damage_mask_value) {
+ surface_damage = true;
+ } else {
+ return false;
+ }
+ }
+
+ return surface_damage;
+}
+
+bool DisplayBuiltIn::CanSkipDisplayPrepare(LayerStack *layer_stack) {
+ if (!CanCompareFrameROI(layer_stack)) {
+ return false;
+ }
+
+ DisplayError error = BuildLayerStackStats(layer_stack);
+ if (error != kErrorNone) {
+ return false;
+ }
+
+ hw_layers_.info.left_frame_roi.clear();
+ hw_layers_.info.right_frame_roi.clear();
+ hw_layers_.info.dest_scale_info_map.clear();
+ comp_manager_->GenerateROI(display_comp_ctx_, &hw_layers_);
+
+ if (!hw_layers_.info.left_frame_roi.size() || !hw_layers_.info.right_frame_roi.size()) {
+ return false;
+ }
+
+ // Compare the cached and calculated Frame ROIs.
+ bool same_roi = IsCongruent(left_frame_roi_, hw_layers_.info.left_frame_roi.at(0)) &&
+ IsCongruent(right_frame_roi_, hw_layers_.info.right_frame_roi.at(0));
+
+ if (same_roi) {
+ // Update Surface Damage rectangle(s) in HW layers.
+ uint32_t hw_layer_count = UINT32(hw_layers_.info.hw_layers.size());
+ for (uint32_t j = 0; j < hw_layer_count; j++) {
+ Layer &hw_layer = hw_layers_.info.hw_layers.at(j);
+ Layer *sdm_layer = layer_stack->layers.at(hw_layers_.info.index.at(j));
+ if (hw_layer.dirty_regions.size() != sdm_layer->dirty_regions.size()) {
+ return false;
+ }
+ for (uint32_t k = 0; k < hw_layer.dirty_regions.size(); k++) {
+ hw_layer.dirty_regions.at(k) = sdm_layer->dirty_regions.at(k);
+ }
+ }
+
+ // Set the composition type for SDM layers.
+ for (uint32_t i = 0; i < (layer_stack->layers.size() - 1); i++) {
+ layer_stack->layers.at(i)->composition = kCompositionSDE;
+ }
+ }
+
+ return same_roi;
+}
+
+DisplayError DisplayBuiltIn::GetRefreshRate(uint32_t *refresh_rate) {
+ *refresh_rate = current_refresh_rate_;
+ return kErrorNone;
+}
+
+DisplayError DisplayBuiltIn::SetActiveConfig(uint32_t index) {
+ deferred_config_.MarkDirty();
+ return DisplayBase::SetActiveConfig(index);
+}
+
+DisplayError DisplayBuiltIn::ReconfigureDisplay() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+ HWDisplayAttributes display_attributes;
+ HWMixerAttributes mixer_attributes;
+ HWPanelInfo hw_panel_info;
+ uint32_t active_index = 0;
+
+ DTRACE_SCOPED();
+
+ error = hw_intf_->GetActiveConfig(&active_index);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = hw_intf_->GetDisplayAttributes(active_index, &display_attributes);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = hw_intf_->GetMixerAttributes(&mixer_attributes);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = hw_intf_->GetHWPanelInfo(&hw_panel_info);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ const bool dirty = deferred_config_.IsDirty();
+ if (deferred_config_.IsDeferredState()) {
+ if (dirty) {
+ SetDeferredFpsConfig();
+ } else {
+ // In Deferred state, use current config for comparison.
+ GetFpsConfig(&display_attributes, &hw_panel_info);
+ }
+ }
+
+ const bool display_unchanged = (display_attributes == display_attributes_);
+ const bool mixer_unchanged = (mixer_attributes == mixer_attributes_);
+ const bool panel_unchanged = (hw_panel_info == hw_panel_info_);
+ if (!dirty && display_unchanged && mixer_unchanged && panel_unchanged) {
+ return kErrorNone;
+ }
+
+ if (CanDeferFpsConfig(display_attributes.fps)) {
+ deferred_config_.Init(display_attributes.fps, display_attributes.vsync_period_ns,
+ hw_panel_info.transfer_time_us);
+
+ // Apply current config until new Fps is deferred.
+ GetFpsConfig(&display_attributes, &hw_panel_info);
+ }
+
+ error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info,
+ mixer_attributes, fb_config_,
+ &(default_qos_data_.clock_hz));
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ bool disble_pu = true;
+ if (mixer_unchanged && panel_unchanged) {
+ // Do not disable Partial Update for one frame, if only FPS has changed.
+ // Because if first frame after transition, has a partial Frame-ROI and
+ // is followed by Skip Validate frames, then it can benefit those frames.
+ disble_pu = !display_attributes_.OnlyFpsChanged(display_attributes);
+ }
+
+ if (disble_pu) {
+ DisablePartialUpdateOneFrame();
+ }
+
+ display_attributes_ = display_attributes;
+ mixer_attributes_ = mixer_attributes;
+ hw_panel_info_ = hw_panel_info;
+
+ // TODO(user): Temporary changes, to be removed when DRM driver supports
+ // Partial update with Destination scaler enabled.
+ SetPUonDestScaler();
+
+ return kErrorNone;
+}
+
+bool DisplayBuiltIn::CanDeferFpsConfig(uint32_t fps) {
+ if (deferred_config_.CanApplyDeferredState()) {
+ // Deferred Fps Config needs to be applied.
+ return false;
+ }
+
+ // In case of higher to lower Fps transition on a Builtin display, defer the Fps
+ // (Transfer time) configuration, for the number of frames based on frame_count.
+ return ((deferred_config_.frame_count != 0) && (display_attributes_.fps > fps));
+}
+
+void DisplayBuiltIn::SetDeferredFpsConfig() {
+ // Update with the deferred Fps Config.
+ display_attributes_.fps = deferred_config_.fps;
+ display_attributes_.vsync_period_ns = deferred_config_.vsync_period_ns;
+ hw_panel_info_.transfer_time_us = deferred_config_.transfer_time_us;
+ deferred_config_.Clear();
+}
+
+void DisplayBuiltIn::GetFpsConfig(HWDisplayAttributes *display_attr, HWPanelInfo *panel_info) {
+ display_attr->fps = display_attributes_.fps;
+ display_attr->vsync_period_ns = display_attributes_.vsync_period_ns;
+ panel_info->transfer_time_us = hw_panel_info_.transfer_time_us;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/display_builtin.h b/sdm/libs/core/display_builtin.h
new file mode 100644
index 0000000..6da7a87
--- /dev/null
+++ b/sdm/libs/core/display_builtin.h
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2014 - 2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __DISPLAY_BUILTIN_H__
+#define __DISPLAY_BUILTIN_H__
+
+#include <core/dpps_interface.h>
+#include <string>
+#include <vector>
+
+#include "display_base.h"
+#include "hw_events_interface.h"
+
+namespace sdm {
+
+struct DeferFpsConfig {
+ uint32_t frame_count = 0;
+ uint32_t frames_to_defer = 0;
+ uint32_t fps = 0;
+ uint32_t vsync_period_ns = 0;
+ uint32_t transfer_time_us = 0;
+ bool dirty = false;
+ bool apply = false;
+
+ void Init(uint32_t refresh_rate, uint32_t vsync_period, uint32_t transfer_time) {
+ fps = refresh_rate;
+ vsync_period_ns = vsync_period;
+ transfer_time_us = transfer_time;
+ frames_to_defer = frame_count;
+ dirty = false;
+ apply = false;
+ }
+
+ bool IsDeferredState() { return (frames_to_defer != 0); }
+
+ bool CanApplyDeferredState() { return apply; }
+
+ bool IsDirty() { return dirty; }
+
+ void MarkDirty() { dirty = IsDeferredState(); }
+
+ void UpdateDeferCount() {
+ if (frames_to_defer > 0) {
+ frames_to_defer--;
+ apply = (frames_to_defer == 0);
+ }
+ }
+
+ void Clear() {
+ frames_to_defer = 0;
+ dirty = false;
+ apply = false;
+ }
+};
+
+class DppsInfo {
+ public:
+ void Init(DppsPropIntf *intf, const std::string &panel_name);
+ void Deinit();
+ void DppsNotifyOps(enum DppsNotifyOps op, void *payload, size_t size);
+
+ private:
+ const char *kDppsLib = "libdpps.so";
+ DynLib dpps_impl_lib;
+ DppsInterface *dpps_intf = NULL;
+ DppsInterface *(*GetDppsInterface)() = NULL;
+ bool dpps_initialized_ = false;
+};
+
+class DisplayBuiltIn : public DisplayBase, HWEventHandler, DppsPropIntf {
+ public:
+ DisplayBuiltIn(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler, BufferAllocator *buffer_allocator,
+ CompManager *comp_manager);
+ DisplayBuiltIn(int32_t display_id, DisplayEventHandler *event_handler,
+ HWInfoInterface *hw_info_intf, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager);
+ virtual ~DisplayBuiltIn();
+
+ virtual DisplayError Init();
+ virtual DisplayError Deinit();
+ virtual DisplayError Prepare(LayerStack *layer_stack);
+ virtual DisplayError Commit(LayerStack *layer_stack);
+ virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending);
+ virtual DisplayError DisablePartialUpdateOneFrame();
+ virtual DisplayError SetDisplayState(DisplayState state, bool teardown,
+ int *release_fence);
+ virtual void SetIdleTimeoutMs(uint32_t active_ms);
+ virtual DisplayError SetDisplayMode(uint32_t mode);
+ virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
+ virtual DisplayError SetRefreshRate(uint32_t refresh_rate, bool final_rate);
+ virtual DisplayError GetRefreshRate(uint32_t *refresh_rate);
+ virtual DisplayError SetPanelBrightness(float brightness);
+ virtual DisplayError GetPanelBrightness(float *brightness);
+ virtual DisplayError HandleSecureEvent(SecureEvent secure_event, LayerStack *layer_stack);
+ virtual DisplayError SetDisplayDppsAdROI(void *payload);
+ virtual DisplayError SetQSyncMode(QSyncMode qsync_mode);
+ virtual DisplayError ControlIdlePowerCollapse(bool enable, bool synchronous);
+ virtual DisplayError SetDynamicDSIClock(uint64_t bit_clk_rate);
+ virtual DisplayError GetDynamicDSIClock(uint64_t *bit_clk_rate);
+ virtual DisplayError GetSupportedDSIClock(std::vector<uint64_t> *bitclk_rates);
+
+ // Implement the HWEventHandlers
+ virtual DisplayError VSync(int64_t timestamp);
+ virtual DisplayError Blank(bool blank) { return kErrorNone; }
+ virtual void IdleTimeout();
+ virtual void ThermalEvent(int64_t thermal_level);
+ virtual void CECMessage(char *message) {}
+ virtual void IdlePowerCollapse();
+ virtual void PingPongTimeout();
+ virtual void PanelDead();
+ virtual void HwRecovery(const HWRecoveryEvent sdm_event_code);
+ virtual DisplayError TeardownConcurrentWriteback(void);
+
+ // Implement the DppsPropIntf
+ virtual DisplayError DppsProcessOps(enum DppsOps op, void *payload, size_t size);
+ virtual DisplayError SetActiveConfig(uint32_t index);
+ virtual DisplayError ReconfigureDisplay();
+
+ private:
+ bool CanCompareFrameROI(LayerStack *layer_stack);
+ bool CanSkipDisplayPrepare(LayerStack *layer_stack);
+ HWAVRModes GetAvrMode(QSyncMode mode);
+ bool CanDeferFpsConfig(uint32_t fps);
+ void SetDeferredFpsConfig();
+ void GetFpsConfig(HWDisplayAttributes *display_attributes, HWPanelInfo *panel_info);
+ void UpdateDisplayModeParams();
+
+ std::vector<HWEvent> event_list_;
+ bool avr_prop_disabled_ = false;
+ bool switch_to_cmd_ = false;
+ bool handle_idle_timeout_ = false;
+ bool commit_event_enabled_ = false;
+ DppsInfo dpps_info_ = {};
+ LayerRect left_frame_roi_ = {};
+ LayerRect right_frame_roi_ = {};
+ bool first_cycle_ = true;
+ int previous_retire_fence_ = -1;
+ DeferFpsConfig deferred_config_ = {};
+ float level_remainder_ = 0.0f;
+ recursive_mutex brightness_lock_;
+ float cached_brightness_ = 0.0f;
+ bool pending_brightness_ = false;
+};
+
+} // namespace sdm
+
+#endif // __DISPLAY_BUILTIN_H__
diff --git a/sdm/libs/core/display_pluggable.cpp b/sdm/libs/core/display_pluggable.cpp
new file mode 100644
index 0000000..06a34ac
--- /dev/null
+++ b/sdm/libs/core/display_pluggable.cpp
@@ -0,0 +1,478 @@
+/*
+* Copyright (c) 2014 - 2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "display_pluggable.h"
+#include "hw_info_interface.h"
+#include "hw_interface.h"
+
+#define __CLASS__ "DisplayPluggable"
+
+namespace sdm {
+
+DisplayPluggable::DisplayPluggable(DisplayEventHandler *event_handler,
+ HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager)
+ : DisplayBase(kPluggable, event_handler, kDevicePluggable, buffer_sync_handler, buffer_allocator,
+ comp_manager, hw_info_intf) {}
+
+DisplayPluggable::DisplayPluggable(int32_t display_id, DisplayEventHandler *event_handler,
+ HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager)
+ : DisplayBase(display_id, kPluggable, event_handler, kDevicePluggable, buffer_sync_handler,
+ buffer_allocator, comp_manager, hw_info_intf) {}
+
+DisplayError DisplayPluggable::Init() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ DisplayError error = HWInterface::Create(display_id_, kPluggable, hw_info_intf_,
+ buffer_sync_handler_, buffer_allocator_, &hw_intf_);
+ if (error != kErrorNone) {
+ if (kErrorDeviceRemoved == error) {
+ DLOGW("Aborted creating hardware interface. Device removed.");
+ } else {
+ DLOGE("Failed to create hardware interface. Error = %d", error);
+ }
+ return error;
+ }
+
+ if (-1 == display_id_) {
+ hw_intf_->GetDisplayId(&display_id_);
+ }
+
+ uint32_t active_mode_index = 0;
+ error = hw_intf_->GetActiveConfig(&active_mode_index);
+ if (error != kErrorNone) {
+ HWInterface::Destroy(hw_intf_);
+ return error;
+ }
+
+ uint32_t override_mode_index = active_mode_index;
+ error = GetOverrideConfig(&override_mode_index);
+ if (error == kErrorNone && override_mode_index != active_mode_index) {
+ DLOGI("Overriding display mode %d with mode %d.", active_mode_index, override_mode_index);
+ error = hw_intf_->SetDisplayAttributes(override_mode_index);
+ if (error != kErrorNone) {
+ DLOGI("Failed overriding display mode %d with mode %d. Continuing with display mode %d.",
+ active_mode_index, override_mode_index, active_mode_index);
+ }
+ }
+
+ error = DisplayBase::Init();
+ if (error == kErrorResources) {
+ DLOGI("Reattempting display creation for Pluggable %d", display_id_);
+ uint32_t default_mode_index = 0;
+ error = hw_intf_->GetDefaultConfig(&default_mode_index);
+ if (error == kErrorNone) {
+ hw_intf_->SetDisplayAttributes(default_mode_index);
+ error = DisplayBase::Init();
+ } else {
+ DLOGE("640x480 default mode not found, failing creation!");
+ }
+ }
+ if (error != kErrorNone) {
+ HWInterface::Destroy(hw_intf_);
+ return error;
+ }
+
+ GetScanSupport();
+ underscan_supported_ = (scan_support_ == kScanAlwaysUnderscanned) || (scan_support_ == kScanBoth);
+
+ s3d_format_to_mode_.insert(
+ std::pair<LayerBufferS3DFormat, HWS3DMode>(kS3dFormatNone, kS3DModeNone));
+ s3d_format_to_mode_.insert(
+ std::pair<LayerBufferS3DFormat, HWS3DMode>(kS3dFormatLeftRight, kS3DModeLR));
+ s3d_format_to_mode_.insert(
+ std::pair<LayerBufferS3DFormat, HWS3DMode>(kS3dFormatRightLeft, kS3DModeRL));
+ s3d_format_to_mode_.insert(
+ std::pair<LayerBufferS3DFormat, HWS3DMode>(kS3dFormatTopBottom, kS3DModeTB));
+ s3d_format_to_mode_.insert(
+ std::pair<LayerBufferS3DFormat, HWS3DMode>(kS3dFormatFramePacking, kS3DModeFP));
+
+ error = HWEventsInterface::Create(display_id_, kPluggable, this, event_list_, hw_intf_,
+ &hw_events_intf_);
+ if (error != kErrorNone) {
+ DisplayBase::Deinit();
+ HWInterface::Destroy(hw_intf_);
+ DLOGE("Failed to create hardware events interface. Error = %d", error);
+ }
+
+ InitializeColorModes();
+
+ current_refresh_rate_ = hw_panel_info_.max_fps;
+
+ return error;
+}
+
+DisplayError DisplayPluggable::Prepare(LayerStack *layer_stack) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+ uint32_t new_mixer_width = 0;
+ uint32_t new_mixer_height = 0;
+ uint32_t display_width = display_attributes_.x_pixels;
+ uint32_t display_height = display_attributes_.y_pixels;
+
+ if (NeedsMixerReconfiguration(layer_stack, &new_mixer_width, &new_mixer_height)) {
+ error = ReconfigureMixer(new_mixer_width, new_mixer_height);
+ if (error != kErrorNone) {
+ ReconfigureMixer(display_width, display_height);
+ }
+ }
+
+ SetS3DMode(layer_stack);
+
+ // Clean hw layers for reuse.
+ hw_layers_ = HWLayers();
+
+ return DisplayBase::Prepare(layer_stack);
+}
+
+DisplayError DisplayPluggable::GetRefreshRateRange(uint32_t *min_refresh_rate,
+ uint32_t *max_refresh_rate) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ DisplayError error = kErrorNone;
+
+ if (hw_panel_info_.min_fps && hw_panel_info_.max_fps) {
+ *min_refresh_rate = hw_panel_info_.min_fps;
+ *max_refresh_rate = hw_panel_info_.max_fps;
+ } else {
+ error = DisplayBase::GetRefreshRateRange(min_refresh_rate, max_refresh_rate);
+ }
+
+ return error;
+}
+
+DisplayError DisplayPluggable::SetRefreshRate(uint32_t refresh_rate, bool final_rate) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ if (!active_) {
+ return kErrorPermission;
+ }
+
+ if (current_refresh_rate_ != refresh_rate) {
+ DisplayError error = hw_intf_->SetRefreshRate(refresh_rate);
+ if (error != kErrorNone) {
+ return error;
+ }
+ }
+
+ current_refresh_rate_ = refresh_rate;
+ return DisplayBase::ReconfigureDisplay();
+}
+
+bool DisplayPluggable::IsUnderscanSupported() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ return underscan_supported_;
+}
+
+DisplayError DisplayPluggable::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ return hw_intf_->OnMinHdcpEncryptionLevelChange(min_enc_level);
+}
+
+DisplayError DisplayPluggable::GetOverrideConfig(uint32_t *mode_index) {
+ DisplayError error = kErrorNone;
+
+ if (!mode_index) {
+ DLOGE("Invalid mode index parameter.");
+ return kErrorParameters;
+ }
+
+ // TODO(user): Need to add support for S3D modes based on HDMI_S3D_MODE_PROP property.
+
+ char val[kPropertyMax] = {};
+ // Used for changing HDMI Resolution - Override the preferred mode with user set config.
+ bool user_config = Debug::GetExternalResolution(val);
+ if (user_config) {
+ uint32_t config_index = 0;
+ // For the config, get the corresponding index
+ error = hw_intf_->GetConfigIndex(val, &config_index);
+ if (error == kErrorNone) {
+ *mode_index = config_index;
+ }
+ }
+
+ return error;
+}
+
+void DisplayPluggable::GetScanSupport() {
+ DisplayError error = kErrorNone;
+ uint32_t video_format = 0;
+ uint32_t max_cea_format = 0;
+ HWScanInfo scan_info = HWScanInfo();
+ hw_intf_->GetHWScanInfo(&scan_info);
+
+ uint32_t active_mode_index = 0;
+ hw_intf_->GetActiveConfig(&active_mode_index);
+
+ error = hw_intf_->GetVideoFormat(active_mode_index, &video_format);
+ if (error != kErrorNone) {
+ return;
+ }
+
+ error = hw_intf_->GetMaxCEAFormat(&max_cea_format);
+ if (error != kErrorNone) {
+ return;
+ }
+
+ // The scan support for a given HDMI TV must be read from scan info corresponding to
+ // Preferred Timing if the preferred timing of the display is currently active, and if it is
+ // valid. In all other cases, we must read the scan support from CEA scan info if
+ // the resolution is a CEA resolution, or from IT scan info for all other resolutions.
+ if (active_mode_index == 0 && scan_info.pt_scan_support != kScanNotSupported) {
+ scan_support_ = scan_info.pt_scan_support;
+ } else if (video_format < max_cea_format) {
+ scan_support_ = scan_info.cea_scan_support;
+ } else {
+ scan_support_ = scan_info.it_scan_support;
+ }
+}
+
+void DisplayPluggable::SetS3DMode(LayerStack *layer_stack) {
+ uint32_t s3d_layer_count = 0;
+ HWS3DMode s3d_mode = kS3DModeNone;
+ uint32_t layer_count = UINT32(layer_stack->layers.size());
+
+ // S3D mode is supported for the following scenarios:
+ // 1. Layer stack containing only one s3d layer which is not skip
+ // 2. Layer stack containing only one secure layer along with one s3d layer
+ for (uint32_t i = 0; i < layer_count; i++) {
+ Layer *layer = layer_stack->layers.at(i);
+ LayerBuffer &layer_buffer = layer->input_buffer;
+
+ if (layer_buffer.s3d_format != kS3dFormatNone) {
+ s3d_layer_count++;
+ if (s3d_layer_count > 1 || layer->flags.skip) {
+ s3d_mode = kS3DModeNone;
+ break;
+ }
+
+ std::map<LayerBufferS3DFormat, HWS3DMode>::iterator it =
+ s3d_format_to_mode_.find(layer_buffer.s3d_format);
+ if (it != s3d_format_to_mode_.end()) {
+ s3d_mode = it->second;
+ }
+ } else if (layer_buffer.flags.secure && layer_count > 2) {
+ s3d_mode = kS3DModeNone;
+ break;
+ }
+ }
+
+ if (hw_intf_->SetS3DMode(s3d_mode) != kErrorNone) {
+ hw_intf_->SetS3DMode(kS3DModeNone);
+ layer_stack->flags.s3d_mode_present = false;
+ } else if (s3d_mode != kS3DModeNone) {
+ layer_stack->flags.s3d_mode_present = true;
+ }
+
+ DisplayBase::ReconfigureDisplay();
+}
+
+void DisplayPluggable::CECMessage(char *message) {
+ event_handler_->CECMessage(message);
+}
+
+// HWEventHandler overload, not DisplayBase
+void DisplayPluggable::HwRecovery(const HWRecoveryEvent sdm_event_code) {
+ DisplayBase::HwRecovery(sdm_event_code);
+}
+
+DisplayError DisplayPluggable::VSync(int64_t timestamp) {
+ if (vsync_enable_) {
+ DisplayEventVSync vsync;
+ vsync.timestamp = timestamp;
+ event_handler_->VSync(vsync);
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayPluggable::InitializeColorModes() {
+ PrimariesTransfer pt = {};
+ AttrVal var;
+ if (!hw_panel_info_.hdr_enabled) {
+ return kErrorNone;
+ } else {
+ color_modes_cs_.push_back(pt);
+ var.push_back(std::make_pair(kColorGamutAttribute, kSrgb));
+ var.push_back(std::make_pair(kDynamicRangeAttribute, kSdr));
+ var.push_back(std::make_pair(kPictureQualityAttribute, kStandard));
+ color_mode_attr_map_.insert(std::make_pair(kSrgb, var));
+
+ // native mode
+ color_modes_cs_.push_back(pt);
+ var.clear();
+ color_mode_attr_map_.insert(std::make_pair("hal_native", var));
+
+ pt.primaries = ColorPrimaries_BT2020;
+ pt.transfer = Transfer_Gamma2_2;
+ color_modes_cs_.push_back(pt);
+ var.clear();
+ var.push_back(std::make_pair(kColorGamutAttribute, kBt2020));
+ var.push_back(std::make_pair(kGammaTransferAttribute, kGamma2_2));
+ color_mode_attr_map_.insert(std::make_pair(kBt2020, var));
+ }
+
+ var.clear();
+ var.push_back(std::make_pair(kColorGamutAttribute, kBt2020));
+ if (hw_panel_info_.hdr_eotf & kHdrEOTFHDR10) {
+ pt.transfer = Transfer_SMPTE_ST2084;
+ var.push_back(std::make_pair(kGammaTransferAttribute, kSt2084));
+ color_modes_cs_.push_back(pt);
+ color_mode_attr_map_.insert(std::make_pair(kBt2020Pq, var));
+ }
+ if (hw_panel_info_.hdr_eotf & kHdrEOTFHLG) {
+ pt.transfer = Transfer_HLG;
+ var.pop_back();
+ var.push_back(std::make_pair(kGammaTransferAttribute, kHlg));
+ color_modes_cs_.push_back(pt);
+ color_mode_attr_map_.insert(std::make_pair(kBt2020Hlg, var));
+ }
+ current_color_mode_ = kSrgb;
+ UpdateColorModes();
+
+ return kErrorNone;
+}
+
+static PrimariesTransfer GetBlendSpaceFromAttributes(const std::string &color_gamut,
+ const std::string &transfer) {
+ PrimariesTransfer blend_space_ = {};
+ if (color_gamut == kBt2020) {
+ blend_space_.primaries = ColorPrimaries_BT2020;
+ if (transfer == kHlg) {
+ blend_space_.transfer = Transfer_HLG;
+ } else if (transfer == kSt2084) {
+ blend_space_.transfer = Transfer_SMPTE_ST2084;
+ } else if (transfer == kGamma2_2) {
+ blend_space_.transfer = Transfer_Gamma2_2;
+ }
+ } else if (color_gamut == kSrgb) {
+ blend_space_.primaries = ColorPrimaries_BT709_5;
+ blend_space_.transfer = Transfer_sRGB;
+ } else {
+ DLOGW("Failed to Get blend space color_gamut = %s transfer = %s", color_gamut.c_str(),
+ transfer.c_str());
+ }
+ DLOGI("Blend Space Primaries = %d Transfer = %d", blend_space_.primaries, blend_space_.transfer);
+
+ return blend_space_;
+}
+
+DisplayError DisplayPluggable::SetColorMode(const std::string &color_mode) {
+ auto current_color_attr_ = color_mode_attr_map_.find(color_mode);
+ if (current_color_attr_ == color_mode_attr_map_.end()) {
+ DLOGE("Failed to get the color mode = %s", color_mode.c_str());
+ return kErrorNone;
+ }
+ AttrVal attr = current_color_attr_->second;
+ std::string color_gamut = kNative, transfer = {};
+
+ if (attr.begin() != attr.end()) {
+ for (auto &it : attr) {
+ if (it.first.find(kColorGamutAttribute) != std::string::npos) {
+ color_gamut = it.second;
+ } else if (it.first.find(kGammaTransferAttribute) != std::string::npos) {
+ transfer = it.second;
+ }
+ }
+ }
+
+ DisplayError error = kErrorNone;
+ error = comp_manager_->SetBlendSpace(display_comp_ctx_,
+ GetBlendSpaceFromAttributes(color_gamut, transfer));
+ if (error != kErrorNone) {
+ DLOGE("Failed Set blend space, error = %d display_type_=%d", error, display_type_);
+ }
+ current_color_mode_ = color_mode;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayPluggable::GetColorModeCount(uint32_t *mode_count) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!mode_count) {
+ return kErrorParameters;
+ }
+
+ DLOGI("Display = %d Number of modes = %d", display_type_, num_color_modes_);
+ *mode_count = num_color_modes_;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayPluggable::GetColorModes(uint32_t *mode_count,
+ std::vector<std::string> *color_modes) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!mode_count || !color_modes) {
+ return kErrorParameters;
+ }
+
+ for (uint32_t i = 0; i < num_color_modes_; i++) {
+ DLOGI_IF(kTagDisplay, "ColorMode[%d] = %s", i, color_modes_[i].name);
+ color_modes->at(i) = color_modes_[i].name;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayPluggable::GetColorModeAttr(const std::string &color_mode, AttrVal *attr) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ if (!attr) {
+ return kErrorParameters;
+ }
+
+ auto it = color_mode_attr_map_.find(color_mode);
+ if (it == color_mode_attr_map_.end()) {
+ DLOGI("Mode %s has no attribute", color_mode.c_str());
+ return kErrorNotSupported;
+ }
+ *attr = it->second;
+
+ return kErrorNone;
+}
+
+void DisplayPluggable::UpdateColorModes() {
+ uint32_t i = 0;
+ num_color_modes_ = UINT32(color_mode_attr_map_.size());
+ color_modes_.resize(num_color_modes_);
+ for (ColorModeAttrMap::iterator it = color_mode_attr_map_.begin();
+ ((i < num_color_modes_) && (it != color_mode_attr_map_.end())); i++, it++) {
+ color_modes_[i].id = INT32(i);
+ std::size_t length = (it->first).copy(color_modes_[i].name, sizeof(SDEDisplayMode::name) - 1);
+ color_modes_[i].name[length] = '\0';
+ color_mode_map_.insert(std::make_pair(color_modes_[i].name, &color_modes_[i]));
+ DLOGI("Color mode = %s", color_modes_[i].name);
+ }
+ return;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/display_pluggable.h b/sdm/libs/core/display_pluggable.h
new file mode 100644
index 0000000..c75388a
--- /dev/null
+++ b/sdm/libs/core/display_pluggable.h
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __DISPLAY_PLUGGABLE_H__
+#define __DISPLAY_PLUGGABLE_H__
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "display_base.h"
+#include "hw_events_interface.h"
+
+namespace sdm {
+
+class DisplayPluggable : public DisplayBase, HWEventHandler {
+ public:
+ DisplayPluggable(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler, BufferAllocator *buffer_allocator,
+ CompManager *comp_manager);
+ DisplayPluggable(int32_t display_id, DisplayEventHandler *event_handler,
+ HWInfoInterface *hw_info_intf, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager);
+ virtual DisplayError Init();
+ virtual DisplayError Prepare(LayerStack *layer_stack);
+ virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
+ virtual DisplayError SetRefreshRate(uint32_t refresh_rate, bool final_rate);
+ virtual bool IsUnderscanSupported();
+ virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level);
+ virtual DisplayError InitializeColorModes();
+ virtual DisplayError SetColorMode(const std::string &color_mode);
+ virtual DisplayError GetColorModeCount(uint32_t *mode_count);
+ virtual DisplayError GetColorModes(uint32_t *mode_count, std::vector<std::string> *color_modes);
+ virtual DisplayError GetColorModeAttr(const std::string &color_mode, AttrVal *attr);
+ virtual DisplayError SetColorTransform(const uint32_t length, const double *color_transform) {
+ return kErrorNone;
+ }
+ virtual DisplayError TeardownConcurrentWriteback(void) { return kErrorNotSupported; }
+
+ // Implement the HWEventHandlers
+ virtual DisplayError VSync(int64_t timestamp);
+ virtual DisplayError Blank(bool blank) { return kErrorNone; }
+ virtual void IdleTimeout() {}
+ virtual void ThermalEvent(int64_t thermal_level) {}
+ virtual void CECMessage(char *message);
+ virtual void IdlePowerCollapse() {}
+ virtual void PingPongTimeout() {}
+ virtual void PanelDead() {}
+ virtual void HwRecovery(const HWRecoveryEvent sdm_event_code);
+
+ void UpdateColorModes();
+
+ private:
+ DisplayError GetOverrideConfig(uint32_t *mode_index);
+ void GetScanSupport();
+ void SetS3DMode(LayerStack *layer_stack);
+
+ static const int kPropertyMax = 256;
+
+ bool underscan_supported_ = false;
+ HWScanSupport scan_support_;
+ std::map<LayerBufferS3DFormat, HWS3DMode> s3d_format_to_mode_;
+ std::vector<HWEvent> event_list_ = {HWEvent::VSYNC, HWEvent::IDLE_NOTIFY, HWEvent::EXIT,
+ HWEvent::CEC_READ_MESSAGE, HWEvent::HW_RECOVERY};
+ uint32_t current_refresh_rate_ = 0;
+};
+
+} // namespace sdm
+
+#endif // __DISPLAY_PLUGGABLE_H__
diff --git a/sdm/libs/core/display_virtual.cpp b/sdm/libs/core/display_virtual.cpp
new file mode 100644
index 0000000..ad7dad6
--- /dev/null
+++ b/sdm/libs/core/display_virtual.cpp
@@ -0,0 +1,191 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <algorithm>
+#include "display_virtual.h"
+#include "hw_interface.h"
+#include "hw_info_interface.h"
+
+#define __CLASS__ "DisplayVirtual"
+
+namespace sdm {
+
+DisplayVirtual::DisplayVirtual(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager)
+ : DisplayBase(kVirtual, event_handler, kDeviceVirtual, buffer_sync_handler, buffer_allocator,
+ comp_manager, hw_info_intf) {
+}
+
+DisplayVirtual::DisplayVirtual(int32_t display_id, DisplayEventHandler *event_handler,
+ HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager)
+ : DisplayBase(display_id, kVirtual, event_handler, kDeviceVirtual, buffer_sync_handler,
+ buffer_allocator, comp_manager, hw_info_intf) {}
+
+DisplayError DisplayVirtual::Init() {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ DisplayError error = HWInterface::Create(display_id_, kVirtual, hw_info_intf_,
+ buffer_sync_handler_, buffer_allocator_, &hw_intf_);
+
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ if (-1 == display_id_) {
+ hw_intf_->GetDisplayId(&display_id_);
+ }
+
+ if (hw_info_intf_) {
+ HWResourceInfo hw_resource_info = HWResourceInfo();
+ hw_info_intf_->GetHWResourceInfo(&hw_resource_info);
+ auto max_mixer_stages = hw_resource_info.num_blending_stages;
+ int property_value = Debug::GetMaxPipesPerMixer(display_type_);
+ if (property_value >= 0) {
+ max_mixer_stages = std::min(UINT32(property_value), hw_resource_info.num_blending_stages);
+ }
+ DisplayBase::SetMaxMixerStages(max_mixer_stages);
+ }
+
+ return error;
+}
+
+DisplayError DisplayVirtual::GetNumVariableInfoConfigs(uint32_t *count) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ *count = 1;
+ return kErrorNone;
+}
+
+DisplayError DisplayVirtual::GetConfig(uint32_t index, DisplayConfigVariableInfo *variable_info) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ *variable_info = display_attributes_;
+ return kErrorNone;
+}
+
+DisplayError DisplayVirtual::GetActiveConfig(uint32_t *index) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+ *index = 0;
+ return kErrorNone;
+}
+
+DisplayError DisplayVirtual::SetActiveConfig(DisplayConfigVariableInfo *variable_info) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ if (!variable_info) {
+ return kErrorParameters;
+ }
+
+ DisplayError error = kErrorNone;
+ HWDisplayAttributes display_attributes;
+ HWMixerAttributes mixer_attributes;
+ HWPanelInfo hw_panel_info = {};
+ DisplayConfigVariableInfo fb_config = fb_config_;
+
+ display_attributes.x_pixels = variable_info->x_pixels;
+ display_attributes.y_pixels = variable_info->y_pixels;
+ display_attributes.fps = variable_info->fps;
+
+ if (display_attributes == display_attributes_) {
+ return kErrorNone;
+ }
+
+ error = hw_intf_->SetDisplayAttributes(display_attributes);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ hw_intf_->GetHWPanelInfo(&hw_panel_info);
+
+ if (set_max_lum_ != -1.0 || set_min_lum_ != -1.0) {
+ hw_panel_info.peak_luminance = set_max_lum_;
+ hw_panel_info.blackness_level = set_min_lum_;
+ DLOGI("set peak_luminance %f blackness_level %f", hw_panel_info.peak_luminance,
+ hw_panel_info.blackness_level);
+ }
+
+ error = hw_intf_->GetMixerAttributes(&mixer_attributes);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ // fb_config will be updated only once after creation of virtual display
+ if (fb_config.x_pixels == 0 || fb_config.y_pixels == 0) {
+ fb_config = display_attributes;
+ }
+
+ // if display is already connected, reconfigure the display with new configuration.
+ if (!display_comp_ctx_) {
+ error = comp_manager_->RegisterDisplay(display_id_, display_type_, display_attributes,
+ hw_panel_info, mixer_attributes, fb_config,
+ &display_comp_ctx_, &(default_qos_data_.clock_hz));
+ } else {
+ error = comp_manager_->ReconfigureDisplay(display_comp_ctx_, display_attributes, hw_panel_info,
+ mixer_attributes, fb_config,
+ &(default_qos_data_.clock_hz));
+ }
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ display_attributes_ = display_attributes;
+ mixer_attributes_ = mixer_attributes;
+ hw_panel_info_ = hw_panel_info;
+ fb_config_ = fb_config;
+
+ DLOGI("Virtual display resolution changed to[%dx%d]", display_attributes_.x_pixels,
+ display_attributes_.y_pixels);
+
+ return kErrorNone;
+}
+
+DisplayError DisplayVirtual::Prepare(LayerStack *layer_stack) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ // Clean hw layers for reuse.
+ hw_layers_ = HWLayers();
+
+ return DisplayBase::Prepare(layer_stack);
+}
+
+DisplayError DisplayVirtual::GetColorModeCount(uint32_t *mode_count) {
+ lock_guard<recursive_mutex> obj(recursive_mutex_);
+
+ // Color Manager isn't supported for virtual displays.
+ *mode_count = 1;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayVirtual::SetPanelLuminanceAttributes(float min_lum, float max_lum) {
+ set_max_lum_ = max_lum;
+ set_min_lum_ = min_lum;
+ return kErrorNone;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/core/display_virtual.h b/sdm/libs/core/display_virtual.h
new file mode 100644
index 0000000..1ae469c
--- /dev/null
+++ b/sdm/libs/core/display_virtual.h
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __DISPLAY_VIRTUAL_H__
+#define __DISPLAY_VIRTUAL_H__
+
+#include <private/hw_info_types.h>
+#include "display_base.h"
+
+namespace sdm {
+
+class HWVirtualInterface;
+
+class DisplayVirtual : public DisplayBase {
+ public:
+ DisplayVirtual(DisplayEventHandler *event_handler, HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler, BufferAllocator *buffer_allocator,
+ CompManager *comp_manager);
+ DisplayVirtual(int32_t display_id, DisplayEventHandler *event_handler,
+ HWInfoInterface *hw_info_intf, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, CompManager *comp_manager);
+ virtual DisplayError Init();
+ virtual DisplayError Prepare(LayerStack *layer_stack);
+ virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
+ virtual DisplayError GetConfig(uint32_t index, DisplayConfigVariableInfo *variable_info);
+ virtual DisplayError GetActiveConfig(uint32_t *index);
+ virtual DisplayError SetActiveConfig(uint32_t index) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetActiveConfig(DisplayConfigVariableInfo *variable_info);
+ virtual DisplayError SetMixerResolution(uint32_t width, uint32_t height) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetPanelLuminanceAttributes(float min_lum, float max_lum);
+ virtual DisplayError SetVSyncState(bool enable) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetRefreshRate(uint32_t refresh_rate, bool final_rate) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetDetailEnhancerData(const DisplayDetailEnhancerData &de_data) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError ValidateGPUTargetParams() {
+ // TODO(user): Validate GPU target for virtual display when query display attributes
+ // on virtual display is functional.
+ return kErrorNone;
+ }
+ virtual DisplayError SetColorTransform(const uint32_t length, const double *color_transform) {
+ return kErrorNone;
+ }
+ virtual DisplayError TeardownConcurrentWriteback(void) { return kErrorNotSupported; }
+ virtual DisplayError GetColorModeCount(uint32_t *mode_count);
+
+ protected:
+ float set_max_lum_ = -1.0;
+ float set_min_lum_ = -1.0;
+};
+
+} // namespace sdm
+
+#endif // __DISPLAY_VIRTUAL_H__
+
diff --git a/sdm/libs/core/drm/hw_color_manager_drm.cpp b/sdm/libs/core/drm/hw_color_manager_drm.cpp
new file mode 100644
index 0000000..12e8205
--- /dev/null
+++ b/sdm/libs/core/drm/hw_color_manager_drm.cpp
@@ -0,0 +1,1036 @@
+/*
+* Copyright (c) 2017-2018, 2020 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#define __CLASS__ "HWColorManagerDRM"
+
+#include <array>
+#include <map>
+#include <cstring>
+#include <vector>
+
+#ifdef PP_DRM_ENABLE
+#include <drm/msm_drm_pp.h>
+#endif
+#include <utils/debug.h>
+#include "hw_color_manager_drm.h"
+
+#ifdef PP_DRM_ENABLE
+static const uint32_t kPgcDataMask = 0x3FF;
+static const uint32_t kPgcShift = 16;
+
+static const uint32_t kIgcDataMask = 0xFFF;
+static const uint32_t kIgcShift = 16;
+
+#ifdef DRM_MSM_PA_HSIC
+static const uint32_t kPAHueMask = (1 << 12);
+static const uint32_t kPASatMask = (1 << 13);
+static const uint32_t kPAValMask = (1 << 14);
+static const uint32_t kPAContrastMask = (1 << 15);
+#endif
+
+#ifdef DRM_MSM_SIXZONE
+static const uint32_t kSixZoneP0Mask = 0x0FFF;
+static const uint32_t kSixZoneP1Mask = 0x0FFF0FFF;
+static const uint32_t kSixZoneHueMask = (1 << 16);
+static const uint32_t kSixZoneSatMask = (1 << 17);
+static const uint32_t kSixZoneValMask = (1 << 18);
+#endif
+
+#ifdef DRM_MSM_MEMCOL
+static const uint32_t kMemColorProtHueMask = (1 << 0);
+static const uint32_t kMemColorProtSatMask = (1 << 1);
+static const uint32_t kMemColorProtValMask = (1 << 2);
+static const uint32_t kMemColorProtContMask = (1 << 3);
+static const uint32_t kMemColorProtSixZoneMask = (1 << 4);
+static const uint32_t kMemColorProtBlendMask = (1 << 5);
+
+static const uint32_t kMemColorProtMask = \
+ (kMemColorProtHueMask | kMemColorProtSatMask | kMemColorProtValMask | \
+ kMemColorProtContMask | kMemColorProtSixZoneMask | kMemColorProtBlendMask);
+
+static const uint32_t kMemColorSkinMask = (1 << 19);
+static const uint32_t kMemColorSkyMask = (1 << 20);
+static const uint32_t kMemColorFolMask = (1 << 21);
+
+static const uint32_t kSourceFeatureV5 = 5;
+#endif
+#endif
+
+namespace sdm {
+
+typedef std::map<uint32_t, std::vector<DRMPPFeatureID>> DrmPPFeatureMap;
+
+static const DrmPPFeatureMap g_dspp_map = {
+ {kGlobalColorFeaturePcc, {kFeaturePcc}},
+ {kGlobalColorFeatureIgc, {kFeatureIgc}},
+ {kGlobalColorFeaturePgc, {kFeaturePgc}},
+ {kMixerColorFeatureGc, {kFeatureMixerGc}},
+ {kGlobalColorFeaturePaV2, {kFeaturePAHsic,
+ kFeaturePASixZone,
+ kFeaturePAMemColSkin,
+ kFeaturePAMemColSky,
+ kFeaturePAMemColFoliage,
+ kFeaturePAMemColProt}},
+ {kGlobalColorFeatureDither, {kFeatureDither}},
+ {kGlobalColorFeatureGamut, {kFeatureGamut}},
+ {kGlobalColorFeaturePADither, {kFeaturePADither}},
+};
+
+static const DrmPPFeatureMap g_vig_map = {
+ {kSourceColorFeatureIgc, {kFeatureVigIgc}},
+ {kSourceColorFeatureGamut, {kFeatureVigGamut}},
+};
+
+static const DrmPPFeatureMap g_dgm_map = {
+ {kSourceColorFeatureIgc, {kFeatureDgmIgc}},
+ {kSourceColorFeatureGc, {kFeatureDgmGc}},
+};
+
+static const std::array<const DrmPPFeatureMap *,
+ static_cast<int>(kPPBlockMax)> feature_map_list = {
+ {&g_dspp_map, &g_vig_map, &g_dgm_map}
+};
+
+DisplayError (*HWColorManagerDrm::pp_features_[])(const PPFeatureInfo &,
+ DRMPPFeatureInfo *) = {
+ [kFeaturePcc] = &HWColorManagerDrm::GetDrmPCC,
+ [kFeatureIgc] = &HWColorManagerDrm::GetDrmIGC,
+ [kFeaturePgc] = &HWColorManagerDrm::GetDrmPGC,
+ [kFeatureMixerGc] = &HWColorManagerDrm::GetDrmMixerGC,
+ [kFeaturePaV2] = NULL,
+ [kFeatureDither] = &HWColorManagerDrm::GetDrmDither,
+ [kFeatureGamut] = &HWColorManagerDrm::GetDrmGamut,
+ [kFeaturePADither] = &HWColorManagerDrm::GetDrmPADither,
+ [kFeaturePAHsic] = &HWColorManagerDrm::GetDrmPAHsic,
+ [kFeaturePASixZone] = &HWColorManagerDrm::GetDrmPASixZone,
+ [kFeaturePAMemColSkin] = &HWColorManagerDrm::GetDrmPAMemColSkin,
+ [kFeaturePAMemColSky] = &HWColorManagerDrm::GetDrmPAMemColSky,
+ [kFeaturePAMemColFoliage] = &HWColorManagerDrm::GetDrmPAMemColFoliage,
+ [kFeaturePAMemColProt] = &HWColorManagerDrm::GetDrmPAMemColProt,
+ [kFeatureDgmIgc] = &HWColorManagerDrm::GetDrmIGC,
+ [kFeatureDgmGc] = &HWColorManagerDrm::GetDrmPGC,
+ [kFeatureVigIgc] = &HWColorManagerDrm::GetDrmIGC,
+ [kFeatureVigGamut] = &HWColorManagerDrm::GetDrmGamut,
+};
+
+uint32_t HWColorManagerDrm::GetFeatureVersion(const DRMPPFeatureInfo &feature) {
+ uint32_t version = PPFeatureVersion::kSDEPpVersionInvalid;
+
+ switch (feature.id) {
+ case kFeaturePcc:
+ if (feature.version == 1) {
+ version = PPFeatureVersion::kSDEPccV17;
+ } else if (feature.version == 4) {
+ version = PPFeatureVersion::kSDEPccV4;
+ }
+ break;
+ case kFeatureIgc:
+ if (feature.version == 3)
+ version = PPFeatureVersion::kSDEIgcV30;
+ break;
+ case kFeaturePgc:
+ if (feature.version == 1)
+ version = PPFeatureVersion::kSDEPgcV17;
+ break;
+ case kFeatureMixerGc:
+ version = PPFeatureVersion::kSDEPgcV17;
+ break;
+ case kFeaturePAHsic:
+ case kFeaturePASixZone:
+ case kFeaturePAMemColSkin:
+ case kFeaturePAMemColSky:
+ case kFeaturePAMemColFoliage:
+ case kFeaturePAMemColProt:
+ if (feature.version == 1)
+ version = PPFeatureVersion::kSDEPaV17;
+ break;
+ case kFeatureDither:
+ version = PPFeatureVersion::kSDEDitherV17;
+ break;
+ case kFeatureGamut:
+ if (feature.version == 1)
+ version = PPFeatureVersion::kSDEGamutV17;
+ else if (feature.version == 4)
+ version = PPFeatureVersion::kSDEGamutV4;
+ break;
+ case kFeaturePADither:
+ version = PPFeatureVersion::kSDEPADitherV17;
+ break;
+ default:
+ break;
+ }
+ return version;
+}
+
+DisplayError HWColorManagerDrm::ToDrmFeatureId(PPBlock block, uint32_t id,
+ std::vector<DRMPPFeatureID> *drm_id) {
+ if (block < kDSPP || block >= kPPBlockMax) {
+ DLOGE("Invalid input parameter, block = %d", (int) block);
+ return kErrorParameters;
+ }
+
+ if (!drm_id) {
+ DLOGE("Invalid output parameter, block = %d", (int) block);
+ return kErrorParameters;
+ }
+
+ auto map = feature_map_list[block];
+ auto drm_features = map->find(id);
+ if (drm_features == map->end()) {
+ return kErrorParameters;
+ }
+ for (DRMPPFeatureID fid : drm_features->second)
+ drm_id->push_back(fid);
+
+ return kErrorNone;
+}
+
+DisplayError HWColorManagerDrm::GetDrmFeature(PPFeatureInfo *in_data,
+ DRMPPFeatureInfo *out_data,
+ bool force_disable) {
+ DisplayError ret = kErrorParameters;
+ uint32_t flags = 0;
+
+ if (!in_data || !out_data) {
+ DLOGE("Invalid input parameter, in_data or out_data is NULL");
+ return ret;
+ }
+
+ /* Cache and override the enable_flags_ if force_disable is requested */
+ if (force_disable) {
+ flags = in_data->enable_flags_;
+ in_data->enable_flags_ = kOpsDisable;
+ }
+
+ if (pp_features_[out_data->id])
+ ret = pp_features_[out_data->id](*in_data, out_data);
+
+
+ /* Restore the original enable_flags_ */
+ if (force_disable) {
+ in_data->enable_flags_ = flags;
+ }
+
+ return ret;
+}
+
+void HWColorManagerDrm::FreeDrmFeatureData(DRMPPFeatureInfo *feature) {
+ if (feature && feature->payload) {
+#ifdef PP_DRM_ENABLE
+ void *ptr = feature->payload;
+#endif
+
+ switch (feature->id) {
+ case kFeaturePcc: {
+#ifdef PP_DRM_ENABLE
+ drm_msm_pcc *pcc = reinterpret_cast<drm_msm_pcc *>(ptr);
+ delete pcc;
+#endif
+ break;
+ }
+ case kFeatureIgc:
+ case kFeatureDgmIgc:
+ case kFeatureVigIgc: {
+#ifdef PP_DRM_ENABLE
+ drm_msm_igc_lut *igc = reinterpret_cast<drm_msm_igc_lut *>(ptr);
+ delete igc;
+#endif
+ break;
+ }
+ case kFeaturePgc:
+ case kFeatureDgmGc: {
+#ifdef PP_DRM_ENABLE
+ drm_msm_pgc_lut *pgc = reinterpret_cast<drm_msm_pgc_lut *>(ptr);
+ delete pgc;
+#endif
+ break;
+ }
+ case kFeatureDither: {
+#ifdef PP_DRM_ENABLE
+ drm_msm_dither *dither = reinterpret_cast<drm_msm_dither *>(ptr);
+ delete dither;
+#endif
+ break;
+ }
+ case kFeatureGamut:
+ case kFeatureVigGamut: {
+#ifdef PP_DRM_ENABLE
+ drm_msm_3d_gamut *gamut = reinterpret_cast<drm_msm_3d_gamut *>(ptr);
+ delete gamut;
+#endif
+ break;
+ }
+ case kFeaturePADither: {
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_PA_DITHER)
+ drm_msm_pa_dither *pa_dither = reinterpret_cast<drm_msm_pa_dither *>(ptr);
+ delete pa_dither;
+#endif
+ break;
+ }
+ case kFeaturePAHsic: {
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_PA_HSIC)
+ drm_msm_pa_hsic *hsic = reinterpret_cast<drm_msm_pa_hsic *>(ptr);
+ delete hsic;
+#endif
+ break;
+ }
+ case kFeaturePASixZone: {
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_SIXZONE)
+ drm_msm_sixzone *sixzone = reinterpret_cast<drm_msm_sixzone *>(ptr);
+ delete sixzone;
+#endif
+ break;
+ }
+ case kFeaturePAMemColSkin:
+ case kFeaturePAMemColSky:
+ case kFeaturePAMemColFoliage:
+ case kFeaturePAMemColProt: {
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_MEMCOL)
+ drm_msm_memcol *memcol = reinterpret_cast<drm_msm_memcol *>(ptr);
+ delete memcol;
+#endif
+ break;
+ }
+ case kFeatureMixerGc:
+ case kFeaturePaV2:
+ default: {
+ DLOGE("Invalid feature: %d\n", feature->id);
+ return;
+ }
+ }
+ feature->payload = nullptr;
+ }
+}
+
+DisplayError HWColorManagerDrm::GetDrmPCC(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ struct SDEPccV4Cfg *sde_pcc = NULL;
+ struct SDEPccV4Coeff *sde_pcc_coeffs = NULL;
+ struct drm_msm_pcc *mdp_pcc = NULL;
+ struct drm_msm_pcc_coeff *mdp_pcc_coeffs = NULL;
+ uint32_t i = 0;
+
+ switch (in_data.feature_version_) {
+ case PPFeatureVersion::kSDEPccV4:
+ sde_pcc = (struct SDEPccV4Cfg *) in_data.GetConfigData();
+ break;
+ default:
+ DLOGE("Unsupported pcc feature version: %d", in_data.feature_version_);
+ return kErrorParameters;
+ }
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = sizeof(struct drm_msm_pcc);
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* feature disable case */
+ out_data->payload = NULL;
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ out_data->payload = NULL;
+ return kErrorParameters;
+ }
+
+ mdp_pcc = new drm_msm_pcc();
+ if (!mdp_pcc) {
+ DLOGE("Failed to allocate memory for pcc");
+ return kErrorMemory;
+ }
+
+ mdp_pcc->flags = 0;
+
+ for (i = 0; i < kMaxPCCChanel; i++) {
+ switch (i) {
+ case 0:
+ sde_pcc_coeffs = &sde_pcc->red;
+ mdp_pcc_coeffs = &mdp_pcc->r;
+ mdp_pcc->r_rr = sde_pcc_coeffs->rr;
+ mdp_pcc->r_gg = sde_pcc_coeffs->gg;
+ mdp_pcc->r_bb = sde_pcc_coeffs->bb;
+ break;
+ case 1:
+ sde_pcc_coeffs = &sde_pcc->green;
+ mdp_pcc_coeffs = &mdp_pcc->g;
+ mdp_pcc->g_rr = sde_pcc_coeffs->rr;
+ mdp_pcc->g_gg = sde_pcc_coeffs->gg;
+ mdp_pcc->g_bb = sde_pcc_coeffs->bb;
+ break;
+ case 2:
+ sde_pcc_coeffs = &sde_pcc->blue;
+ mdp_pcc_coeffs = &mdp_pcc->b;
+ mdp_pcc->b_rr = sde_pcc_coeffs->rr;
+ mdp_pcc->b_gg = sde_pcc_coeffs->gg;
+ mdp_pcc->b_bb = sde_pcc_coeffs->bb;
+ break;
+ }
+ mdp_pcc_coeffs->c = sde_pcc_coeffs->c;
+ mdp_pcc_coeffs->r = sde_pcc_coeffs->r;
+ mdp_pcc_coeffs->g = sde_pcc_coeffs->g;
+ mdp_pcc_coeffs->b = sde_pcc_coeffs->b;
+ mdp_pcc_coeffs->rg = sde_pcc_coeffs->rg;
+ mdp_pcc_coeffs->gb = sde_pcc_coeffs->gb;
+ mdp_pcc_coeffs->rb = sde_pcc_coeffs->rb;
+ mdp_pcc_coeffs->rgb = sde_pcc_coeffs->rgb;
+ }
+ out_data->payload = mdp_pcc;
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmIGC(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ struct SDEIgcV30LUTData *sde_igc;
+ struct drm_msm_igc_lut *mdp_igc;
+ uint32_t *c0_c1_data_ptr = NULL;
+ uint32_t *c2_data_ptr = NULL;
+
+ switch (in_data.feature_version_) {
+ case PPFeatureVersion::kSDEIgcV30:
+ case kSourceFeatureV5:
+ sde_igc = (struct SDEIgcV30LUTData *) in_data.GetConfigData();
+ break;
+ default:
+ DLOGE("Unsupported igc feature version: %d", in_data.feature_version_);
+ return kErrorParameters;
+ }
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = sizeof(struct drm_msm_igc_lut);
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* feature disable case */
+ out_data->payload = NULL;
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ out_data->payload = NULL;
+ return kErrorParameters;
+ }
+
+ mdp_igc = new drm_msm_igc_lut();
+ if (!mdp_igc) {
+ DLOGE("Failed to allocate memory for igc");
+ return kErrorMemory;
+ }
+
+ mdp_igc->flags = IGC_DITHER_ENABLE;
+ mdp_igc->strength = sde_igc->strength;
+
+ c0_c1_data_ptr = reinterpret_cast<uint32_t*>(sde_igc->c0_c1_data);
+ c2_data_ptr = reinterpret_cast<uint32_t*>(sde_igc->c2_data);
+
+ if (!c0_c1_data_ptr || !c2_data_ptr) {
+ DLOGE("Invaid igc data pointer");
+ delete mdp_igc;
+ out_data->payload = NULL;
+ return kErrorParameters;
+ }
+
+ for (int i = 0; i < IGC_TBL_LEN; i++) {
+ mdp_igc->c0[i] = c0_c1_data_ptr[i] & kIgcDataMask;
+ mdp_igc->c1[i] = (c0_c1_data_ptr[i] >> kIgcShift) & kIgcDataMask;
+ mdp_igc->c2[i] = c2_data_ptr[i] & kIgcDataMask;
+ }
+ out_data->payload = mdp_igc;
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmPGC(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ struct SDEPgcLUTData *sde_pgc;
+ struct drm_msm_pgc_lut *mdp_pgc;
+
+ sde_pgc = (struct SDEPgcLUTData *)in_data.GetConfigData();
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = sizeof(struct drm_msm_pgc_lut);
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* feature disable case */
+ out_data->payload = NULL;
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ out_data->payload = NULL;
+ return kErrorParameters;
+ }
+
+ mdp_pgc = new drm_msm_pgc_lut();
+ if (!mdp_pgc) {
+ DLOGE("Failed to allocate memory for pgc");
+ return kErrorMemory;
+ }
+
+ mdp_pgc->flags = 0;
+
+ for (int i = 0, j = 0; i < PGC_TBL_LEN; i++, j += 2) {
+ mdp_pgc->c0[i] = (sde_pgc->c0_data[j] & kPgcDataMask) |
+ (sde_pgc->c0_data[j + 1] & kPgcDataMask) << kPgcShift;
+ mdp_pgc->c1[i] = (sde_pgc->c1_data[j] & kPgcDataMask) |
+ (sde_pgc->c1_data[j + 1] & kPgcDataMask) << kPgcShift;
+ mdp_pgc->c2[i] = (sde_pgc->c2_data[j] & kPgcDataMask) |
+ (sde_pgc->c2_data[j + 1] & kPgcDataMask) << kPgcShift;
+ }
+ out_data->payload = mdp_pgc;
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmMixerGC(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ out_data->id = kPPFeaturesMax;
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmPAHsic(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_PA_HSIC)
+ struct SDEPaData *sde_pa;
+ struct drm_msm_pa_hsic *mdp_hsic;
+
+ sde_pa = (struct SDEPaData *) in_data.GetConfigData();
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = 0;
+ out_data->payload = NULL;
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* Complete PA features disable case */
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ DLOGE("Invalid ops for pa hsic");
+ return kErrorParameters;
+ }
+
+ if (!(sde_pa->mode & (kPAHueMask | kPASatMask |
+ kPAValMask | kPAContrastMask))) {
+ /* PA HSIC feature disable case, but other PA features active */
+ return ret;
+ }
+
+ mdp_hsic = new drm_msm_pa_hsic();
+ if (!mdp_hsic) {
+ DLOGE("Failed to allocate memory for pa hsic");
+ return kErrorMemory;
+ }
+
+ mdp_hsic->flags = 0;
+
+ if (in_data.enable_flags_ & kPaHueEnable) {
+ mdp_hsic->flags |= PA_HSIC_HUE_ENABLE;
+ mdp_hsic->hue = sde_pa->hue_adj;
+ }
+ if (in_data.enable_flags_ & kPaSatEnable) {
+ mdp_hsic->flags |= PA_HSIC_SAT_ENABLE;
+ mdp_hsic->saturation = sde_pa->sat_adj;
+ }
+ if (in_data.enable_flags_ & kPaValEnable) {
+ mdp_hsic->flags |= PA_HSIC_VAL_ENABLE;
+ mdp_hsic->value = sde_pa->val_adj;
+ }
+ if (in_data.enable_flags_ & kPaContEnable) {
+ mdp_hsic->flags |= PA_HSIC_CONT_ENABLE;
+ mdp_hsic->contrast = sde_pa->cont_adj;
+ }
+
+ if (mdp_hsic->flags) {
+ out_data->payload = mdp_hsic;
+ out_data->payload_size = sizeof(struct drm_msm_pa_hsic);
+ } else {
+ /* PA HSIC configuration unchanged, no better return code available */
+ delete mdp_hsic;
+ ret = kErrorPermission;
+ }
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmPASixZone(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_SIXZONE)
+ struct SDEPaData *sde_pa;
+
+ sde_pa = (struct SDEPaData *) in_data.GetConfigData();
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = 0;
+ out_data->payload = NULL;
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* Complete PA features disable case */
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ DLOGE("Invalid ops for six zone");
+ return kErrorParameters;
+ }
+
+ if (!(sde_pa->mode & (kSixZoneHueMask | kSixZoneSatMask |
+ kSixZoneValMask))) {
+ /* PA SixZone feature disable case, but other PA features active */
+ return ret;
+ }
+
+ if (in_data.enable_flags_ & kPaSixZoneEnable) {
+ struct drm_msm_sixzone *mdp_sixzone = NULL;
+
+ if ((!sde_pa->six_zone_curve_p0 || !sde_pa->six_zone_curve_p1) ||
+ (sde_pa->six_zone_len != SIXZONE_LUT_SIZE)) {
+ DLOGE("Invaid sixzone curve");
+ return kErrorParameters;
+ }
+
+ mdp_sixzone = new drm_msm_sixzone();
+ if (!mdp_sixzone) {
+ DLOGE("Failed to allocate memory for six zone");
+ return kErrorMemory;
+ }
+
+ mdp_sixzone->flags = 0;
+
+ if (sde_pa->mode & kSixZoneHueMask) {
+ mdp_sixzone->flags |= SIXZONE_HUE_ENABLE;
+ }
+ if (sde_pa->mode & kSixZoneSatMask) {
+ mdp_sixzone->flags |= SIXZONE_SAT_ENABLE;
+ }
+ if (sde_pa->mode & kSixZoneValMask) {
+ mdp_sixzone->flags |= SIXZONE_VAL_ENABLE;
+ }
+
+ mdp_sixzone->threshold = sde_pa->six_zone_thresh;
+ mdp_sixzone->adjust_p0 = sde_pa->six_zone_adj_p0;
+ mdp_sixzone->adjust_p1 = sde_pa->six_zone_adj_p1;
+ mdp_sixzone->sat_hold = sde_pa->six_zone_sat_hold;
+ mdp_sixzone->val_hold = sde_pa->six_zone_val_hold;
+
+ for (int i = 0; i < SIXZONE_LUT_SIZE; i++) {
+ mdp_sixzone->curve[i].p0 = sde_pa->six_zone_curve_p0[i] & kSixZoneP0Mask;
+ mdp_sixzone->curve[i].p1 = sde_pa->six_zone_curve_p1[i] & kSixZoneP1Mask;
+ }
+ out_data->payload = mdp_sixzone;
+ out_data->payload_size = sizeof(struct drm_msm_sixzone);
+ } else {
+ /* PA SixZone configuration unchanged, no better return code available */
+ ret = kErrorPermission;
+ }
+
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmPAMemColSkin(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_MEMCOL)
+ struct SDEPaData *sde_pa;
+
+ sde_pa = (struct SDEPaData *) in_data.GetConfigData();
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = 0;
+ out_data->payload = NULL;
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* Complete PA features disable case */
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ DLOGE("Invalid ops for memory color skin");
+ return kErrorParameters;
+ }
+
+ if (!(sde_pa->mode & kMemColorSkinMask)) {
+ /* PA MemColSkin feature disable case, but other PA features active */
+ return ret;
+ }
+
+ if (in_data.enable_flags_ & kPaSkinEnable) {
+ struct drm_msm_memcol *mdp_memcol = NULL;
+ struct SDEPaMemColorData *pa_memcol = &sde_pa->skin;
+
+ mdp_memcol = new drm_msm_memcol();
+ if (!mdp_memcol) {
+ DLOGE("Failed to allocate memory for memory color skin");
+ return kErrorMemory;
+ }
+
+ mdp_memcol->prot_flags = 0;
+ mdp_memcol->color_adjust_p0 = pa_memcol->adjust_p0;
+ mdp_memcol->color_adjust_p1 = pa_memcol->adjust_p1;
+ mdp_memcol->color_adjust_p2 = pa_memcol->adjust_p2;
+ mdp_memcol->blend_gain = pa_memcol->blend_gain;
+ mdp_memcol->sat_hold = pa_memcol->sat_hold;
+ mdp_memcol->val_hold = pa_memcol->val_hold;
+ mdp_memcol->hue_region = pa_memcol->hue_region;
+ mdp_memcol->sat_region = pa_memcol->sat_region;
+ mdp_memcol->val_region = pa_memcol->val_region;
+
+ out_data->payload = mdp_memcol;
+ out_data->payload_size = sizeof(struct drm_msm_memcol);
+ } else {
+ /* PA MemColSkin configuration unchanged, no better return code available */
+ ret = kErrorPermission;
+ }
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmPAMemColSky(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_MEMCOL)
+ struct SDEPaData *sde_pa;
+
+ sde_pa = (struct SDEPaData *) in_data.GetConfigData();
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = 0;
+ out_data->payload = NULL;
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* Complete PA features disable case */
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ DLOGE("Invalid ops for memory color sky");
+ return kErrorParameters;
+ }
+
+ if (!(sde_pa->mode & kMemColorSkyMask)) {
+ /* PA MemColSky feature disable case, but other PA features active */
+ return ret;
+ }
+
+ if (in_data.enable_flags_ & kPaSkyEnable) {
+ struct drm_msm_memcol *mdp_memcol = NULL;
+ struct SDEPaMemColorData *pa_memcol = &sde_pa->sky;
+
+ mdp_memcol = new drm_msm_memcol();
+ if (!mdp_memcol) {
+ DLOGE("Failed to allocate memory for memory color sky");
+ return kErrorMemory;
+ }
+
+ mdp_memcol->prot_flags = 0;
+ mdp_memcol->color_adjust_p0 = pa_memcol->adjust_p0;
+ mdp_memcol->color_adjust_p1 = pa_memcol->adjust_p1;
+ mdp_memcol->color_adjust_p2 = pa_memcol->adjust_p2;
+ mdp_memcol->blend_gain = pa_memcol->blend_gain;
+ mdp_memcol->sat_hold = pa_memcol->sat_hold;
+ mdp_memcol->val_hold = pa_memcol->val_hold;
+ mdp_memcol->hue_region = pa_memcol->hue_region;
+ mdp_memcol->sat_region = pa_memcol->sat_region;
+ mdp_memcol->val_region = pa_memcol->val_region;
+
+ out_data->payload = mdp_memcol;
+ out_data->payload_size = sizeof(struct drm_msm_memcol);
+ } else {
+ /* PA MemColSky configuration unchanged, no better return code available */
+ ret = kErrorPermission;
+ }
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmPAMemColFoliage(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_MEMCOL)
+ struct SDEPaData *sde_pa;
+
+ sde_pa = (struct SDEPaData *) in_data.GetConfigData();
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = 0;
+ out_data->payload = NULL;
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* Complete PA features disable case */
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ DLOGE("Invalid ops for memory color foliage");
+ return kErrorParameters;
+ }
+
+ if (!(sde_pa->mode & kMemColorFolMask)) {
+ /* PA MemColFoliage feature disable case, but other PA features active */
+ return ret;
+ }
+
+ if (in_data.enable_flags_ & kPaFoliageEnable) {
+ struct drm_msm_memcol *mdp_memcol = NULL;
+ struct SDEPaMemColorData *pa_memcol = &sde_pa->foliage;
+
+ mdp_memcol = new drm_msm_memcol();
+ if (!mdp_memcol) {
+ DLOGE("Failed to allocate memory for memory color foliage");
+ return kErrorMemory;
+ }
+
+ mdp_memcol->prot_flags = 0;
+ mdp_memcol->color_adjust_p0 = pa_memcol->adjust_p0;
+ mdp_memcol->color_adjust_p1 = pa_memcol->adjust_p1;
+ mdp_memcol->color_adjust_p2 = pa_memcol->adjust_p2;
+ mdp_memcol->blend_gain = pa_memcol->blend_gain;
+ mdp_memcol->sat_hold = pa_memcol->sat_hold;
+ mdp_memcol->val_hold = pa_memcol->val_hold;
+ mdp_memcol->hue_region = pa_memcol->hue_region;
+ mdp_memcol->sat_region = pa_memcol->sat_region;
+ mdp_memcol->val_region = pa_memcol->val_region;
+
+ out_data->payload = mdp_memcol;
+ out_data->payload_size = sizeof(struct drm_msm_memcol);
+ } else {
+ /* PA MemColFoliage configuration unchanged, no better return code available */
+ ret = kErrorPermission;
+ }
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmPAMemColProt(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_MEMCOL)
+ struct SDEPaData *sde_pa;
+ struct drm_msm_memcol *mdp_memcol;
+
+ sde_pa = (struct SDEPaData *) in_data.GetConfigData();
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = sizeof(struct drm_msm_memcol);
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* Complete PA features disable case */
+ out_data->payload = NULL;
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ out_data->payload = NULL;
+ return kErrorParameters;
+ }
+
+ out_data->payload = NULL;
+ if (!(sde_pa->mode & kMemColorProtMask)) {
+ /* PA MemColProt feature disable case, but other PA features active */
+ return ret;
+ }
+
+ mdp_memcol = new drm_msm_memcol();
+ if (!mdp_memcol) {
+ DLOGE("Failed to allocate memory for memory color prot");
+ return kErrorMemory;
+ }
+
+ mdp_memcol->prot_flags = 0;
+
+ if (sde_pa->mode & kMemColorProtMask) {
+ mdp_memcol->prot_flags |= (sde_pa->mode & kMemColorProtMask);
+ }
+
+ out_data->payload = mdp_memcol;
+
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmDither(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ struct SDEDitherCfg *sde_dither = NULL;
+ struct drm_msm_dither *mdp_dither = NULL;
+
+ sde_dither = (struct SDEDitherCfg *)in_data.GetConfigData();
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = sizeof(struct drm_msm_dither);
+
+ if (in_data.enable_flags_ & kOpsDisable) {
+ out_data->payload = NULL;
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ out_data->payload = NULL;
+ return kErrorParameters;
+ }
+
+ mdp_dither = new drm_msm_dither();
+ if (!mdp_dither) {
+ DLOGE("Failed to allocate memory for dither");
+ return kErrorMemory;
+ }
+
+ mdp_dither->flags = 0;
+ std::memcpy(mdp_dither->matrix, sde_dither->dither_matrix,
+ sizeof(sde_dither->dither_matrix));
+ mdp_dither->temporal_en = sde_dither->temporal_en;
+ mdp_dither->c0_bitdepth = sde_dither->g_y_depth;
+ mdp_dither->c1_bitdepth = sde_dither->b_cb_depth;
+ mdp_dither->c2_bitdepth = sde_dither->r_cr_depth;
+ mdp_dither->c3_bitdepth = 0;
+ out_data->payload = mdp_dither;
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmGamut(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#ifdef PP_DRM_ENABLE
+ struct SDEGamutCfg *sde_gamut = NULL;
+ struct drm_msm_3d_gamut *mdp_gamut = NULL;
+ uint32_t size = 0;
+
+ sde_gamut = (struct SDEGamutCfg *)in_data.GetConfigData();
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+ out_data->payload_size = sizeof(struct drm_msm_3d_gamut);
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* feature disable case */
+ out_data->payload = NULL;
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ out_data->payload = NULL;
+ return kErrorParameters;
+ }
+
+ mdp_gamut = new drm_msm_3d_gamut();
+ if (!mdp_gamut) {
+ DLOGE("Failed to allocate memory for gamut");
+ return kErrorMemory;
+ }
+
+ if (sde_gamut->map_en)
+ mdp_gamut->flags = GAMUT_3D_MAP_EN;
+ else
+ mdp_gamut->flags = 0;
+
+ switch (sde_gamut->mode) {
+ case SDEGamutCfgWrapper::GAMUT_FINE_MODE:
+ mdp_gamut->mode = GAMUT_3D_MODE_17;
+ size = GAMUT_3D_MODE17_TBL_SZ;
+ break;
+ case SDEGamutCfgWrapper::GAMUT_COARSE_MODE:
+ mdp_gamut->mode = GAMUT_3D_MODE_5;
+ size = GAMUT_3D_MODE5_TBL_SZ;
+ break;
+ case SDEGamutCfgWrapper::GAMUT_COARSE_MODE_13:
+ mdp_gamut->mode = GAMUT_3D_MODE_13;
+ size = GAMUT_3D_MODE13_TBL_SZ;
+ break;
+ default:
+ DLOGE("Invalid gamut mode %d", sde_gamut->mode);
+ delete mdp_gamut;
+ return kErrorParameters;
+ }
+
+ if (sde_gamut->map_en) {
+ std::memcpy(&mdp_gamut->scale_off[0][0], sde_gamut->scale_off_data[0],
+ sizeof(uint32_t) * GAMUT_3D_SCALE_OFF_SZ);
+ std::memcpy(&mdp_gamut->scale_off[1][0], sde_gamut->scale_off_data[1],
+ sizeof(uint32_t) * GAMUT_3D_SCALE_OFF_SZ);
+ std::memcpy(&mdp_gamut->scale_off[2][0], sde_gamut->scale_off_data[2],
+ sizeof(uint32_t) * GAMUT_3D_SCALE_OFF_SZ);
+ }
+
+ for (uint32_t row = 0; row < GAMUT_3D_TBL_NUM; row++) {
+ for (uint32_t col = 0; col < size; col++) {
+ mdp_gamut->col[row][col].c0 = sde_gamut->c0_data[row][col];
+ mdp_gamut->col[row][col].c2_c1 = sde_gamut->c1_c2_data[row][col];
+ }
+ }
+ out_data->payload = mdp_gamut;
+#endif
+ return ret;
+}
+
+DisplayError HWColorManagerDrm::GetDrmPADither(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data) {
+ DisplayError ret = kErrorNone;
+#if defined(PP_DRM_ENABLE) && defined(DRM_MSM_PA_DITHER)
+ struct SDEPADitherData* sde_dither;
+ struct drm_msm_pa_dither* mdp_dither;
+
+ out_data->type = sde_drm::kPropBlob;
+ out_data->version = in_data.feature_version_;
+
+ out_data->payload_size = sizeof(struct drm_msm_pa_dither);
+ if (in_data.enable_flags_ & kOpsDisable) {
+ /* feature disable case */
+ out_data->payload = NULL;
+ return ret;
+ } else if (!(in_data.enable_flags_ & kOpsEnable)) {
+ out_data->payload = NULL;
+ return kErrorParameters;
+ }
+
+ sde_dither = (struct SDEPADitherData *)in_data.GetConfigData();
+ if (sde_dither->matrix_size != DITHER_MATRIX_SZ) {
+ DLOGE("Invalid dither matrix size %d, exp sz %d",
+ sde_dither->matrix_size, DITHER_MATRIX_SZ);
+ return kErrorParameters;
+ }
+
+ mdp_dither = new drm_msm_pa_dither();
+ if (!mdp_dither) {
+ DLOGE("Failed to allocate memory for dither");
+ return kErrorMemory;
+ }
+
+ mdp_dither->flags = 0;
+ mdp_dither->strength = sde_dither->strength;
+ mdp_dither->offset_en = sde_dither->offset_en;
+ std::memcpy(&mdp_dither->matrix[0],
+ reinterpret_cast<void*>(sde_dither->matrix_data_addr),
+ sizeof(uint32_t) * DITHER_MATRIX_SZ);
+ out_data->payload = mdp_dither;
+#endif
+ return ret;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/drm/hw_color_manager_drm.h b/sdm/libs/core/drm/hw_color_manager_drm.h
new file mode 100644
index 0000000..66415e0
--- /dev/null
+++ b/sdm/libs/core/drm/hw_color_manager_drm.h
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __HW_COLOR_MANAGER_DRM_H__
+#define __HW_COLOR_MANAGER_DRM_H__
+
+#include <drm_interface.h>
+#include <private/color_params.h>
+#include <vector>
+
+using sde_drm::DRMPPFeatureID;
+using sde_drm::DRMPPFeatureInfo;
+
+using sde_drm::kFeaturePcc;
+using sde_drm::kFeatureIgc;
+using sde_drm::kFeaturePgc;
+using sde_drm::kFeatureMixerGc;
+using sde_drm::kFeaturePaV2;
+using sde_drm::kFeatureDither;
+using sde_drm::kFeatureGamut;
+using sde_drm::kFeaturePADither;
+using sde_drm::kFeaturePAHsic;
+using sde_drm::kFeaturePASixZone;
+using sde_drm::kFeaturePAMemColSkin;
+using sde_drm::kFeaturePAMemColSky;
+using sde_drm::kFeaturePAMemColFoliage;
+using sde_drm::kFeaturePAMemColProt;
+using sde_drm::kPPFeaturesMax;
+using sde_drm::kFeatureDgmIgc;
+using sde_drm::kFeatureDgmGc;
+using sde_drm::kFeatureVigIgc;
+using sde_drm::kFeatureVigGamut;
+
+namespace sdm {
+
+static const uint32_t kMaxPCCChanel = 3;
+
+enum PPBlock {
+ kDSPP,
+ kVIG,
+ kDGM,
+ kPPBlockMax,
+};
+
+class HWColorManagerDrm {
+ public:
+ DisplayError GetDrmFeature(PPFeatureInfo *in_data, DRMPPFeatureInfo *out_data,
+ bool force_disable = false);
+ void FreeDrmFeatureData(DRMPPFeatureInfo *feature);
+ uint32_t GetFeatureVersion(const DRMPPFeatureInfo &feature);
+ DisplayError ToDrmFeatureId(const PPBlock block, const uint32_t id,
+ std::vector<DRMPPFeatureID> *drm_id);
+ HWColorManagerDrm() {}
+ ~HWColorManagerDrm() {}
+
+ private:
+ static DisplayError GetDrmPCC(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmIGC(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmPGC(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmMixerGC(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmDither(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmGamut(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmPADither(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmPAHsic(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmPASixZone(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmPAMemColSkin(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmPAMemColSky(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmPAMemColFoliage(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data);
+ static DisplayError GetDrmPAMemColProt(const PPFeatureInfo &in_data, DRMPPFeatureInfo *out_data);
+
+ static DisplayError (*pp_features_[kPPFeaturesMax])(const PPFeatureInfo &in_data,
+ DRMPPFeatureInfo *out_data);
+};
+
+} // namespace sdm
+
+#endif // __HW_COLOR_MANAGER_DRM_H__
diff --git a/sdm/libs/core/drm/hw_device_drm.cpp b/sdm/libs/core/drm/hw_device_drm.cpp
new file mode 100644
index 0000000..da5c271
--- /dev/null
+++ b/sdm/libs/core/drm/hw_device_drm.cpp
@@ -0,0 +1,2197 @@
+/*
+* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#define __STDC_FORMAT_MACROS
+
+#include <ctype.h>
+#include <drm/drm_fourcc.h>
+#include <drm_lib_loader.h>
+#include <drm_master.h>
+#include <drm_res_mgr.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <linux/fb.h>
+#include <math.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/formats.h>
+#include <utils/sys.h>
+#include <drm/sde_drm.h>
+#include <private/color_params.h>
+#include <utils/rect.h>
+#include <utils/utils.h>
+
+#include <sstream>
+#include <ctime>
+#include <algorithm>
+#include <string>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+#include <limits>
+
+#include "hw_device_drm.h"
+#include "hw_info_interface.h"
+
+#define __CLASS__ "HWDeviceDRM"
+
+#ifndef DRM_FORMAT_MOD_QCOM_COMPRESSED
+#define DRM_FORMAT_MOD_QCOM_COMPRESSED fourcc_mod_code(QCOM, 1)
+#endif
+#ifndef DRM_FORMAT_MOD_QCOM_DX
+#define DRM_FORMAT_MOD_QCOM_DX fourcc_mod_code(QCOM, 0x2)
+#endif
+#ifndef DRM_FORMAT_MOD_QCOM_TIGHT
+#define DRM_FORMAT_MOD_QCOM_TIGHT fourcc_mod_code(QCOM, 0x4)
+#endif
+
+using std::string;
+using std::to_string;
+using std::fstream;
+using std::unordered_map;
+using std::stringstream;
+using std::ifstream;
+using std::ofstream;
+using drm_utils::DRMMaster;
+using drm_utils::DRMResMgr;
+using drm_utils::DRMLibLoader;
+using drm_utils::DRMBuffer;
+using sde_drm::GetDRMManager;
+using sde_drm::DestroyDRMManager;
+using sde_drm::DRMDisplayType;
+using sde_drm::DRMDisplayToken;
+using sde_drm::DRMConnectorInfo;
+using sde_drm::DRMPPFeatureInfo;
+using sde_drm::DRMRect;
+using sde_drm::DRMRotation;
+using sde_drm::DRMBlendType;
+using sde_drm::DRMSrcConfig;
+using sde_drm::DRMOps;
+using sde_drm::DRMTopology;
+using sde_drm::DRMSecureMode;
+using sde_drm::DRMSecurityLevel;
+using sde_drm::DRMCscType;
+using sde_drm::DRMMultiRectMode;
+
+namespace sdm {
+
+static PPBlock GetPPBlock(const HWToneMapLut &lut_type) {
+ PPBlock pp_block = kPPBlockMax;
+ switch (lut_type) {
+ case kDma1dIgc:
+ case kDma1dGc:
+ pp_block = kDGM;
+ break;
+ case kVig1dIgc:
+ case kVig3dGamut:
+ pp_block = kVIG;
+ break;
+ default:
+ DLOGE("Unknown PP Block");
+ break;
+ }
+ return pp_block;
+}
+
+static void GetDRMFormat(LayerBufferFormat format, uint32_t *drm_format,
+ uint64_t *drm_format_modifier) {
+ switch (format) {
+ case kFormatRGBA8888:
+ *drm_format = DRM_FORMAT_ABGR8888;
+ break;
+ case kFormatRGBA8888Ubwc:
+ *drm_format = DRM_FORMAT_ABGR8888;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ break;
+ case kFormatRGBA5551:
+ *drm_format = DRM_FORMAT_ABGR1555;
+ break;
+ case kFormatRGBA4444:
+ *drm_format = DRM_FORMAT_ABGR4444;
+ break;
+ case kFormatBGRA8888:
+ *drm_format = DRM_FORMAT_ARGB8888;
+ break;
+ case kFormatRGBX8888:
+ *drm_format = DRM_FORMAT_XBGR8888;
+ break;
+ case kFormatRGBX8888Ubwc:
+ *drm_format = DRM_FORMAT_XBGR8888;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ break;
+ case kFormatBGRX8888:
+ *drm_format = DRM_FORMAT_XRGB8888;
+ break;
+ case kFormatRGB888:
+ *drm_format = DRM_FORMAT_BGR888;
+ break;
+ case kFormatRGB565:
+ *drm_format = DRM_FORMAT_BGR565;
+ break;
+ case kFormatBGR565:
+ *drm_format = DRM_FORMAT_RGB565;
+ break;
+ case kFormatBGR565Ubwc:
+ *drm_format = DRM_FORMAT_BGR565;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ break;
+ case kFormatRGBA1010102:
+ *drm_format = DRM_FORMAT_ABGR2101010;
+ break;
+ case kFormatRGBA1010102Ubwc:
+ *drm_format = DRM_FORMAT_ABGR2101010;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ break;
+ case kFormatARGB2101010:
+ *drm_format = DRM_FORMAT_BGRA1010102;
+ break;
+ case kFormatRGBX1010102:
+ *drm_format = DRM_FORMAT_XBGR2101010;
+ break;
+ case kFormatRGBX1010102Ubwc:
+ *drm_format = DRM_FORMAT_XBGR2101010;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ break;
+ case kFormatXRGB2101010:
+ *drm_format = DRM_FORMAT_BGRX1010102;
+ break;
+ case kFormatBGRA1010102:
+ *drm_format = DRM_FORMAT_ARGB2101010;
+ break;
+ case kFormatABGR2101010:
+ *drm_format = DRM_FORMAT_RGBA1010102;
+ break;
+ case kFormatBGRX1010102:
+ *drm_format = DRM_FORMAT_XRGB2101010;
+ break;
+ case kFormatXBGR2101010:
+ *drm_format = DRM_FORMAT_RGBX1010102;
+ break;
+ case kFormatYCbCr420SemiPlanar:
+ *drm_format = DRM_FORMAT_NV12;
+ break;
+ case kFormatYCbCr420SemiPlanarVenus:
+ *drm_format = DRM_FORMAT_NV12;
+ break;
+ case kFormatYCbCr420SPVenusUbwc:
+ *drm_format = DRM_FORMAT_NV12;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED;
+ break;
+ case kFormatYCbCr420SPVenusTile:
+ *drm_format = DRM_FORMAT_NV12;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_TILE;
+ break;
+ case kFormatYCrCb420SemiPlanar:
+ *drm_format = DRM_FORMAT_NV21;
+ break;
+ case kFormatYCrCb420SemiPlanarVenus:
+ *drm_format = DRM_FORMAT_NV21;
+ break;
+ case kFormatYCbCr420P010:
+ case kFormatYCbCr420P010Venus:
+ *drm_format = DRM_FORMAT_NV12;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_DX;
+ break;
+ case kFormatYCbCr420P010Ubwc:
+ *drm_format = DRM_FORMAT_NV12;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED |
+ DRM_FORMAT_MOD_QCOM_DX;
+ break;
+ case kFormatYCbCr420P010Tile:
+ *drm_format = DRM_FORMAT_NV12;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_TILE |
+ DRM_FORMAT_MOD_QCOM_DX;
+ break;
+ case kFormatYCbCr420TP10Ubwc:
+ *drm_format = DRM_FORMAT_NV12;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_COMPRESSED |
+ DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT;
+ break;
+ case kFormatYCbCr420TP10Tile:
+ *drm_format = DRM_FORMAT_NV12;
+ *drm_format_modifier = DRM_FORMAT_MOD_QCOM_TILE |
+ DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT;
+ break;
+ case kFormatYCbCr422H2V1SemiPlanar:
+ *drm_format = DRM_FORMAT_NV16;
+ break;
+ case kFormatYCrCb422H2V1SemiPlanar:
+ *drm_format = DRM_FORMAT_NV61;
+ break;
+ case kFormatYCrCb420PlanarStride16:
+ *drm_format = DRM_FORMAT_YVU420;
+ break;
+ default:
+ DLOGW("Unsupported format %s", GetFormatString(format));
+ }
+}
+
+class FrameBufferObject : public LayerBufferObject {
+ public:
+ explicit FrameBufferObject(uint32_t fb_id, LayerBufferFormat format,
+ uint32_t width, uint32_t height)
+ :fb_id_(fb_id), format_(format), width_(width), height_(height) {
+ }
+
+ ~FrameBufferObject() {
+ DRMMaster *master;
+ DRMMaster::GetInstance(&master);
+ int ret = master->RemoveFbId(fb_id_);
+ if (ret < 0) {
+ DLOGE("Removing fb_id %d failed with error %d", fb_id_, errno);
+ }
+ }
+ uint32_t GetFbId() { return fb_id_; }
+ bool IsEqual(LayerBufferFormat format, uint32_t width, uint32_t height) {
+ return (format == format_ && width == width_ && height == height_);
+ }
+
+ private:
+ uint32_t fb_id_;
+ LayerBufferFormat format_;
+ uint32_t width_;
+ uint32_t height_;
+};
+
+HWDeviceDRM::Registry::Registry(BufferAllocator *buffer_allocator) :
+ buffer_allocator_(buffer_allocator) {
+ int value = 0;
+ if (Debug::GetProperty(DISABLE_FBID_CACHE, &value) == kErrorNone) {
+ disable_fbid_cache_ = (value == 1);
+ }
+}
+
+void HWDeviceDRM::Registry::Register(HWLayers *hw_layers) {
+ HWLayersInfo &hw_layer_info = hw_layers->info;
+ uint32_t hw_layer_count = UINT32(hw_layer_info.hw_layers.size());
+
+ DTRACE_SCOPED();
+ for (uint32_t i = 0; i < hw_layer_count; i++) {
+ Layer &layer = hw_layer_info.hw_layers.at(i);
+ LayerBuffer *input_buffer = &layer.input_buffer;
+ HWRotatorSession *hw_rotator_session = &hw_layers->config[i].hw_rotator_session;
+ HWRotateInfo *hw_rotate_info = &hw_rotator_session->hw_rotate_info[0];
+ fbid_cache_limit_ = input_buffer->flags.video ? VIDEO_FBID_LIMIT : UI_FBID_LIMIT;
+
+ if (hw_rotator_session->mode == kRotatorOffline && hw_rotate_info->valid) {
+ input_buffer = &hw_rotator_session->output_buffer;
+ fbid_cache_limit_ = OFFLINE_ROTATOR_FBID_LIMIT;
+ }
+
+ // layer input buffer map to fb id also applies for inline rot
+ if (hw_rotator_session->mode == kRotatorInline && hw_rotate_info->valid &&
+ hw_rotator_session->output_buffer.planes[0].fd >= 0) {
+ fbid_cache_limit_ += 1; // account for inline rot scratch buffer
+ MapBufferToFbId(&layer, &hw_rotator_session->output_buffer);
+ }
+
+ MapBufferToFbId(&layer, input_buffer);
+ }
+}
+
+int HWDeviceDRM::Registry::CreateFbId(LayerBuffer *buffer, uint32_t *fb_id) {
+ DRMMaster *master = nullptr;
+ DRMMaster::GetInstance(&master);
+ int ret = -1;
+
+ if (!master) {
+ DLOGE("Failed to acquire DRM Master instance");
+ return ret;
+ }
+
+ DRMBuffer layout{};
+ AllocatedBufferInfo buf_info{};
+ buf_info.fd = layout.fd = buffer->planes[0].fd;
+ buf_info.aligned_width = layout.width = buffer->width;
+ buf_info.aligned_height = layout.height = buffer->height;
+ buf_info.format = buffer->format;
+ GetDRMFormat(buf_info.format, &layout.drm_format, &layout.drm_format_modifier);
+ buffer_allocator_->GetBufferLayout(buf_info, layout.stride, layout.offset, &layout.num_planes);
+ ret = master->CreateFbId(layout, fb_id);
+ if (ret < 0) {
+ DLOGE("CreateFbId failed. width %d, height %d, format: %s, stride %u, error %d",
+ layout.width, layout.height, GetFormatString(buf_info.format), layout.stride[0], errno);
+ }
+
+ return ret;
+}
+
+void HWDeviceDRM::Registry::MapBufferToFbId(Layer* layer, LayerBuffer* buffer) {
+ if (buffer->planes[0].fd < 0) {
+ return;
+ }
+
+ uint64_t handle_id = buffer->handle_id;
+ if (!handle_id || disable_fbid_cache_) {
+ // In legacy path, clear fb_id map in each frame.
+ layer->buffer_map->buffer_map.clear();
+ } else {
+ auto it = layer->buffer_map->buffer_map.find(handle_id);
+ if (it != layer->buffer_map->buffer_map.end()) {
+ FrameBufferObject *fb_obj = static_cast<FrameBufferObject*>(it->second.get());
+ if (fb_obj->IsEqual(buffer->format, buffer->width, buffer->height)) {
+ // Found fb_id for given handle_id key
+ return;
+ } else {
+ // Erase from fb_id map if format or size have been modified
+ layer->buffer_map->buffer_map.erase(it);
+ }
+ }
+
+ if (layer->buffer_map->buffer_map.size() >= fbid_cache_limit_) {
+ // Clear fb_id map, if the size reaches cache limit.
+ layer->buffer_map->buffer_map.clear();
+ }
+ }
+
+ uint32_t fb_id = 0;
+ if (CreateFbId(buffer, &fb_id) >= 0) {
+ // Create and cache the fb_id in map
+ layer->buffer_map->buffer_map[handle_id] = std::make_shared<FrameBufferObject>(fb_id,
+ buffer->format, buffer->width, buffer->height);
+ }
+}
+
+void HWDeviceDRM::Registry::MapOutputBufferToFbId(LayerBuffer *output_buffer) {
+ if (output_buffer->planes[0].fd < 0) {
+ return;
+ }
+
+ uint64_t handle_id = output_buffer->handle_id;
+ if (!handle_id || disable_fbid_cache_) {
+ // In legacy path, clear output buffer map in each frame.
+ output_buffer_map_.clear();
+ } else {
+ auto it = output_buffer_map_.find(handle_id);
+ if (it != output_buffer_map_.end()) {
+ FrameBufferObject *fb_obj = static_cast<FrameBufferObject*>(it->second.get());
+ if (fb_obj->IsEqual(output_buffer->format, output_buffer->width, output_buffer->height)) {
+ return;
+ } else {
+ output_buffer_map_.erase(it);
+ }
+ }
+
+ if (output_buffer_map_.size() >= UI_FBID_LIMIT) {
+ // Clear output buffer map, if the size reaches cache limit.
+ output_buffer_map_.clear();
+ }
+ }
+
+ uint32_t fb_id = 0;
+ if (CreateFbId(output_buffer, &fb_id) >= 0) {
+ output_buffer_map_[handle_id] = std::make_shared<FrameBufferObject>(fb_id,
+ output_buffer->format, output_buffer->width, output_buffer->height);
+ }
+}
+
+void HWDeviceDRM::Registry::Clear() {
+ output_buffer_map_.clear();
+}
+
+uint32_t HWDeviceDRM::Registry::GetFbId(Layer *layer, uint64_t handle_id) {
+ auto it = layer->buffer_map->buffer_map.find(handle_id);
+ if (it != layer->buffer_map->buffer_map.end()) {
+ FrameBufferObject *fb_obj = static_cast<FrameBufferObject*>(it->second.get());
+ return fb_obj->GetFbId();
+ }
+
+ return 0;
+}
+
+uint32_t HWDeviceDRM::Registry::GetOutputFbId(uint64_t handle_id) {
+ auto it = output_buffer_map_.find(handle_id);
+ if (it != output_buffer_map_.end()) {
+ FrameBufferObject *fb_obj = static_cast<FrameBufferObject*>(it->second.get());
+ return fb_obj->GetFbId();
+ }
+
+ return 0;
+}
+
+HWDeviceDRM::HWDeviceDRM(BufferSyncHandler *buffer_sync_handler, BufferAllocator *buffer_allocator,
+ HWInfoInterface *hw_info_intf)
+ : hw_info_intf_(hw_info_intf), buffer_sync_handler_(buffer_sync_handler),
+ registry_(buffer_allocator) {
+ hw_info_intf_ = hw_info_intf;
+}
+
+DisplayError HWDeviceDRM::Init() {
+ int ret = 0;
+ DRMMaster *drm_master = {};
+ DRMMaster::GetInstance(&drm_master);
+ drm_master->GetHandle(&dev_fd_);
+ DRMLibLoader::GetInstance()->FuncGetDRMManager()(dev_fd_, &drm_mgr_intf_);
+
+ if (-1 == display_id_) {
+ if (drm_mgr_intf_->RegisterDisplay(disp_type_, &token_)) {
+ DLOGE("RegisterDisplay (by type) failed for %s", device_name_);
+ return kErrorResources;
+ }
+ } else if (drm_mgr_intf_->RegisterDisplay(display_id_, &token_)) {
+ DLOGE("RegisterDisplay (by id) failed for %s - %d", device_name_, display_id_);
+ return kErrorResources;
+ }
+
+ if (token_.conn_id > INT32_MAX) {
+ DLOGE("Connector id %u beyond supported range", token_.conn_id);
+ drm_mgr_intf_->UnregisterDisplay(&token_);
+ return kErrorNotSupported;
+ }
+
+ display_id_ = static_cast<int32_t>(token_.conn_id);
+
+ ret = drm_mgr_intf_->CreateAtomicReq(token_, &drm_atomic_intf_);
+ if (ret) {
+ DLOGE("Failed creating atomic request for connector id %u. Error: %d.", token_.conn_id, ret);
+ drm_mgr_intf_->UnregisterDisplay(&token_);
+ return kErrorResources;
+ }
+
+ ret = drm_mgr_intf_->GetConnectorInfo(token_.conn_id, &connector_info_);
+ if (ret) {
+ DLOGE("Failed getting info for connector id %u. Error: %d.", token_.conn_id, ret);
+ drm_mgr_intf_->DestroyAtomicReq(drm_atomic_intf_);
+ drm_atomic_intf_ = {};
+ drm_mgr_intf_->UnregisterDisplay(&token_);
+ return kErrorHardware;
+ }
+
+ if (!connector_info_.is_connected || connector_info_.modes.empty()) {
+ DLOGW("Device removal detected on connector id %u. Connector status %s and %d modes.",
+ token_.conn_id, connector_info_.is_connected ? "connected":"disconnected",
+ connector_info_.modes.size());
+ drm_mgr_intf_->DestroyAtomicReq(drm_atomic_intf_);
+ drm_atomic_intf_ = {};
+ drm_mgr_intf_->UnregisterDisplay(&token_);
+ return kErrorDeviceRemoved;
+ }
+
+ hw_info_intf_->GetHWResourceInfo(&hw_resource_);
+
+ InitializeConfigs();
+ PopulateHWPanelInfo();
+ UpdateMixerAttributes();
+
+ // TODO(user): In future, remove has_qseed3 member, add version and pass version to constructor
+ if (hw_resource_.has_qseed3) {
+ hw_scale_ = new HWScaleDRM(HWScaleDRM::Version::V2);
+ }
+
+ std::unique_ptr<HWColorManagerDrm> hw_color_mgr(new HWColorManagerDrm());
+ hw_color_mgr_ = std::move(hw_color_mgr);
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::Deinit() {
+ DisplayError err = kErrorNone;
+ if (!first_cycle_) {
+ // A null-commit is needed only if the first commit had gone through. e.g., If a pluggable
+ // display is plugged in and plugged out immediately, HWDeviceDRM::Deinit() may be called
+ // before any commit happened on the device. The driver may have removed any not-in-use
+ // connector (i.e., any connector which did not have a display commit on it and a crtc path
+ // setup), so token_.conn_id may have been removed if there was no commit, resulting in
+ // drmModeAtomicCommit() failure with ENOENT, 'No such file or directory'.
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_CRTC, token_.conn_id, 0);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_POWER_MODE, token_.conn_id, DRMPowerMode::OFF);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_MODE, token_.crtc_id, nullptr);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ACTIVE, token_.crtc_id, 0);
+ int ret = NullCommit(true /* synchronous */, false /* retain_planes */);
+ if (ret) {
+ DLOGE("Commit failed with error: %d", ret);
+ err = kErrorHardware;
+ }
+ }
+ delete hw_scale_;
+ registry_.Clear();
+ display_attributes_ = {};
+ drm_mgr_intf_->DestroyAtomicReq(drm_atomic_intf_);
+ drm_atomic_intf_ = {};
+ drm_mgr_intf_->UnregisterDisplay(&token_);
+ return err;
+}
+
+DisplayError HWDeviceDRM::GetDisplayId(int32_t *display_id) {
+ *display_id = display_id_;
+ return kErrorNone;
+}
+
+void HWDeviceDRM::InitializeConfigs() {
+ current_mode_index_ = 0;
+ // Update current mode with preferred mode
+ for (uint32_t mode_index = 0; mode_index < connector_info_.modes.size(); mode_index++) {
+ if (connector_info_.modes[mode_index].mode.type & DRM_MODE_TYPE_PREFERRED) {
+ DLOGI("Updating current display mode %d to preferred mode %d.", current_mode_index_,
+ mode_index);
+ current_mode_index_ = mode_index;
+ break;
+ }
+ }
+
+ display_attributes_.resize(connector_info_.modes.size());
+
+ uint32_t width = connector_info_.modes[current_mode_index_].mode.hdisplay;
+ uint32_t height = connector_info_.modes[current_mode_index_].mode.vdisplay;
+ for (uint32_t i = 0; i < connector_info_.modes.size(); i++) {
+ auto &mode = connector_info_.modes[i].mode;
+ if (mode.hdisplay != width || mode.vdisplay != height) {
+ resolution_switch_enabled_ = true;
+ }
+ PopulateDisplayAttributes(i);
+ }
+ SetDisplaySwitchMode(current_mode_index_);
+}
+
+DisplayError HWDeviceDRM::PopulateDisplayAttributes(uint32_t index) {
+ drmModeModeInfo mode = {};
+ uint32_t mm_width = 0;
+ uint32_t mm_height = 0;
+ DRMTopology topology = DRMTopology::SINGLE_LM;
+
+ if (default_mode_) {
+ DRMResMgr *res_mgr = nullptr;
+ int ret = DRMResMgr::GetInstance(&res_mgr);
+ if (ret < 0) {
+ DLOGE("Failed to acquire DRMResMgr instance");
+ return kErrorResources;
+ }
+
+ res_mgr->GetMode(&mode);
+ res_mgr->GetDisplayDimInMM(&mm_width, &mm_height);
+ } else {
+ mode = connector_info_.modes[index].mode;
+ mm_width = connector_info_.mmWidth;
+ mm_height = connector_info_.mmHeight;
+ topology = connector_info_.modes[index].topology;
+ if (mode.flags & DRM_MODE_FLAG_CMD_MODE_PANEL) {
+ display_attributes_[index].smart_panel = true;
+ }
+ }
+
+ display_attributes_[index].x_pixels = mode.hdisplay;
+ display_attributes_[index].y_pixels = mode.vdisplay;
+ display_attributes_[index].fps = mode.vrefresh;
+ display_attributes_[index].vsync_period_ns =
+ UINT32(1000000000L / display_attributes_[index].fps);
+
+ /*
+ Active Front Sync Back
+ Region Porch Porch
+ <-----------------------><----------------><-------------><-------------->
+ <----- [hv]display ----->
+ <------------- [hv]sync_start ------------>
+ <--------------------- [hv]sync_end --------------------->
+ <-------------------------------- [hv]total ----------------------------->
+ */
+
+ display_attributes_[index].v_front_porch = mode.vsync_start - mode.vdisplay;
+ display_attributes_[index].v_pulse_width = mode.vsync_end - mode.vsync_start;
+ display_attributes_[index].v_back_porch = mode.vtotal - mode.vsync_end;
+ display_attributes_[index].v_total = mode.vtotal;
+ display_attributes_[index].h_total = mode.htotal;
+ display_attributes_[index].is_device_split =
+ (topology == DRMTopology::DUAL_LM || topology == DRMTopology::DUAL_LM_MERGE ||
+ topology == DRMTopology::DUAL_LM_MERGE_DSC || topology == DRMTopology::DUAL_LM_DSC ||
+ topology == DRMTopology::DUAL_LM_DSCMERGE);
+ display_attributes_[index].clock_khz = mode.clock;
+
+ // If driver doesn't return panel width/height information, default to 320 dpi
+ if (INT(mm_width) <= 0 || INT(mm_height) <= 0) {
+ mm_width = UINT32(((FLOAT(mode.hdisplay) * 25.4f) / 320.0f) + 0.5f);
+ mm_height = UINT32(((FLOAT(mode.vdisplay) * 25.4f) / 320.0f) + 0.5f);
+ DLOGW("Driver doesn't report panel physical width and height - defaulting to 320dpi");
+ }
+
+ display_attributes_[index].x_dpi = (FLOAT(mode.hdisplay) * 25.4f) / FLOAT(mm_width);
+ display_attributes_[index].y_dpi = (FLOAT(mode.vdisplay) * 25.4f) / FLOAT(mm_height);
+ SetTopology(topology, &display_attributes_[index].topology);
+
+ DLOGI("Display attributes[%d]: WxH: %dx%d, DPI: %fx%f, FPS: %d, LM_SPLIT: %d, V_BACK_PORCH: %d," \
+ " V_FRONT_PORCH: %d, V_PULSE_WIDTH: %d, V_TOTAL: %d, H_TOTAL: %d, CLK: %dKHZ, TOPOLOGY: %d",
+ index, display_attributes_[index].x_pixels, display_attributes_[index].y_pixels,
+ display_attributes_[index].x_dpi, display_attributes_[index].y_dpi,
+ display_attributes_[index].fps, display_attributes_[index].is_device_split,
+ display_attributes_[index].v_back_porch, display_attributes_[index].v_front_porch,
+ display_attributes_[index].v_pulse_width, display_attributes_[index].v_total,
+ display_attributes_[index].h_total, display_attributes_[index].clock_khz,
+ display_attributes_[index].topology);
+
+ return kErrorNone;
+}
+
+void HWDeviceDRM::PopulateHWPanelInfo() {
+ hw_panel_info_ = {};
+
+ snprintf(hw_panel_info_.panel_name, sizeof(hw_panel_info_.panel_name), "%s",
+ connector_info_.panel_name.c_str());
+
+ uint32_t index = current_mode_index_;
+ hw_panel_info_.split_info.left_split = display_attributes_[index].x_pixels;
+ if (display_attributes_[index].is_device_split) {
+ hw_panel_info_.split_info.left_split = hw_panel_info_.split_info.right_split =
+ display_attributes_[index].x_pixels / 2;
+ }
+
+ hw_panel_info_.partial_update = connector_info_.modes[index].num_roi;
+ hw_panel_info_.left_roi_count = UINT32(connector_info_.modes[index].num_roi);
+ hw_panel_info_.right_roi_count = UINT32(connector_info_.modes[index].num_roi);
+ hw_panel_info_.left_align = connector_info_.modes[index].xstart;
+ hw_panel_info_.top_align = connector_info_.modes[index].ystart;
+ hw_panel_info_.width_align = connector_info_.modes[index].walign;
+ hw_panel_info_.height_align = connector_info_.modes[index].halign;
+ hw_panel_info_.min_roi_width = connector_info_.modes[index].wmin;
+ hw_panel_info_.min_roi_height = connector_info_.modes[index].hmin;
+ hw_panel_info_.needs_roi_merge = connector_info_.modes[index].roi_merge;
+ hw_panel_info_.transfer_time_us = connector_info_.modes[index].transfer_time_us;
+ hw_panel_info_.dynamic_fps = connector_info_.dynamic_fps;
+ hw_panel_info_.qsync_support = connector_info_.qsync_support;
+ drmModeModeInfo current_mode = connector_info_.modes[current_mode_index_].mode;
+ if (hw_panel_info_.dynamic_fps) {
+ uint32_t min_fps = current_mode.vrefresh;
+ uint32_t max_fps = current_mode.vrefresh;
+ for (uint32_t mode_index = 0; mode_index < connector_info_.modes.size(); mode_index++) {
+ if ((current_mode.vdisplay == connector_info_.modes[mode_index].mode.vdisplay) &&
+ (current_mode.hdisplay == connector_info_.modes[mode_index].mode.hdisplay)) {
+ if (min_fps > connector_info_.modes[mode_index].mode.vrefresh) {
+ min_fps = connector_info_.modes[mode_index].mode.vrefresh;
+ }
+ if (max_fps < connector_info_.modes[mode_index].mode.vrefresh) {
+ max_fps = connector_info_.modes[mode_index].mode.vrefresh;
+ }
+ }
+ }
+ hw_panel_info_.min_fps = min_fps;
+ hw_panel_info_.max_fps = max_fps;
+ } else {
+ hw_panel_info_.min_fps = current_mode.vrefresh;
+ hw_panel_info_.max_fps = current_mode.vrefresh;
+ }
+
+ hw_panel_info_.is_primary_panel = connector_info_.is_primary;
+ hw_panel_info_.is_pluggable = 0;
+ hw_panel_info_.hdr_enabled = connector_info_.panel_hdr_prop.hdr_enabled;
+ // Convert the luminance values to cd/m^2 units.
+ hw_panel_info_.peak_luminance = FLOAT(connector_info_.panel_hdr_prop.peak_brightness) / 10000.0f;
+ hw_panel_info_.blackness_level = FLOAT(connector_info_.panel_hdr_prop.blackness_level) / 10000.0f;
+ hw_panel_info_.average_luminance = FLOAT(connector_info_.panel_hdr_prop.peak_brightness +
+ connector_info_.panel_hdr_prop.blackness_level) /
+ (2 * 10000.0f);
+ hw_panel_info_.primaries.white_point[0] = connector_info_.panel_hdr_prop.display_primaries[0];
+ hw_panel_info_.primaries.white_point[1] = connector_info_.panel_hdr_prop.display_primaries[1];
+ hw_panel_info_.primaries.red[0] = connector_info_.panel_hdr_prop.display_primaries[2];
+ hw_panel_info_.primaries.red[1] = connector_info_.panel_hdr_prop.display_primaries[3];
+ hw_panel_info_.primaries.green[0] = connector_info_.panel_hdr_prop.display_primaries[4];
+ hw_panel_info_.primaries.green[1] = connector_info_.panel_hdr_prop.display_primaries[5];
+ hw_panel_info_.primaries.blue[0] = connector_info_.panel_hdr_prop.display_primaries[6];
+ hw_panel_info_.primaries.blue[1] = connector_info_.panel_hdr_prop.display_primaries[7];
+ hw_panel_info_.dyn_bitclk_support = connector_info_.dyn_bitclk_support;
+
+ // no supprt for 90 rotation only flips or 180 supported
+ hw_panel_info_.panel_orientation.rotation = 0;
+ hw_panel_info_.panel_orientation.flip_horizontal =
+ (connector_info_.panel_orientation == DRMRotation::FLIP_H) ||
+ (connector_info_.panel_orientation == DRMRotation::ROT_180);
+ hw_panel_info_.panel_orientation.flip_vertical =
+ (connector_info_.panel_orientation == DRMRotation::FLIP_V) ||
+ (connector_info_.panel_orientation == DRMRotation::ROT_180);
+
+ GetHWDisplayPortAndMode();
+ GetHWPanelMaxBrightness();
+
+ if (current_mode.flags & DRM_MODE_FLAG_CMD_MODE_PANEL) {
+ hw_panel_info_.mode = kModeCommand;
+ }
+ if (current_mode.flags & DRM_MODE_FLAG_VID_MODE_PANEL) {
+ hw_panel_info_.mode = kModeVideo;
+ }
+
+ DLOGI_IF(kTagDisplay, "%s, Panel Interface = %s, Panel Mode = %s, Is Primary = %d", device_name_,
+ interface_str_.c_str(), hw_panel_info_.mode == kModeVideo ? "Video" : "Command",
+ hw_panel_info_.is_primary_panel);
+ DLOGI_IF(kTagDisplay, "Partial Update = %d, Dynamic FPS = %d, HDR Panel = %d QSync = %d",
+ hw_panel_info_.partial_update, hw_panel_info_.dynamic_fps, hw_panel_info_.hdr_enabled,
+ hw_panel_info_.qsync_support);
+ DLOGI_IF(kTagDisplay, "Align: left = %d, width = %d, top = %d, height = %d",
+ hw_panel_info_.left_align, hw_panel_info_.width_align, hw_panel_info_.top_align,
+ hw_panel_info_.height_align);
+ DLOGI_IF(kTagDisplay, "ROI: min_width = %d, min_height = %d, need_merge = %d",
+ hw_panel_info_.min_roi_width, hw_panel_info_.min_roi_height,
+ hw_panel_info_.needs_roi_merge);
+ DLOGI_IF(kTagDisplay, "FPS: min = %d, max = %d", hw_panel_info_.min_fps, hw_panel_info_.max_fps);
+ DLOGI_IF(kTagDisplay, "Left Split = %d, Right Split = %d", hw_panel_info_.split_info.left_split,
+ hw_panel_info_.split_info.right_split);
+ DLOGI_IF(kTagDisplay, "Panel Transfer time = %d us", hw_panel_info_.transfer_time_us);
+ DLOGI_IF(kTagDisplay, "Dynamic Bit Clk Support = %d", hw_panel_info_.dyn_bitclk_support);
+}
+
+DisplayError HWDeviceDRM::GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data) {
+ *out_port = token_.hw_port;
+ std::vector<uint8_t> &edid = connector_info_.edid;
+
+ if (out_data == nullptr) {
+ *out_data_size = (uint32_t)(edid.size());
+ if (*out_data_size == 0) {
+ DLOGE("EDID blob is empty, no data to return");
+ return kErrorDriverData;
+ }
+ } else {
+ *out_data_size = std::min(*out_data_size, (uint32_t)(edid.size()));
+ memcpy(out_data, edid.data(), *out_data_size);
+ }
+
+ return kErrorNone;
+}
+
+void HWDeviceDRM::GetHWDisplayPortAndMode() {
+ hw_panel_info_.port = kPortDefault;
+ hw_panel_info_.mode =
+ (connector_info_.panel_mode == sde_drm::DRMPanelMode::VIDEO) ? kModeVideo : kModeCommand;
+
+ if (default_mode_) {
+ return;
+ }
+
+ switch (connector_info_.type) {
+ case DRM_MODE_CONNECTOR_DSI:
+ hw_panel_info_.port = kPortDSI;
+ interface_str_ = "DSI";
+ break;
+ case DRM_MODE_CONNECTOR_LVDS:
+ hw_panel_info_.port = kPortLVDS;
+ interface_str_ = "LVDS";
+ break;
+ case DRM_MODE_CONNECTOR_eDP:
+ hw_panel_info_.port = kPortEDP;
+ interface_str_ = "EDP";
+ break;
+ case DRM_MODE_CONNECTOR_TV:
+ case DRM_MODE_CONNECTOR_HDMIA:
+ case DRM_MODE_CONNECTOR_HDMIB:
+ hw_panel_info_.port = kPortDTV;
+ interface_str_ = "HDMI";
+ break;
+ case DRM_MODE_CONNECTOR_VIRTUAL:
+ hw_panel_info_.port = kPortWriteBack;
+ interface_str_ = "Virtual";
+ break;
+ case DRM_MODE_CONNECTOR_DisplayPort:
+ // TODO(user): Add when available
+ interface_str_ = "DisplayPort";
+ break;
+ }
+
+ return;
+}
+
+
+DisplayError HWDeviceDRM::GetActiveConfig(uint32_t *active_config) {
+ *active_config = current_mode_index_;
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::GetNumDisplayAttributes(uint32_t *count) {
+ *count = UINT32(display_attributes_.size());
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes) {
+ if (index >= display_attributes_.size()) {
+ return kErrorParameters;
+ }
+ *display_attributes = display_attributes_[index];
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::GetHWPanelInfo(HWPanelInfo *panel_info) {
+ *panel_info = hw_panel_info_;
+ return kErrorNone;
+}
+
+void HWDeviceDRM::SetDisplaySwitchMode(uint32_t index) {
+ uint32_t mode_flag = 0;
+ uint32_t curr_mode_flag = 0, switch_mode_flag = 0;
+ drmModeModeInfo to_set = connector_info_.modes[index].mode;
+ drmModeModeInfo current_mode = connector_info_.modes[current_mode_index_].mode;
+ uint64_t current_bit_clk = connector_info_.modes[current_mode_index_].bit_clk_rate;
+ uint32_t switch_index = 0;
+
+ if (to_set.flags & DRM_MODE_FLAG_CMD_MODE_PANEL) {
+ mode_flag = DRM_MODE_FLAG_CMD_MODE_PANEL;
+ switch_mode_flag = DRM_MODE_FLAG_VID_MODE_PANEL;
+ } else if (to_set.flags & DRM_MODE_FLAG_VID_MODE_PANEL) {
+ mode_flag = DRM_MODE_FLAG_VID_MODE_PANEL;
+ switch_mode_flag = DRM_MODE_FLAG_CMD_MODE_PANEL;
+ }
+
+ if (current_mode.flags & DRM_MODE_FLAG_CMD_MODE_PANEL) {
+ curr_mode_flag = DRM_MODE_FLAG_CMD_MODE_PANEL;
+ } else if (current_mode.flags & DRM_MODE_FLAG_VID_MODE_PANEL) {
+ curr_mode_flag = DRM_MODE_FLAG_VID_MODE_PANEL;
+ }
+
+ if (curr_mode_flag != mode_flag) {
+ panel_mode_changed_ = mode_flag;
+ }
+
+ for (uint32_t mode_index = 0; mode_index < connector_info_.modes.size(); mode_index++) {
+ if ((to_set.vdisplay == connector_info_.modes[mode_index].mode.vdisplay) &&
+ (to_set.hdisplay == connector_info_.modes[mode_index].mode.hdisplay) &&
+ (to_set.vrefresh == connector_info_.modes[mode_index].mode.vrefresh) &&
+ (current_bit_clk == connector_info_.modes[mode_index].bit_clk_rate) &&
+ (mode_flag & connector_info_.modes[mode_index].mode.flags)) {
+ index = mode_index;
+ break;
+ }
+ }
+
+ current_mode_index_ = index;
+
+ switch_mode_valid_ = false;
+ for (uint32_t mode_index = 0; mode_index < connector_info_.modes.size(); mode_index++) {
+ if ((to_set.vdisplay == connector_info_.modes[mode_index].mode.vdisplay) &&
+ (to_set.hdisplay == connector_info_.modes[mode_index].mode.hdisplay) &&
+ (to_set.vrefresh == connector_info_.modes[mode_index].mode.vrefresh) &&
+ (switch_mode_flag & connector_info_.modes[mode_index].mode.flags)) {
+ switch_index = mode_index;
+ switch_mode_valid_ = true;
+ break;
+ }
+ }
+
+ if (!switch_mode_valid_) {
+ // in case there is no corresponding switch mode with same fps, try for a switch
+ // mode with lowest fps. This is to handle cases where there are multiple video mode fps
+ // but only one command mode for doze like 30 fps.
+ uint32_t refresh_rate = 0;
+ for (uint32_t mode_index = 0; mode_index < connector_info_.modes.size(); mode_index++) {
+ if ((to_set.vdisplay == connector_info_.modes[mode_index].mode.vdisplay) &&
+ (to_set.hdisplay == connector_info_.modes[mode_index].mode.hdisplay) &&
+ (switch_mode_flag & connector_info_.modes[mode_index].mode.flags)) {
+ if (!refresh_rate || (refresh_rate > connector_info_.modes[mode_index].mode.vrefresh)) {
+ switch_index = mode_index;
+ switch_mode_valid_ = true;
+ refresh_rate = connector_info_.modes[mode_index].mode.vrefresh;
+ }
+ }
+ }
+ }
+
+ if (switch_mode_valid_) {
+ if (mode_flag & DRM_MODE_FLAG_VID_MODE_PANEL) {
+ video_mode_index_ = current_mode_index_;
+ cmd_mode_index_ = switch_index;
+ } else {
+ video_mode_index_ = switch_index;
+ cmd_mode_index_ = current_mode_index_;
+ }
+ }
+}
+
+DisplayError HWDeviceDRM::SetDisplayAttributes(uint32_t index) {
+ if (index >= display_attributes_.size()) {
+ DLOGE("Invalid mode index %d mode size %d", index, UINT32(display_attributes_.size()));
+ return kErrorParameters;
+ }
+
+ SetDisplaySwitchMode(index);
+ PopulateHWPanelInfo();
+ UpdateMixerAttributes();
+
+ DLOGI_IF(kTagDriverConfig,
+ "Display attributes[%d]: WxH: %dx%d, DPI: %fx%f, FPS: %d, LM_SPLIT: %d, V_BACK_PORCH: %d," \
+ " V_FRONT_PORCH: %d, V_PULSE_WIDTH: %d, V_TOTAL: %d, H_TOTAL: %d, CLK: %dKHZ, " \
+ "TOPOLOGY: %d, PanelMode %s", index, display_attributes_[index].x_pixels,
+ display_attributes_[index].y_pixels, display_attributes_[index].x_dpi,
+ display_attributes_[index].y_dpi, display_attributes_[index].fps,
+ display_attributes_[index].is_device_split, display_attributes_[index].v_back_porch,
+ display_attributes_[index].v_front_porch, display_attributes_[index].v_pulse_width,
+ display_attributes_[index].v_total, display_attributes_[index].h_total,
+ display_attributes_[index].clock_khz, display_attributes_[index].topology,
+ (connector_info_.modes[index].mode.flags & DRM_MODE_FLAG_VID_MODE_PANEL) ?
+ "Video" : "Command");
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::SetDisplayAttributes(const HWDisplayAttributes &display_attributes) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDeviceDRM::GetConfigIndex(char *mode, uint32_t *index) {
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::PowerOn(const HWQosData &qos_data, int *release_fence) {
+ SetQOSData(qos_data);
+
+ int64_t release_fence_t = -1;
+
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ACTIVE, token_.crtc_id, 1);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_POWER_MODE, token_.conn_id, DRMPowerMode::ON);
+ if (release_fence) {
+ drm_atomic_intf_->Perform(DRMOps::CRTC_GET_RELEASE_FENCE, token_.crtc_id, &release_fence_t);
+ }
+ int ret = NullCommit(true /* synchronous */, true /* retain_planes */);
+ if (ret) {
+ DLOGE("Failed with error: %d", ret);
+ return kErrorHardware;
+ }
+
+ if (release_fence) {
+ *release_fence = static_cast<int>(release_fence_t);
+ DLOGD_IF(kTagDriverConfig, "RELEASE fence created: fd:%d", *release_fence);
+ }
+ pending_doze_ = false;
+ last_power_mode_ = DRMPowerMode::ON;
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::PowerOff(bool teardown) {
+ DTRACE_SCOPED();
+ if (!drm_atomic_intf_) {
+ DLOGE("DRM Atomic Interface is null!");
+ return kErrorUndefined;
+ }
+
+ if (first_cycle_) {
+ return kErrorNone;
+ }
+
+ SetFullROI();
+ drmModeModeInfo current_mode = connector_info_.modes[current_mode_index_].mode;
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_MODE, token_.crtc_id, ¤t_mode);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_POWER_MODE, token_.conn_id, DRMPowerMode::OFF);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ACTIVE, token_.crtc_id, 0);
+ int ret = NullCommit(true /* synchronous */, false /* retain_planes */);
+ if (ret) {
+ DLOGE("Failed with error: %d", ret);
+ return kErrorHardware;
+ }
+ pending_doze_ = false;
+ last_power_mode_ = DRMPowerMode::OFF;
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::Doze(const HWQosData &qos_data, int *release_fence) {
+ DTRACE_SCOPED();
+
+ if (first_cycle_ || last_power_mode_ != DRMPowerMode::OFF) {
+ pending_doze_ = true;
+ return kErrorDeferred;
+ }
+
+ SetQOSData(qos_data);
+
+ int64_t release_fence_t = -1;
+
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_CRTC, token_.conn_id, token_.crtc_id);
+ drmModeModeInfo current_mode = connector_info_.modes[current_mode_index_].mode;
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_MODE, token_.crtc_id, ¤t_mode);
+
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ACTIVE, token_.crtc_id, 1);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_POWER_MODE, token_.conn_id, DRMPowerMode::DOZE);
+ if (release_fence) {
+ drm_atomic_intf_->Perform(DRMOps::CRTC_GET_RELEASE_FENCE, token_.crtc_id, &release_fence_t);
+ }
+ int ret = NullCommit(true /* synchronous */, true /* retain_planes */);
+ if (ret) {
+ DLOGE("Failed with error: %d", ret);
+ return kErrorHardware;
+ }
+
+ if (release_fence) {
+ *release_fence = static_cast<int>(release_fence_t);
+ DLOGD_IF(kTagDriverConfig, "RELEASE fence created: fd:%d", *release_fence);
+ }
+
+ last_power_mode_ = DRMPowerMode::DOZE;
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::DozeSuspend(const HWQosData &qos_data, int *release_fence) {
+ DTRACE_SCOPED();
+
+ SetQOSData(qos_data);
+
+ int64_t release_fence_t = -1;
+
+ if (first_cycle_) {
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_CRTC, token_.conn_id, token_.crtc_id);
+ drmModeModeInfo current_mode = connector_info_.modes[current_mode_index_].mode;
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_MODE, token_.crtc_id, ¤t_mode);
+ }
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ACTIVE, token_.crtc_id, 1);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_POWER_MODE, token_.conn_id,
+ DRMPowerMode::DOZE_SUSPEND);
+ if (release_fence) {
+ drm_atomic_intf_->Perform(DRMOps::CRTC_GET_RELEASE_FENCE, token_.crtc_id, &release_fence_t);
+ }
+ int ret = NullCommit(true /* synchronous */, true /* retain_planes */);
+ if (ret) {
+ DLOGE("Failed with error: %d", ret);
+ return kErrorHardware;
+ }
+
+ if (release_fence) {
+ *release_fence = static_cast<int>(release_fence_t);
+ DLOGD_IF(kTagDriverConfig, "RELEASE fence created: fd:%d", *release_fence);
+ }
+
+ pending_doze_ = false;
+ last_power_mode_ = DRMPowerMode::DOZE_SUSPEND;
+ return kErrorNone;
+}
+
+void HWDeviceDRM::SetQOSData(const HWQosData &qos_data) {
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_CORE_CLK, token_.crtc_id, qos_data.clock_hz);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_CORE_AB, token_.crtc_id, qos_data.core_ab_bps);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_CORE_IB, token_.crtc_id, qos_data.core_ib_bps);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_LLCC_AB, token_.crtc_id, qos_data.llcc_ab_bps);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_LLCC_IB, token_.crtc_id, qos_data.llcc_ib_bps);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_DRAM_AB, token_.crtc_id, qos_data.dram_ab_bps);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_DRAM_IB, token_.crtc_id, qos_data.dram_ib_bps);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ROT_PREFILL_BW, token_.crtc_id,
+ qos_data.rot_prefill_bw_bps);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ROT_CLK, token_.crtc_id, qos_data.rot_clock_hz);
+}
+
+DisplayError HWDeviceDRM::Standby() {
+ return kErrorNone;
+}
+
+void HWDeviceDRM::SetupAtomic(HWLayers *hw_layers, bool validate) {
+ if (default_mode_) {
+ return;
+ }
+
+ DTRACE_SCOPED();
+ HWLayersInfo &hw_layer_info = hw_layers->info;
+ uint32_t hw_layer_count = UINT32(hw_layer_info.hw_layers.size());
+ HWQosData &qos_data = hw_layers->qos_data;
+ DRMSecurityLevel crtc_security_level = DRMSecurityLevel::SECURE_NON_SECURE;
+ uint32_t index = current_mode_index_;
+ drmModeModeInfo current_mode = connector_info_.modes[index].mode;
+ uint64_t current_bit_clk = connector_info_.modes[index].bit_clk_rate;
+
+ solid_fills_.clear();
+ bool resource_update = hw_layers->updates_mask.test(kUpdateResources);
+ bool update_config = resource_update || hw_layer_info.stack->flags.geometry_changed;
+
+ // TODO(user): Once destination scalar is enabled we can always send ROIs if driver allows
+ if (hw_panel_info_.partial_update && update_config) {
+ const int kNumMaxROIs = 4;
+ DRMRect crtc_rects[kNumMaxROIs] = {{0, 0, mixer_attributes_.width, mixer_attributes_.height}};
+ DRMRect conn_rects[kNumMaxROIs] = {{0, 0, display_attributes_[index].x_pixels,
+ display_attributes_[index].y_pixels}};
+
+ for (uint32_t i = 0; i < hw_layer_info.left_frame_roi.size(); i++) {
+ auto &roi = hw_layer_info.left_frame_roi.at(i);
+ // TODO(user): In multi PU, stitch ROIs vertically adjacent and upate plane destination
+ crtc_rects[i].left = UINT32(roi.left);
+ crtc_rects[i].right = UINT32(roi.right);
+ crtc_rects[i].top = UINT32(roi.top);
+ crtc_rects[i].bottom = UINT32(roi.bottom);
+ // TODO(user): In Dest scaler + PU, populate from HWDestScaleInfo->panel_roi
+ // TODO(user): panel_roi need to be made as a vector in HWLayersInfo and
+ // needs to be removed from HWDestScaleInfo.
+ conn_rects[i].left = UINT32(roi.left);
+ conn_rects[i].right = UINT32(roi.right);
+ conn_rects[i].top = UINT32(roi.top);
+ conn_rects[i].bottom = UINT32(roi.bottom);
+ }
+
+ uint32_t num_rects = std::max(1u, static_cast<uint32_t>(hw_layer_info.left_frame_roi.size()));
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ROI, token_.crtc_id,
+ num_rects, crtc_rects);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_ROI, token_.conn_id,
+ num_rects, conn_rects);
+ }
+
+ for (uint32_t i = 0; i < hw_layer_count; i++) {
+ Layer &layer = hw_layer_info.hw_layers.at(i);
+ LayerBuffer *input_buffer = &layer.input_buffer;
+ HWPipeInfo *left_pipe = &hw_layers->config[i].left_pipe;
+ HWPipeInfo *right_pipe = &hw_layers->config[i].right_pipe;
+ HWRotatorSession *hw_rotator_session = &hw_layers->config[i].hw_rotator_session;
+
+ if (hw_layers->config[i].use_solidfill_stage) {
+ hw_layers->config[i].hw_solidfill_stage.solid_fill_info = layer.solid_fill_info;
+ AddSolidfillStage(hw_layers->config[i].hw_solidfill_stage, layer.plane_alpha);
+ continue;
+ }
+
+ for (uint32_t count = 0; count < 2; count++) {
+ HWPipeInfo *pipe_info = (count == 0) ? left_pipe : right_pipe;
+ HWRotateInfo *hw_rotate_info = &hw_rotator_session->hw_rotate_info[count];
+
+ if (hw_rotator_session->mode == kRotatorOffline && hw_rotate_info->valid) {
+ input_buffer = &hw_rotator_session->output_buffer;
+ }
+
+ uint32_t fb_id = registry_.GetFbId(&layer, input_buffer->handle_id);
+
+ if (pipe_info->valid && fb_id) {
+ uint32_t pipe_id = pipe_info->pipe_id;
+
+ if (update_config) {
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_ALPHA, pipe_id, layer.plane_alpha);
+
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_ZORDER, pipe_id, pipe_info->z_order);
+
+ DRMBlendType blending = {};
+ SetBlending(layer.blending, &blending);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_BLEND_TYPE, pipe_id, blending);
+
+ DRMRect src = {};
+ SetRect(pipe_info->src_roi, &src);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_SRC_RECT, pipe_id, src);
+
+ DRMRect rot_dst = {0, 0, 0, 0};
+ if (hw_rotator_session->mode == kRotatorInline && hw_rotate_info->valid) {
+ SetRect(hw_rotate_info->dst_roi, &rot_dst);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_ROTATION_DST_RECT, pipe_id, rot_dst);
+ if (hw_rotator_session->output_buffer.planes[0].fd >= 0) {
+ uint32_t rot_fb_id = registry_.GetFbId(&layer,
+ hw_rotator_session->output_buffer.handle_id);
+ if (rot_fb_id) {
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_ROT_FB_ID, pipe_id, rot_fb_id);
+ }
+ }
+ }
+
+ DRMRect dst = {};
+ SetRect(pipe_info->dst_roi, &dst);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_DST_RECT, pipe_id, dst);
+
+ DRMRect excl = {};
+ SetRect(pipe_info->excl_rect, &excl);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_EXCL_RECT, pipe_id, excl);
+
+ uint32_t rot_bit_mask = 0;
+ SetRotation(layer.transform, hw_rotator_session->mode, &rot_bit_mask);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_ROTATION, pipe_id, rot_bit_mask);
+
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_H_DECIMATION, pipe_id,
+ pipe_info->horizontal_decimation);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_V_DECIMATION, pipe_id,
+ pipe_info->vertical_decimation);
+
+ DRMSecureMode fb_secure_mode;
+ DRMSecurityLevel security_level;
+ SetSecureConfig(layer.input_buffer, &fb_secure_mode, &security_level);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_FB_SECURE_MODE, pipe_id, fb_secure_mode);
+ if (security_level > crtc_security_level) {
+ crtc_security_level = security_level;
+ }
+
+ uint32_t config = 0;
+ SetSrcConfig(layer.input_buffer, hw_rotator_session->mode, &config);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_SRC_CONFIG, pipe_id, config);
+
+ if (hw_scale_) {
+ SDEScaler scaler_output = {};
+ hw_scale_->SetScaler(pipe_info->scale_data, &scaler_output);
+ // TODO(user): Remove qseed3 and add version check, then send appropriate scaler object
+ if (hw_resource_.has_qseed3) {
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_SCALER_CONFIG, pipe_id,
+ reinterpret_cast<uint64_t>(&scaler_output.scaler_v2));
+ }
+ }
+
+ DRMCscType csc_type = DRMCscType::kCscTypeMax;
+ SelectCscType(layer.input_buffer, &csc_type);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_CSC_CONFIG, pipe_id, &csc_type);
+
+ DRMMultiRectMode multirect_mode;
+ SetMultiRectMode(pipe_info->flags, &multirect_mode);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_MULTIRECT_MODE, pipe_id, multirect_mode);
+
+ SetSsppTonemapFeatures(pipe_info);
+ }
+
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_FB_ID, pipe_id, fb_id);
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_CRTC, pipe_id, token_.crtc_id);
+
+ if (!validate && input_buffer->acquire_fence_fd >= 0) {
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_INPUT_FENCE, pipe_id,
+ input_buffer->acquire_fence_fd);
+ }
+ }
+ }
+ }
+
+ if (update_config) {
+ SetSolidfillStages();
+ SetQOSData(qos_data);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_SECURITY_LEVEL, token_.crtc_id, crtc_security_level);
+ }
+
+ if (reset_output_fence_offset_ && !validate) {
+ // Change back the fence_offset
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_OUTPUT_FENCE_OFFSET, token_.crtc_id, 0);
+ reset_output_fence_offset_ = false;
+ }
+
+ // Set panel mode
+ if (panel_mode_changed_ & DRM_MODE_FLAG_VID_MODE_PANEL) {
+ if (!validate) {
+ // Switch to video mode, corresponding change the fence_offset
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_OUTPUT_FENCE_OFFSET, token_.crtc_id, 1);
+ }
+ SetFullROI();
+ }
+
+ if (hw_layers->hw_avr_info.update) {
+ sde_drm::DRMQsyncMode mode = sde_drm::DRMQsyncMode::NONE;
+ if (hw_layers->hw_avr_info.mode == kContinuousMode) {
+ mode = sde_drm::DRMQsyncMode::CONTINUOUS;
+ } else if (hw_layers->hw_avr_info.mode == kOneShotMode) {
+ mode = sde_drm::DRMQsyncMode::ONESHOT;
+ }
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_QSYNC_MODE, token_.conn_id, mode);
+ }
+
+ drm_atomic_intf_->Perform(DRMOps::DPPS_COMMIT_FEATURE, 0 /* argument is not used */);
+
+ if (!validate) {
+ drm_atomic_intf_->Perform(DRMOps::CRTC_GET_RELEASE_FENCE, token_.crtc_id, &release_fence_);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_GET_RETIRE_FENCE, token_.conn_id, &retire_fence_);
+ }
+
+ DLOGI_IF(kTagDriverConfig, "%s::%s System Clock=%d Hz, Core: AB=%llu Bps, IB=%llu Bps, " \
+ "LLCC: AB=%llu Bps, IB=%llu Bps, DRAM AB=%llu Bps, IB=%llu Bps, "\
+ "Rot: Bw=%llu Bps, Clock=%d Hz", validate ? "Validate" : "Commit", device_name_,
+ qos_data.clock_hz, qos_data.core_ab_bps, qos_data.core_ib_bps, qos_data.llcc_ab_bps,
+ qos_data.llcc_ib_bps, qos_data.dram_ab_bps, qos_data.dram_ib_bps,
+ qos_data.rot_prefill_bw_bps, qos_data.rot_clock_hz);
+
+ // Set refresh rate
+ if (vrefresh_) {
+ for (uint32_t mode_index = 0; mode_index < connector_info_.modes.size(); mode_index++) {
+ if ((current_mode.vdisplay == connector_info_.modes[mode_index].mode.vdisplay) &&
+ (current_mode.hdisplay == connector_info_.modes[mode_index].mode.hdisplay) &&
+ (current_bit_clk == connector_info_.modes[mode_index].bit_clk_rate) &&
+ (current_mode.flags == connector_info_.modes[mode_index].mode.flags) &&
+ (vrefresh_ == connector_info_.modes[mode_index].mode.vrefresh)) {
+ current_mode = connector_info_.modes[mode_index].mode;
+ break;
+ }
+ }
+ }
+
+ if (bit_clk_rate_) {
+ for (uint32_t mode_index = 0; mode_index < connector_info_.modes.size(); mode_index++) {
+ if ((current_mode.vdisplay == connector_info_.modes[mode_index].mode.vdisplay) &&
+ (current_mode.hdisplay == connector_info_.modes[mode_index].mode.hdisplay) &&
+ (current_mode.vrefresh == connector_info_.modes[mode_index].mode.vrefresh) &&
+ (current_mode.flags == connector_info_.modes[mode_index].mode.flags) &&
+ (bit_clk_rate_ == connector_info_.modes[mode_index].bit_clk_rate)) {
+ current_mode = connector_info_.modes[mode_index].mode;
+ break;
+ }
+ }
+ }
+
+ if (first_cycle_) {
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_TOPOLOGY_CONTROL, token_.conn_id,
+ topology_control_);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ACTIVE, token_.crtc_id, 1);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_CRTC, token_.conn_id, token_.crtc_id);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_POWER_MODE, token_.conn_id, DRMPowerMode::ON);
+ last_power_mode_ = DRMPowerMode::ON;
+ } else if (pending_doze_ && !validate) {
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ACTIVE, token_.crtc_id, 1);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_POWER_MODE, token_.conn_id, DRMPowerMode::DOZE);
+ synchronous_commit_ = true;
+ last_power_mode_ = DRMPowerMode::DOZE;
+ }
+
+ // Set CRTC mode, only if display config changes
+ if (first_cycle_ || vrefresh_ || update_mode_ || panel_mode_changed_) {
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_MODE, token_.crtc_id, ¤t_mode);
+ }
+
+ if (!validate && (hw_layer_info.set_idle_time_ms >= 0)) {
+ DLOGI_IF(kTagDriverConfig, "Setting idle timeout to = %d ms",
+ hw_layer_info.set_idle_time_ms);
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_IDLE_TIMEOUT, token_.crtc_id,
+ hw_layer_info.set_idle_time_ms);
+ }
+
+ if (hw_panel_info_.mode == kModeCommand) {
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_AUTOREFRESH, token_.conn_id, autorefresh_);
+ }
+}
+
+void HWDeviceDRM::AddSolidfillStage(const HWSolidfillStage &sf, uint32_t plane_alpha) {
+ sde_drm::DRMSolidfillStage solidfill;
+ solidfill.bounding_rect.left = UINT32(sf.roi.left);
+ solidfill.bounding_rect.top = UINT32(sf.roi.top);
+ solidfill.bounding_rect.right = UINT32(sf.roi.right);
+ solidfill.bounding_rect.bottom = UINT32(sf.roi.bottom);
+ solidfill.is_exclusion_rect = sf.is_exclusion_rect;
+ solidfill.plane_alpha = plane_alpha;
+ solidfill.z_order = sf.z_order;
+ if (!sf.solid_fill_info.bit_depth) {
+ solidfill.color_bit_depth = 8;
+ solidfill.alpha = (0xff000000 & sf.color) >> 24;
+ solidfill.red = (0xff0000 & sf.color) >> 16;
+ solidfill.green = (0xff00 & sf.color) >> 8;
+ solidfill.blue = 0xff & sf.color;
+ } else {
+ solidfill.color_bit_depth = sf.solid_fill_info.bit_depth;
+ solidfill.alpha = sf.solid_fill_info.alpha;
+ solidfill.red = sf.solid_fill_info.red;
+ solidfill.green = sf.solid_fill_info.green;
+ solidfill.blue = sf.solid_fill_info.blue;
+ }
+ solid_fills_.push_back(solidfill);
+ DLOGI_IF(kTagDriverConfig, "Add a solidfill stage at z_order:%d argb_color:%x plane_alpha:%x",
+ solidfill.z_order, solidfill.color, solidfill.plane_alpha);
+}
+
+void HWDeviceDRM::SetSolidfillStages() {
+ if (hw_resource_.num_solidfill_stages) {
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_SOLIDFILL_STAGES, token_.crtc_id,
+ reinterpret_cast<uint64_t> (&solid_fills_));
+ }
+}
+
+void HWDeviceDRM::ClearSolidfillStages() {
+ solid_fills_.clear();
+ SetSolidfillStages();
+}
+
+DisplayError HWDeviceDRM::Validate(HWLayers *hw_layers) {
+ DTRACE_SCOPED();
+
+ DisplayError err = kErrorNone;
+ registry_.Register(hw_layers);
+ SetupAtomic(hw_layers, true /* validate */);
+
+ int ret = drm_atomic_intf_->Validate();
+ if (ret) {
+ DLOGE("failed with error %d for %s", ret, device_name_);
+ vrefresh_ = 0;
+ panel_mode_changed_ = 0;
+ err = kErrorHardware;
+ }
+
+ return err;
+}
+
+DisplayError HWDeviceDRM::Commit(HWLayers *hw_layers) {
+ DTRACE_SCOPED();
+
+ DisplayError err = kErrorNone;
+ registry_.Register(hw_layers);
+
+ if (default_mode_) {
+ err = DefaultCommit(hw_layers);
+ } else {
+ err = AtomicCommit(hw_layers);
+ }
+
+ return err;
+}
+
+DisplayError HWDeviceDRM::DefaultCommit(HWLayers *hw_layers) {
+ DTRACE_SCOPED();
+
+ HWLayersInfo &hw_layer_info = hw_layers->info;
+ LayerStack *stack = hw_layer_info.stack;
+
+ stack->retire_fence_fd = -1;
+ for (Layer &layer : hw_layer_info.hw_layers) {
+ layer.input_buffer.release_fence_fd = -1;
+ }
+
+ DRMMaster *master = nullptr;
+ int ret = DRMMaster::GetInstance(&master);
+ if (ret < 0) {
+ DLOGE("Failed to acquire DRMMaster instance");
+ return kErrorResources;
+ }
+
+ DRMResMgr *res_mgr = nullptr;
+ ret = DRMResMgr::GetInstance(&res_mgr);
+ if (ret < 0) {
+ DLOGE("Failed to acquire DRMResMgr instance");
+ return kErrorResources;
+ }
+
+ int dev_fd = -1;
+ master->GetHandle(&dev_fd);
+
+ uint32_t connector_id = 0;
+ res_mgr->GetConnectorId(&connector_id);
+
+ uint32_t crtc_id = 0;
+ res_mgr->GetCrtcId(&crtc_id);
+
+ drmModeModeInfo mode;
+ res_mgr->GetMode(&mode);
+
+ uint64_t handle_id = hw_layer_info.hw_layers.at(0).input_buffer.handle_id;
+ uint32_t fb_id = registry_.GetFbId(&hw_layer_info.hw_layers.at(0), handle_id);
+ ret = drmModeSetCrtc(dev_fd, crtc_id, fb_id, 0 /* x */, 0 /* y */, &connector_id,
+ 1 /* num_connectors */, &mode);
+ if (ret < 0) {
+ DLOGE("drmModeSetCrtc failed dev fd %d, fb_id %d, crtc id %d, connector id %d, %s", dev_fd,
+ fb_id, crtc_id, connector_id, strerror(errno));
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::AtomicCommit(HWLayers *hw_layers) {
+ DTRACE_SCOPED();
+ SetupAtomic(hw_layers, false /* validate */);
+
+ int ret = drm_atomic_intf_->Commit(synchronous_commit_, false /* retain_planes*/);
+ int release_fence = INT(release_fence_);
+ int retire_fence = INT(retire_fence_);
+ if (ret) {
+ DLOGE("%s failed with error %d crtc %d", __FUNCTION__, ret, token_.crtc_id);
+ vrefresh_ = 0;
+ panel_mode_changed_ = 0;
+ CloseFd(&release_fence);
+ CloseFd(&retire_fence);
+ release_fence_ = -1;
+ retire_fence_ = -1;
+ return kErrorHardware;
+ }
+
+ DLOGD_IF(kTagDriverConfig, "RELEASE fence created: fd:%d", release_fence);
+ DLOGD_IF(kTagDriverConfig, "RETIRE fence created: fd:%d", retire_fence);
+
+ HWLayersInfo &hw_layer_info = hw_layers->info;
+ LayerStack *stack = hw_layer_info.stack;
+ stack->retire_fence_fd = retire_fence;
+
+ for (uint32_t i = 0; i < hw_layer_info.hw_layers.size(); i++) {
+ Layer &layer = hw_layer_info.hw_layers.at(i);
+ HWRotatorSession *hw_rotator_session = &hw_layers->config[i].hw_rotator_session;
+ if (hw_rotator_session->mode == kRotatorOffline) {
+ hw_rotator_session->output_buffer.release_fence_fd = Sys::dup_(release_fence);
+ } else {
+ layer.input_buffer.release_fence_fd = Sys::dup_(release_fence);
+ }
+ }
+
+ hw_layer_info.sync_handle = release_fence;
+
+ if (vrefresh_) {
+ // Update current mode index if refresh rate is changed
+ drmModeModeInfo current_mode = connector_info_.modes[current_mode_index_].mode;
+ uint64_t current_bit_clk = connector_info_.modes[current_mode_index_].bit_clk_rate;
+ for (uint32_t mode_index = 0; mode_index < connector_info_.modes.size(); mode_index++) {
+ if ((current_mode.vdisplay == connector_info_.modes[mode_index].mode.vdisplay) &&
+ (current_mode.hdisplay == connector_info_.modes[mode_index].mode.hdisplay) &&
+ (current_bit_clk == connector_info_.modes[mode_index].bit_clk_rate) &&
+ (vrefresh_ == connector_info_.modes[mode_index].mode.vrefresh)) {
+ current_mode_index_ = mode_index;
+ SetDisplaySwitchMode(mode_index);
+ break;
+ }
+ }
+ vrefresh_ = 0;
+ }
+
+ if (bit_clk_rate_) {
+ // Update current mode index if bit clk rate is changed.
+ drmModeModeInfo current_mode = connector_info_.modes[current_mode_index_].mode;
+ for (uint32_t mode_index = 0; mode_index < connector_info_.modes.size(); mode_index++) {
+ if ((current_mode.vdisplay == connector_info_.modes[mode_index].mode.vdisplay) &&
+ (current_mode.hdisplay == connector_info_.modes[mode_index].mode.hdisplay) &&
+ (current_mode.vrefresh == connector_info_.modes[mode_index].mode.vrefresh) &&
+ (bit_clk_rate_ == connector_info_.modes[mode_index].bit_clk_rate)) {
+ current_mode_index_ = mode_index;
+ SetDisplaySwitchMode(mode_index);
+ break;
+ }
+ }
+ bit_clk_rate_ = 0;
+ }
+
+ if (panel_mode_changed_ & DRM_MODE_FLAG_CMD_MODE_PANEL) {
+ panel_mode_changed_ = 0;
+ synchronous_commit_ = false;
+ } else if (panel_mode_changed_ & DRM_MODE_FLAG_VID_MODE_PANEL) {
+ panel_mode_changed_ = 0;
+ synchronous_commit_ = false;
+ reset_output_fence_offset_ = true;
+ }
+
+ first_cycle_ = false;
+ update_mode_ = false;
+ hw_layers->updates_mask = 0;
+ pending_doze_ = false;
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::Flush(HWLayers *hw_layers) {
+ ClearSolidfillStages();
+ SetFullROI();
+ int ret = NullCommit(secure_display_active_ /* synchronous */, false /* retain_planes*/);
+ if (ret) {
+ DLOGE("failed with error %d", ret);
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+void HWDeviceDRM::SetBlending(const LayerBlending &source, DRMBlendType *target) {
+ switch (source) {
+ case kBlendingPremultiplied:
+ *target = DRMBlendType::PREMULTIPLIED;
+ break;
+ case kBlendingOpaque:
+ *target = DRMBlendType::OPAQUE;
+ break;
+ case kBlendingCoverage:
+ *target = DRMBlendType::COVERAGE;
+ break;
+ default:
+ *target = DRMBlendType::UNDEFINED;
+ }
+}
+
+void HWDeviceDRM::SetSrcConfig(const LayerBuffer &input_buffer, const HWRotatorMode &mode,
+ uint32_t *config) {
+ // In offline rotation case, rotator will handle deinterlacing.
+ if (mode != kRotatorOffline) {
+ if (input_buffer.flags.interlace) {
+ *config |= (0x01 << UINT32(DRMSrcConfig::DEINTERLACE));
+ }
+ }
+}
+
+void HWDeviceDRM::SelectCscType(const LayerBuffer &input_buffer, DRMCscType *type) {
+ if (type == NULL) {
+ return;
+ }
+
+ *type = DRMCscType::kCscTypeMax;
+ if (input_buffer.format < kFormatYCbCr420Planar) {
+ return;
+ }
+
+ switch (input_buffer.color_metadata.colorPrimaries) {
+ case ColorPrimaries_BT601_6_525:
+ case ColorPrimaries_BT601_6_625:
+ *type = ((input_buffer.color_metadata.range == Range_Full) ?
+ DRMCscType::kCscYuv2Rgb601FR : DRMCscType::kCscYuv2Rgb601L);
+ break;
+ case ColorPrimaries_BT709_5:
+ *type = DRMCscType::kCscYuv2Rgb709L;
+ break;
+ case ColorPrimaries_BT2020:
+ *type = ((input_buffer.color_metadata.range == Range_Full) ?
+ DRMCscType::kCscYuv2Rgb2020FR : DRMCscType::kCscYuv2Rgb2020L);
+ break;
+ default:
+ break;
+ }
+}
+
+void HWDeviceDRM::SetRect(const LayerRect &source, DRMRect *target) {
+ target->left = UINT32(source.left);
+ target->top = UINT32(source.top);
+ target->right = UINT32(source.right);
+ target->bottom = UINT32(source.bottom);
+}
+
+void HWDeviceDRM::SetRotation(LayerTransform transform, const HWRotatorMode &mode,
+ uint32_t* rot_bit_mask) {
+ // In offline rotation case, rotator will handle flips set via offline rotator interface.
+ if (mode == kRotatorOffline) {
+ *rot_bit_mask = 0;
+ return;
+ }
+
+ // In no rotation case or inline rotation case, plane will handle flips
+ // In DRM framework rotation is applied in counter-clockwise direction.
+ if (mode == kRotatorInline && transform.rotation == 90) {
+ // a) rotate 90 clockwise = rotate 270 counter-clockwise in DRM
+ // rotate 270 is translated as hflip + vflip + rotate90
+ // b) rotate 270 clockwise = rotate 90 counter-clockwise in DRM
+ // c) hflip + rotate 90 clockwise = vflip + rotate 90 counter-clockwise in DRM
+ // d) vflip + rotate 90 clockwise = hflip + rotate 90 counter-clockwise in DRM
+ *rot_bit_mask = UINT32(DRMRotation::ROT_90);
+ transform.flip_horizontal = !transform.flip_horizontal;
+ transform.flip_vertical = !transform.flip_vertical;
+ }
+
+ if (transform.flip_horizontal) {
+ *rot_bit_mask |= UINT32(DRMRotation::FLIP_H);
+ }
+
+ if (transform.flip_vertical) {
+ *rot_bit_mask |= UINT32(DRMRotation::FLIP_V);
+ }
+}
+
+bool HWDeviceDRM::EnableHotPlugDetection(int enable) {
+ return true;
+}
+
+DisplayError HWDeviceDRM::SetCursorPosition(HWLayers *hw_layers, int x, int y) {
+ DTRACE_SCOPED();
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::GetPPFeaturesVersion(PPFeatureVersion *vers) {
+ struct DRMPPFeatureInfo info = {};
+
+ if (!hw_color_mgr_)
+ return kErrorNotSupported;
+
+ for (uint32_t i = 0; i < kMaxNumPPFeatures; i++) {
+ std::vector<DRMPPFeatureID> drm_id = {};
+ memset(&info, 0, sizeof(struct DRMPPFeatureInfo));
+ hw_color_mgr_->ToDrmFeatureId(kDSPP, i, &drm_id);
+ if (drm_id.empty())
+ continue;
+
+ info.id = drm_id.at(0);
+
+ drm_mgr_intf_->GetCrtcPPInfo(token_.crtc_id, &info);
+ vers->version[i] = hw_color_mgr_->GetFeatureVersion(info);
+ }
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::SetPPFeatures(PPFeaturesConfig *feature_list) {
+ if (pending_doze_) {
+ DLOGI("Doze state pending!! Skip for now");
+ return kErrorNone;
+ }
+
+ int ret = 0;
+ PPFeatureInfo *feature = NULL;
+
+ if (!hw_color_mgr_)
+ return kErrorNotSupported;
+
+ while (true) {
+ std::vector<DRMPPFeatureID> drm_id = {};
+ DRMPPFeatureInfo kernel_params = {};
+ bool crtc_feature = true;
+
+ ret = feature_list->RetrieveNextFeature(&feature);
+ if (ret)
+ break;
+
+ hw_color_mgr_->ToDrmFeatureId(kDSPP, feature->feature_id_, &drm_id);
+ if (drm_id.empty())
+ continue;
+
+ kernel_params.id = drm_id.at(0);
+ drm_mgr_intf_->GetCrtcPPInfo(token_.crtc_id, &kernel_params);
+ if (kernel_params.version == std::numeric_limits<uint32_t>::max())
+ crtc_feature = false;
+ if (feature) {
+ DLOGV_IF(kTagDriverConfig, "feature_id = %d", feature->feature_id_);
+ for (DRMPPFeatureID id : drm_id) {
+ if (id >= kPPFeaturesMax) {
+ DLOGE("Invalid feature id %d", id);
+ continue;
+ }
+ kernel_params.id = id;
+ ret = hw_color_mgr_->GetDrmFeature(feature, &kernel_params);
+ if (!ret && crtc_feature)
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_POST_PROC,
+ token_.crtc_id, &kernel_params);
+ else if (!ret && !crtc_feature)
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_POST_PROC,
+ token_.conn_id, &kernel_params);
+
+ hw_color_mgr_->FreeDrmFeatureData(&kernel_params);
+ }
+ }
+ }
+
+ // Once all features were consumed, then destroy all feature instance from feature_list,
+ feature_list->Reset();
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::SetVSyncState(bool enable) {
+ return kErrorNotSupported;
+}
+
+void HWDeviceDRM::SetIdleTimeoutMs(uint32_t timeout_ms) {
+ // TODO(user): This function can be removed after fb is deprecated
+}
+
+DisplayError HWDeviceDRM::SetDisplayMode(const HWDisplayMode hw_display_mode) {
+ if (!switch_mode_valid_) {
+ return kErrorNotSupported;
+ }
+
+ uint32_t mode_flag = 0;
+
+ if (hw_display_mode == kModeCommand) {
+ mode_flag = DRM_MODE_FLAG_CMD_MODE_PANEL;
+ current_mode_index_ = cmd_mode_index_;
+ DLOGI_IF(kTagDriverConfig, "switch panel mode to command");
+ } else if (hw_display_mode == kModeVideo) {
+ mode_flag = DRM_MODE_FLAG_VID_MODE_PANEL;
+ current_mode_index_ = video_mode_index_;
+ DLOGI_IF(kTagDriverConfig, "switch panel mode to video");
+ }
+ PopulateHWPanelInfo();
+ panel_mode_changed_ = mode_flag;
+ synchronous_commit_ = true;
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::SetRefreshRate(uint32_t refresh_rate) {
+ if (bit_clk_rate_) {
+ // bit rate update pending.
+ // Defer any refresh rate setting.
+ return kErrorNotSupported;
+ }
+
+ // Check if requested refresh rate is valid
+ drmModeModeInfo current_mode = connector_info_.modes[current_mode_index_].mode;
+ uint64_t current_bit_clk = connector_info_.modes[current_mode_index_].bit_clk_rate;
+ for (uint32_t mode_index = 0; mode_index < connector_info_.modes.size(); mode_index++) {
+ if ((current_mode.vdisplay == connector_info_.modes[mode_index].mode.vdisplay) &&
+ (current_mode.hdisplay == connector_info_.modes[mode_index].mode.hdisplay) &&
+ (current_bit_clk == connector_info_.modes[mode_index].bit_clk_rate) &&
+ (current_mode.flags == connector_info_.modes[mode_index].mode.flags) &&
+ (refresh_rate == connector_info_.modes[mode_index].mode.vrefresh)) {
+ vrefresh_ = refresh_rate;
+ DLOGV_IF(kTagDriverConfig, "Set refresh rate to %d", refresh_rate);
+ return kErrorNone;
+ }
+ }
+ return kErrorNotSupported;
+}
+
+
+
+DisplayError HWDeviceDRM::GetHWScanInfo(HWScanInfo *scan_info) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDeviceDRM::GetVideoFormat(uint32_t config_index, uint32_t *video_format) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDeviceDRM::GetMaxCEAFormat(uint32_t *max_cea_format) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDeviceDRM::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDeviceDRM::SetS3DMode(HWS3DMode s3d_mode) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDeviceDRM::SetScaleLutConfig(HWScaleLutInfo *lut_info) {
+ sde_drm::DRMScalerLUTInfo drm_lut_info = {};
+ drm_lut_info.cir_lut = lut_info->cir_lut;
+ drm_lut_info.dir_lut = lut_info->dir_lut;
+ drm_lut_info.sep_lut = lut_info->sep_lut;
+ drm_lut_info.cir_lut_size = lut_info->cir_lut_size;
+ drm_lut_info.dir_lut_size = lut_info->dir_lut_size;
+ drm_lut_info.sep_lut_size = lut_info->sep_lut_size;
+ drm_mgr_intf_->SetScalerLUT(drm_lut_info);
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::UnsetScaleLutConfig() {
+ drm_mgr_intf_->UnsetScalerLUT();
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::SetMixerAttributes(const HWMixerAttributes &mixer_attributes) {
+ if (IsResolutionSwitchEnabled()) {
+ return kErrorNotSupported;
+ }
+
+ if (!hw_resource_.hw_dest_scalar_info.count) {
+ return kErrorNotSupported;
+ }
+
+ uint32_t index = current_mode_index_;
+
+ if (mixer_attributes.width > display_attributes_[index].x_pixels ||
+ mixer_attributes.height > display_attributes_[index].y_pixels) {
+ DLOGW("Input resolution exceeds display resolution! input: res %dx%d display: res %dx%d",
+ mixer_attributes.width, mixer_attributes.height, display_attributes_[index].x_pixels,
+ display_attributes_[index].y_pixels);
+ return kErrorNotSupported;
+ }
+
+ uint32_t max_input_width = hw_resource_.hw_dest_scalar_info.max_input_width;
+ if (display_attributes_[index].is_device_split) {
+ max_input_width *= 2;
+ }
+
+ if (mixer_attributes.width > max_input_width) {
+ DLOGW("Input width exceeds width limit! input_width %d width_limit %d", mixer_attributes.width,
+ max_input_width);
+ return kErrorNotSupported;
+ }
+
+ if (static_cast<int>(mixer_attributes.width) < hw_panel_info_.min_roi_width) {
+ DLOGW("Input width less than panel min_roi_width! input_width %d min_roi_width %d",
+ mixer_attributes.width, hw_panel_info_.min_roi_width);
+ return kErrorNotSupported;
+ }
+
+ float mixer_aspect_ratio = FLOAT(mixer_attributes.width) / FLOAT(mixer_attributes.height);
+ float display_aspect_ratio =
+ FLOAT(display_attributes_[index].x_pixels) / FLOAT(display_attributes_[index].y_pixels);
+
+ if (display_aspect_ratio != mixer_aspect_ratio) {
+ DLOGW("Aspect ratio mismatch! input: res %dx%d display: res %dx%d", mixer_attributes.width,
+ mixer_attributes.height, display_attributes_[index].x_pixels,
+ display_attributes_[index].y_pixels);
+ return kErrorNotSupported;
+ }
+
+ float scale_x = FLOAT(display_attributes_[index].x_pixels) / FLOAT(mixer_attributes.width);
+ float scale_y = FLOAT(display_attributes_[index].y_pixels) / FLOAT(mixer_attributes.height);
+ float max_scale_up = hw_resource_.hw_dest_scalar_info.max_scale_up;
+ if (scale_x > max_scale_up || scale_y > max_scale_up) {
+ DLOGW(
+ "Up scaling ratio exceeds for destination scalar upscale limit scale_x %f scale_y %f "
+ "max_scale_up %f",
+ scale_x, scale_y, max_scale_up);
+ return kErrorNotSupported;
+ }
+
+ float mixer_split_ratio = FLOAT(mixer_attributes_.split_left) / FLOAT(mixer_attributes_.width);
+
+ mixer_attributes_ = mixer_attributes;
+ mixer_attributes_.split_left = mixer_attributes_.width;
+ if (display_attributes_[index].is_device_split) {
+ mixer_attributes_.split_left = UINT32(FLOAT(mixer_attributes.width) * mixer_split_ratio);
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::GetMixerAttributes(HWMixerAttributes *mixer_attributes) {
+ if (!mixer_attributes) {
+ return kErrorParameters;
+ }
+
+ *mixer_attributes = mixer_attributes_;
+
+ return kErrorNone;
+}
+
+DisplayError HWDeviceDRM::DumpDebugData() {
+ string dir_path = "/data/vendor/display/hw_recovery/";
+ string device_str = device_name_;
+
+ // Attempt to make hw_recovery dir, it may exist
+ if (mkdir(dir_path.c_str(), 0777) != 0 && errno != EEXIST) {
+ DLOGW("Failed to create %s directory errno = %d, desc = %s", dir_path.c_str(), errno,
+ strerror(errno));
+ return kErrorPermission;
+ }
+ // If it does exist, ensure permissions are fine
+ if (errno == EEXIST && chmod(dir_path.c_str(), 0777) != 0) {
+ DLOGW("Failed to change permissions on %s directory", dir_path.c_str());
+ return kErrorPermission;
+ }
+
+ string filename = dir_path+device_str+"_HWR_"+to_string(debug_dump_count_);
+ ofstream dst(filename);
+ debug_dump_count_++;
+
+ {
+ ifstream src;
+ src.open("/sys/kernel/debug/dri/0/debug/dump");
+ dst << "---- Event Logs ----" << std::endl;
+ dst << src.rdbuf() << std::endl;
+ src.close();
+ }
+
+ {
+ ifstream src;
+ src.open("/sys/kernel/debug/dri/0/debug/recovery_reg");
+ dst << "---- All Registers ----" << std::endl;
+ dst << src.rdbuf() << std::endl;
+ src.close();
+ }
+
+ {
+ ifstream src;
+ src.open("/sys/kernel/debug/dri/0/debug/recovery_dbgbus");
+ dst << "---- Debug Bus ----" << std::endl;
+ dst << src.rdbuf() << std::endl;
+ src.close();
+ }
+
+ {
+ ifstream src;
+ src.open("/sys/kernel/debug/dri/0/debug/recovery_vbif_dbgbus");
+ dst << "---- VBIF Debug Bus ----" << std::endl;
+ dst << src.rdbuf() << std::endl;
+ src.close();
+ }
+
+ dst.close();
+ DLOGI("Wrote hw_recovery file %s", filename.c_str());
+
+ return kErrorNone;
+}
+
+void HWDeviceDRM::GetDRMDisplayToken(sde_drm::DRMDisplayToken *token) const {
+ *token = token_;
+}
+
+void HWDeviceDRM::UpdateMixerAttributes() {
+ uint32_t index = current_mode_index_;
+
+ mixer_attributes_.width = display_attributes_[index].x_pixels;
+ mixer_attributes_.height = display_attributes_[index].y_pixels;
+ mixer_attributes_.split_left = display_attributes_[index].is_device_split
+ ? hw_panel_info_.split_info.left_split
+ : mixer_attributes_.width;
+ mixer_attributes_.mixer_index = token_.crtc_index;
+ DLOGI("Mixer WxH %dx%d for %s", mixer_attributes_.width, mixer_attributes_.height, device_name_);
+ update_mode_ = true;
+}
+
+void HWDeviceDRM::SetSecureConfig(const LayerBuffer &input_buffer, DRMSecureMode *fb_secure_mode,
+ DRMSecurityLevel *security_level) {
+ *fb_secure_mode = DRMSecureMode::NON_SECURE;
+ *security_level = DRMSecurityLevel::SECURE_NON_SECURE;
+
+ if (input_buffer.flags.secure) {
+ if (input_buffer.flags.secure_camera) {
+ // IOMMU configuration for this framebuffer mode is secure domain & requires
+ // only stage II translation, when this buffer is accessed by Display H/W.
+ // Secure and non-secure planes can be attached to this CRTC.
+ *fb_secure_mode = DRMSecureMode::SECURE_DIR_TRANSLATION;
+ } else if (input_buffer.flags.secure_display) {
+ // IOMMU configuration for this framebuffer mode is secure domain & requires
+ // only stage II translation, when this buffer is accessed by Display H/W.
+ // Only secure planes can be attached to this CRTC.
+ *fb_secure_mode = DRMSecureMode::SECURE_DIR_TRANSLATION;
+ *security_level = DRMSecurityLevel::SECURE_ONLY;
+ } else {
+ // IOMMU configuration for this framebuffer mode is secure domain & requires both
+ // stage I and stage II translations, when this buffer is accessed by Display H/W.
+ // Secure and non-secure planes can be attached to this CRTC.
+ *fb_secure_mode = DRMSecureMode::SECURE;
+ }
+ }
+}
+
+void HWDeviceDRM::SetTopology(sde_drm::DRMTopology drm_topology, HWTopology *hw_topology) {
+ switch (drm_topology) {
+ case DRMTopology::SINGLE_LM: *hw_topology = kSingleLM; break;
+ case DRMTopology::SINGLE_LM_DSC: *hw_topology = kSingleLMDSC; break;
+ case DRMTopology::DUAL_LM: *hw_topology = kDualLM; break;
+ case DRMTopology::DUAL_LM_DSC: *hw_topology = kDualLMDSC; break;
+ case DRMTopology::DUAL_LM_MERGE: *hw_topology = kDualLMMerge; break;
+ case DRMTopology::DUAL_LM_MERGE_DSC: *hw_topology = kDualLMMergeDSC; break;
+ case DRMTopology::DUAL_LM_DSCMERGE: *hw_topology = kDualLMDSCMerge; break;
+ case DRMTopology::PPSPLIT: *hw_topology = kPPSplit; break;
+ default: *hw_topology = kUnknown; break;
+ }
+}
+
+
+void HWDeviceDRM::SetMultiRectMode(const uint32_t flags, DRMMultiRectMode *target) {
+ *target = DRMMultiRectMode::NONE;
+ if (flags & kMultiRect) {
+ *target = DRMMultiRectMode::SERIAL;
+ if (flags & kMultiRectParallelMode) {
+ *target = DRMMultiRectMode::PARALLEL;
+ }
+ }
+}
+
+void HWDeviceDRM::SetSsppTonemapFeatures(HWPipeInfo *pipe_info) {
+ if (pipe_info->dgm_csc_info.op != kNoOp) {
+ SDECsc csc = {};
+ SetDGMCsc(pipe_info->dgm_csc_info, &csc);
+ DLOGV_IF(kTagDriverConfig, "Call Perform DGM CSC Op = %s",
+ (pipe_info->dgm_csc_info.op == kSet) ? "Set" : "Reset");
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_DGM_CSC_CONFIG, pipe_info->pipe_id,
+ reinterpret_cast<uint64_t>(&csc.csc_v1));
+ }
+ if (pipe_info->inverse_pma_info.op != kNoOp) {
+ DLOGV_IF(kTagDriverConfig, "Call Perform Inverse PMA Op = %s",
+ (pipe_info->inverse_pma_info.op == kSet) ? "Set" : "Reset");
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_INVERSE_PMA, pipe_info->pipe_id,
+ (pipe_info->inverse_pma_info.inverse_pma) ? 1: 0);
+ }
+ SetSsppLutFeatures(pipe_info);
+}
+
+void HWDeviceDRM::SetDGMCsc(const HWPipeCscInfo &dgm_csc_info, SDECsc *csc) {
+ SetDGMCscV1(dgm_csc_info.csc, &csc->csc_v1);
+}
+
+void HWDeviceDRM::SetDGMCscV1(const HWCsc &dgm_csc, sde_drm_csc_v1 *csc_v1) {
+ uint32_t i = 0;
+ for (i = 0; i < MAX_CSC_MATRIX_COEFF_SIZE; i++) {
+ csc_v1->ctm_coeff[i] = dgm_csc.ctm_coeff[i];
+ DLOGV_IF(kTagDriverConfig, " DGM csc_v1[%d] = %d", i, csc_v1->ctm_coeff[i]);
+ }
+ for (i = 0; i < MAX_CSC_BIAS_SIZE; i++) {
+ csc_v1->pre_bias[i] = dgm_csc.pre_bias[i];
+ csc_v1->post_bias[i] = dgm_csc.post_bias[i];
+ }
+ for (i = 0; i < MAX_CSC_CLAMP_SIZE; i++) {
+ csc_v1->pre_clamp[i] = dgm_csc.pre_clamp[i];
+ csc_v1->post_clamp[i] = dgm_csc.post_clamp[i];
+ }
+}
+
+void HWDeviceDRM::SetSsppLutFeatures(HWPipeInfo *pipe_info) {
+ for (HWPipeTonemapLutInfo &lut_info : pipe_info->lut_info) {
+ if (lut_info.op != kNoOp) {
+ std::shared_ptr<PPFeatureInfo> feature = lut_info.pay_load;
+ if (feature == nullptr) {
+ DLOGE("Null Pointer for Op = %d lut type = %d", lut_info.op, lut_info.type);
+ continue;
+ }
+ DRMPPFeatureInfo kernel_params = {};
+ std::vector<DRMPPFeatureID> drm_id = {};
+ PPBlock pp_block = GetPPBlock(lut_info.type);
+ hw_color_mgr_->ToDrmFeatureId(pp_block, feature->feature_id_, &drm_id);
+ for (DRMPPFeatureID id : drm_id) {
+ if (id >= kPPFeaturesMax) {
+ DLOGE("Invalid feature id %d", id);
+ continue;
+ }
+ kernel_params.id = id;
+ bool disable = (lut_info.op == kReset);
+ DLOGV_IF(kTagDriverConfig, "Lut Type = %d PPBlock = %d Op = %s Disable = %d Feature = %p",
+ lut_info.type, pp_block, (lut_info.op ==kSet) ? "Set" : "Reset", disable,
+ feature.get());
+ int ret = hw_color_mgr_->GetDrmFeature(feature.get(), &kernel_params, disable);
+ if (!ret) {
+ drm_atomic_intf_->Perform(DRMOps::PLANE_SET_POST_PROC, pipe_info->pipe_id,
+ &kernel_params);
+ hw_color_mgr_->FreeDrmFeatureData(&kernel_params);
+ } else {
+ DLOGE("GetDrmFeature failed for Lut type = %d", lut_info.type);
+ }
+ }
+ drm_id.clear();
+ }
+ }
+}
+
+void HWDeviceDRM::AddDimLayerIfNeeded() {
+ if (secure_display_active_ && hw_resource_.secure_disp_blend_stage >= 0) {
+ HWSolidfillStage sf = {};
+ sf.z_order = UINT32(hw_resource_.secure_disp_blend_stage);
+ sf.roi = { 0.0, 0.0, FLOAT(mixer_attributes_.width), FLOAT(mixer_attributes_.height) };
+ solid_fills_.clear();
+ AddSolidfillStage(sf, 0xFF);
+ SetSolidfillStages();
+ }
+
+ if (!secure_display_active_) {
+ DRMSecurityLevel crtc_security_level = DRMSecurityLevel::SECURE_NON_SECURE;
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_SECURITY_LEVEL, token_.crtc_id, crtc_security_level);
+ }
+}
+
+DisplayError HWDeviceDRM::NullCommit(bool synchronous, bool retain_planes) {
+ DTRACE_SCOPED();
+ AddDimLayerIfNeeded();
+ int ret = drm_atomic_intf_->Commit(synchronous , retain_planes);
+ if (ret) {
+ DLOGE("failed with error %d", ret);
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+void HWDeviceDRM::DumpConnectorModeInfo() {
+ for (uint32_t i = 0; i < (uint32_t)connector_info_.modes.size(); i++) {
+ DLOGI("Mode[%d] Name:%s vref:%d hdisp:%d hsync_s:%d hsync_e:%d htotal:%d " \
+ "vdisp:%d vsync_s:%d vsync_e:%d vtotal:%d\n", i, connector_info_.modes[i].mode.name,
+ connector_info_.modes[i].mode.vrefresh, connector_info_.modes[i].mode.hdisplay,
+ connector_info_.modes[i].mode.hsync_start, connector_info_.modes[i].mode.hsync_end,
+ connector_info_.modes[i].mode.htotal, connector_info_.modes[i].mode.vdisplay,
+ connector_info_.modes[i].mode.vsync_start, connector_info_.modes[i].mode.vsync_end,
+ connector_info_.modes[i].mode.vtotal);
+ }
+}
+
+void HWDeviceDRM::SetFullROI() {
+ // Reset the CRTC ROI and connector ROI only for the panel that supports partial update
+ if (!hw_panel_info_.partial_update && !panel_mode_changed_) {
+ return;
+ }
+ uint32_t index = current_mode_index_;
+ DRMRect crtc_rects = {0, 0, mixer_attributes_.width, mixer_attributes_.height};
+ DRMRect conn_rects = {0, 0, display_attributes_[index].x_pixels,
+ display_attributes_[index].y_pixels};
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ROI, token_.crtc_id, 1, &crtc_rects);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_ROI, token_.conn_id, 1, &conn_rects);
+}
+
+DisplayError HWDeviceDRM::SetDynamicDSIClock(uint64_t bit_clk_rate) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDeviceDRM::GetDynamicDSIClock(uint64_t *bit_clk_rate) {
+ return kErrorNotSupported;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/drm/hw_device_drm.h b/sdm/libs/core/drm/hw_device_drm.h
new file mode 100644
index 0000000..c4a330a
--- /dev/null
+++ b/sdm/libs/core/drm/hw_device_drm.h
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __HW_DEVICE_DRM_H__
+#define __HW_DEVICE_DRM_H__
+
+#include <drm_interface.h>
+#include <errno.h>
+#include <pthread.h>
+#include <xf86drmMode.h>
+#include <string>
+#include <unordered_map>
+#include <vector>
+#include <memory>
+
+#include "hw_interface.h"
+#include "hw_scale_drm.h"
+#include "hw_color_manager_drm.h"
+
+#define IOCTL_LOGE(ioctl, type) \
+ DLOGE("ioctl %s, device = %d errno = %d, desc = %s", #ioctl, type, errno, strerror(errno))
+
+#define UI_FBID_LIMIT 3
+#define VIDEO_FBID_LIMIT 16
+#define OFFLINE_ROTATOR_FBID_LIMIT 2
+
+using sde_drm::DRMPowerMode;
+namespace sdm {
+class HWInfoInterface;
+
+struct SDECsc {
+ struct sde_drm_csc_v1 csc_v1 = {};
+ // More here, maybe in a union
+};
+
+class HWDeviceDRM : public HWInterface {
+ public:
+ HWDeviceDRM(BufferSyncHandler *buffer_sync_handler, BufferAllocator *buffer_allocator,
+ HWInfoInterface *hw_info_intf);
+ virtual ~HWDeviceDRM() {}
+ virtual DisplayError Init();
+ virtual DisplayError Deinit();
+ void GetDRMDisplayToken(sde_drm::DRMDisplayToken *token) const;
+ bool IsPrimaryDisplay() const { return hw_panel_info_.is_primary_panel; }
+
+ protected:
+ // From HWInterface
+ virtual DisplayError GetDisplayId(int32_t *display_id);
+ virtual DisplayError GetActiveConfig(uint32_t *active_config);
+ virtual DisplayError GetDefaultConfig(uint32_t *default_config) { return kErrorNotSupported; }
+ virtual DisplayError GetNumDisplayAttributes(uint32_t *count);
+ virtual DisplayError GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes);
+ virtual DisplayError GetHWPanelInfo(HWPanelInfo *panel_info);
+ virtual DisplayError SetDisplayAttributes(uint32_t index);
+ virtual DisplayError SetDisplayAttributes(const HWDisplayAttributes &display_attributes);
+ virtual DisplayError GetConfigIndex(char *mode, uint32_t *index);
+ virtual DisplayError PowerOn(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError PowerOff(bool teardown);
+ virtual DisplayError Doze(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError DozeSuspend(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError Standby();
+ virtual DisplayError Validate(HWLayers *hw_layers);
+ virtual DisplayError Commit(HWLayers *hw_layers);
+ virtual DisplayError Flush(HWLayers *hw_layers);
+ virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
+ virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
+ // This API is no longer supported, expectation is to call the correct API on HWEvents
+ virtual DisplayError SetVSyncState(bool enable);
+ virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
+ virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode);
+ virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
+ virtual DisplayError SetPanelBrightness(int level) { return kErrorNotSupported; }
+ virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info);
+ virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format);
+ virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format);
+ virtual DisplayError SetCursorPosition(HWLayers *hw_layers, int x, int y);
+ virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level);
+ virtual DisplayError GetPanelBrightness(int *level) { return kErrorNotSupported; }
+ virtual void GetHWPanelMaxBrightness() { return; }
+ virtual DisplayError SetAutoRefresh(bool enable) { autorefresh_ = enable; return kErrorNone; }
+ virtual DisplayError SetS3DMode(HWS3DMode s3d_mode);
+ virtual DisplayError SetScaleLutConfig(HWScaleLutInfo *lut_info);
+ virtual DisplayError UnsetScaleLutConfig();
+ virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes);
+ virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes);
+ virtual void InitializeConfigs();
+ virtual DisplayError DumpDebugData();
+ virtual void PopulateHWPanelInfo();
+ virtual DisplayError SetDppsFeature(void *payload, size_t size) { return kErrorNotSupported; }
+ virtual DisplayError GetDppsFeatureInfo(void *payload, size_t size) { return kErrorNotSupported; }
+ virtual DisplayError TeardownConcurrentWriteback(void) { return kErrorNotSupported; }
+ virtual DisplayError HandleSecureEvent(SecureEvent secure_event, HWLayers *hw_layers) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError ControlIdlePowerCollapse(bool enable, bool synchronous) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetDisplayDppsAdROI(void *payload) { return kErrorNotSupported; }
+ virtual DisplayError SetDynamicDSIClock(uint64_t bit_clk_rate);
+ virtual DisplayError GetDynamicDSIClock(uint64_t *bit_clk_rate);
+ virtual DisplayError GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data);
+
+ enum {
+ kHWEventVSync,
+ kHWEventBlank,
+ };
+
+ static const int kMaxStringLength = 1024;
+ static const int kNumPhysicalDisplays = 2;
+ static const int kMaxSysfsCommandLength = 12;
+
+ DisplayError SetFormat(const LayerBufferFormat &source, uint32_t *target);
+ DisplayError SetStride(HWDeviceType device_type, LayerBufferFormat format, uint32_t width,
+ uint32_t *target);
+ DisplayError PopulateDisplayAttributes(uint32_t index);
+ void GetHWDisplayPortAndMode();
+ bool EnableHotPlugDetection(int enable);
+ void UpdateMixerAttributes();
+ void SetSolidfillStages();
+ void AddSolidfillStage(const HWSolidfillStage &sf, uint32_t plane_alpha);
+ void ClearSolidfillStages();
+ void SetBlending(const LayerBlending &source, sde_drm::DRMBlendType *target);
+ void SetSrcConfig(const LayerBuffer &input_buffer, const HWRotatorMode &mode, uint32_t *config);
+ void SelectCscType(const LayerBuffer &input_buffer, sde_drm::DRMCscType *type);
+ void SetRect(const LayerRect &source, sde_drm::DRMRect *target);
+ void SetRotation(LayerTransform transform, const HWRotatorMode &mode, uint32_t* rot_bit_mask);
+ DisplayError DefaultCommit(HWLayers *hw_layers);
+ DisplayError AtomicCommit(HWLayers *hw_layers);
+ void SetupAtomic(HWLayers *hw_layers, bool validate);
+ void SetSecureConfig(const LayerBuffer &input_buffer, sde_drm::DRMSecureMode *fb_secure_mode,
+ sde_drm::DRMSecurityLevel *security_level);
+ bool IsResolutionSwitchEnabled() const { return resolution_switch_enabled_; }
+ void SetTopology(sde_drm::DRMTopology drm_topology, HWTopology *hw_topology);
+ void SetMultiRectMode(const uint32_t flags, sde_drm::DRMMultiRectMode *target);
+ void SetSsppTonemapFeatures(HWPipeInfo *pipe_info);
+ void SetDGMCsc(const HWPipeCscInfo &dgm_csc_info, SDECsc *csc);
+ void SetDGMCscV1(const HWCsc &dgm_csc, sde_drm_csc_v1 *csc_v1);
+ void SetSsppLutFeatures(HWPipeInfo *pipe_info);
+ void AddDimLayerIfNeeded();
+ DisplayError NullCommit(bool synchronous, bool retain_planes);
+ void DumpConnectorModeInfo();
+ void SetFullROI();
+ void SetQOSData(const HWQosData &qos_data);
+
+ class Registry {
+ public:
+ explicit Registry(BufferAllocator *buffer_allocator);
+ // Called on each Validate and Commit to map the handle_id to fb_id of each layer buffer.
+ void Register(HWLayers *hw_layers);
+ // Called on display disconnect to clear output buffer map and remove fb_ids.
+ void Clear();
+ // Create the fd_id for the given buffer.
+ int CreateFbId(LayerBuffer *buffer, uint32_t *fb_id);
+ // Find handle_id in the layer map. Else create fb_id and add <handle_id,fb_id> in map.
+ void MapBufferToFbId(Layer* layer, LayerBuffer* buffer);
+ // Find handle_id in output buffer map. Else create fb_id and add <handle_id,fb_id> in map.
+ void MapOutputBufferToFbId(LayerBuffer* buffer);
+ // Find fb_id for given handle_id in the layer map.
+ uint32_t GetFbId(Layer *layer, uint64_t handle_id);
+ // Find fb_id for given handle_id in output buffer map.
+ uint32_t GetOutputFbId(uint64_t handle_id);
+
+ private:
+ bool disable_fbid_cache_ = false;
+ std::unordered_map<uint64_t, std::shared_ptr<LayerBufferObject>> output_buffer_map_ {};
+ BufferAllocator *buffer_allocator_ = {};
+ uint8_t fbid_cache_limit_ = UI_FBID_LIMIT;
+ };
+
+ protected:
+ const char *device_name_ = {};
+ bool default_mode_ = false;
+ int32_t display_id_ = -1;
+ sde_drm::DRMDisplayType disp_type_ = {};
+ HWInfoInterface *hw_info_intf_ = {};
+ BufferSyncHandler *buffer_sync_handler_ = {};
+ int dev_fd_ = -1;
+ Registry registry_;
+ sde_drm::DRMDisplayToken token_ = {};
+ HWResourceInfo hw_resource_ = {};
+ HWPanelInfo hw_panel_info_ = {};
+ HWScaleDRM *hw_scale_ = {};
+ sde_drm::DRMManagerInterface *drm_mgr_intf_ = {};
+ sde_drm::DRMAtomicReqInterface *drm_atomic_intf_ = {};
+ std::vector<HWDisplayAttributes> display_attributes_ = {};
+ uint32_t current_mode_index_ = 0;
+ sde_drm::DRMConnectorInfo connector_info_ = {};
+ bool first_cycle_ = true;
+ int64_t release_fence_ = -1;
+ int64_t retire_fence_ = -1;
+ HWMixerAttributes mixer_attributes_ = {};
+ std::vector<sde_drm::DRMSolidfillStage> solid_fills_ {};
+ bool secure_display_active_ = false;
+ uint64_t debug_dump_count_ = 0;
+ bool synchronous_commit_ = false;
+ uint32_t topology_control_ = 0;
+ uint32_t vrefresh_ = 0;
+ uint32_t panel_mode_changed_ = 0;
+ bool reset_output_fence_offset_ = false;
+ uint64_t bit_clk_rate_ = 0;
+ bool update_mode_ = false;
+ uint32_t video_mode_index_ = 0;
+ uint32_t cmd_mode_index_ = 0;
+ bool switch_mode_valid_ = false;
+ bool doze_poms_switch_done_ = false;
+ bool active_ = false;
+ DRMPowerMode last_power_mode_ = DRMPowerMode::OFF;
+ bool pending_doze_ = false;
+
+ private:
+ void SetDisplaySwitchMode(uint32_t index);
+
+ std::string interface_str_ = "DSI";
+ bool resolution_switch_enabled_ = false;
+ bool autorefresh_ = false;
+ std::unique_ptr<HWColorManagerDrm> hw_color_mgr_ = {};
+};
+
+} // namespace sdm
+
+#endif // __HW_DEVICE_DRM_H__
diff --git a/sdm/libs/core/drm/hw_events_drm.cpp b/sdm/libs/core/drm/hw_events_drm.cpp
new file mode 100644
index 0000000..01d3747
--- /dev/null
+++ b/sdm/libs/core/drm/hw_events_drm.cpp
@@ -0,0 +1,743 @@
+/*
+* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <drm_master.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <math.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/prctl.h>
+#include <sys/resource.h>
+#include <sys/types.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/sys.h>
+#include <xf86drm.h>
+#include <drm/msm_drm.h>
+
+#include <algorithm>
+#include <map>
+#include <utility>
+#include <vector>
+
+#include "hw_events_drm.h"
+
+#ifndef DRM_EVENT_SDE_HW_RECOVERY
+#define DRM_EVENT_SDE_HW_RECOVERY 0x80000007
+#endif
+#ifndef SDE_RECOVERY_SUCCESS
+#define SDE_RECOVERY_SUCCESS 0
+#endif
+#ifndef SDE_RECOVERY_CAPTURE
+#define SDE_RECOVERY_CAPTURE 1
+#endif
+#ifndef SDE_RECOVERY_DISPLAY_POWER_RESET
+#define SDE_RECOVERY_DISPLAY_POWER_RESET 2
+#endif
+
+#define __CLASS__ "HWEventsDRM"
+
+namespace sdm {
+
+using drm_utils::DRMMaster;
+
+DisplayError HWEventsDRM::InitializePollFd() {
+ for (uint32_t i = 0; i < event_data_list_.size(); i++) {
+ char data[kMaxStringLength]{};
+ HWEventData &event_data = event_data_list_[i];
+ poll_fds_[i] = {};
+ poll_fds_[i].fd = -1;
+
+ switch (event_data.event_type) {
+ case HWEvent::VSYNC: {
+ poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;
+ if (is_primary_) {
+ DRMMaster *master = nullptr;
+ int ret = DRMMaster::GetInstance(&master);
+ if (ret < 0) {
+ DLOGE("Failed to acquire DRMMaster instance");
+ return kErrorNotSupported;
+ }
+ master->GetHandle(&poll_fds_[i].fd);
+ } else {
+ poll_fds_[i].fd = drmOpen("msm_drm", nullptr);
+ }
+ vsync_index_ = i;
+ } break;
+ case HWEvent::EXIT: {
+ // Create an eventfd to be used to unblock the poll system call when
+ // a thread is exiting.
+ poll_fds_[i].fd = Sys::eventfd_(0, 0);
+ poll_fds_[i].events |= POLLIN;
+ // Clear any existing data
+ Sys::pread_(poll_fds_[i].fd, data, kMaxStringLength, 0);
+ } break;
+ case HWEvent::IDLE_NOTIFY: {
+ poll_fds_[i].fd = drmOpen("msm_drm", nullptr);
+ if (poll_fds_[i].fd < 0) {
+ DLOGE("drmOpen failed with error %d", poll_fds_[i].fd);
+ return kErrorResources;
+ }
+ poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;
+ idle_notify_index_ = i;
+ } break;
+ case HWEvent::IDLE_POWER_COLLAPSE: {
+ poll_fds_[i].fd = drmOpen("msm_drm", nullptr);
+ if (poll_fds_[i].fd < 0) {
+ DLOGE("drmOpen failed with error %d", poll_fds_[i].fd);
+ return kErrorResources;
+ }
+ poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;
+ idle_pc_index_ = i;
+ } break;
+ case HWEvent::PANEL_DEAD: {
+ poll_fds_[i].fd = drmOpen("msm_drm", nullptr);
+ if (poll_fds_[i].fd < 0) {
+ DLOGE("drmOpen failed with error %d", poll_fds_[i].fd);
+ return kErrorResources;
+ }
+ poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;
+ panel_dead_index_ = i;
+ } break;
+ case HWEvent::HW_RECOVERY: {
+ poll_fds_[i].fd = drmOpen("msm_drm", nullptr);
+ if (poll_fds_[i].fd < 0) {
+ DLOGE("drmOpen failed with error %d", poll_fds_[i].fd);
+ return kErrorResources;
+ }
+ poll_fds_[i].events = POLLIN | POLLPRI | POLLERR;
+ hw_recovery_index_ = i;
+ } break;
+ case HWEvent::CEC_READ_MESSAGE:
+ case HWEvent::SHOW_BLANK_EVENT:
+ case HWEvent::THERMAL_LEVEL:
+ case HWEvent::PINGPONG_TIMEOUT:
+ break;
+ }
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWEventsDRM::SetEventParser() {
+ DisplayError error = kErrorNone;
+
+ for (auto &event_data : event_data_list_) {
+ switch (event_data.event_type) {
+ case HWEvent::VSYNC:
+ event_data.event_parser = &HWEventsDRM::HandleVSync;
+ break;
+ case HWEvent::IDLE_NOTIFY:
+ event_data.event_parser = &HWEventsDRM::HandleIdleTimeout;
+ break;
+ case HWEvent::CEC_READ_MESSAGE:
+ event_data.event_parser = &HWEventsDRM::HandleCECMessage;
+ break;
+ case HWEvent::EXIT:
+ event_data.event_parser = &HWEventsDRM::HandleThreadExit;
+ break;
+ case HWEvent::SHOW_BLANK_EVENT:
+ event_data.event_parser = &HWEventsDRM::HandleBlank;
+ break;
+ case HWEvent::THERMAL_LEVEL:
+ event_data.event_parser = &HWEventsDRM::HandleThermal;
+ break;
+ case HWEvent::IDLE_POWER_COLLAPSE:
+ event_data.event_parser = &HWEventsDRM::HandleIdlePowerCollapse;
+ break;
+ case HWEvent::PANEL_DEAD:
+ event_data.event_parser = &HWEventsDRM::HandlePanelDead;
+ break;
+ case HWEvent::HW_RECOVERY:
+ event_data.event_parser = &HWEventsDRM::HandleHwRecovery;
+ break;
+ default:
+ error = kErrorParameters;
+ break;
+ }
+ }
+
+ return error;
+}
+
+void HWEventsDRM::PopulateHWEventData(const vector<HWEvent> &event_list) {
+ for (auto &event : event_list) {
+ HWEventData event_data;
+ event_data.event_type = event;
+ event_data_list_.push_back(std::move(event_data));
+ }
+
+ SetEventParser();
+ InitializePollFd();
+}
+
+DisplayError HWEventsDRM::Init(int display_id, DisplayType display_type,
+ HWEventHandler *event_handler, const vector<HWEvent> &event_list,
+ const HWInterface *hw_intf) {
+ if (!event_handler)
+ return kErrorParameters;
+
+ static_cast<const HWDeviceDRM *>(hw_intf)->GetDRMDisplayToken(&token_);
+ is_primary_ = static_cast<const HWDeviceDRM *>(hw_intf)->IsPrimaryDisplay();
+
+ DLOGI("Setup event handler for display %d-%d, CRTC %d, Connector %d", display_id, display_type,
+ token_.crtc_id, token_.conn_id);
+
+ event_handler_ = event_handler;
+ poll_fds_.resize(event_list.size());
+ event_thread_name_ += " - " + std::to_string(display_id) + "-" + std::to_string(display_type);
+
+ PopulateHWEventData(event_list);
+
+ if (pthread_create(&event_thread_, NULL, &DisplayEventThread, this) < 0) {
+ DLOGE("Failed to start %s, error = %s", event_thread_name_.c_str(), strerror(errno));
+ return kErrorResources;
+ }
+
+ RegisterPanelDead(true);
+ RegisterIdleNotify(true);
+ RegisterIdlePowerCollapse(true);
+
+ int value = 0;
+ if (Debug::Get()->GetProperty(DISABLE_HW_RECOVERY_PROP, &value) == kErrorNone) {
+ disable_hw_recovery_ = (value == 1);
+ }
+ DLOGI("disable_hw_recovery_ set to %d", disable_hw_recovery_);
+ if (!disable_hw_recovery_) {
+ RegisterHwRecovery(true);
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWEventsDRM::Deinit() {
+ exit_threads_ = true;
+ RegisterPanelDead(false);
+ RegisterIdleNotify(false);
+ RegisterIdlePowerCollapse(false);
+ if (!disable_hw_recovery_) {
+ RegisterHwRecovery(false);
+ }
+ Sys::pthread_cancel_(event_thread_);
+ WakeUpEventThread();
+ pthread_join(event_thread_, NULL);
+ CloseFds();
+
+ return kErrorNone;
+}
+
+DisplayError HWEventsDRM::SetEventState(HWEvent event, bool enable, void *arg) {
+ switch (event) {
+ case HWEvent::VSYNC: {
+ std::lock_guard<std::mutex> lock(vsync_mutex_);
+ vsync_enabled_ = enable;
+ if (vsync_enabled_ && !vsync_registered_) {
+ RegisterVSync();
+ vsync_registered_ = true;
+ }
+ } break;
+ default:
+ DLOGE("Event not supported");
+ return kErrorNotSupported;
+ }
+
+ return kErrorNone;
+}
+
+void HWEventsDRM::WakeUpEventThread() {
+ for (uint32_t i = 0; i < event_data_list_.size(); i++) {
+ if (event_data_list_[i].event_type == HWEvent::EXIT && poll_fds_[i].fd >= 0) {
+ uint64_t exit_value = 1;
+ ssize_t write_size = Sys::write_(poll_fds_[i].fd, &exit_value, sizeof(uint64_t));
+ if (write_size != sizeof(uint64_t)) {
+ DLOGW("Error triggering exit fd (%d). write size = %d, error = %s", poll_fds_[i].fd,
+ write_size, strerror(errno));
+ }
+ break;
+ }
+ }
+}
+
+DisplayError HWEventsDRM::CloseFds() {
+ for (uint32_t i = 0; i < event_data_list_.size(); i++) {
+ switch (event_data_list_[i].event_type) {
+ case HWEvent::VSYNC:
+ if (!is_primary_) {
+ Sys::close_(poll_fds_[i].fd);
+ }
+ poll_fds_[i].fd = -1;
+ break;
+ case HWEvent::EXIT:
+ Sys::close_(poll_fds_[i].fd);
+ poll_fds_[i].fd = -1;
+ break;
+ case HWEvent::IDLE_NOTIFY:
+ case HWEvent::IDLE_POWER_COLLAPSE:
+ case HWEvent::PANEL_DEAD:
+ case HWEvent::HW_RECOVERY:
+ drmClose(poll_fds_[i].fd);
+ poll_fds_[i].fd = -1;
+ break;
+ case HWEvent::CEC_READ_MESSAGE:
+ case HWEvent::SHOW_BLANK_EVENT:
+ case HWEvent::THERMAL_LEVEL:
+ break;
+ default:
+ return kErrorNotSupported;
+ }
+ }
+
+ return kErrorNone;
+}
+
+void *HWEventsDRM::DisplayEventThread(void *context) {
+ if (context) {
+ return reinterpret_cast<HWEventsDRM *>(context)->DisplayEventHandler();
+ }
+
+ return NULL;
+}
+
+void *HWEventsDRM::DisplayEventHandler() {
+ char data[kMaxStringLength]{};
+
+ prctl(PR_SET_NAME, event_thread_name_.c_str(), 0, 0, 0);
+ setpriority(PRIO_PROCESS, 0, kThreadPriorityUrgent);
+
+ // Real Time task with lowest priority.
+ struct sched_param param = {0};
+ param.sched_priority = sched_get_priority_min(SCHED_FIFO);
+ sched_setscheduler(0, SCHED_FIFO, ¶m);
+
+ while (!exit_threads_) {
+ int error = Sys::poll_(poll_fds_.data(), UINT32(poll_fds_.size()), -1);
+ if (error <= 0) {
+ DLOGW("poll failed. error = %s", strerror(errno));
+ continue;
+ }
+
+ for (uint32_t i = 0; i < event_data_list_.size(); i++) {
+ pollfd &poll_fd = poll_fds_[i];
+ if (poll_fd.fd < 0) {
+ continue;
+ }
+
+ switch (event_data_list_[i].event_type) {
+ case HWEvent::VSYNC:
+ case HWEvent::PANEL_DEAD:
+ case HWEvent::IDLE_NOTIFY:
+ case HWEvent::IDLE_POWER_COLLAPSE:
+ case HWEvent::HW_RECOVERY:
+ if (poll_fd.revents & (POLLIN | POLLPRI | POLLERR)) {
+ (this->*(event_data_list_[i]).event_parser)(nullptr);
+ }
+ break;
+ case HWEvent::EXIT:
+ if ((poll_fd.revents & POLLIN) &&
+ (Sys::read_(poll_fd.fd, data, kMaxStringLength) > 0)) {
+ (this->*(event_data_list_[i]).event_parser)(data);
+ }
+ break;
+ case HWEvent::CEC_READ_MESSAGE:
+ case HWEvent::SHOW_BLANK_EVENT:
+ case HWEvent::THERMAL_LEVEL:
+ case HWEvent::PINGPONG_TIMEOUT:
+ if ((poll_fd.revents & POLLPRI) &&
+ (Sys::pread_(poll_fd.fd, data, kMaxStringLength, 0) > 0)) {
+ (this->*(event_data_list_[i]).event_parser)(data);
+ }
+ break;
+ }
+ }
+ }
+
+ pthread_exit(0);
+
+ return nullptr;
+}
+
+DisplayError HWEventsDRM::RegisterVSync() {
+ DTRACE_SCOPED();
+ drmVBlank vblank {};
+ uint32_t high_crtc = token_.crtc_index << DRM_VBLANK_HIGH_CRTC_SHIFT;
+ vblank.request.type = (drmVBlankSeqType)(DRM_VBLANK_RELATIVE | DRM_VBLANK_EVENT |
+ (high_crtc & DRM_VBLANK_HIGH_CRTC_MASK));
+ vblank.request.sequence = 1;
+ // DRM hack to pass in context to unused field signal. Driver will write this to the node being
+ // polled on, and will be read as part of drm event handling and sent to handler
+ vblank.request.signal = reinterpret_cast<unsigned long>(this); // NOLINT
+ int error = drmWaitVBlank(poll_fds_[vsync_index_].fd, &vblank);
+ if (error < 0) {
+ DLOGE("drmWaitVBlank failed with err %d", errno);
+ return kErrorResources;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWEventsDRM::RegisterPanelDead(bool enable) {
+ if (panel_dead_index_ == UINT32_MAX) {
+ DLOGI("panel dead is not supported event");
+ return kErrorNone;
+ }
+
+ struct drm_msm_event_req req = {};
+ int ret = 0;
+
+ req.object_id = token_.conn_id;
+ req.object_type = DRM_MODE_OBJECT_CONNECTOR;
+ req.event = DRM_EVENT_PANEL_DEAD;
+ if (enable) {
+ ret = drmIoctl(poll_fds_[panel_dead_index_].fd, DRM_IOCTL_MSM_REGISTER_EVENT, &req);
+ } else {
+ ret = drmIoctl(poll_fds_[panel_dead_index_].fd, DRM_IOCTL_MSM_DEREGISTER_EVENT, &req);
+ }
+
+ if (ret) {
+ DLOGE("register panel dead enable:%d failed", enable);
+ return kErrorResources;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWEventsDRM::RegisterIdleNotify(bool enable) {
+ if (idle_notify_index_ == UINT32_MAX) {
+ DLOGI("idle notify is not supported event");
+ return kErrorNone;
+ }
+
+ struct drm_msm_event_req req = {};
+ int ret = 0;
+
+ req.object_id = token_.crtc_id;
+ req.object_type = DRM_MODE_OBJECT_CRTC;
+ req.event = DRM_EVENT_IDLE_NOTIFY;
+ if (enable) {
+ ret = drmIoctl(poll_fds_[idle_notify_index_].fd, DRM_IOCTL_MSM_REGISTER_EVENT, &req);
+ } else {
+ ret = drmIoctl(poll_fds_[idle_notify_index_].fd, DRM_IOCTL_MSM_DEREGISTER_EVENT, &req);
+ }
+
+ if (ret) {
+ DLOGE("register idle notify enable:%d failed", enable);
+ return kErrorResources;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWEventsDRM::RegisterIdlePowerCollapse(bool enable) {
+ if (idle_pc_index_ == UINT32_MAX) {
+ DLOGI("idle power collapse is not supported event");
+ return kErrorNone;
+ }
+
+ struct drm_msm_event_req req = {};
+ int ret = 0;
+
+ req.object_id = token_.crtc_id;
+ req.object_type = DRM_MODE_OBJECT_CRTC;
+ req.event = DRM_EVENT_SDE_POWER;
+ if (enable) {
+ ret = drmIoctl(poll_fds_[idle_pc_index_].fd, DRM_IOCTL_MSM_REGISTER_EVENT, &req);
+ } else {
+ ret = drmIoctl(poll_fds_[idle_pc_index_].fd, DRM_IOCTL_MSM_DEREGISTER_EVENT, &req);
+ }
+
+ if (ret) {
+ DLOGE("register idle power collapse enable:%d failed", enable);
+ return kErrorResources;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWEventsDRM::RegisterHwRecovery(bool enable) {
+ if (hw_recovery_index_ == UINT32_MAX) {
+ DLOGI("Hardware recovery is not supported");
+ return kErrorNone;
+ }
+
+ struct drm_msm_event_req req = {};
+ int ret = 0;
+
+ req.object_id = token_.conn_id;
+ req.object_type = DRM_MODE_OBJECT_CONNECTOR;
+ req.event = DRM_EVENT_SDE_HW_RECOVERY;
+ if (enable) {
+ ret = drmIoctl(poll_fds_[hw_recovery_index_].fd, DRM_IOCTL_MSM_REGISTER_EVENT, &req);
+ } else {
+ ret = drmIoctl(poll_fds_[hw_recovery_index_].fd, DRM_IOCTL_MSM_DEREGISTER_EVENT, &req);
+ }
+ if (ret) {
+ DLOGE("Register hardware recovery enable:%d failed", enable);
+ return kErrorResources;
+ }
+
+ return kErrorNone;
+}
+
+void HWEventsDRM::HandleVSync(char *data) {
+ {
+ std::lock_guard<std::mutex> lock(vsync_mutex_);
+ vsync_registered_ = false;
+ if (vsync_enabled_) {
+ RegisterVSync();
+ vsync_registered_ = true;
+ }
+ }
+
+ drmEventContext event = {};
+ event.version = DRM_EVENT_CONTEXT_VERSION;
+ event.vblank_handler = &HWEventsDRM::VSyncHandlerCallback;
+ int error = drmHandleEvent(poll_fds_[vsync_index_].fd, &event);
+ if (error != 0) {
+ DLOGE("drmHandleEvent failed: %i", error);
+ }
+}
+
+void HWEventsDRM::HandlePanelDead(char *data) {
+ char event_data[kMaxStringLength] = {0};
+ int32_t size;
+ struct drm_msm_event_resp *event_resp = NULL;
+
+ size = (int32_t)Sys::pread_(poll_fds_[panel_dead_index_].fd, event_data, kMaxStringLength, 0);
+ if (size <= 0) {
+ return;
+ }
+
+ if (size > kMaxStringLength) {
+ DLOGE("event size %d is greater than event buffer size %zd\n", size, kMaxStringLength);
+ return;
+ }
+
+ if (size < (int32_t)sizeof(*event_resp)) {
+ DLOGE("Invalid event size %d expected %zd\n", size, sizeof(*event_resp));
+ return;
+ }
+
+ int32_t i = 0;
+ while (i < size) {
+ event_resp = (struct drm_msm_event_resp *)&event_data[i];
+ switch (event_resp->base.type) {
+ case DRM_EVENT_PANEL_DEAD:
+ {
+ DLOGI("Received panel dead event");
+ event_handler_->PanelDead();
+ break;
+ }
+ default: {
+ DLOGE("invalid event %d", event_resp->base.type);
+ break;
+ }
+ }
+ i += event_resp->base.length;
+ }
+
+ return;
+}
+
+void HWEventsDRM::VSyncHandlerCallback(int fd, unsigned int sequence, unsigned int tv_sec,
+ unsigned int tv_usec, void *data) {
+ int64_t timestamp = (int64_t)(tv_sec)*1000000000 + (int64_t)(tv_usec)*1000;
+ DTRACE_SCOPED();
+ reinterpret_cast<HWEventsDRM *>(data)->event_handler_->VSync(timestamp);
+}
+
+void HWEventsDRM::HandleIdleTimeout(char *data) {
+ char event_data[kMaxStringLength];
+ int32_t size;
+ struct drm_msm_event_resp *event_resp = NULL;
+
+ size = (int32_t)Sys::pread_(poll_fds_[idle_notify_index_].fd, event_data, kMaxStringLength, 0);
+ if (size < 0) {
+ return;
+ }
+
+ if (size > kMaxStringLength) {
+ DLOGE("event size %d is greater than event buffer size %zd\n", size, kMaxStringLength);
+ return;
+ }
+
+ if (size < (int32_t)sizeof(*event_resp)) {
+ DLOGE("size %d exp %zd\n", size, sizeof(*event_resp));
+ return;
+ }
+
+ int32_t i = 0;
+
+ while (i < size) {
+ event_resp = (struct drm_msm_event_resp *)&event_data[i];
+ switch (event_resp->base.type) {
+ case DRM_EVENT_IDLE_NOTIFY:
+ {
+ DLOGV("Received Idle time event");
+ event_handler_->IdleTimeout();
+ break;
+ }
+ default: {
+ DLOGE("invalid event %d", event_resp->base.type);
+ break;
+ }
+ }
+ i += event_resp->base.length;
+ }
+
+ return;
+}
+
+void HWEventsDRM::HandleCECMessage(char *data) {
+ event_handler_->CECMessage(data);
+}
+
+void HWEventsDRM::HandleIdlePowerCollapse(char *data) {
+ char event_data[kMaxStringLength];
+ int32_t size;
+ struct drm_msm_event_resp *event_resp = NULL;
+
+ size = (int32_t)Sys::pread_(poll_fds_[idle_pc_index_].fd, event_data, kMaxStringLength, 0);
+ if (size < 0) {
+ return;
+ }
+
+ if (size > kMaxStringLength) {
+ DLOGE("event size %d is greater than event buffer size %zd\n", size, kMaxStringLength);
+ return;
+ }
+
+ if (size < (int32_t)sizeof(*event_resp)) {
+ DLOGE("size %d exp %zd\n", size, sizeof(*event_resp));
+ return;
+ }
+
+ int32_t i = 0;
+
+ while (i < size) {
+ event_resp = (struct drm_msm_event_resp *)&event_data[i];
+ switch (event_resp->base.type) {
+ case DRM_EVENT_SDE_POWER:
+ {
+ uint32_t* event_payload = reinterpret_cast<uint32_t *>(event_resp->data);
+ if (*event_payload == 0) {
+ DLOGV("Received Idle power collapse event");
+ event_handler_->IdlePowerCollapse();
+ }
+ break;
+ }
+ default: {
+ DLOGE("invalid event %d", event_resp->base.type);
+ break;
+ }
+ }
+ i += event_resp->base.length;
+ }
+
+ return;
+}
+
+void HWEventsDRM::HandleHwRecovery(char *data) {
+ char event_data[kMaxStringLength] = {0};
+ int32_t size;
+ struct drm_msm_event_resp *event_resp = NULL;
+
+ size = (int32_t)Sys::pread_(poll_fds_[hw_recovery_index_].fd, event_data, kMaxStringLength, 0);
+ if (size < 0) {
+ return;
+ }
+
+ if (size > kMaxStringLength) {
+ DLOGE("Hardware recovery event size %d is greater than event buffer size %zd\n", size,
+ kMaxStringLength);
+ return;
+ }
+
+ if (size < (int32_t)sizeof(*event_resp)) {
+ DLOGE("Hardware recovery event size is %d, expected %zd\n", size, sizeof(*event_resp));
+ return;
+ }
+
+ int32_t i = 0;
+
+ while (i < size) {
+ event_resp = (struct drm_msm_event_resp *)&event_data[i];
+ switch (event_resp->base.type) {
+ case DRM_EVENT_SDE_HW_RECOVERY: {
+ std::size_t size_of_data = (std::size_t)event_resp->base.length -
+ (sizeof(event_resp->base) + sizeof(event_resp->info));
+ // expect up to uint32_t from driver
+ if (size_of_data > sizeof(uint32_t)) {
+ DLOGE("Size of hardware recovery event data: %" PRIu32 " exceeds %zd", size_of_data,
+ sizeof(uint32_t));
+ return;
+ }
+
+ uint32_t hw_event_code = 0;
+ memcpy(&hw_event_code, event_resp->data, size_of_data);
+
+ HWRecoveryEvent sdm_event_code;
+ if (SetHwRecoveryEvent(hw_event_code, &sdm_event_code)) {
+ return;
+ }
+ event_handler_->HwRecovery(sdm_event_code);
+ break;
+ }
+ default: {
+ DLOGE("Invalid event type %d", event_resp->base.type);
+ break;
+ }
+ }
+ i += event_resp->base.length;
+ }
+
+ return;
+}
+
+int HWEventsDRM::SetHwRecoveryEvent(const uint32_t hw_event_code, HWRecoveryEvent *sdm_event_code) {
+ switch (hw_event_code) {
+ case SDE_RECOVERY_SUCCESS:
+ *sdm_event_code = HWRecoveryEvent::kSuccess;
+ break;
+ case SDE_RECOVERY_CAPTURE:
+ *sdm_event_code = HWRecoveryEvent::kCapture;
+ break;
+ case SDE_RECOVERY_DISPLAY_POWER_RESET:
+ *sdm_event_code = HWRecoveryEvent::kDisplayPowerReset;
+ break;
+ default:
+ DLOGE("Unsupported hardware recovery event value received = %" PRIu32, hw_event_code);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/drm/hw_events_drm.h b/sdm/libs/core/drm/hw_events_drm.h
new file mode 100644
index 0000000..2a98504
--- /dev/null
+++ b/sdm/libs/core/drm/hw_events_drm.h
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __HW_EVENTS_DRM_H__
+#define __HW_EVENTS_DRM_H__
+
+#include <drm_interface.h>
+#include <sys/poll.h>
+#include <map>
+#include <mutex>
+#include <string>
+#include <utility>
+#include <vector>
+#include <climits>
+
+#include "hw_events_interface.h"
+#include "hw_interface.h"
+#include "hw_device_drm.h"
+
+namespace sdm {
+
+using std::vector;
+
+class HWEventsDRM : public HWEventsInterface {
+ public:
+ virtual DisplayError Init(int display_id, DisplayType display_type, HWEventHandler *event_handler,
+ const vector<HWEvent> &event_list, const HWInterface *hw_intf);
+ virtual DisplayError Deinit();
+ virtual DisplayError SetEventState(HWEvent event, bool enable, void *aux = nullptr);
+
+ private:
+ static const int kMaxStringLength = 1024;
+
+ typedef void (HWEventsDRM::*EventParser)(char *);
+
+ struct HWEventData {
+ HWEvent event_type {};
+ EventParser event_parser {};
+ };
+
+ static void *DisplayEventThread(void *context);
+ static void VSyncHandlerCallback(int fd, unsigned int sequence, unsigned int tv_sec,
+ unsigned int tv_usec, void *data);
+
+ void *DisplayEventHandler();
+ void HandleVSync(char *data);
+ void HandleIdleTimeout(char *data);
+ void HandleCECMessage(char *data);
+ void HandleThreadExit(char *data) {}
+ void HandleThermal(char *data) {}
+ void HandleBlank(char *data) {}
+ void HandleIdlePowerCollapse(char *data);
+ void HandlePanelDead(char *data);
+ void HandleHwRecovery(char *data);
+ int SetHwRecoveryEvent(const uint32_t hw_event_code, HWRecoveryEvent *sdm_event_code);
+ void PopulateHWEventData(const vector<HWEvent> &event_list);
+ void WakeUpEventThread();
+ DisplayError SetEventParser();
+ DisplayError InitializePollFd();
+ DisplayError CloseFds();
+ DisplayError RegisterVSync();
+ DisplayError RegisterPanelDead(bool enable);
+ DisplayError RegisterIdleNotify(bool enable);
+ DisplayError RegisterIdlePowerCollapse(bool enable);
+ DisplayError RegisterHwRecovery(bool enable);
+
+ HWEventHandler *event_handler_{};
+ vector<HWEventData> event_data_list_{};
+ vector<pollfd> poll_fds_{};
+ pthread_t event_thread_{};
+ std::string event_thread_name_ = "SDM_EventThread";
+ bool exit_threads_ = false;
+ uint32_t vsync_index_ = UINT32_MAX;
+ bool vsync_enabled_ = false;
+ bool vsync_registered_ = false;
+ std::mutex vsync_mutex_; // To protect vsync_enabled_ and vsync_registered_
+ uint32_t idle_notify_index_ = UINT32_MAX;
+ sde_drm::DRMDisplayToken token_ = {};
+ bool is_primary_ = false;
+ uint32_t panel_dead_index_ = UINT32_MAX;
+ uint32_t idle_pc_index_ = UINT32_MAX;
+ bool disable_hw_recovery_ = false;
+ uint32_t hw_recovery_index_ = UINT32_MAX;
+};
+
+} // namespace sdm
+
+#endif // __HW_EVENTS_DRM_H__
diff --git a/sdm/libs/core/drm/hw_info_drm.cpp b/sdm/libs/core/drm/hw_info_drm.cpp
new file mode 100644
index 0000000..3cbb6de
--- /dev/null
+++ b/sdm/libs/core/drm/hw_info_drm.cpp
@@ -0,0 +1,928 @@
+/*
+* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <dlfcn.h>
+#include <drm/drm_fourcc.h>
+#include <drm_lib_loader.h>
+#include <drm_master.h>
+#include <drm_res_mgr.h>
+#include <fcntl.h>
+#include <media/msm_sde_rotator.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/sys.h>
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <map>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "hw_info_drm.h"
+
+#ifndef DRM_FORMAT_MOD_QCOM_COMPRESSED
+#define DRM_FORMAT_MOD_QCOM_COMPRESSED fourcc_mod_code(QCOM, 1)
+#endif
+#ifndef DRM_FORMAT_MOD_QCOM_DX
+#define DRM_FORMAT_MOD_QCOM_DX fourcc_mod_code(QCOM, 0x2)
+#endif
+#ifndef DRM_FORMAT_MOD_QCOM_TIGHT
+#define DRM_FORMAT_MOD_QCOM_TIGHT fourcc_mod_code(QCOM, 0x4)
+#endif
+
+#define __CLASS__ "HWInfoDRM"
+
+using drm_utils::DRMMaster;
+using drm_utils::DRMResMgr;
+using drm_utils::DRMLibLoader;
+using sde_drm::GetDRMManager;
+using sde_drm::DRMPlanesInfo;
+using sde_drm::DRMCrtcInfo;
+using sde_drm::DRMPlaneType;
+using sde_drm::DRMTonemapLutType;
+
+using std::vector;
+using std::map;
+using std::string;
+using std::fstream;
+using std::to_string;
+
+namespace sdm {
+
+static HWQseedStepVersion GetQseedStepVersion(sde_drm::QSEEDStepVersion drm_version) {
+ HWQseedStepVersion sdm_version;
+ switch (drm_version) {
+ case sde_drm::QSEEDStepVersion::V2:
+ default:
+ sdm_version = kQseed3v2;
+ break;
+ case sde_drm::QSEEDStepVersion::V3:
+ sdm_version = kQseed3v3;
+ break;
+ case sde_drm::QSEEDStepVersion::V4:
+ sdm_version = kQseed3v4;
+ break;
+ case sde_drm::QSEEDStepVersion::V3LITE_V4:
+ sdm_version = kQseed3litev4;
+ break;
+ case sde_drm::QSEEDStepVersion::V3LITE_V5:
+ sdm_version = kQseed3litev5;
+ break;
+ }
+ return sdm_version;
+}
+
+static InlineRotationVersion GetInRotVersion(sde_drm::InlineRotationVersion drm_version) {
+ switch (drm_version) {
+ case sde_drm::InlineRotationVersion::V1:
+ return InlineRotationVersion::kInlineRotationV1;
+ case sde_drm::InlineRotationVersion::V1p1:
+ return InlineRotationVersion::kInlineRotationV1p1;
+ default:
+ return kInlineRotationNone;
+ }
+}
+
+HWResourceInfo *HWInfoDRM::hw_resource_ = nullptr;
+
+DisplayError HWInfoDRM::Init() {
+ default_mode_ = (DRMLibLoader::GetInstance()->IsLoaded() == false);
+ if (!default_mode_) {
+ DRMMaster *drm_master = {};
+ int dev_fd = -1;
+ DRMMaster::GetInstance(&drm_master);
+ if (!drm_master) {
+ DLOGE("Failed to acquire DRMMaster instance");
+ return kErrorCriticalResource;
+ }
+ drm_master->GetHandle(&dev_fd);
+ DRMLibLoader::GetInstance()->FuncGetDRMManager()(dev_fd, &drm_mgr_intf_);
+ if (!drm_mgr_intf_) {
+ DRMLibLoader::Destroy();
+ DRMMaster::DestroyInstance();
+ DLOGE("Failed to get DRMManagerInterface");
+ return kErrorCriticalResource;
+ }
+ }
+
+ return kErrorNone;
+}
+
+void HWInfoDRM::Deinit() {
+ delete hw_resource_;
+ hw_resource_ = nullptr;
+
+ if (drm_mgr_intf_) {
+ DRMLibLoader::GetInstance()->FuncDestroyDRMManager()();
+ drm_mgr_intf_ = nullptr;
+ }
+
+ DRMLibLoader::Destroy();
+ DRMMaster::DestroyInstance();
+}
+
+HWInfoDRM::~HWInfoDRM() {
+ Deinit();
+}
+
+DisplayError HWInfoDRM::GetDynamicBWLimits(HWResourceInfo *hw_resource) {
+ HWDynBwLimitInfo* bw_info = &hw_resource->dyn_bw_info;
+ for (int index = 0; index < kBwModeMax; index++) {
+ bw_info->total_bw_limit[index] = hw_resource->max_bandwidth_low;
+ bw_info->pipe_bw_limit[index] = hw_resource->max_pipe_bw;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWInfoDRM::GetHWResourceInfo(HWResourceInfo *hw_resource) {
+ if (hw_resource_) {
+ *hw_resource = *hw_resource_;
+ return kErrorNone;
+ }
+
+ hw_resource->num_blending_stages = 1;
+ hw_resource->max_pipe_width = 2560;
+ hw_resource->max_cursor_size = 128;
+ hw_resource->max_scale_down = 1;
+ hw_resource->max_scale_up = 1;
+ hw_resource->has_decimation = false;
+ hw_resource->max_bandwidth_low = 9600000;
+ hw_resource->max_bandwidth_high = 9600000;
+ hw_resource->max_pipe_bw = 4500000;
+ hw_resource->max_sde_clk = 412500000;
+ hw_resource->clk_fudge_factor = FLOAT(105) / FLOAT(100);
+ hw_resource->macrotile_nv12_factor = 8;
+ hw_resource->macrotile_factor = 4;
+ hw_resource->linear_factor = 1;
+ hw_resource->scale_factor = 1;
+ hw_resource->extra_fudge_factor = 2;
+ hw_resource->amortizable_threshold = 25;
+ hw_resource->system_overhead_lines = 0;
+ hw_resource->hw_dest_scalar_info.count = 0;
+ hw_resource->hw_dest_scalar_info.max_scale_up = 0;
+ hw_resource->hw_dest_scalar_info.max_input_width = 0;
+ hw_resource->hw_dest_scalar_info.max_output_width = 0;
+ hw_resource->is_src_split = true;
+ hw_resource->has_dyn_bw_support = false;
+ hw_resource->has_qseed3 = false;
+ hw_resource->has_concurrent_writeback = false;
+
+ hw_resource->hw_version = SDEVERSION(4, 0, 1);
+ // TODO(user): On FB driver hw_revision comprises of major version, minor version and hw_revision.
+ // On DRM driver, hw_revision is deprecated and hw_version comprises major version, minor version
+ // and hw_revision information. Since QDCM uses hw_revision variable populate hw_revision with
+ // hw_version. Remove hw_revision variable when FB code is deperecated.
+ hw_resource->hw_revision = SDEVERSION(4, 0, 1);
+
+ // TODO(user): Deprecate
+ hw_resource->max_mixer_width = 2560;
+ hw_resource->writeback_index = 0;
+ hw_resource->has_bwc = false;
+ hw_resource->has_ubwc = true;
+ hw_resource->has_macrotile = true;
+ hw_resource->separate_rotator = true;
+ hw_resource->has_non_scalar_rgb = false;
+
+ GetSystemInfo(hw_resource);
+ GetHWPlanesInfo(hw_resource);
+ GetWBInfo(hw_resource);
+
+ // Disable destination scalar count to 0 if extension library is not present or disabled
+ // through property
+ int value = 0;
+ bool disable_dest_scalar = false;
+ if (Debug::GetProperty(DISABLE_DESTINATION_SCALER_PROP, &value) == kErrorNone) {
+ disable_dest_scalar = (value == 1);
+ }
+ DynLib extension_lib;
+ if (!extension_lib.Open("libsdmextension.so") || disable_dest_scalar) {
+ hw_resource->hw_dest_scalar_info.count = 0;
+ }
+
+ DLOGI("Max plane width = %d", hw_resource->max_pipe_width);
+ DLOGI("Max cursor width = %d", hw_resource->max_cursor_size);
+ DLOGI("Max plane upscale = %d", hw_resource->max_scale_up);
+ DLOGI("Max plane downscale = %d", hw_resource->max_scale_down);
+ DLOGI("Has Decimation = %d", hw_resource->has_decimation);
+ DLOGI("Max Blending Stages = %d", hw_resource->num_blending_stages);
+ DLOGI("Has Source Split = %d", hw_resource->is_src_split);
+ DLOGI("Has QSEED3 = %d", hw_resource->has_qseed3);
+ DLOGI("Has UBWC = %d", hw_resource->has_ubwc);
+ DLOGI("Has Concurrent Writeback = %d", hw_resource->has_concurrent_writeback);
+ DLOGI("Has Src Tonemap = %d", hw_resource->src_tone_map);
+ DLOGI("Max Low Bw = %" PRIu64 "", hw_resource->max_bandwidth_low);
+ DLOGI("Max High Bw = % " PRIu64 "", hw_resource->max_bandwidth_high);
+ DLOGI("Max Pipe Bw = %" PRIu64 " KBps", hw_resource->max_pipe_bw);
+ DLOGI("MaxSDEClock = % " PRIu64 " Hz", hw_resource->max_sde_clk);
+ DLOGI("Clock Fudge Factor = %f", hw_resource->clk_fudge_factor);
+ DLOGI("Prefill factors:");
+ DLOGI("\tTiled_NV12 = %d", hw_resource->macrotile_nv12_factor);
+ DLOGI("\tTiled = %d", hw_resource->macrotile_factor);
+ DLOGI("\tLinear = %d", hw_resource->linear_factor);
+ DLOGI("\tScale = %d", hw_resource->scale_factor);
+ DLOGI("\tFudge_factor = %d", hw_resource->extra_fudge_factor);
+ DLOGI("\tib_fudge_factor = %f", hw_resource->ib_fudge_factor);
+
+ if (hw_resource->separate_rotator || hw_resource->num_dma_pipe) {
+ GetHWRotatorInfo(hw_resource);
+ }
+
+ if (hw_resource->has_dyn_bw_support) {
+ DisplayError ret = GetDynamicBWLimits(hw_resource);
+ if (ret != kErrorNone) {
+ DLOGE("Failed to read dynamic band width info");
+ return ret;
+ }
+
+ DLOGI("Has Support for multiple bw limits shown below");
+ for (int index = 0; index < kBwModeMax; index++) {
+ DLOGI("Mode-index=%d total_bw_limit=%d and pipe_bw_limit=%d", index,
+ hw_resource->dyn_bw_info.total_bw_limit[index],
+ hw_resource->dyn_bw_info.pipe_bw_limit[index]);
+ }
+ }
+
+ if (!hw_resource_) {
+ hw_resource_ = new HWResourceInfo();
+ *hw_resource_ = *hw_resource;
+ }
+
+ return kErrorNone;
+}
+
+void HWInfoDRM::GetSystemInfo(HWResourceInfo *hw_resource) {
+ DRMCrtcInfo info;
+ drm_mgr_intf_->GetCrtcInfo(0 /* system_info */, &info);
+ hw_resource->has_hdr = info.has_hdr;
+ hw_resource->is_src_split = info.has_src_split;
+ hw_resource->has_qseed3 = (info.qseed_version >= sde_drm::QSEEDVersion::V3);
+ hw_resource->num_blending_stages = info.max_blend_stages;
+ hw_resource->num_solidfill_stages = info.max_solidfill_stages;
+ hw_resource->smart_dma_rev = (info.smart_dma_rev == sde_drm::SmartDMARevision::V2p5) ?
+ SmartDMARevision::V2p5 : ((info.smart_dma_rev == sde_drm::SmartDMARevision::V2) ?
+ SmartDMARevision::V2 : SmartDMARevision::V1);
+ hw_resource->ib_fudge_factor = info.ib_fudge_factor;
+ hw_resource->hw_dest_scalar_info.prefill_lines = info.dest_scale_prefill_lines;
+ hw_resource->undersized_prefill_lines = info.undersized_prefill_lines;
+ hw_resource->macrotile_factor = info.macrotile_prefill_lines;
+ hw_resource->macrotile_nv12_factor = info.nv12_prefill_lines;
+ hw_resource->linear_factor = info.linear_prefill_lines;
+ hw_resource->scale_factor = info.downscale_prefill_lines;
+ hw_resource->extra_fudge_factor = info.extra_prefill_lines;
+ hw_resource->amortizable_threshold = info.amortized_threshold;
+ hw_resource->max_bandwidth_low = info.max_bandwidth_low / kKiloUnit;
+ hw_resource->max_bandwidth_high = info.max_bandwidth_high / kKiloUnit;
+ hw_resource->max_sde_clk = info.max_sde_clk;
+ hw_resource->hw_version = info.hw_version;
+ // TODO(user): On FB driver hw_revision comprises of major version, minor version and hw_revision.
+ // On DRM driver, hw_revision is deprecated and hw_version comprises major version, minor version
+ // and hw_revision information. Since QDCM uses hw_revision variable populate hw_revision with
+ // hw_version. Remove hw_revision variable when FB code is deperecated.
+ hw_resource->hw_revision = info.hw_version;
+
+ std::vector<LayerBufferFormat> sdm_format;
+ for (auto &it : info.comp_ratio_rt_map) {
+ std::pair<uint32_t, uint64_t> drm_format = it.first;
+ GetSDMFormat(drm_format.first, drm_format.second, &sdm_format);
+ hw_resource->comp_ratio_rt_map.insert(std::make_pair(sdm_format[0], it.second));
+ sdm_format.clear();
+ }
+
+ for (auto &it : info.comp_ratio_nrt_map) {
+ std::pair<uint32_t, uint64_t> drm_format = it.first;
+ GetSDMFormat(drm_format.first, drm_format.second, &sdm_format);
+ hw_resource->comp_ratio_rt_map.insert(std::make_pair(sdm_format[0], it.second));
+ sdm_format.clear();
+ }
+
+ hw_resource->hw_dest_scalar_info.count = info.dest_scaler_count;
+ hw_resource->hw_dest_scalar_info.max_scale_up = info.max_dest_scale_up;
+ hw_resource->hw_dest_scalar_info.max_input_width = info.max_dest_scaler_input_width;
+ hw_resource->hw_dest_scalar_info.max_output_width = info.max_dest_scaler_output_width;
+ hw_resource->min_prefill_lines = info.min_prefill_lines;
+ hw_resource->secure_disp_blend_stage = info.secure_disp_blend_stage;
+ hw_resource->has_concurrent_writeback = info.concurrent_writeback;
+ // In case driver doesn't report bus width default to 256 bit bus.
+ hw_resource->num_mnocports = info.num_mnocports ? info.num_mnocports : 2;
+ hw_resource->mnoc_bus_width = info.mnoc_bus_width ? info.mnoc_bus_width : 32;
+ hw_resource->use_baselayer_for_stage = info.use_baselayer_for_stage;
+ hw_resource->line_width_constraints_count = info.line_width_constraints_count;
+ if (info.line_width_constraints_count) {
+ auto &width_constraints = hw_resource->line_width_constraints;
+ hw_resource->line_width_limits = std::move(info.line_width_limits);
+ width_constraints.push_back(std::make_pair(kPipeVigLimit, info.vig_limit_index));
+ width_constraints.push_back(std::make_pair(kPipeDmaLimit, info.dma_limit_index));
+ width_constraints.push_back(std::make_pair(kPipeScalingLimit, info.scaling_limit_index));
+ width_constraints.push_back(std::make_pair(kPipeRotationLimit, info.rotation_limit_index));
+ }
+ // Use fudge factor as 1.5 if not reported
+ hw_resource->vbif_cmd_ff = (info.vbif_cmd_ff > 0.0f) ? info.vbif_cmd_ff : 1.5f;
+}
+
+void HWInfoDRM::GetHWPlanesInfo(HWResourceInfo *hw_resource) {
+ DRMPlanesInfo planes;
+ drm_mgr_intf_->GetPlanesInfo(&planes);
+
+ // To simulate reduced config.
+ uint32_t max_vig_pipes = 0;
+ uint32_t max_dma_pipes = 0;
+ Debug::GetReducedConfig(&max_vig_pipes, &max_dma_pipes);
+ uint32_t max_virtual_pipes = max_vig_pipes + max_dma_pipes;
+ uint32_t vig_pipe_count = 0;
+ uint32_t dma_pipe_count = 0;
+ uint32_t virtual_pipe_count = 0;
+ int disable_src_tonemap = 0;
+ Debug::Get()->GetProperty(DISABLE_SRC_TONEMAP_PROP, &disable_src_tonemap);
+
+ for (auto &pipe_obj : planes) {
+ if (max_vig_pipes && max_dma_pipes) {
+ uint32_t master_plane_id = pipe_obj.second.master_plane_id;
+ if ((pipe_obj.second.type == DRMPlaneType::DMA) && (dma_pipe_count < max_dma_pipes)
+ && !master_plane_id) {
+ dma_pipe_count++;
+ } else if ((pipe_obj.second.type == DRMPlaneType::VIG) && (vig_pipe_count < max_vig_pipes)
+ && !master_plane_id) {
+ vig_pipe_count++;
+ } else if ((master_plane_id) && (virtual_pipe_count < max_virtual_pipes)) {
+ bool is_virtual = false;
+ for (auto &pipe_caps : hw_resource->hw_pipes) {
+ if (master_plane_id == pipe_caps.id) {
+ is_virtual = true;
+ virtual_pipe_count++;
+ break;
+ }
+ }
+ if (!is_virtual) {
+ continue;
+ }
+ } else {
+ continue;
+ }
+ }
+
+ HWPipeCaps pipe_caps;
+ string name = {};
+ switch (pipe_obj.second.type) {
+ case DRMPlaneType::DMA:
+ name = "DMA";
+ pipe_caps.type = kPipeTypeDMA;
+ if (!hw_resource->num_dma_pipe) {
+ PopulateSupportedFmts(kHWDMAPipe, pipe_obj.second, hw_resource);
+ }
+ hw_resource->num_dma_pipe++;
+ break;
+ case DRMPlaneType::VIG:
+ name = "VIG";
+ pipe_caps.type = kPipeTypeVIG;
+ if (!hw_resource->num_vig_pipe) {
+ PopulatePipeCaps(pipe_obj.second, hw_resource);
+ PopulateSupportedFmts(kHWVIGPipe, pipe_obj.second, hw_resource);
+ }
+ hw_resource->num_vig_pipe++;
+ break;
+ case DRMPlaneType::CURSOR:
+ name = "CURSOR";
+ pipe_caps.type = kPipeTypeCursor;
+ if (!hw_resource->num_cursor_pipe) {
+ PopulateSupportedFmts(kHWCursorPipe, pipe_obj.second, hw_resource);
+ hw_resource->max_cursor_size = pipe_obj.second.max_linewidth;
+ }
+ hw_resource->num_cursor_pipe++;
+ break;
+ default:
+ continue; // Not adding any other pipe type
+ }
+ pipe_caps.id = pipe_obj.first;
+ pipe_caps.master_pipe_id = pipe_obj.second.master_plane_id;
+ pipe_caps.block_sec_ui = pipe_obj.second.block_sec_ui;
+ pipe_caps.hw_block_mask = pipe_obj.second.hw_block_mask;
+ DLOGI("Adding %s Pipe : Id %d, master_pipe_id : Id %d block_sec_ui: %d hw_block_mask: 0x%x",
+ name.c_str(), pipe_obj.first, pipe_obj.second.master_plane_id,
+ pipe_obj.second.block_sec_ui, pipe_obj.second.hw_block_mask.to_ulong());
+ pipe_caps.inverse_pma = pipe_obj.second.inverse_pma;
+ pipe_caps.dgm_csc_version = pipe_obj.second.dgm_csc_version;
+ // disable src tonemap feature if its disabled using property.
+ if (!disable_src_tonemap) {
+ for (auto &it : pipe_obj.second.tonemap_lut_version_map) {
+ HWToneMapLut tonemap_lut = kLutNone;
+ switch (it.first) {
+ case DRMTonemapLutType::DMA_1D_IGC:
+ tonemap_lut = kDma1dIgc;
+ break;
+ case DRMTonemapLutType::DMA_1D_GC:
+ tonemap_lut = kDma1dGc;
+ break;
+ case DRMTonemapLutType::VIG_1D_IGC:
+ tonemap_lut = kVig1dIgc;
+ break;
+ case DRMTonemapLutType::VIG_3D_GAMUT:
+ tonemap_lut = kVig3dGamut;
+ break;
+ default:
+ DLOGE("Unknown Tonemap Lut");
+ break;
+ }
+ if (tonemap_lut != kLutNone) {
+ pipe_caps.tm_lut_version_map[tonemap_lut] = it.second;
+ if (pipe_caps.type == kPipeTypeVIG) {
+ hw_resource->src_tone_map[kSrcTonemap3d] = 1;
+ } else if (pipe_caps.type == kPipeTypeDMA) {
+ hw_resource->src_tone_map[kSrcTonemap1d] = 1;
+ }
+ }
+ }
+ }
+ hw_resource->hw_pipes.push_back(std::move(pipe_caps));
+ }
+ hw_resource->has_excl_rect = planes[0].second.has_excl_rect;
+}
+
+void HWInfoDRM::PopulatePipeCaps(const sde_drm::DRMPlaneTypeInfo &info,
+ HWResourceInfo *hw_resource) {
+ hw_resource->max_pipe_width = info.max_linewidth;
+ hw_resource->max_scaler_pipe_width = info.max_scaler_linewidth;
+ hw_resource->max_scale_down = info.max_downscale;
+ hw_resource->max_scale_up = info.max_upscale;
+ hw_resource->has_decimation = info.max_horizontal_deci > 1 && info.max_vertical_deci > 1;
+ hw_resource->max_pipe_bw = info.max_pipe_bandwidth / kKiloUnit;
+ hw_resource->cache_size = info.cache_size;
+ hw_resource->pipe_qseed3_version = GetQseedStepVersion(info.qseed3_version);
+ hw_resource->inrot_version = GetInRotVersion(info.inrot_version);
+}
+
+void HWInfoDRM::PopulateSupportedFmts(HWSubBlockType sub_blk_type,
+ const sde_drm::DRMPlaneTypeInfo &info,
+ HWResourceInfo *hw_resource) {
+ vector<LayerBufferFormat> sdm_formats;
+ FormatsMap &fmts_map = hw_resource->supported_formats_map;
+
+ if (fmts_map.find(sub_blk_type) == fmts_map.end()) {
+ for (auto &fmts : info.formats_supported) {
+ GetSDMFormat(fmts.first, fmts.second, &sdm_formats);
+ }
+
+ fmts_map.insert(make_pair(sub_blk_type, sdm_formats));
+ }
+}
+
+void HWInfoDRM::GetWBInfo(HWResourceInfo *hw_resource) {
+ HWSubBlockType sub_blk_type = kHWWBIntfOutput;
+ vector<LayerBufferFormat> supported_sdm_formats;
+ sde_drm::DRMDisplayToken token;
+ int ret = 0;
+
+ // Fake register
+ ret = drm_mgr_intf_->RegisterDisplay(sde_drm::DRMDisplayType::VIRTUAL, &token);
+ if (ret) {
+ DLOGE("Failed registering display %d. Error: %d.", sde_drm::DRMDisplayType::VIRTUAL, ret);
+ return;
+ }
+
+ sde_drm::DRMConnectorInfo connector_info;
+ ret = drm_mgr_intf_->GetConnectorInfo(token.conn_id, &connector_info);
+ if (ret) {
+ DLOGE("Failed getting info for connector id %u. Error: %d.", token.conn_id, ret);
+ drm_mgr_intf_->UnregisterDisplay(&token);
+ return;
+ }
+ for (auto &fmts : connector_info.formats_supported) {
+ GetSDMFormat(fmts.first, fmts.second, &supported_sdm_formats);
+ }
+
+ hw_resource->supported_formats_map.erase(sub_blk_type);
+ hw_resource->supported_formats_map.insert(make_pair(sub_blk_type, supported_sdm_formats));
+
+ drm_mgr_intf_->UnregisterDisplay(&token);
+}
+
+void HWInfoDRM::GetSDMFormat(uint32_t v4l2_format, LayerBufferFormat *sdm_format) {
+ switch (v4l2_format) {
+ case SDE_PIX_FMT_ARGB_8888: *sdm_format = kFormatARGB8888; break;
+ case SDE_PIX_FMT_RGBA_8888: *sdm_format = kFormatRGBA8888; break;
+ case SDE_PIX_FMT_BGRA_8888: *sdm_format = kFormatBGRA8888; break;
+ case SDE_PIX_FMT_RGBX_8888: *sdm_format = kFormatRGBX8888; break;
+ case SDE_PIX_FMT_BGRX_8888: *sdm_format = kFormatBGRX8888; break;
+ case SDE_PIX_FMT_RGBA_5551: *sdm_format = kFormatRGBA5551; break;
+ case SDE_PIX_FMT_RGBA_4444: *sdm_format = kFormatRGBA4444; break;
+ case SDE_PIX_FMT_RGB_888: *sdm_format = kFormatRGB888; break;
+ case SDE_PIX_FMT_BGR_888: *sdm_format = kFormatBGR888; break;
+ case SDE_PIX_FMT_RGB_565: *sdm_format = kFormatRGB565; break;
+ case SDE_PIX_FMT_BGR_565: *sdm_format = kFormatBGR565; break;
+ case SDE_PIX_FMT_Y_CB_CR_H2V2: *sdm_format = kFormatYCbCr420Planar; break;
+ case SDE_PIX_FMT_Y_CR_CB_H2V2: *sdm_format = kFormatYCrCb420Planar; break;
+ case SDE_PIX_FMT_Y_CR_CB_GH2V2: *sdm_format = kFormatYCrCb420PlanarStride16; break;
+ case SDE_PIX_FMT_Y_CBCR_H2V2: *sdm_format = kFormatYCbCr420SemiPlanar; break;
+ case SDE_PIX_FMT_Y_CRCB_H2V2: *sdm_format = kFormatYCrCb420SemiPlanar; break;
+ case SDE_PIX_FMT_Y_CBCR_H1V2: *sdm_format = kFormatYCbCr422H1V2SemiPlanar; break;
+ case SDE_PIX_FMT_Y_CRCB_H1V2: *sdm_format = kFormatYCrCb422H1V2SemiPlanar; break;
+ case SDE_PIX_FMT_Y_CBCR_H2V1: *sdm_format = kFormatYCbCr422H2V1SemiPlanar; break;
+ case SDE_PIX_FMT_Y_CRCB_H2V1: *sdm_format = kFormatYCrCb422H2V1SemiPlanar; break;
+ case SDE_PIX_FMT_YCBYCR_H2V1: *sdm_format = kFormatYCbCr422H2V1Packed; break;
+ case SDE_PIX_FMT_Y_CBCR_H2V2_VENUS: *sdm_format = kFormatYCbCr420SemiPlanarVenus; break;
+ case SDE_PIX_FMT_Y_CRCB_H2V2_VENUS: *sdm_format = kFormatYCrCb420SemiPlanarVenus; break;
+ case SDE_PIX_FMT_RGBA_8888_UBWC: *sdm_format = kFormatRGBA8888Ubwc; break;
+ case SDE_PIX_FMT_RGBX_8888_UBWC: *sdm_format = kFormatRGBX8888Ubwc; break;
+ case SDE_PIX_FMT_RGB_565_UBWC: *sdm_format = kFormatBGR565Ubwc; break;
+ case SDE_PIX_FMT_Y_CBCR_H2V2_UBWC: *sdm_format = kFormatYCbCr420SPVenusUbwc; break;
+ case SDE_PIX_FMT_RGBA_1010102: *sdm_format = kFormatRGBA1010102; break;
+ case SDE_PIX_FMT_ARGB_2101010: *sdm_format = kFormatARGB2101010; break;
+ case SDE_PIX_FMT_RGBX_1010102: *sdm_format = kFormatRGBX1010102; break;
+ case SDE_PIX_FMT_XRGB_2101010: *sdm_format = kFormatXRGB2101010; break;
+ case SDE_PIX_FMT_BGRA_1010102: *sdm_format = kFormatBGRA1010102; break;
+ case SDE_PIX_FMT_ABGR_2101010: *sdm_format = kFormatABGR2101010; break;
+ case SDE_PIX_FMT_BGRX_1010102: *sdm_format = kFormatBGRX1010102; break;
+ case SDE_PIX_FMT_XBGR_2101010: *sdm_format = kFormatXBGR2101010; break;
+ case SDE_PIX_FMT_RGBA_1010102_UBWC: *sdm_format = kFormatRGBA1010102Ubwc; break;
+ case SDE_PIX_FMT_RGBX_1010102_UBWC: *sdm_format = kFormatRGBX1010102Ubwc; break;
+ case SDE_PIX_FMT_Y_CBCR_H2V2_P010: *sdm_format = kFormatYCbCr420P010; break;
+ case SDE_PIX_FMT_Y_CBCR_H2V2_TP10_UBWC: *sdm_format = kFormatYCbCr420TP10Ubwc; break;
+ case SDE_PIX_FMT_Y_CBCR_H2V2_P010_UBWC: *sdm_format = kFormatYCbCr420P010Ubwc; break;
+ case SDE_PIX_FMT_Y_CBCR_H2V2_P010_VENUS: *sdm_format = kFormatYCbCr420P010Venus; break;
+ default: *sdm_format = kFormatInvalid;
+ }
+}
+
+void HWInfoDRM::GetRotatorFormatsForType(int fd, uint32_t type,
+ vector<LayerBufferFormat> *supported_formats) {
+ struct v4l2_fmtdesc fmtdesc = {};
+ fmtdesc.type = type;
+ while (!Sys::ioctl_(fd, static_cast<int>(VIDIOC_ENUM_FMT), &fmtdesc)) {
+ LayerBufferFormat sdm_format = kFormatInvalid;
+ GetSDMFormat(fmtdesc.pixelformat, &sdm_format);
+ if (sdm_format != kFormatInvalid) {
+ supported_formats->push_back(sdm_format);
+ }
+ fmtdesc.index++;
+ }
+}
+
+DisplayError HWInfoDRM::GetRotatorSupportedFormats(uint32_t v4l2_index,
+ HWResourceInfo *hw_resource) {
+ string path = "/dev/video" + to_string(v4l2_index);
+ int fd = Sys::open_(path.c_str(), O_RDONLY);
+ if (fd < 0) {
+ DLOGE("Failed to open %s with error %d", path.c_str(), errno);
+ return kErrorNotSupported;
+ }
+
+ vector<LayerBufferFormat> supported_formats = {};
+ GetRotatorFormatsForType(fd, V4L2_BUF_TYPE_VIDEO_OUTPUT, &supported_formats);
+ hw_resource->supported_formats_map.erase(kHWRotatorInput);
+ hw_resource->supported_formats_map.insert(make_pair(kHWRotatorInput, supported_formats));
+
+ supported_formats = {};
+ GetRotatorFormatsForType(fd, V4L2_BUF_TYPE_VIDEO_CAPTURE, &supported_formats);
+ hw_resource->supported_formats_map.erase(kHWRotatorOutput);
+ hw_resource->supported_formats_map.insert(make_pair(kHWRotatorOutput, supported_formats));
+
+ Sys::close_(fd);
+
+ return kErrorNone;
+}
+
+DisplayError HWInfoDRM::GetHWRotatorInfo(HWResourceInfo *hw_resource) {
+ string v4l2_path = "/sys/class/video4linux/video";
+ const uint32_t kMaxV4L2Nodes = 64;
+
+ for (uint32_t i = 0; i < kMaxV4L2Nodes; i++) {
+ string path = v4l2_path + to_string(i) + "/name";
+ Sys::fstream fs(path, fstream::in);
+ if (!fs.is_open()) {
+ continue;
+ }
+
+ string line;
+ if (Sys::getline_(fs, line) && (!strncmp(line.c_str(), "sde_rotator", strlen("sde_rotator")))) {
+ hw_resource->hw_rot_info.device_path = string("/dev/video" + to_string(i));
+ hw_resource->hw_rot_info.num_rotator++;
+ hw_resource->hw_rot_info.type = HWRotatorInfo::ROT_TYPE_V4L2;
+ hw_resource->hw_rot_info.has_downscale = true;
+ GetRotatorSupportedFormats(i, hw_resource);
+
+ string caps_path = v4l2_path + to_string(i) + "/device/caps";
+ Sys::fstream caps_fs(caps_path, fstream::in);
+
+ if (caps_fs.is_open()) {
+ string caps;
+ while (Sys::getline_(caps_fs, caps)) {
+ const string downscale_compression = "downscale_compression=";
+ const string min_downscale = "min_downscale=";
+ const string max_line_width = "max_line_width=";
+ if (caps.find(downscale_compression) != string::npos) {
+ hw_resource->hw_rot_info.downscale_compression =
+ std::stoi(string(caps, downscale_compression.length()));
+ } else if (caps.find(min_downscale) != string::npos) {
+ hw_resource->hw_rot_info.min_downscale =
+ std::stof(string(caps, min_downscale.length()));
+ } else if (caps.find(max_line_width) != string::npos) {
+ hw_resource->hw_rot_info.max_line_width =
+ std::stoul(string(caps, max_line_width.length()));
+ }
+ }
+ }
+
+ // We support only 1 rotator
+ break;
+ }
+ }
+
+ DLOGI("V4L2 Rotator: Count = %d, Downscale = %d, Min_downscale = %f," \
+ "Downscale_compression = %d, Max_line_width = %d", hw_resource->hw_rot_info.num_rotator,
+ hw_resource->hw_rot_info.has_downscale, hw_resource->hw_rot_info.min_downscale,
+ hw_resource->hw_rot_info.downscale_compression, hw_resource->hw_rot_info.max_line_width);
+
+ return kErrorNone;
+}
+
+void HWInfoDRM::GetSDMFormat(uint32_t drm_format, uint64_t drm_format_modifier,
+ vector<LayerBufferFormat> *sdm_formats) {
+ vector<LayerBufferFormat> &fmts(*sdm_formats);
+ switch (drm_format) {
+ case DRM_FORMAT_BGRA8888:
+ fmts.push_back(kFormatARGB8888);
+ break;
+ case DRM_FORMAT_ABGR8888:
+ fmts.push_back(drm_format_modifier ? kFormatRGBA8888Ubwc : kFormatRGBA8888);
+ break;
+ case DRM_FORMAT_ARGB8888:
+ fmts.push_back(kFormatBGRA8888);
+ break;
+ case DRM_FORMAT_BGRX8888:
+ fmts.push_back(kFormatXRGB8888);
+ break;
+ case DRM_FORMAT_XBGR8888:
+ fmts.push_back(drm_format_modifier ? kFormatRGBX8888Ubwc : kFormatRGBX8888);
+ break;
+ case DRM_FORMAT_XRGB8888:
+ fmts.push_back(kFormatBGRX8888);
+ break;
+ case DRM_FORMAT_ABGR1555:
+ fmts.push_back(kFormatRGBA5551);
+ break;
+ case DRM_FORMAT_ABGR4444:
+ fmts.push_back(kFormatRGBA4444);
+ break;
+ case DRM_FORMAT_BGR888:
+ fmts.push_back(kFormatRGB888);
+ break;
+ case DRM_FORMAT_RGB888:
+ fmts.push_back(kFormatBGR888);
+ break;
+ case DRM_FORMAT_BGR565:
+ fmts.push_back(drm_format_modifier ? kFormatBGR565Ubwc : kFormatRGB565);
+ break;
+ case DRM_FORMAT_RGB565:
+ fmts.push_back(kFormatBGR565);
+ break;
+ case DRM_FORMAT_ABGR2101010:
+ fmts.push_back(drm_format_modifier ? kFormatRGBA1010102Ubwc : kFormatRGBA1010102);
+ break;
+ case DRM_FORMAT_BGRA1010102:
+ fmts.push_back(kFormatARGB2101010);
+ break;
+ case DRM_FORMAT_XBGR2101010:
+ fmts.push_back(drm_format_modifier ? kFormatRGBX1010102Ubwc : kFormatRGBX1010102);
+ break;
+ case DRM_FORMAT_BGRX1010102:
+ fmts.push_back(kFormatXRGB2101010);
+ break;
+ case DRM_FORMAT_ARGB2101010:
+ fmts.push_back(kFormatBGRA1010102);
+ break;
+ case DRM_FORMAT_RGBA1010102:
+ fmts.push_back(kFormatABGR2101010);
+ break;
+ case DRM_FORMAT_XRGB2101010:
+ fmts.push_back(kFormatBGRX1010102);
+ break;
+ case DRM_FORMAT_RGBX1010102:
+ fmts.push_back(kFormatXBGR2101010);
+ break;
+ case DRM_FORMAT_YVU420:
+ fmts.push_back(kFormatYCrCb420PlanarStride16);
+ break;
+ case DRM_FORMAT_NV12:
+ if (drm_format_modifier == (DRM_FORMAT_MOD_QCOM_COMPRESSED |
+ DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT)) {
+ fmts.push_back(kFormatYCbCr420TP10Ubwc);
+ } else if (drm_format_modifier == (DRM_FORMAT_MOD_QCOM_COMPRESSED |
+ DRM_FORMAT_MOD_QCOM_DX)) {
+ fmts.push_back(kFormatYCbCr420P010Ubwc);
+ } else if (drm_format_modifier == DRM_FORMAT_MOD_QCOM_COMPRESSED) {
+ fmts.push_back(kFormatYCbCr420SPVenusUbwc);
+ } else if (drm_format_modifier == DRM_FORMAT_MOD_QCOM_DX) {
+ fmts.push_back(kFormatYCbCr420P010);
+ fmts.push_back(kFormatYCbCr420P010Venus);
+ } else {
+ fmts.push_back(kFormatYCbCr420SemiPlanarVenus);
+ fmts.push_back(kFormatYCbCr420SemiPlanar);
+ }
+ break;
+ case DRM_FORMAT_NV21:
+ fmts.push_back(kFormatYCrCb420SemiPlanarVenus);
+ fmts.push_back(kFormatYCrCb420SemiPlanar);
+ break;
+ case DRM_FORMAT_NV16:
+ fmts.push_back(kFormatYCbCr422H2V1SemiPlanar);
+ break;
+ default:
+ break;
+ }
+}
+
+DisplayError HWInfoDRM::GetFirstDisplayInterfaceType(HWDisplayInterfaceInfo *hw_disp_info) {
+ HWDisplaysInfo hw_displays_info;
+ DisplayError error = kErrorNone;
+
+ hw_disp_info->type = kBuiltIn;
+ hw_disp_info->is_connected = true;
+
+ error = GetDisplaysStatus(&hw_displays_info);
+ if (error == kErrorNone) {
+ for (auto &iter : hw_displays_info) {
+ auto &info = iter.second;
+ if (info.is_primary) {
+ hw_disp_info->type = info.display_type;
+ hw_disp_info->is_connected = info.is_connected;
+ break;
+ }
+ }
+ }
+
+ return error;
+}
+
+DisplayError HWInfoDRM::GetDisplaysStatus(HWDisplaysInfo *hw_displays_info) {
+ static DebugTag log_once = kTagNone;
+
+ if (!hw_displays_info) {
+ DLOGE("No output parameter provided!");
+ return kErrorParameters;
+ }
+
+ if (!drm_mgr_intf_) {
+ DLOGE("DRM Driver not initialized!");
+ return kErrorCriticalResource;
+ }
+
+ hw_displays_info->clear();
+ sde_drm::DRMConnectorsInfo conns_info = {};
+ int drm_err = drm_mgr_intf_->GetConnectorsInfo(&conns_info);
+ if (drm_err) {
+ DLOGE("DRM Driver error %d while getting displays' status!", drm_err);
+ return kErrorUndefined;
+ }
+
+ for (auto &iter : conns_info) {
+ HWDisplayInfo hw_info = {};
+ hw_info.display_id =
+ ((0 == iter.first) || (iter.first > INT32_MAX)) ? -1 : (int32_t)(iter.first);
+ switch (iter.second.type) {
+ case DRM_MODE_CONNECTOR_DSI:
+ hw_info.display_type = kBuiltIn;
+ break;
+ case DRM_MODE_CONNECTOR_TV:
+ case DRM_MODE_CONNECTOR_HDMIA:
+ case DRM_MODE_CONNECTOR_HDMIB:
+ case DRM_MODE_CONNECTOR_DisplayPort:
+ case DRM_MODE_CONNECTOR_VGA:
+ hw_info.display_type = kPluggable;
+ break;
+ case DRM_MODE_CONNECTOR_VIRTUAL:
+ hw_info.display_type = kVirtual;
+ break;
+ default:
+ DLOGE("Unknown display type = %d on connector id %u.", iter.second.type,
+ hw_info.display_id);
+ break;
+ }
+ hw_info.is_connected = iter.second.is_connected ? 1 : 0;
+ hw_info.is_primary = iter.second.is_primary ? 1 : 0;
+ hw_info.is_wb_ubwc_supported = iter.second.is_wb_ubwc_supported;
+ if (hw_info.display_id >= 0) {
+ (*hw_displays_info)[hw_info.display_id] = hw_info;
+ }
+
+ DLOGI_IF(log_once, "display: %4d-%d, connected: %s, primary: %s", hw_info.display_id,
+ hw_info.display_type, hw_info.is_connected ? "true" : "false",
+ hw_info.is_primary ? "true" : "false");
+ }
+
+ log_once = kTagDisplay;
+
+ return kErrorNone;
+}
+
+DisplayError HWInfoDRM::GetMaxDisplaysSupported(const DisplayType type, int32_t *max_displays) {
+ static DebugTag log_once = kTagNone;
+
+ if (!max_displays) {
+ DLOGE("No output parameter provided!");
+ return kErrorParameters;
+ }
+
+ if (!drm_mgr_intf_) {
+ DLOGE("DRM Driver not initialized!");
+ return kErrorCriticalResource;
+ }
+
+ sde_drm::DRMEncodersInfo encoders_info = {};
+ int drm_err = drm_mgr_intf_->GetEncodersInfo(&encoders_info);
+ if (drm_err) {
+ DLOGE("DRM Driver error %d while getting max displays supported!", drm_err);
+ return kErrorUndefined;
+ }
+
+ int32_t max_displays_builtin = 0;
+ int32_t max_displays_tmds = 0;
+ int32_t max_displays_virtual = 0;
+ int32_t max_displays_dpmst = 0;
+ for (auto &iter : encoders_info) {
+ switch (iter.second.type) {
+ case DRM_MODE_ENCODER_DSI:
+ max_displays_builtin++;
+ break;
+ case DRM_MODE_ENCODER_TMDS:
+ max_displays_tmds++;
+ break;
+ case DRM_MODE_ENCODER_VIRTUAL:
+ max_displays_virtual++;
+ break;
+ case DRM_MODE_ENCODER_DPMST:
+ max_displays_dpmst++;
+ break;
+ default:
+ break;
+ }
+ }
+
+ switch (type) {
+ case kBuiltIn:
+ *max_displays = max_displays_builtin;
+ break;
+ case kPluggable:
+ *max_displays = std::max(max_displays_tmds, max_displays_dpmst);
+ break;
+ case kVirtual:
+ *max_displays = max_displays_virtual;
+ break;
+ case kDisplayTypeMax:
+ *max_displays = max_displays_builtin + std::max(max_displays_tmds, max_displays_dpmst) +
+ max_displays_virtual;
+ break;
+ default:
+ DLOGE("Unknown display type %d.", type);
+ return kErrorParameters;
+ }
+
+ DLOGI_IF(log_once, "Max %d concurrent displays.",
+ max_displays_builtin + std::max(max_displays_tmds, max_displays_dpmst) +
+ max_displays_virtual);
+ DLOGI_IF(log_once, "Max %d concurrent displays of type %d (BuiltIn).", max_displays_builtin,
+ kBuiltIn);
+ DLOGI_IF(log_once, "Max %d concurrent displays of type %d (Pluggable).",
+ std::max(max_displays_tmds, max_displays_dpmst), kPluggable);
+ DLOGI_IF(log_once, "Max %d concurrent displays of type %d (Virtual).", max_displays_virtual,
+ kVirtual);
+
+ log_once = kTagDisplay;
+
+ return kErrorNone;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/drm/hw_info_drm.h b/sdm/libs/core/drm/hw_info_drm.h
new file mode 100644
index 0000000..07575ac
--- /dev/null
+++ b/sdm/libs/core/drm/hw_info_drm.h
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __HW_INFO_DRM_H__
+#define __HW_INFO_DRM_H__
+
+#include <core/core_interface.h>
+#include <core/sdm_types.h>
+#include <drm_interface.h>
+#include <private/hw_info_types.h>
+#include <bitset>
+#include <vector>
+
+#include "hw_info_interface.h"
+
+namespace sdm {
+
+class HWInfoDRM: public HWInfoInterface {
+ public:
+ virtual DisplayError Init();
+ virtual ~HWInfoDRM();
+ virtual DisplayError GetHWResourceInfo(HWResourceInfo *hw_resource);
+ virtual DisplayError GetFirstDisplayInterfaceType(HWDisplayInterfaceInfo *hw_disp_info);
+ virtual DisplayError GetDisplaysStatus(HWDisplaysInfo *hw_displays_info);
+ virtual DisplayError GetMaxDisplaysSupported(DisplayType type, int32_t *max_displays);
+
+ private:
+ void Deinit();
+ DisplayError GetHWRotatorInfo(HWResourceInfo *hw_resource);
+ void GetSystemInfo(HWResourceInfo *hw_resource);
+ void GetHWPlanesInfo(HWResourceInfo *hw_resource);
+ void GetWBInfo(HWResourceInfo *hw_resource);
+ DisplayError GetDynamicBWLimits(HWResourceInfo *hw_resource);
+ void GetSDMFormat(uint32_t drm_format, uint64_t drm_format_modifier,
+ std::vector<LayerBufferFormat> *sdm_formats);
+ void GetSDMFormat(uint32_t v4l2_format, LayerBufferFormat *sdm_format);
+ void GetRotatorFormatsForType(int fd, uint32_t type,
+ std::vector<LayerBufferFormat> *supported_formats);
+ DisplayError GetRotatorSupportedFormats(uint32_t v4l2_index, HWResourceInfo *hw_resource);
+ void PopulateSupportedFmts(HWSubBlockType sub_blk_type, const sde_drm::DRMPlaneTypeInfo &info,
+ HWResourceInfo *hw_resource);
+ void PopulatePipeCaps(const sde_drm::DRMPlaneTypeInfo &info, HWResourceInfo *hw_resource);
+
+ sde_drm::DRMManagerInterface *drm_mgr_intf_ = {};
+ bool default_mode_ = false;
+
+ static const int kMaxStringLength = 1024;
+ static const int kKiloUnit = 1000;
+
+ static HWResourceInfo *hw_resource_;
+};
+
+} // namespace sdm
+
+#endif // __HW_INFO_DRM_H__
diff --git a/sdm/libs/core/drm/hw_peripheral_drm.cpp b/sdm/libs/core/drm/hw_peripheral_drm.cpp
new file mode 100644
index 0000000..6b3faeb
--- /dev/null
+++ b/sdm/libs/core/drm/hw_peripheral_drm.cpp
@@ -0,0 +1,710 @@
+/*
+Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+*/
+
+#include <fcntl.h>
+#include <utils/debug.h>
+#include <utils/sys.h>
+#include <vector>
+#include <string>
+#include <cstring>
+#include <algorithm>
+
+#include "hw_peripheral_drm.h"
+
+#define __CLASS__ "HWPeripheralDRM"
+
+using sde_drm::DRMDisplayType;
+using sde_drm::DRMOps;
+using sde_drm::DRMPowerMode;
+using sde_drm::DppsFeaturePayload;
+using sde_drm::DRMDppsFeatureInfo;
+using sde_drm::DRMSecureMode;
+using sde_drm::DRMCWbCaptureMode;
+
+namespace sdm {
+
+HWPeripheralDRM::HWPeripheralDRM(int32_t display_id, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, HWInfoInterface *hw_info_intf)
+ : HWDeviceDRM(buffer_sync_handler, buffer_allocator, hw_info_intf) {
+ disp_type_ = DRMDisplayType::PERIPHERAL;
+ device_name_ = "Peripheral";
+ display_id_ = display_id;
+}
+
+DisplayError HWPeripheralDRM::Init() {
+ DisplayError ret = HWDeviceDRM::Init();
+ if (ret != kErrorNone) {
+ DLOGE("Init failed for %s", device_name_);
+ return ret;
+ }
+
+ scalar_data_.resize(hw_resource_.hw_dest_scalar_info.count);
+ dest_scalar_cache_.resize(hw_resource_.hw_dest_scalar_info.count);
+ PopulateBitClkRates();
+
+ topology_control_ = UINT32(sde_drm::DRMTopologyControl::DSPP);
+ if (hw_panel_info_.is_primary_panel) {
+ topology_control_ |= UINT32(sde_drm::DRMTopologyControl::DEST_SCALER);
+ }
+
+ return kErrorNone;
+}
+
+void HWPeripheralDRM::PopulateBitClkRates() {
+ if (!hw_panel_info_.dyn_bitclk_support) {
+ return;
+ }
+
+ // Group all bit_clk_rates corresponding to DRM_PREFERRED mode.
+ uint32_t width = connector_info_.modes[current_mode_index_].mode.hdisplay;
+ uint32_t height = connector_info_.modes[current_mode_index_].mode.vdisplay;
+
+ for (auto &mode_info : connector_info_.modes) {
+ auto &mode = mode_info.mode;
+ if (mode.hdisplay == width && mode.vdisplay == height) {
+ if (std::find(bitclk_rates_.begin(), bitclk_rates_.end(), mode_info.bit_clk_rate) ==
+ bitclk_rates_.end()) {
+ bitclk_rates_.push_back(mode_info.bit_clk_rate);
+ DLOGI("Possible bit_clk_rates %d", mode_info.bit_clk_rate);
+ }
+ }
+ }
+
+ hw_panel_info_.bitclk_rates = bitclk_rates_;
+ DLOGI("bit_clk_rates Size %d", bitclk_rates_.size());
+}
+
+DisplayError HWPeripheralDRM::SetDynamicDSIClock(uint64_t bit_clk_rate) {
+ if (last_power_mode_ == DRMPowerMode::DOZE_SUSPEND || last_power_mode_ == DRMPowerMode::OFF) {
+ return kErrorNotSupported;
+ }
+
+ if (doze_poms_switch_done_) {
+ return kErrorNotSupported;
+ }
+
+ bit_clk_rate_ = bit_clk_rate;
+ update_mode_ = true;
+
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::GetDynamicDSIClock(uint64_t *bit_clk_rate) {
+ // Update bit_rate corresponding to current refresh rate.
+ *bit_clk_rate = (uint32_t)connector_info_.modes[current_mode_index_].bit_clk_rate;
+
+ return kErrorNone;
+}
+
+
+DisplayError HWPeripheralDRM::SetRefreshRate(uint32_t refresh_rate) {
+ if (doze_poms_switch_done_) {
+ // poms switch in progress
+ // Defer any refresh rate setting.
+ return kErrorNotSupported;
+ }
+
+ DisplayError error = HWDeviceDRM::SetRefreshRate(refresh_rate);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::SetDisplayMode(const HWDisplayMode hw_display_mode) {
+ if (doze_poms_switch_done_) {
+ return kErrorNotSupported;
+ }
+
+ DisplayError error = HWDeviceDRM::SetDisplayMode(hw_display_mode);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ // update bit clk rates.
+ hw_panel_info_.bitclk_rates = bitclk_rates_;
+
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::Validate(HWLayers *hw_layers) {
+ HWLayersInfo &hw_layer_info = hw_layers->info;
+ SetDestScalarData(hw_layer_info, true);
+ SetupConcurrentWriteback(hw_layer_info, true);
+ SetIdlePCState();
+
+ return HWDeviceDRM::Validate(hw_layers);
+}
+
+DisplayError HWPeripheralDRM::Commit(HWLayers *hw_layers) {
+ HWLayersInfo &hw_layer_info = hw_layers->info;
+ SetDestScalarData(hw_layer_info, false);
+ SetupConcurrentWriteback(hw_layer_info, false);
+ SetIdlePCState();
+
+ DisplayError error = HWDeviceDRM::Commit(hw_layers);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ if (cwb_config_.enabled && (error == kErrorNone)) {
+ PostCommitConcurrentWriteback(hw_layer_info.stack->output_buffer);
+ }
+
+ // Initialize to default after successful commit
+ synchronous_commit_ = false;
+ active_ = true;
+
+ idle_pc_state_ = sde_drm::DRMIdlePCState::NONE;
+
+ return error;
+}
+
+void HWPeripheralDRM::ResetDisplayParams() {
+ sde_dest_scalar_data_ = {};
+ for (uint32_t j = 0; j < scalar_data_.size(); j++) {
+ scalar_data_[j] = {};
+ dest_scalar_cache_[j] = {};
+ }
+}
+
+void HWPeripheralDRM::SetDestScalarData(HWLayersInfo hw_layer_info, bool validate) {
+ if (!hw_scale_ || !hw_resource_.hw_dest_scalar_info.count) {
+ return;
+ }
+
+ for (uint32_t i = 0; i < hw_resource_.hw_dest_scalar_info.count && validate; i++) {
+ DestScaleInfoMap::iterator it = hw_layer_info.dest_scale_info_map.find(i);
+
+ if (it == hw_layer_info.dest_scale_info_map.end()) {
+ continue;
+ }
+
+ HWDestScaleInfo *dest_scale_info = it->second;
+ SDEScaler *scale = &scalar_data_[i];
+ hw_scale_->SetScaler(dest_scale_info->scale_data, scale);
+
+ sde_drm_dest_scaler_cfg *dest_scalar_data = &sde_dest_scalar_data_.ds_cfg[i];
+ dest_scalar_data->flags = 0;
+ if (scale->scaler_v2.enable) {
+ dest_scalar_data->flags |= SDE_DRM_DESTSCALER_ENABLE;
+ }
+ if (scale->scaler_v2.de.enable) {
+ dest_scalar_data->flags |= SDE_DRM_DESTSCALER_ENHANCER_UPDATE;
+ }
+ if (dest_scale_info->scale_update) {
+ dest_scalar_data->flags |= SDE_DRM_DESTSCALER_SCALE_UPDATE;
+ }
+ if (hw_panel_info_.partial_update) {
+ dest_scalar_data->flags |= SDE_DRM_DESTSCALER_PU_ENABLE;
+ }
+ dest_scalar_data->index = i;
+ dest_scalar_data->lm_width = dest_scale_info->mixer_width;
+ dest_scalar_data->lm_height = dest_scale_info->mixer_height;
+ dest_scalar_data->scaler_cfg = reinterpret_cast<uint64_t>(&scale->scaler_v2);
+
+ if (std::memcmp(&dest_scalar_cache_[i].scalar_data, scale, sizeof(SDEScaler)) ||
+ dest_scalar_cache_[i].flags != dest_scalar_data->flags) {
+ needs_ds_update_ = true;
+ }
+ }
+
+ if (needs_ds_update_) {
+ if (!validate) {
+ // Cache the destination scalar data during commit
+ for (uint32_t i = 0; i < hw_resource_.hw_dest_scalar_info.count; i++) {
+ DestScaleInfoMap::iterator it = hw_layer_info.dest_scale_info_map.find(i);
+ if (it == hw_layer_info.dest_scale_info_map.end()) {
+ continue;
+ }
+ dest_scalar_cache_[i].flags = sde_dest_scalar_data_.ds_cfg[i].flags;
+ dest_scalar_cache_[i].scalar_data = scalar_data_[i];
+ }
+ needs_ds_update_ = false;
+ }
+ sde_dest_scalar_data_.num_dest_scaler = UINT32(hw_layer_info.dest_scale_info_map.size());
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_DEST_SCALER_CONFIG, token_.crtc_id,
+ reinterpret_cast<uint64_t>(&sde_dest_scalar_data_));
+ }
+}
+
+DisplayError HWPeripheralDRM::Flush(HWLayers *hw_layers) {
+ DisplayError err = HWDeviceDRM::Flush(hw_layers);
+ if (err != kErrorNone) {
+ return err;
+ }
+
+ ResetDisplayParams();
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::SetDppsFeature(void *payload, size_t size) {
+ uint32_t obj_id = 0, object_type = 0, feature_id = 0;
+ uint64_t value = 0;
+
+ if (size != sizeof(DppsFeaturePayload)) {
+ DLOGE("invalid payload size %d, expected %d", size, sizeof(DppsFeaturePayload));
+ return kErrorParameters;
+ }
+
+ DppsFeaturePayload *feature_payload = reinterpret_cast<DppsFeaturePayload *>(payload);
+ object_type = feature_payload->object_type;
+ feature_id = feature_payload->feature_id;
+ value = feature_payload->value;
+
+ if (feature_id == sde_drm::kFeatureAd4Roi) {
+ if (feature_payload->value) {
+ DisplayDppsAd4RoiCfg *params = reinterpret_cast<DisplayDppsAd4RoiCfg *>
+ (feature_payload->value);
+ if (!params) {
+ DLOGE("invalid playload value %d", feature_payload->value);
+ return kErrorNotSupported;
+ }
+
+ ad4_roi_cfg_.h_x = params->h_start;
+ ad4_roi_cfg_.h_y = params->h_end;
+ ad4_roi_cfg_.v_x = params->v_start;
+ ad4_roi_cfg_.v_y = params->v_end;
+ ad4_roi_cfg_.factor_in = params->factor_in;
+ ad4_roi_cfg_.factor_out = params->factor_out;
+
+ value = (uint64_t)&ad4_roi_cfg_;
+ }
+ }
+
+ if (object_type == DRM_MODE_OBJECT_CRTC) {
+ obj_id = token_.crtc_id;
+ } else if (object_type == DRM_MODE_OBJECT_CONNECTOR) {
+ obj_id = token_.conn_id;
+ } else {
+ DLOGE("invalid object type 0x%x", object_type);
+ return kErrorUndefined;
+ }
+
+ drm_atomic_intf_->Perform(DRMOps::DPPS_CACHE_FEATURE, obj_id, feature_id, value);
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::GetDppsFeatureInfo(void *payload, size_t size) {
+ if (size != sizeof(DRMDppsFeatureInfo)) {
+ DLOGE("invalid payload size %d, expected %d", size, sizeof(DRMDppsFeatureInfo));
+ return kErrorParameters;
+ }
+ DRMDppsFeatureInfo *feature_info = reinterpret_cast<DRMDppsFeatureInfo *>(payload);
+ drm_mgr_intf_->GetDppsFeatureInfo(feature_info);
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::HandleSecureEvent(SecureEvent secure_event, HWLayers *hw_layers) {
+ switch (secure_event) {
+ case kSecureDisplayStart: {
+ secure_display_active_ = true;
+ if (hw_panel_info_.mode != kModeCommand) {
+ DisplayError err = Flush(hw_layers);
+ if (err != kErrorNone) {
+ return err;
+ }
+ }
+ }
+ break;
+
+ case kSecureDisplayEnd: {
+ if (hw_panel_info_.mode != kModeCommand) {
+ DisplayError err = Flush(hw_layers);
+ if (err != kErrorNone) {
+ return err;
+ }
+ }
+ secure_display_active_ = false;
+ synchronous_commit_ = true;
+ }
+ break;
+
+ default:
+ DLOGE("Invalid secure event %d", secure_event);
+ return kErrorNotSupported;
+ }
+
+ return kErrorNone;
+}
+
+void HWPeripheralDRM::SetupConcurrentWriteback(const HWLayersInfo &hw_layer_info, bool validate) {
+ bool enable = hw_resource_.has_concurrent_writeback && hw_layer_info.stack->output_buffer;
+ if (!(enable || cwb_config_.enabled)) {
+ return;
+ }
+
+ bool setup_modes = enable && !cwb_config_.enabled && validate;
+ if (setup_modes && (SetupConcurrentWritebackModes() == kErrorNone)) {
+ cwb_config_.enabled = true;
+ }
+
+ if (cwb_config_.enabled) {
+ if (enable) {
+ // Set DRM properties for Concurrent Writeback.
+ ConfigureConcurrentWriteback(hw_layer_info.stack);
+
+ if (!validate) {
+ // Set GET_RETIRE_FENCE property to get Concurrent Writeback fence.
+ int *fence = &hw_layer_info.stack->output_buffer->release_fence_fd;
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_GET_RETIRE_FENCE,
+ cwb_config_.token.conn_id, fence);
+ }
+ } else {
+ // Tear down the Concurrent Writeback topology.
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_CRTC, cwb_config_.token.conn_id, 0);
+ }
+ }
+}
+
+DisplayError HWPeripheralDRM::TeardownConcurrentWriteback(void) {
+ if (cwb_config_.enabled) {
+ drm_mgr_intf_->UnregisterDisplay(&(cwb_config_.token));
+ cwb_config_.enabled = false;
+ registry_.Clear();
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::SetupConcurrentWritebackModes() {
+ // To setup Concurrent Writeback topology, get the Connector ID of Virtual display
+ if (drm_mgr_intf_->RegisterDisplay(DRMDisplayType::VIRTUAL, &cwb_config_.token)) {
+ DLOGE("RegisterDisplay failed for Concurrent Writeback");
+ return kErrorResources;
+ }
+
+ // Set the modes based on Primary display.
+ std::vector<drmModeModeInfo> modes;
+ for (auto &item : connector_info_.modes) {
+ modes.push_back(item.mode);
+ }
+
+ // Inform the mode list to driver.
+ struct sde_drm_wb_cfg cwb_cfg = {};
+ cwb_cfg.connector_id = cwb_config_.token.conn_id;
+ cwb_cfg.flags = SDE_DRM_WB_CFG_FLAGS_CONNECTED;
+ cwb_cfg.count_modes = UINT32(modes.size());
+ cwb_cfg.modes = (uint64_t)modes.data();
+
+ int ret = -EINVAL;
+#ifdef DRM_IOCTL_SDE_WB_CONFIG
+ ret = drmIoctl(dev_fd_, DRM_IOCTL_SDE_WB_CONFIG, &cwb_cfg);
+#endif
+ if (ret) {
+ drm_mgr_intf_->UnregisterDisplay(&(cwb_config_.token));
+ DLOGE("Dump CWBConfig: mode_count %d flags %x", cwb_cfg.count_modes, cwb_cfg.flags);
+ DumpConnectorModeInfo();
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+void HWPeripheralDRM::ConfigureConcurrentWriteback(LayerStack *layer_stack) {
+ LayerBuffer *output_buffer = layer_stack->output_buffer;
+ registry_.MapOutputBufferToFbId(output_buffer);
+
+ // Set the topology for Concurrent Writeback: [CRTC_PRIMARY_DISPLAY - CONNECTOR_VIRTUAL_DISPLAY].
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_CRTC, cwb_config_.token.conn_id, token_.crtc_id);
+
+ // Set CRTC Capture Mode
+ DRMCWbCaptureMode capture_mode = layer_stack->flags.post_processed_output ?
+ DRMCWbCaptureMode::DSPP_OUT : DRMCWbCaptureMode::MIXER_OUT;
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_CAPTURE_MODE, token_.crtc_id, capture_mode);
+
+ // Set Connector Output FB
+ uint32_t fb_id = registry_.GetOutputFbId(output_buffer->handle_id);
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_OUTPUT_FB_ID, cwb_config_.token.conn_id, fb_id);
+
+ // Set Connector Secure Mode
+ bool secure = output_buffer->flags.secure;
+ DRMSecureMode mode = secure ? DRMSecureMode::SECURE : DRMSecureMode::NON_SECURE;
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_FB_SECURE_MODE, cwb_config_.token.conn_id, mode);
+
+ // Set Connector Output Rect
+ sde_drm::DRMRect dst = {};
+ dst.left = 0;
+ dst.top = 0;
+ dst.right = display_attributes_[current_mode_index_].x_pixels;
+ dst.bottom = display_attributes_[current_mode_index_].y_pixels;
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_OUTPUT_RECT, cwb_config_.token.conn_id, dst);
+}
+
+void HWPeripheralDRM::PostCommitConcurrentWriteback(LayerBuffer *output_buffer) {
+ bool enabled = hw_resource_.has_concurrent_writeback && output_buffer;
+
+ if (!enabled) {
+ TeardownConcurrentWriteback();
+ }
+}
+
+DisplayError HWPeripheralDRM::ControlIdlePowerCollapse(bool enable, bool synchronous) {
+ if (enable == idle_pc_enabled_) {
+ return kErrorNone;
+ }
+ idle_pc_state_ = enable ? sde_drm::DRMIdlePCState::ENABLE : sde_drm::DRMIdlePCState::DISABLE;
+ // As idle PC is disabled after subsequent commit, Make sure to have synchrounous commit and
+ // ensure TA accesses the display_cc registers after idle PC is disabled.
+ synchronous_commit_ = !enable ? synchronous : false;
+ idle_pc_enabled_ = enable;
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::PowerOn(const HWQosData &qos_data, int *release_fence) {
+ DTRACE_SCOPED();
+ if (!drm_atomic_intf_) {
+ DLOGE("DRM Atomic Interface is null!");
+ return kErrorUndefined;
+ }
+
+ if (first_cycle_) {
+ return kErrorDeferred;
+ }
+
+ if (switch_mode_valid_ && doze_poms_switch_done_ && (current_mode_index_ == cmd_mode_index_)) {
+ HWDeviceDRM::SetDisplayMode(kModeVideo);
+ hw_panel_info_.bitclk_rates = bitclk_rates_;
+ doze_poms_switch_done_ = false;
+ }
+
+ if (!idle_pc_enabled_) {
+ drm_atomic_intf_->Perform(sde_drm::DRMOps::CRTC_SET_IDLE_PC_STATE, token_.crtc_id,
+ sde_drm::DRMIdlePCState::ENABLE);
+ }
+ DisplayError err = HWDeviceDRM::PowerOn(qos_data, release_fence);
+ if (err != kErrorNone) {
+ return err;
+ }
+ idle_pc_state_ = sde_drm::DRMIdlePCState::NONE;
+ idle_pc_enabled_ = true;
+ active_ = true;
+
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::PowerOff(bool teardown) {
+ DTRACE_SCOPED();
+
+ DisplayError err = HWDeviceDRM::PowerOff(teardown);
+ if (err != kErrorNone) {
+ return err;
+ }
+
+ active_ = false;
+
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::Doze(const HWQosData &qos_data, int *release_fence) {
+ DTRACE_SCOPED();
+
+ bool pending_poms_switch = false;
+ if (!first_cycle_ && switch_mode_valid_ && !doze_poms_switch_done_ &&
+ (current_mode_index_ == video_mode_index_)) {
+ if (active_) {
+ HWDeviceDRM::SetDisplayMode(kModeCommand);
+ hw_panel_info_.bitclk_rates = bitclk_rates_;
+ doze_poms_switch_done_ = true;
+ } else {
+ pending_poms_switch = true;
+ }
+ }
+
+ DisplayError err = HWDeviceDRM::Doze(qos_data, release_fence);
+ if (err != kErrorNone) {
+ return err;
+ }
+
+ if (pending_poms_switch) {
+ HWDeviceDRM::SetDisplayMode(kModeCommand);
+ hw_panel_info_.bitclk_rates = bitclk_rates_;
+ doze_poms_switch_done_ = true;
+ }
+
+ if (first_cycle_) {
+ active_ = true;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::DozeSuspend(const HWQosData &qos_data, int *release_fence) {
+ DTRACE_SCOPED();
+
+ if (switch_mode_valid_ && !doze_poms_switch_done_ &&
+ (current_mode_index_ == video_mode_index_)) {
+ HWDeviceDRM::SetDisplayMode(kModeCommand);
+ hw_panel_info_.bitclk_rates = bitclk_rates_;
+ doze_poms_switch_done_ = true;
+ }
+
+ DisplayError err = HWDeviceDRM::DozeSuspend(qos_data, release_fence);
+ if (err != kErrorNone) {
+ return err;
+ }
+
+ active_ = true;
+
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::SetDisplayAttributes(uint32_t index) {
+ if (doze_poms_switch_done_) {
+ return kErrorNotSupported;
+ }
+
+ HWDeviceDRM::SetDisplayAttributes(index);
+ // update bit clk rates.
+ hw_panel_info_.bitclk_rates = bitclk_rates_;
+
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::SetDisplayDppsAdROI(void *payload) {
+ DisplayError err = kErrorNone;
+ struct sde_drm::DppsFeaturePayload feature_payload = {};
+
+ if (!payload) {
+ DLOGE("Invalid payload parameter");
+ return kErrorParameters;
+ }
+
+ feature_payload.object_type = DRM_MODE_OBJECT_CRTC;
+ feature_payload.feature_id = sde_drm::kFeatureAd4Roi;
+ feature_payload.value = (uint64_t)(payload);
+
+ err = SetDppsFeature(&feature_payload, sizeof(feature_payload));
+ if (err != kErrorNone) {
+ DLOGE("Faid to SetDppsFeature feature_id = %d, err = %d",
+ sde_drm::kFeatureAd4Roi, err);
+ }
+
+ return err;
+}
+
+DisplayError HWPeripheralDRM::SetPanelBrightness(int level) {
+ if (pending_doze_) {
+ DLOGI("Doze state pending!! Skip for now");
+ return kErrorDeferred;
+ }
+
+ char buffer[kMaxSysfsCommandLength] = {0};
+
+ if (brightness_base_path_.empty()) {
+ return kErrorHardware;
+ }
+
+ std::string brightness_node(brightness_base_path_ + "brightness");
+ int fd = Sys::open_(brightness_node.c_str(), O_RDWR);
+ if (fd < 0) {
+ DLOGE("Failed to open node = %s, error = %s ", brightness_node.c_str(),
+ strerror(errno));
+ return kErrorFileDescriptor;
+ }
+
+ int32_t bytes = snprintf(buffer, kMaxSysfsCommandLength, "%d\n", level);
+ ssize_t ret = Sys::pwrite_(fd, buffer, static_cast<size_t>(bytes), 0);
+ if (ret <= 0) {
+ DLOGE("Failed to write to node = %s, error = %s ", brightness_node.c_str(),
+ strerror(errno));
+ Sys::close_(fd);
+ return kErrorHardware;
+ }
+
+ Sys::close_(fd);
+
+ return kErrorNone;
+}
+
+DisplayError HWPeripheralDRM::GetPanelBrightness(int *level) {
+ char value[kMaxStringLength] = {0};
+
+ if (!level) {
+ DLOGE("Invalid input, null pointer.");
+ return kErrorParameters;
+ }
+
+ if (brightness_base_path_.empty()) {
+ return kErrorHardware;
+ }
+
+ std::string brightness_node(brightness_base_path_ + "brightness");
+ int fd = Sys::open_(brightness_node.c_str(), O_RDWR);
+ if (fd < 0) {
+ DLOGE("Failed to open brightness node = %s, error = %s", brightness_node.c_str(),
+ strerror(errno));
+ return kErrorFileDescriptor;
+ }
+
+ if (Sys::pread_(fd, value, sizeof(value), 0) > 0) {
+ *level = atoi(value);
+ } else {
+ DLOGE("Failed to read panel brightness");
+ Sys::close_(fd);
+ return kErrorHardware;
+ }
+
+ Sys::close_(fd);
+
+ return kErrorNone;
+}
+
+void HWPeripheralDRM::GetHWPanelMaxBrightness() {
+ char value[kMaxStringLength] = {0};
+ hw_panel_info_.panel_max_brightness = 255.0f;
+
+ // Panel nodes, driver connector creation, and DSI probing all occur in sync, for each DSI. This
+ // means that the connector_type_id - 1 will reflect the same # as the panel # for panel node.
+ char s[kMaxStringLength] = {};
+ snprintf(s, sizeof(s), "/sys/class/backlight/panel%d-backlight/",
+ static_cast<int>(connector_info_.type_id - 1));
+ brightness_base_path_.assign(s);
+
+ std::string brightness_node(brightness_base_path_ + "max_brightness");
+ int fd = Sys::open_(brightness_node.c_str(), O_RDONLY);
+ if (fd < 0) {
+ DLOGE("Failed to open max brightness node = %s, error = %s", brightness_node.c_str(),
+ strerror(errno));
+ return;
+ }
+
+ if (Sys::pread_(fd, value, sizeof(value), 0) > 0) {
+ hw_panel_info_.panel_max_brightness = static_cast<float>(atof(value));
+ DLOGI_IF(kTagDriverConfig, "Max brightness = %f", hw_panel_info_.panel_max_brightness);
+ } else {
+ DLOGE("Failed to read max brightness. error = %s", strerror(errno));
+ }
+
+ Sys::close_(fd);
+ return;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/drm/hw_peripheral_drm.h b/sdm/libs/core/drm/hw_peripheral_drm.h
new file mode 100644
index 0000000..92aa90d
--- /dev/null
+++ b/sdm/libs/core/drm/hw_peripheral_drm.h
@@ -0,0 +1,106 @@
+/*
+Copyright (c) 2017-2018, 2020, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+*/
+
+#ifndef __HW_PERIPHERAL_DRM_H__
+#define __HW_PERIPHERAL_DRM_H__
+
+#include <vector>
+#include <string>
+#include "hw_device_drm.h"
+
+namespace sdm {
+
+struct CWBConfig {
+ bool enabled = false;
+ sde_drm::DRMDisplayToken token = {};
+};
+
+class HWPeripheralDRM : public HWDeviceDRM {
+ public:
+ explicit HWPeripheralDRM(int32_t display_id, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, HWInfoInterface *hw_info_intf);
+ virtual ~HWPeripheralDRM() {}
+
+ protected:
+ virtual DisplayError Init();
+ virtual DisplayError Validate(HWLayers *hw_layers);
+ virtual DisplayError Commit(HWLayers *hw_layers);
+ virtual DisplayError Flush(HWLayers *hw_layers);
+ virtual DisplayError SetDppsFeature(void *payload, size_t size);
+ virtual DisplayError GetDppsFeatureInfo(void *payload, size_t size);
+ virtual DisplayError HandleSecureEvent(SecureEvent secure_event, HWLayers *hw_layers);
+ virtual DisplayError ControlIdlePowerCollapse(bool enable, bool synchronous);
+ virtual DisplayError PowerOn(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError PowerOff(bool teardown);
+ virtual DisplayError Doze(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError DozeSuspend(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError SetDisplayDppsAdROI(void *payload);
+ virtual DisplayError SetDynamicDSIClock(uint64_t bit_clk_rate);
+ virtual DisplayError GetDynamicDSIClock(uint64_t *bit_clk_rate);
+ virtual DisplayError SetDisplayAttributes(uint32_t index);
+ virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode);
+ virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
+ virtual DisplayError TeardownConcurrentWriteback(void);
+ virtual DisplayError SetPanelBrightness(int level);
+ virtual DisplayError GetPanelBrightness(int *level);
+ virtual void GetHWPanelMaxBrightness();
+
+ private:
+ void SetDestScalarData(HWLayersInfo hw_layer_info, bool validate);
+ void ResetDisplayParams();
+ DisplayError SetupConcurrentWritebackModes();
+ void SetupConcurrentWriteback(const HWLayersInfo &hw_layer_info, bool validate);
+ void ConfigureConcurrentWriteback(LayerStack *stack);
+ void PostCommitConcurrentWriteback(LayerBuffer *output_buffer);
+ void SetIdlePCState() {
+ drm_atomic_intf_->Perform(sde_drm::DRMOps::CRTC_SET_IDLE_PC_STATE, token_.crtc_id,
+ idle_pc_state_);
+ }
+
+ struct DestScalarCache {
+ SDEScaler scalar_data = {};
+ uint32_t flags = {};
+ };
+
+ sde_drm_dest_scaler_data sde_dest_scalar_data_ = {};
+ std::vector<SDEScaler> scalar_data_ = {};
+ CWBConfig cwb_config_ = {};
+ sde_drm::DRMIdlePCState idle_pc_state_ = sde_drm::DRMIdlePCState::NONE;
+ bool idle_pc_enabled_ = true;
+ std::vector<DestScalarCache> dest_scalar_cache_ = {};
+ drm_msm_ad4_roi_cfg ad4_roi_cfg_ = {};
+ bool needs_ds_update_ = false;
+ void PopulateBitClkRates();
+ std::vector<uint64_t> bitclk_rates_;
+ std::string brightness_base_path_ = "";
+};
+
+} // namespace sdm
+
+#endif // __HW_PERIPHERAL_DRM_H__
diff --git a/sdm/libs/core/drm/hw_scale_drm.cpp b/sdm/libs/core/drm/hw_scale_drm.cpp
new file mode 100644
index 0000000..03e8067
--- /dev/null
+++ b/sdm/libs/core/drm/hw_scale_drm.cpp
@@ -0,0 +1,163 @@
+/*
+* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <stdio.h>
+#include <utils/debug.h>
+
+#include "hw_scale_drm.h"
+
+#define __CLASS__ "HWScaleDRM"
+
+namespace sdm {
+
+static uint32_t GetScalingFilter(ScalingFilterConfig filter_cfg) {
+ switch (filter_cfg) {
+ case kFilterEdgeDirected:
+ return FILTER_EDGE_DIRECTED_2D;
+ case kFilterCircular:
+ return FILTER_CIRCULAR_2D;
+ case kFilterSeparable:
+ return FILTER_SEPARABLE_1D;
+ case kFilterBilinear:
+ return FILTER_BILINEAR;
+ default:
+ DLOGE("Invalid Scaling Filter");
+ return kFilterMax;
+ }
+}
+
+static uint32_t GetAlphaInterpolation(HWAlphaInterpolation alpha_filter_cfg) {
+ switch (alpha_filter_cfg) {
+ case kInterpolationPixelRepeat:
+ return FILTER_ALPHA_DROP_REPEAT;
+ case kInterpolationBilinear:
+ return FILTER_ALPHA_BILINEAR;
+ case kInterpolation2D:
+ return FILTER_ALPHA_2D;
+ default:
+ DLOGE("Invalid Alpha Interpolation");
+ return kInterpolationMax;
+ }
+}
+
+void HWScaleDRM::SetScaler(const HWScaleData &scale_data, SDEScaler *scaler) {
+ if (version_ == Version::V2) {
+ SetScalerV2(scale_data, &scaler->scaler_v2);
+ }
+}
+
+void HWScaleDRM::SetScalerV2(const HWScaleData &scale_data, sde_drm_scaler_v2 *scaler) {
+ if (!scale_data.enable.scale && !scale_data.enable.direction_detection &&
+ !scale_data.enable.detail_enhance) {
+ scaler->enable = 0;
+ scaler->dir_en = 0;
+ scaler->de.enable = 0;
+ return;
+ }
+
+ scaler->enable = scale_data.enable.scale | scale_data.enable.direction_detection |
+ scale_data.detail_enhance.enable;
+
+ scaler->dir_en = scale_data.enable.direction_detection;
+ scaler->de.enable = scale_data.detail_enhance.enable;
+
+ for (int i = 0; i < SDE_MAX_PLANES; i++) {
+ const HWPlane &plane = scale_data.plane[i];
+ scaler->init_phase_x[i] = plane.init_phase_x;
+ scaler->phase_step_x[i] = plane.phase_step_x;
+ scaler->init_phase_y[i] = plane.init_phase_y;
+ scaler->phase_step_y[i] = plane.phase_step_y;
+
+ // TODO(user): Remove right, bottom from HWPlane and rename to LR, TB similar to qseed3
+ // Also remove roi_width which is unused.
+ scaler->pe.num_ext_pxls_lr[i] = plane.left.extension;
+ scaler->pe.num_ext_pxls_tb[i] = plane.top.extension;
+
+ scaler->pe.left_ftch[i] = plane.left.overfetch;
+ scaler->pe.top_ftch[i] = plane.top.overfetch;
+ scaler->pe.right_ftch[i] = plane.right.overfetch;
+ scaler->pe.btm_ftch[i] = plane.bottom.overfetch;
+
+ scaler->pe.left_rpt[i] = plane.left.repeat;
+ scaler->pe.top_rpt[i] = plane.top.repeat;
+ scaler->pe.right_rpt[i] = plane.right.repeat;
+ scaler->pe.btm_rpt[i] = plane.bottom.repeat;
+
+ scaler->preload_x[i] = UINT32(plane.preload_x);
+ scaler->preload_y[i] = UINT32(plane.preload_y);
+
+ scaler->src_width[i] = plane.src_width;
+ scaler->src_height[i] = plane.src_height;
+ }
+
+ scaler->dst_width = scale_data.dst_width;
+ scaler->dst_height = scale_data.dst_height;
+
+ scaler->y_rgb_filter_cfg = GetScalingFilter(scale_data.y_rgb_filter_cfg);
+ scaler->uv_filter_cfg = GetScalingFilter(scale_data.uv_filter_cfg);
+ scaler->alpha_filter_cfg = GetAlphaInterpolation(scale_data.alpha_filter_cfg);
+ scaler->blend_cfg = scale_data.blend_cfg;
+ scaler->dir_weight = scale_data.dir_weight;
+
+ scaler->lut_flag = (scale_data.lut_flag.lut_swap ? SCALER_LUT_SWAP : 0) |
+ (scale_data.lut_flag.lut_dir_wr ? SCALER_LUT_DIR_WR : 0) |
+ (scale_data.lut_flag.lut_y_cir_wr ? SCALER_LUT_Y_CIR_WR : 0) |
+ (scale_data.lut_flag.lut_uv_cir_wr ? SCALER_LUT_UV_CIR_WR : 0) |
+ (scale_data.lut_flag.lut_y_sep_wr ? SCALER_LUT_Y_SEP_WR : 0) |
+ (scale_data.lut_flag.lut_uv_sep_wr ? SCALER_LUT_UV_SEP_WR : 0);
+
+ scaler->dir_lut_idx = scale_data.dir_lut_idx;
+ scaler->y_rgb_cir_lut_idx = scale_data.y_rgb_cir_lut_idx;
+ scaler->uv_cir_lut_idx = scale_data.uv_cir_lut_idx;
+ scaler->y_rgb_sep_lut_idx = scale_data.y_rgb_sep_lut_idx;
+ scaler->uv_sep_lut_idx = scale_data.uv_sep_lut_idx;
+
+ if (scaler->de.enable) {
+ sde_drm_de_v1 *det_enhance = &scaler->de;
+ det_enhance->sharpen_level1 = scale_data.detail_enhance.sharpen_level1;
+ det_enhance->sharpen_level2 = scale_data.detail_enhance.sharpen_level2;
+ det_enhance->clip = scale_data.detail_enhance.clip;
+ det_enhance->limit = scale_data.detail_enhance.limit;
+ det_enhance->thr_quiet = scale_data.detail_enhance.thr_quiet;
+ det_enhance->thr_dieout = scale_data.detail_enhance.thr_dieout;
+ det_enhance->thr_low = scale_data.detail_enhance.thr_low;
+ det_enhance->thr_high = scale_data.detail_enhance.thr_high;
+ det_enhance->prec_shift = scale_data.detail_enhance.prec_shift;
+
+ for (int i = 0; i < SDE_MAX_DE_CURVES; i++) {
+ det_enhance->adjust_a[i] = scale_data.detail_enhance.adjust_a[i];
+ det_enhance->adjust_b[i] = scale_data.detail_enhance.adjust_b[i];
+ det_enhance->adjust_c[i] = scale_data.detail_enhance.adjust_c[i];
+ }
+ }
+
+ return;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/drm/hw_scale_drm.h b/sdm/libs/core/drm/hw_scale_drm.h
new file mode 100644
index 0000000..6f96eca
--- /dev/null
+++ b/sdm/libs/core/drm/hw_scale_drm.h
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __HW_SCALE_DRM_H__
+#define __HW_SCALE_DRM_H__
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <drm.h>
+// The 3 headers above are a workaround to prevent kernel drm.h from being used that has the
+// "virtual" keyword used for a variable. In future replace libdrm version drm.h with kernel
+// version drm/drm.h
+#include <drm/sde_drm.h>
+#include <private/hw_info_types.h>
+
+namespace sdm {
+
+struct SDEScaler {
+ struct sde_drm_scaler_v2 scaler_v2 = {};
+ // More here, maybe in a union
+};
+
+class HWScaleDRM {
+ public:
+ enum class Version { V2 };
+ explicit HWScaleDRM(Version v) : version_(v) {}
+ void SetScaler(const HWScaleData &scale, SDEScaler *scaler);
+
+ private:
+ void SetScalerV2(const HWScaleData &scale, sde_drm_scaler_v2 *scaler_v2);
+ Version version_ = Version::V2;
+};
+
+} // namespace sdm
+
+#endif // __HW_SCALE_DRM_H__
diff --git a/sdm/libs/core/drm/hw_tv_drm.cpp b/sdm/libs/core/drm/hw_tv_drm.cpp
new file mode 100644
index 0000000..dfe481f
--- /dev/null
+++ b/sdm/libs/core/drm/hw_tv_drm.cpp
@@ -0,0 +1,399 @@
+/*
+* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include "hw_tv_drm.h"
+#include <math.h>
+#include <sys/time.h>
+#include <utils/debug.h>
+#include <utils/sys.h>
+#include <utils/formats.h>
+#include <drm_lib_loader.h>
+#include <drm_master.h>
+#include <drm_res_mgr.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string>
+#include <vector>
+#include <map>
+#include <utility>
+
+#ifndef HDR_EOTF_SMTPE_ST2084
+#define HDR_EOTF_SMTPE_ST2084 2
+#endif
+#ifndef HDR_EOTF_HLG
+#define HDR_EOTF_HLG 3
+#endif
+
+#define __CLASS__ "HWTVDRM"
+
+#define HDR_DISABLE 0
+#define HDR_ENABLE 1
+#define MIN_HDR_RESET_WAITTIME 2
+
+using drm_utils::DRMMaster;
+using drm_utils::DRMResMgr;
+using drm_utils::DRMLibLoader;
+using drm_utils::DRMBuffer;
+using sde_drm::GetDRMManager;
+using sde_drm::DestroyDRMManager;
+using sde_drm::DRMDisplayType;
+using sde_drm::DRMDisplayToken;
+using sde_drm::DRMConnectorInfo;
+using sde_drm::DRMPPFeatureInfo;
+using sde_drm::DRMOps;
+using sde_drm::DRMTopology;
+using sde_drm::DRMPowerMode;
+
+namespace sdm {
+
+static int32_t GetEOTF(const GammaTransfer &transfer) {
+ int32_t hdr_transfer = -1;
+
+ switch (transfer) {
+ case Transfer_SMPTE_ST2084:
+ hdr_transfer = HDR_EOTF_SMTPE_ST2084;
+ break;
+ case Transfer_HLG:
+ hdr_transfer = HDR_EOTF_HLG;
+ break;
+ default:
+ DLOGW("Unknown Transfer: %d", transfer);
+ }
+
+ return hdr_transfer;
+}
+
+static float GetMaxOrAverageLuminance(float luminance) {
+ return (50.0f * powf(2.0f, (luminance / 32.0f)));
+}
+
+static float GetMinLuminance(float luminance, float max_luminance) {
+ return (max_luminance * ((luminance / 255.0f) * (luminance / 255.0f)) / 100.0f);
+}
+
+HWTVDRM::HWTVDRM(int32_t display_id, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, HWInfoInterface *hw_info_intf)
+ : HWDeviceDRM(buffer_sync_handler, buffer_allocator, hw_info_intf) {
+ disp_type_ = DRMDisplayType::TV;
+ device_name_ = "TV";
+ display_id_ = display_id;
+}
+
+DisplayError HWTVDRM::SetDisplayAttributes(uint32_t index) {
+ if (index >= connector_info_.modes.size()) {
+ DLOGE("Invalid mode index %d mode size %d", index, UINT32(connector_info_.modes.size()));
+ return kErrorNotSupported;
+ }
+
+ current_mode_index_ = index;
+ PopulateHWPanelInfo();
+ UpdateMixerAttributes();
+
+ DLOGI("Display attributes[%d]: WxH: %dx%d, DPI: %fx%f, FPS: %d, LM_SPLIT: %d, V_BACK_PORCH: %d," \
+ " V_FRONT_PORCH: %d, V_PULSE_WIDTH: %d, V_TOTAL: %d, H_TOTAL: %d, CLK: %dKHZ, TOPOLOGY: %d",
+ index, display_attributes_[index].x_pixels, display_attributes_[index].y_pixels,
+ display_attributes_[index].x_dpi, display_attributes_[index].y_dpi,
+ display_attributes_[index].fps, display_attributes_[index].is_device_split,
+ display_attributes_[index].v_back_porch, display_attributes_[index].v_front_porch,
+ display_attributes_[index].v_pulse_width, display_attributes_[index].v_total,
+ display_attributes_[index].h_total, display_attributes_[index].clock_khz,
+ display_attributes_[index].topology);
+
+ return kErrorNone;
+}
+
+DisplayError HWTVDRM::GetConfigIndex(char *mode, uint32_t *index) {
+ uint32_t width = 0, height = 0, fps = 0, format = 0;
+ std::string str(mode);
+
+ // mode should be in width:height:fps:format
+ // TODO(user): it is not fully robust, User needs to provide in above format only
+ if (str.length() != 0) {
+ width = UINT32(stoi(str));
+ height = UINT32(stoi(str.substr(str.find(':') + 1)));
+ std::string str3 = str.substr(str.find(':') + 1);
+ fps = UINT32(stoi(str3.substr(str3.find(':') + 1)));
+ std::string str4 = str3.substr(str3.find(':') + 1);
+ format = UINT32(stoi(str4.substr(str4.find(':') + 1)));
+ }
+
+ for (size_t idex = 0; idex < connector_info_.modes.size(); idex ++) {
+ if ((height == connector_info_.modes[idex].mode.vdisplay) &&
+ (width == connector_info_.modes[idex].mode.hdisplay) &&
+ (fps == connector_info_.modes[idex].mode.vrefresh)) {
+ if ((format >> 1) & (connector_info_.modes[idex].mode.flags >> kBitYUV)) {
+ *index = UINT32(idex);
+ break;
+ }
+
+ if (format & (connector_info_.modes[idex].mode.flags >> kBitRGB)) {
+ *index = UINT32(idex);
+ break;
+ }
+ }
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWTVDRM::GetDefaultConfig(uint32_t *default_config) {
+ bool found = false;
+
+ for (uint32_t i = 0; i < connector_info_.modes.size(); i++) {
+ auto &mode = connector_info_.modes[i].mode;
+ if (mode.hdisplay == 640 && mode.vdisplay == 480) {
+ *default_config = i;
+ found = true;
+ DLOGI("Found 640x480 default mode, using as failure fallback");
+ break;
+ }
+ }
+
+ return found ? kErrorNone : kErrorNotSupported;
+}
+
+DisplayError HWTVDRM::PowerOff(bool teardown) {
+ DTRACE_SCOPED();
+ if (!drm_atomic_intf_) {
+ DLOGE("DRM Atomic Interface is null!");
+ return kErrorUndefined;
+ }
+
+ if (first_cycle_) {
+ return kErrorNone;
+ }
+
+#ifdef HYPERVISOR
+ teardown = true;
+#endif
+
+ if (teardown) {
+ // LP connecter prop N/A for External
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_ACTIVE, token_.crtc_id, 0);
+ }
+ int ret = drm_atomic_intf_->Commit(true /* synchronous */, false /* retain_planes*/);
+ if (ret) {
+ DLOGE("%s failed with error %d", __FUNCTION__, ret);
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWTVDRM::Doze(const HWQosData &qos_data, int *release_fence) {
+ return kErrorNone;
+}
+
+DisplayError HWTVDRM::DozeSuspend(const HWQosData &qos_data, int *release_fence) {
+ return kErrorNone;
+}
+
+DisplayError HWTVDRM::Standby() {
+ return kErrorNone;
+}
+
+void HWTVDRM::PopulateHWPanelInfo() {
+ hw_panel_info_ = {};
+
+ HWDeviceDRM::PopulateHWPanelInfo();
+ hw_panel_info_.hdr_enabled = connector_info_.ext_hdr_prop.hdr_supported;
+ hw_panel_info_.hdr_metadata_type_one = connector_info_.ext_hdr_prop.hdr_metadata_type_one;
+ hw_panel_info_.hdr_eotf = connector_info_.ext_hdr_prop.hdr_eotf;
+
+ // Convert the raw luminance values from driver to Candela per meter^2 unit.
+ float max_luminance = FLOAT(connector_info_.ext_hdr_prop.hdr_max_luminance);
+ if (max_luminance != 0.0f) {
+ max_luminance = GetMaxOrAverageLuminance(max_luminance);
+ }
+ bool valid_luminance = (max_luminance > kMinPeakLuminance) && (max_luminance < kMaxPeakLuminance);
+ hw_panel_info_.peak_luminance = valid_luminance ? max_luminance : kDefaultMaxLuminance;
+
+ float min_luminance = FLOAT(connector_info_.ext_hdr_prop.hdr_min_luminance);
+ if (min_luminance != 0.0f) {
+ min_luminance = GetMinLuminance(min_luminance, hw_panel_info_.peak_luminance);
+ }
+ hw_panel_info_.blackness_level = (min_luminance < 1.0f) ? min_luminance : kDefaultMinLuminance;
+
+ float average_luminance = FLOAT(connector_info_.ext_hdr_prop.hdr_avg_luminance);
+ if (average_luminance != 0.0f) {
+ average_luminance = GetMaxOrAverageLuminance(average_luminance);
+ } else {
+ average_luminance = (hw_panel_info_.peak_luminance + hw_panel_info_.blackness_level) / 2.0f;
+ }
+ hw_panel_info_.average_luminance = average_luminance;
+
+ DLOGI("TV Panel: %s, type_one = %d, eotf = %d, luminance[max = %f, min = %f, avg = %f]",
+ hw_panel_info_.hdr_enabled ? "HDR" : "Non-HDR", hw_panel_info_.hdr_metadata_type_one,
+ hw_panel_info_.hdr_eotf, hw_panel_info_.peak_luminance, hw_panel_info_.blackness_level,
+ hw_panel_info_.average_luminance);
+}
+
+DisplayError HWTVDRM::Commit(HWLayers *hw_layers) {
+ DisplayError error = UpdateHDRMetaData(hw_layers);
+ if (error != kErrorNone) {
+ return error;
+ }
+ return HWDeviceDRM::Commit(hw_layers);
+}
+
+DisplayError HWTVDRM::UpdateHDRMetaData(HWLayers *hw_layers) {
+ static struct timeval hdr_reset_start, hdr_reset_end;
+ static bool reset_hdr_flag = false;
+ const HWHDRLayerInfo &hdr_layer_info = hw_layers->info.hdr_layer_info;
+ if (!hw_panel_info_.hdr_enabled) {
+ return kErrorNone;
+ }
+
+ DisplayError error = kErrorNone;
+
+ Layer hdr_layer = {};
+ if (hdr_layer_info.operation == HWHDRLayerInfo::kSet && hdr_layer_info.layer_index > -1) {
+ hdr_layer = *(hw_layers->info.stack->layers.at(UINT32(hdr_layer_info.layer_index)));
+ }
+
+ const LayerBuffer *layer_buffer = &hdr_layer.input_buffer;
+ const MasteringDisplay &mastering_display = layer_buffer->color_metadata.masteringDisplayInfo;
+ const ContentLightLevel &light_level = layer_buffer->color_metadata.contentLightLevel;
+ const Primaries &primaries = mastering_display.primaries;
+
+ if (hdr_layer_info.operation == HWHDRLayerInfo::kSet) {
+ // Reset reset_hdr_flag to handle where there are two consecutive HDR video playbacks with not
+ // enough non-HDR frames in between to reset the HDR metadata.
+ reset_hdr_flag = false;
+
+ int32_t eotf = GetEOTF(layer_buffer->color_metadata.transfer);
+ hdr_metadata_.hdr_supported = 1;
+ hdr_metadata_.hdr_state = HDR_ENABLE;
+ hdr_metadata_.eotf = (eotf < 0) ? 0 : UINT32(eotf);
+ hdr_metadata_.white_point_x = primaries.whitePoint[0];
+ hdr_metadata_.white_point_y = primaries.whitePoint[1];
+ hdr_metadata_.display_primaries_x[0] = primaries.rgbPrimaries[0][0];
+ hdr_metadata_.display_primaries_y[0] = primaries.rgbPrimaries[0][1];
+ hdr_metadata_.display_primaries_x[1] = primaries.rgbPrimaries[1][0];
+ hdr_metadata_.display_primaries_y[1] = primaries.rgbPrimaries[1][1];
+ hdr_metadata_.display_primaries_x[2] = primaries.rgbPrimaries[2][0];
+ hdr_metadata_.display_primaries_y[2] = primaries.rgbPrimaries[2][1];
+ hdr_metadata_.min_luminance = mastering_display.minDisplayLuminance;
+ hdr_metadata_.max_luminance = mastering_display.maxDisplayLuminance/10000;
+ hdr_metadata_.max_content_light_level = light_level.maxContentLightLevel;
+ hdr_metadata_.max_average_light_level = light_level.minPicAverageLightLevel;
+
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_HDR_METADATA, token_.conn_id, &hdr_metadata_);
+ DumpHDRMetaData(hdr_layer_info.operation);
+ } else if (hdr_layer_info.operation == HWHDRLayerInfo::kReset) {
+ memset(&hdr_metadata_, 0, sizeof(hdr_metadata_));
+ hdr_metadata_.hdr_supported = 1;
+ hdr_metadata_.hdr_state = HDR_ENABLE;
+ reset_hdr_flag = true;
+ gettimeofday(&hdr_reset_start, NULL);
+
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_HDR_METADATA, token_.conn_id, &hdr_metadata_);
+ DumpHDRMetaData(hdr_layer_info.operation);
+ } else if (hdr_layer_info.operation == HWHDRLayerInfo::kNoOp) {
+ // TODO(user): This case handles the state transition from HDR_ENABLED to HDR_DISABLED.
+ // As per HDMI spec requirement, we need to send zero metadata for atleast 2 sec after end of
+ // playback. This timer calculates the 2 sec window after playback stops to stop sending HDR
+ // metadata. This will be replaced with an idle timer implementation in the future.
+ if (reset_hdr_flag) {
+ gettimeofday(&hdr_reset_end, NULL);
+ float hdr_reset_time_start = ((hdr_reset_start.tv_sec*1000) + (hdr_reset_start.tv_usec/1000));
+ float hdr_reset_time_end = ((hdr_reset_end.tv_sec*1000) + (hdr_reset_end.tv_usec/1000));
+
+ if (((hdr_reset_time_end-hdr_reset_time_start)/1000) >= MIN_HDR_RESET_WAITTIME) {
+ memset(&hdr_metadata_, 0, sizeof(hdr_metadata_));
+ hdr_metadata_.hdr_supported = 1;
+ hdr_metadata_.hdr_state = HDR_DISABLE;
+ reset_hdr_flag = false;
+
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_HDR_METADATA, token_.conn_id,
+ &hdr_metadata_);
+ }
+ }
+ }
+
+ return error;
+}
+
+void HWTVDRM::DumpHDRMetaData(HWHDRLayerInfo::HDROperation operation) {
+ DLOGI("Operation = %d, HDR Metadata: MaxDisplayLuminance = %d MinDisplayLuminance = %d\n"
+ "MaxContentLightLevel = %d MaxAverageLightLevel = %d Red_x = %d Red_y = %d Green_x = %d\n"
+ "Green_y = %d Blue_x = %d Blue_y = %d WhitePoint_x = %d WhitePoint_y = %d EOTF = %d\n",
+ operation, hdr_metadata_.max_luminance, hdr_metadata_.min_luminance,
+ hdr_metadata_.max_content_light_level, hdr_metadata_.max_average_light_level,
+ hdr_metadata_.display_primaries_x[0], hdr_metadata_.display_primaries_y[0],
+ hdr_metadata_.display_primaries_x[1], hdr_metadata_.display_primaries_y[1],
+ hdr_metadata_.display_primaries_x[2], hdr_metadata_.display_primaries_y[2],
+ hdr_metadata_.white_point_x, hdr_metadata_.white_point_y, hdr_metadata_.eotf);
+}
+
+DisplayError HWTVDRM::PowerOn(const HWQosData &qos_data, int *release_fence) {
+ DTRACE_SCOPED();
+ if (!drm_atomic_intf_) {
+ DLOGE("DRM Atomic Interface is null!");
+ return kErrorUndefined;
+ }
+
+ if (first_cycle_) {
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_CRTC, token_.conn_id, token_.crtc_id);
+ drmModeModeInfo current_mode = connector_info_.modes[current_mode_index_].mode;
+ drm_atomic_intf_->Perform(DRMOps::CRTC_SET_MODE, token_.crtc_id, ¤t_mode);
+ }
+
+ return HWDeviceDRM::PowerOn(qos_data, release_fence);
+}
+
+DisplayError HWTVDRM::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) {
+ DisplayError error = kErrorNone;
+ int fd = -1;
+ char data[kMaxStringLength] = {'\0'};
+
+ snprintf(data, sizeof(data), "/sys/devices/virtual/hdcp/msm_hdcp/min_level_change");
+
+ fd = Sys::open_(data, O_WRONLY);
+ if (fd < 0) {
+ DLOGE("File '%s' could not be opened. errno = %d, desc = %s", data, errno, strerror(errno));
+ return kErrorHardware;
+ }
+
+ snprintf(data, sizeof(data), "%d", min_enc_level);
+
+ ssize_t err = Sys::pwrite_(fd, data, strlen(data), 0);
+ if (err <= 0) {
+ DLOGE("Write failed, Error = %s", strerror(errno));
+ error = kErrorHardware;
+ }
+
+ Sys::close_(fd);
+
+ return error;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/core/drm/hw_tv_drm.h b/sdm/libs/core/drm/hw_tv_drm.h
new file mode 100644
index 0000000..39132ca
--- /dev/null
+++ b/sdm/libs/core/drm/hw_tv_drm.h
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_TV_DRM_H__
+#define __HW_TV_DRM_H__
+
+#include <map>
+#include <vector>
+
+#include "hw_device_drm.h"
+
+namespace sdm {
+
+using std::vector;
+
+class HWTVDRM : public HWDeviceDRM {
+ public:
+ explicit HWTVDRM(int32_t display_id, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, HWInfoInterface *hw_info_intf);
+
+ protected:
+ virtual DisplayError SetDisplayAttributes(uint32_t index);
+ virtual DisplayError GetConfigIndex(char *mode, uint32_t *index);
+ virtual DisplayError PowerOff(bool teardown);
+ virtual DisplayError Doze(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError DozeSuspend(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError Standby();
+ virtual DisplayError Commit(HWLayers *hw_layers);
+ virtual void PopulateHWPanelInfo();
+ virtual DisplayError GetDefaultConfig(uint32_t *default_config);
+ virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level);
+ virtual DisplayError PowerOn(const HWQosData &qos_data, int *release_fence);
+
+ private:
+ DisplayError UpdateHDRMetaData(HWLayers *hw_layers);
+ void DumpHDRMetaData(HWHDRLayerInfo::HDROperation operation);
+
+ static const int kBitRGB = 20;
+ static const int kBitYUV = 21;
+ const float kDefaultMinLuminance = 0.02f;
+ const float kDefaultMaxLuminance = 500.0f;
+ const float kMinPeakLuminance = 300.0f;
+ const float kMaxPeakLuminance = 1000.0f;
+ drm_msm_ext_hdr_metadata hdr_metadata_ = {};
+};
+
+} // namespace sdm
+
+#endif // __HW_TV_DRM_H__
+
diff --git a/sdm/libs/core/drm/hw_virtual_drm.cpp b/sdm/libs/core/drm/hw_virtual_drm.cpp
new file mode 100644
index 0000000..b18e569
--- /dev/null
+++ b/sdm/libs/core/drm/hw_virtual_drm.cpp
@@ -0,0 +1,259 @@
+/*
+Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+*/
+
+#include <stdio.h>
+#include <ctype.h>
+#include <drm_logger.h>
+#include <utils/debug.h>
+#include <utils/utils.h>
+#include <algorithm>
+#include <vector>
+#include "hw_device_drm.h"
+#include "hw_virtual_drm.h"
+#include "hw_info_drm.h"
+
+#define __CLASS__ "HWVirtualDRM"
+
+using std::vector;
+
+using sde_drm::DRMDisplayType;
+using sde_drm::DRMConnectorInfo;
+using sde_drm::DRMRect;
+using sde_drm::DRMOps;
+using sde_drm::DRMPowerMode;
+using sde_drm::DRMSecureMode;
+
+namespace sdm {
+
+HWVirtualDRM::HWVirtualDRM(int32_t display_id, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, HWInfoInterface *hw_info_intf)
+ : HWDeviceDRM(buffer_sync_handler, buffer_allocator, hw_info_intf) {
+ HWDeviceDRM::device_name_ = "Virtual";
+ HWDeviceDRM::disp_type_ = DRMDisplayType::VIRTUAL;
+ HWDeviceDRM::display_id_ = display_id;
+}
+
+void HWVirtualDRM::ConfigureWbConnectorFbId(uint32_t fb_id) {
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_OUTPUT_FB_ID, token_.conn_id, fb_id);
+ return;
+}
+
+void HWVirtualDRM::ConfigureWbConnectorDestRect() {
+ DRMRect dst = {};
+ dst.left = 0;
+ dst.bottom = display_attributes_[current_mode_index_].y_pixels;
+ dst.top = 0;
+ dst.right = display_attributes_[current_mode_index_].x_pixels;
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_OUTPUT_RECT, token_.conn_id, dst);
+ return;
+}
+
+void HWVirtualDRM::ConfigureWbConnectorSecureMode(bool secure) {
+ DRMSecureMode secure_mode = secure ? DRMSecureMode::SECURE : DRMSecureMode::NON_SECURE;
+ drm_atomic_intf_->Perform(DRMOps::CONNECTOR_SET_FB_SECURE_MODE, token_.conn_id, secure_mode);
+}
+
+void HWVirtualDRM::InitializeConfigs() {
+ display_attributes_.resize(connector_info_.modes.size());
+ for (uint32_t i = 0; i < connector_info_.modes.size(); i++) {
+ PopulateDisplayAttributes(i);
+ }
+}
+
+DisplayError HWVirtualDRM::SetWbConfigs(const HWDisplayAttributes &display_attributes) {
+ drmModeModeInfo mode = {};
+ vector<drmModeModeInfo> modes;
+
+ mode.hdisplay = mode.hsync_start = mode.hsync_end = mode.htotal =
+ UINT16(display_attributes.x_pixels);
+ mode.vdisplay = mode.vsync_start = mode.vsync_end = mode.vtotal =
+ UINT16(display_attributes.y_pixels);
+ mode.vrefresh = UINT32(display_attributes.fps);
+ mode.clock = (mode.htotal * mode.vtotal * mode.vrefresh) / 1000;
+ snprintf(mode.name, DRM_DISPLAY_MODE_LEN, "%dx%d", mode.hdisplay, mode.vdisplay);
+ modes.push_back(mode);
+ for (auto &item : connector_info_.modes) {
+ modes.push_back(item.mode);
+ }
+
+ // Inform the updated mode list to the driver
+ struct sde_drm_wb_cfg wb_cfg = {};
+ wb_cfg.connector_id = token_.conn_id;
+ wb_cfg.flags = SDE_DRM_WB_CFG_FLAGS_CONNECTED;
+ wb_cfg.count_modes = UINT32(modes.size());
+ wb_cfg.modes = (uint64_t)modes.data();
+
+ int ret = -EINVAL;
+#ifdef DRM_IOCTL_SDE_WB_CONFIG
+ ret = drmIoctl(dev_fd_, DRM_IOCTL_SDE_WB_CONFIG, &wb_cfg);
+#endif
+ if (ret) {
+ DLOGE("Dump WBConfig: mode_count %d flags %x", wb_cfg.count_modes, wb_cfg.flags);
+ DumpConnectorModeInfo();
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWVirtualDRM::Commit(HWLayers *hw_layers) {
+ LayerBuffer *output_buffer = hw_layers->info.stack->output_buffer;
+ DisplayError err = kErrorNone;
+
+ registry_.Register(hw_layers);
+ registry_.MapOutputBufferToFbId(output_buffer);
+ uint32_t fb_id = registry_.GetOutputFbId(output_buffer->handle_id);
+
+ ConfigureWbConnectorFbId(fb_id);
+ ConfigureWbConnectorDestRect();
+ ConfigureWbConnectorSecureMode(output_buffer->flags.secure);
+
+ err = HWDeviceDRM::AtomicCommit(hw_layers);
+ if (err != kErrorNone) {
+ DLOGE("Atomic commit failed for crtc_id %d conn_id %d", token_.crtc_id, token_.conn_id);
+ }
+
+ return(err);
+}
+
+DisplayError HWVirtualDRM::Flush(HWLayers *hw_layers) {
+ DisplayError err = kErrorNone;
+ err = Commit(hw_layers);
+
+ if (err != kErrorNone) {
+ return err;
+ }
+
+ // Close the sync_handle
+ CloseFd(&hw_layers->info.sync_handle);
+ return kErrorNone;
+}
+
+DisplayError HWVirtualDRM::Validate(HWLayers *hw_layers) {
+ LayerBuffer *output_buffer = hw_layers->info.stack->output_buffer;
+
+ registry_.MapOutputBufferToFbId(output_buffer);
+ uint32_t fb_id = registry_.GetOutputFbId(output_buffer->handle_id);
+
+ ConfigureWbConnectorFbId(fb_id);
+ ConfigureWbConnectorDestRect();
+ ConfigureWbConnectorSecureMode(output_buffer->flags.secure);
+
+ return HWDeviceDRM::Validate(hw_layers);
+}
+
+DisplayError HWVirtualDRM::SetDisplayAttributes(const HWDisplayAttributes &display_attributes) {
+ if (display_attributes.x_pixels == 0 || display_attributes.y_pixels == 0) {
+ return kErrorParameters;
+ }
+
+ int mode_index = -1;
+ int ret = 0;
+ GetModeIndex(display_attributes, &mode_index);
+
+ if (mode_index < 0) {
+ DisplayError error = SetWbConfigs(display_attributes);
+ if (error != kErrorNone) {
+ return error;
+ }
+ }
+
+ // Reload connector info for updated info
+ ret = drm_mgr_intf_->GetConnectorInfo(token_.conn_id, &connector_info_);
+ if (ret) {
+ DLOGE("Failed getting info for connector id %u. Error: %d.", token_.conn_id, ret);
+ return kErrorHardware;
+ }
+ GetModeIndex(display_attributes, &mode_index);
+
+ if (mode_index < 0) {
+ DLOGE("Mode not found for resolution %dx%d fps %d", display_attributes.x_pixels,
+ display_attributes.y_pixels, UINT32(display_attributes.fps));
+ DumpConnectorModeInfo();
+ return kErrorNotSupported;
+ }
+
+ current_mode_index_ = UINT32(mode_index);
+ InitializeConfigs();
+ PopulateHWPanelInfo();
+ UpdateMixerAttributes();
+
+ DLOGI("New WB Resolution: %dx%d cur_mode_index %d", display_attributes.x_pixels,
+ display_attributes.y_pixels, current_mode_index_);
+
+ return kErrorNone;
+}
+
+DisplayError HWVirtualDRM::GetPPFeaturesVersion(PPFeatureVersion *vers) {
+ return kErrorNone;
+}
+
+void HWVirtualDRM::GetModeIndex(const HWDisplayAttributes &display_attributes, int *mode_index) {
+ *mode_index = -1;
+ for (uint32_t i = 0; i < connector_info_.modes.size(); i++) {
+ if (display_attributes.x_pixels == connector_info_.modes[i].mode.hdisplay &&
+ display_attributes.y_pixels == connector_info_.modes[i].mode.vdisplay &&
+ display_attributes.fps == connector_info_.modes[i].mode.vrefresh) {
+ *mode_index = INT32(i);
+ break;
+ }
+ }
+}
+
+DisplayError HWVirtualDRM::PowerOn(const HWQosData &qos_data, int *release_fence) {
+ DTRACE_SCOPED();
+ if (!drm_atomic_intf_) {
+ DLOGE("DRM Atomic Interface is null!");
+ return kErrorUndefined;
+ }
+
+ // Since fb id is not available until first draw cycle and driver expects fb id to be set on any
+ // commit(null or atomic commit). Need to defer power on for the first cycle.
+ if (first_cycle_) {
+ return kErrorNone;
+ }
+
+ DisplayError err = HWDeviceDRM::PowerOn(qos_data, release_fence);
+ if (err != kErrorNone) {
+ return err;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWVirtualDRM::GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data) {
+ *out_data_size = 0;
+ *out_port = token_.hw_port;
+
+ return kErrorNone;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/core/drm/hw_virtual_drm.h b/sdm/libs/core/drm/hw_virtual_drm.h
new file mode 100644
index 0000000..7912d88
--- /dev/null
+++ b/sdm/libs/core/drm/hw_virtual_drm.h
@@ -0,0 +1,78 @@
+/*
+Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+*/
+
+#ifndef __HW_VIRTUAL_DRM_H__
+#define __HW_VIRTUAL_DRM_H__
+
+#include "hw_device_drm.h"
+#include <drm/msm_drm.h>
+#include <drm/sde_drm.h>
+#include <vector>
+
+namespace sdm {
+
+class HWVirtualDRM : public HWDeviceDRM {
+ public:
+ HWVirtualDRM(int32_t display_id, BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, HWInfoInterface *hw_info_intf);
+ virtual ~HWVirtualDRM() {}
+ virtual DisplayError SetVSyncState(bool enable) { return kErrorNotSupported; }
+ virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetDisplayAttributes(const HWDisplayAttributes &display_attributes);
+
+ protected:
+ virtual DisplayError Validate(HWLayers *hw_layers);
+ virtual DisplayError Commit(HWLayers *hw_layers);
+ virtual DisplayError Flush(HWLayers *hw_layers);
+ virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
+ virtual DisplayError PowerOn(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError SetScaleLutConfig(HWScaleLutInfo *lut_info) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError UnsetScaleLutConfig() {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data);
+
+ private:
+ void ConfigureWbConnectorFbId(uint32_t fb_id);
+ void ConfigureWbConnectorDestRect();
+ void ConfigureWbConnectorSecureMode(bool secure);
+ void InitializeConfigs();
+ DisplayError SetWbConfigs(const HWDisplayAttributes &display_attributes);
+ void GetModeIndex(const HWDisplayAttributes &display_attributes, int *mode_index);
+};
+
+} // namespace sdm
+
+#endif // __HW_VIRTUAL_DRM_H__
+
diff --git a/sdm/libs/core/fb/hw_color_manager.cpp b/sdm/libs/core/fb/hw_color_manager.cpp
new file mode 100644
index 0000000..a6c78b0
--- /dev/null
+++ b/sdm/libs/core/fb/hw_color_manager.cpp
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <ctype.h>
+#include <math.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/resource.h>
+#include <sys/prctl.h>
+#include <linux/msm_mdp.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include "hw_color_manager.h"
+
+#define __CLASS__ "HWColorManager"
+
+namespace sdm {
+
+DisplayError (*HWColorManager::SetFeature[])(const PPFeatureInfo &, msmfb_mdp_pp *) = {
+ [kGlobalColorFeaturePcc] = &HWColorManager::SetPCC,
+ [kGlobalColorFeatureIgc] = &HWColorManager::SetIGC,
+ [kGlobalColorFeaturePgc] = &HWColorManager::SetPGC,
+ [kMixerColorFeatureGc] = &HWColorManager::SetMixerGC,
+ [kGlobalColorFeaturePaV2] = &HWColorManager::SetPAV2,
+ [kGlobalColorFeatureDither] = &HWColorManager::SetDither,
+ [kGlobalColorFeatureGamut] = &HWColorManager::SetGamut,
+ [kGlobalColorFeaturePADither] = &HWColorManager::SetPADither,
+};
+
+DisplayError HWColorManager::SetPCC(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params) {
+ DisplayError ret = kErrorNone;
+
+ kernel_params->op = mdp_op_pcc_cfg;
+ kernel_params->data.pcc_cfg_data.version = feature.feature_version_;
+ kernel_params->data.pcc_cfg_data.block = MDP_LOGICAL_BLOCK_DISP_0 + feature.disp_id_;
+ kernel_params->data.pcc_cfg_data.ops = feature.enable_flags_;
+ kernel_params->data.pcc_cfg_data.cfg_payload = feature.GetConfigData();
+ DLOGV_IF(kTagQDCM, "kernel params version = %d, block = %d, flags = %d",
+ kernel_params->data.pcc_cfg_data.version, kernel_params->data.pcc_cfg_data.block,
+ kernel_params->data.pcc_cfg_data.ops);
+
+ return ret;
+}
+
+DisplayError HWColorManager::SetIGC(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params) {
+ DisplayError ret = kErrorNone;
+
+ kernel_params->op = mdp_op_lut_cfg;
+ kernel_params->data.lut_cfg_data.lut_type = mdp_lut_igc;
+ kernel_params->data.lut_cfg_data.data.igc_lut_data.block =
+ MDP_LOGICAL_BLOCK_DISP_0 + feature.disp_id_;
+ kernel_params->data.lut_cfg_data.data.igc_lut_data.version = feature.feature_version_;
+ kernel_params->data.lut_cfg_data.data.igc_lut_data.ops = feature.enable_flags_;
+ kernel_params->data.lut_cfg_data.data.igc_lut_data.cfg_payload = feature.GetConfigData();
+
+ return ret;
+}
+
+DisplayError HWColorManager::SetPGC(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params) {
+ DisplayError ret = kErrorNone;
+
+ kernel_params->op = mdp_op_lut_cfg;
+ kernel_params->data.lut_cfg_data.lut_type = mdp_lut_pgc;
+ kernel_params->data.lut_cfg_data.data.pgc_lut_data.version = feature.feature_version_;
+ kernel_params->data.lut_cfg_data.data.pgc_lut_data.block =
+ MDP_LOGICAL_BLOCK_DISP_0 + feature.disp_id_;
+ kernel_params->data.lut_cfg_data.data.pgc_lut_data.flags = feature.enable_flags_;
+ kernel_params->data.lut_cfg_data.data.pgc_lut_data.cfg_payload = feature.GetConfigData();
+
+ return ret;
+}
+
+DisplayError HWColorManager::SetMixerGC(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params) {
+ DisplayError ret = kErrorNone;
+
+ kernel_params->op = mdp_op_lut_cfg;
+ kernel_params->data.lut_cfg_data.lut_type = mdp_lut_pgc;
+ kernel_params->data.lut_cfg_data.data.pgc_lut_data.version = feature.feature_version_;
+ kernel_params->data.lut_cfg_data.data.pgc_lut_data.block =
+ (MDP_LOGICAL_BLOCK_DISP_0 + feature.disp_id_) | MDSS_PP_LM_CFG;
+ kernel_params->data.lut_cfg_data.data.pgc_lut_data.flags = feature.enable_flags_;
+ kernel_params->data.lut_cfg_data.data.pgc_lut_data.cfg_payload = feature.GetConfigData();
+ return ret;
+}
+
+DisplayError HWColorManager::SetPAV2(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params) {
+ DisplayError ret = kErrorNone;
+
+ kernel_params->op = mdp_op_pa_v2_cfg;
+ kernel_params->data.pa_v2_cfg_data.version = feature.feature_version_;
+ kernel_params->data.pa_v2_cfg_data.block = MDP_LOGICAL_BLOCK_DISP_0 + feature.disp_id_;
+ kernel_params->data.pa_v2_cfg_data.flags = feature.enable_flags_;
+ kernel_params->data.pa_v2_cfg_data.cfg_payload = feature.GetConfigData();
+ DLOGV_IF(kTagQDCM, "kernel params version = %d, block = %d, flags = %d",
+ kernel_params->data.pa_v2_cfg_data.version, kernel_params->data.pa_v2_cfg_data.block,
+ kernel_params->data.pa_v2_cfg_data.flags);
+
+ return ret;
+}
+
+DisplayError HWColorManager::SetDither(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params) {
+ DisplayError ret = kErrorNone;
+
+ kernel_params->op = mdp_op_dither_cfg;
+ kernel_params->data.dither_cfg_data.version = feature.feature_version_;
+ kernel_params->data.dither_cfg_data.block = MDP_LOGICAL_BLOCK_DISP_0 + feature.disp_id_;
+ kernel_params->data.dither_cfg_data.flags = feature.enable_flags_;
+ kernel_params->data.dither_cfg_data.cfg_payload = feature.GetConfigData();
+
+ return ret;
+}
+
+DisplayError HWColorManager::SetGamut(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params) {
+ DisplayError ret = kErrorNone;
+
+ kernel_params->op = mdp_op_gamut_cfg;
+ kernel_params->data.gamut_cfg_data.version = feature.feature_version_;
+ kernel_params->data.gamut_cfg_data.block = MDP_LOGICAL_BLOCK_DISP_0 + feature.disp_id_;
+ kernel_params->data.gamut_cfg_data.flags = feature.enable_flags_;
+ kernel_params->data.gamut_cfg_data.cfg_payload = feature.GetConfigData();
+
+ return ret;
+}
+
+DisplayError HWColorManager::SetPADither(const PPFeatureInfo &feature,
+ msmfb_mdp_pp *kernel_params) {
+ DisplayError ret = kErrorNone;
+#ifdef PA_DITHER
+ kernel_params->op = mdp_op_pa_dither_cfg;
+ kernel_params->data.dither_cfg_data.version = feature.feature_version_;
+ kernel_params->data.dither_cfg_data.block = MDP_LOGICAL_BLOCK_DISP_0 + feature.disp_id_;
+ kernel_params->data.dither_cfg_data.flags = feature.enable_flags_;
+ kernel_params->data.dither_cfg_data.cfg_payload = feature.GetConfigData();
+#endif
+ return ret;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/fb/hw_color_manager.h b/sdm/libs/core/fb/hw_color_manager.h
new file mode 100644
index 0000000..c9eea5b
--- /dev/null
+++ b/sdm/libs/core/fb/hw_color_manager.h
@@ -0,0 +1,60 @@
+/* Copyright (c) 2015-2016, The Linux Foundataion. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*
+*/
+
+#ifndef __HW_COLOR_MANAGER_H__
+#define __HW_COLOR_MANAGER_H__
+
+#include <linux/msm_mdp_ext.h>
+#include <linux/msm_mdp.h>
+
+#include <private/color_params.h>
+
+namespace sdm {
+
+class HWColorManager {
+ public:
+ static DisplayError SetPCC(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params);
+ static DisplayError SetIGC(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params);
+ static DisplayError SetPGC(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params);
+ static DisplayError SetMixerGC(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params);
+ static DisplayError SetPAV2(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params);
+ static DisplayError SetDither(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params);
+ static DisplayError SetGamut(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params);
+ static DisplayError SetPADither(const PPFeatureInfo &feature, msmfb_mdp_pp *kernel_params);
+
+ static DisplayError (*SetFeature[kMaxNumPPFeatures])(const PPFeatureInfo &feature,
+ msmfb_mdp_pp *kernel_params);
+
+ protected:
+ HWColorManager() {}
+};
+
+} // namespace sdm
+
+#endif // __HW_COLOR_MANAGER_H__
diff --git a/sdm/libs/core/fb/hw_device.cpp b/sdm/libs/core/fb/hw_device.cpp
new file mode 100644
index 0000000..fdcce3d
--- /dev/null
+++ b/sdm/libs/core/fb/hw_device.cpp
@@ -0,0 +1,1418 @@
+/*
+* Copyright (c) 2014 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#define __STDC_FORMAT_MACROS
+
+#include <stdio.h>
+#include <ctype.h>
+#include <math.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <inttypes.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <linux/fb.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/sys.h>
+#include <vector>
+#include <algorithm>
+#include <string>
+#include <sstream>
+
+#include "hw_device.h"
+#include "hw_primary.h"
+#include "hw_hdmi.h"
+#include "hw_virtual.h"
+#include "hw_info_interface.h"
+
+#define __CLASS__ "HWDevice"
+
+using std::string;
+using std::to_string;
+using std::fstream;
+
+namespace sdm {
+
+#ifndef MDP_CSC_ITU_R_2020
+#define MDP_CSC_ITU_R_2020 (MDP_CSC_ITU_R_709 + 1)
+#endif
+#ifndef MDP_CSC_ITU_R_2020_FR
+#define MDP_CSC_ITU_R_2020_FR (MDP_CSC_ITU_R_2020 + 1)
+#endif
+
+HWDevice::HWDevice(BufferSyncHandler *buffer_sync_handler)
+ : fb_node_index_(-1), fb_path_("/sys/devices/virtual/graphics/fb"),
+ buffer_sync_handler_(buffer_sync_handler), synchronous_commit_(false) {
+}
+
+DisplayError HWDevice::Init() {
+ // Read the fb node index
+ fb_node_index_ = GetFBNodeIndex(device_type_);
+ if (fb_node_index_ == -1) {
+ DLOGE("device type = %d should be present", device_type_);
+ return kErrorHardware;
+ }
+
+ const char *dev_name = NULL;
+ vector<string> dev_paths = {"/dev/graphics/fb", "/dev/fb"};
+ for (size_t i = 0; i < dev_paths.size(); i++) {
+ dev_paths[i] += to_string(fb_node_index_);
+ if (Sys::access_(dev_paths[i].c_str(), F_OK) >= 0) {
+ dev_name = dev_paths[i].c_str();
+ DLOGI("access(%s) successful", dev_name);
+ break;
+ }
+
+ DLOGI("access(%s), errno = %d, error = %s", dev_paths[i].c_str(), errno, strerror(errno));
+ }
+
+ if (!dev_name) {
+ DLOGE("access() failed for all possible paths");
+ return kErrorHardware;
+ }
+
+ // Populate Panel Info (Used for Partial Update)
+ PopulateHWPanelInfo();
+ // Populate HW Capabilities
+ hw_resource_ = HWResourceInfo();
+ hw_info_intf_->GetHWResourceInfo(&hw_resource_);
+
+ device_fd_ = Sys::open_(dev_name, O_RDWR);
+ if (device_fd_ < 0) {
+ DLOGE("open %s failed errno = %d, error = %s", dev_name, errno, strerror(errno));
+ return kErrorResources;
+ }
+
+ return HWScale::Create(&hw_scale_, hw_resource_.has_qseed3);
+}
+
+DisplayError HWDevice::Deinit() {
+ HWScale::Destroy(hw_scale_);
+
+ if (device_fd_ >= 0) {
+ Sys::close_(device_fd_);
+ device_fd_ = -1;
+ }
+
+ if (stored_retire_fence >= 0) {
+ Sys::close_(stored_retire_fence);
+ stored_retire_fence = -1;
+ }
+ return kErrorNone;
+}
+
+DisplayError HWDevice::GetDisplayId(int32_t *display_id) {
+ *display_id = fb_node_index_;
+ return kErrorNone;
+}
+
+DisplayError HWDevice::GetActiveConfig(uint32_t *active_config) {
+ *active_config = 0;
+ return kErrorNone;
+}
+
+DisplayError HWDevice::GetNumDisplayAttributes(uint32_t *count) {
+ *count = 1;
+ return kErrorNone;
+}
+
+DisplayError HWDevice::GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes) {
+ return kErrorNone;
+}
+
+DisplayError HWDevice::GetHWPanelInfo(HWPanelInfo *panel_info) {
+ *panel_info = hw_panel_info_;
+ return kErrorNone;
+}
+
+DisplayError HWDevice::SetDisplayAttributes(uint32_t index) {
+ return kErrorNone;
+}
+
+DisplayError HWDevice::SetDisplayAttributes(const HWDisplayAttributes &display_attributes) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::GetConfigIndex(char *mode, uint32_t *index) {
+ return kErrorNone;
+}
+
+DisplayError HWDevice::PowerOn(const HWQosData &qos_data, int *release_fence) {
+ DTRACE_SCOPED();
+
+ if (Sys::ioctl_(device_fd_, FBIOBLANK, FB_BLANK_UNBLANK) < 0) {
+ if (errno == ESHUTDOWN) {
+ DLOGI_IF(kTagDriverConfig, "Driver is processing shutdown sequence");
+ return kErrorShutDown;
+ }
+ IOCTL_LOGE(FB_BLANK_UNBLANK, device_type_);
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWDevice::PowerOff(bool teardown) {
+ return kErrorNone;
+}
+
+DisplayError HWDevice::Doze(const HWQosData &qos_data, int *release_fence) {
+ return kErrorNone;
+}
+
+DisplayError HWDevice::DozeSuspend(const HWQosData &qos_data, int *release_fence) {
+ return kErrorNone;
+}
+
+DisplayError HWDevice::Standby() {
+ return kErrorNone;
+}
+
+DisplayError HWDevice::Validate(HWLayers *hw_layers) {
+ DTRACE_SCOPED();
+
+ DisplayError error = kErrorNone;
+
+ HWLayersInfo &hw_layer_info = hw_layers->info;
+ uint32_t hw_layer_count = UINT32(hw_layer_info.hw_layers.size());
+
+ DLOGD_IF(kTagDriverConfig, "************************** %s Validate Input ***********************",
+ device_name_);
+ DLOGD_IF(kTagDriverConfig, "SDE layer count is %d", hw_layer_count);
+
+ mdp_layer_commit_v1 &mdp_commit = mdp_disp_commit_.commit_v1;
+ uint32_t &mdp_layer_count = mdp_commit.input_layer_cnt;
+
+ DLOGI_IF(kTagDriverConfig, "left_roi: x = %d, y = %d, w = %d, h = %d", mdp_commit.left_roi.x,
+ mdp_commit.left_roi.y, mdp_commit.left_roi.w, mdp_commit.left_roi.h);
+ DLOGI_IF(kTagDriverConfig, "right_roi: x = %d, y = %d, w = %d, h = %d", mdp_commit.right_roi.x,
+ mdp_commit.right_roi.y, mdp_commit.right_roi.w, mdp_commit.right_roi.h);
+
+ for (uint32_t i = 0; i < hw_layer_count; i++) {
+ const Layer &layer = hw_layer_info.hw_layers.at(i);
+ LayerBuffer input_buffer = layer.input_buffer;
+ HWPipeInfo *left_pipe = &hw_layers->config[i].left_pipe;
+ HWPipeInfo *right_pipe = &hw_layers->config[i].right_pipe;
+ HWRotatorSession *hw_rotator_session = &hw_layers->config[i].hw_rotator_session;
+ bool is_rotator_used = (hw_rotator_session->hw_block_count != 0);
+
+ for (uint32_t count = 0; count < 2; count++) {
+ HWPipeInfo *pipe_info = (count == 0) ? left_pipe : right_pipe;
+ HWRotateInfo *hw_rotate_info = &hw_rotator_session->hw_rotate_info[count];
+
+ if (hw_rotate_info->valid) {
+ input_buffer = hw_rotator_session->output_buffer;
+ }
+
+ if (pipe_info->valid) {
+ mdp_input_layer &mdp_layer = mdp_in_layers_[mdp_layer_count];
+ mdp_layer_buffer &mdp_buffer = mdp_layer.buffer;
+
+ mdp_buffer.width = input_buffer.width;
+ mdp_buffer.height = input_buffer.height;
+ mdp_buffer.comp_ratio.denom = 1000;
+ mdp_buffer.comp_ratio.numer = UINT32(hw_layers->config[i].compression * 1000);
+
+ if (layer.flags.solid_fill) {
+ mdp_buffer.format = MDP_ARGB_8888;
+ } else {
+ error = SetFormat(input_buffer.format, &mdp_buffer.format);
+ if (error != kErrorNone) {
+ return error;
+ }
+ }
+ mdp_layer.alpha = layer.plane_alpha;
+ mdp_layer.z_order = UINT16(pipe_info->z_order);
+ mdp_layer.transp_mask = 0xffffffff;
+ SetBlending(layer.blending, &mdp_layer.blend_op);
+ mdp_layer.pipe_ndx = pipe_info->pipe_id;
+ mdp_layer.horz_deci = pipe_info->horizontal_decimation;
+ mdp_layer.vert_deci = pipe_info->vertical_decimation;
+#ifdef MDP_COMMIT_RECT_NUM
+ mdp_layer.rect_num = pipe_info->rect;
+#endif
+ SetRect(pipe_info->src_roi, &mdp_layer.src_rect);
+ SetRect(pipe_info->dst_roi, &mdp_layer.dst_rect);
+ SetMDPFlags(&layer, is_rotator_used, hw_layer_info.async_cursor_updates, &mdp_layer.flags);
+ SetCSC(layer.input_buffer.color_metadata, &mdp_layer.color_space);
+ if (pipe_info->flags & kIGC) {
+ SetIGC(&layer.input_buffer, mdp_layer_count);
+ }
+ if (pipe_info->flags & kMultiRect) {
+ mdp_layer.flags |= MDP_LAYER_MULTIRECT_ENABLE;
+ if (pipe_info->flags & kMultiRectParallelMode) {
+ mdp_layer.flags |= MDP_LAYER_MULTIRECT_PARALLEL_MODE;
+ }
+ }
+ mdp_layer.bg_color = layer.solid_fill_color;
+
+ // HWScaleData to MDP driver
+ hw_scale_->SetHWScaleData(pipe_info->scale_data, mdp_layer_count, &mdp_commit,
+ pipe_info->sub_block_type);
+ mdp_layer.scale = hw_scale_->GetScaleDataRef(mdp_layer_count, pipe_info->sub_block_type);
+
+ mdp_layer_count++;
+
+ DLOGD_IF(kTagDriverConfig, "******************* Layer[%d] %s pipe Input ******************",
+ i, count ? "Right" : "Left");
+ DLOGD_IF(kTagDriverConfig, "in_w %d, in_h %d, in_f %d", mdp_buffer.width, mdp_buffer.height,
+ mdp_buffer.format);
+ DLOGD_IF(kTagDriverConfig, "plane_alpha %d, zorder %d, blending %d, horz_deci %d, "
+ "vert_deci %d, pipe_id = 0x%x, mdp_flags 0x%x", mdp_layer.alpha, mdp_layer.z_order,
+ mdp_layer.blend_op, mdp_layer.horz_deci, mdp_layer.vert_deci, mdp_layer.pipe_ndx,
+ mdp_layer.flags);
+ DLOGV_IF(kTagDriverConfig, "src_rect [%d, %d, %d, %d]", mdp_layer.src_rect.x,
+ mdp_layer.src_rect.y, mdp_layer.src_rect.w, mdp_layer.src_rect.h);
+ DLOGV_IF(kTagDriverConfig, "dst_rect [%d, %d, %d, %d]", mdp_layer.dst_rect.x,
+ mdp_layer.dst_rect.y, mdp_layer.dst_rect.w, mdp_layer.dst_rect.h);
+ hw_scale_->DumpScaleData(mdp_layer.scale);
+ DLOGD_IF(kTagDriverConfig, "*************************************************************");
+ }
+ }
+ }
+
+ // TODO(user): This block should move to the derived class
+ if (device_type_ == kDeviceVirtual) {
+ LayerBuffer *output_buffer = hw_layers->info.stack->output_buffer;
+ mdp_out_layer_.writeback_ndx = hw_resource_.writeback_index;
+ mdp_out_layer_.buffer.width = output_buffer->width;
+ mdp_out_layer_.buffer.height = output_buffer->height;
+ if (output_buffer->flags.secure) {
+ mdp_out_layer_.flags |= MDP_LAYER_SECURE_SESSION;
+ }
+ mdp_out_layer_.buffer.comp_ratio.denom = 1000;
+ mdp_out_layer_.buffer.comp_ratio.numer = UINT32(hw_layers->output_compression * 1000);
+#ifdef OUT_LAYER_COLOR_SPACE
+ SetCSC(output_buffer->color_metadata, &mdp_out_layer_.color_space);
+#endif
+ SetFormat(output_buffer->format, &mdp_out_layer_.buffer.format);
+
+ DLOGI_IF(kTagDriverConfig, "********************* Output buffer Info ************************");
+ DLOGI_IF(kTagDriverConfig, "out_w %d, out_h %d, out_f %d, wb_id %d",
+ mdp_out_layer_.buffer.width, mdp_out_layer_.buffer.height,
+ mdp_out_layer_.buffer.format, mdp_out_layer_.writeback_ndx);
+ DLOGI_IF(kTagDriverConfig, "*****************************************************************");
+ }
+
+ uint32_t index = 0;
+ for (uint32_t i = 0; i < hw_resource_.hw_dest_scalar_info.count; i++) {
+ DestScaleInfoMap::iterator it = hw_layer_info.dest_scale_info_map.find(i);
+
+ if (it == hw_layer_info.dest_scale_info_map.end()) {
+ continue;
+ }
+
+ HWDestScaleInfo *dest_scale_info = it->second;
+
+ mdp_destination_scaler_data *dest_scalar_data = &mdp_dest_scalar_data_[index];
+ hw_scale_->SetHWScaleData(dest_scale_info->scale_data, index, &mdp_commit,
+ kHWDestinationScalar);
+
+ if (dest_scale_info->scale_update) {
+ dest_scalar_data->flags |= MDP_DESTSCALER_SCALE_UPDATE;
+ }
+
+ dest_scalar_data->dest_scaler_ndx = i;
+ dest_scalar_data->lm_width = dest_scale_info->mixer_width;
+ dest_scalar_data->lm_height = dest_scale_info->mixer_height;
+#ifdef MDP_DESTSCALER_ROI_ENABLE
+ SetRect(dest_scale_info->panel_roi, &dest_scalar_data->panel_roi);
+ dest_scalar_data->flags |= MDP_DESTSCALER_ROI_ENABLE;
+#endif
+ dest_scalar_data->scale = reinterpret_cast <uint64_t>
+ (hw_scale_->GetScaleDataRef(index, kHWDestinationScalar));
+
+ index++;
+
+ DLOGD_IF(kTagDriverConfig, "************************ DestScalar[%d] **************************",
+ dest_scalar_data->dest_scaler_ndx);
+ DLOGD_IF(kTagDriverConfig, "Mixer WxH %dx%d flags %x", dest_scalar_data->lm_width,
+ dest_scalar_data->lm_height, dest_scalar_data->flags);
+#ifdef MDP_DESTSCALER_ROI_ENABLE
+ DLOGD_IF(kTagDriverConfig, "Panel ROI [%d, %d, %d, %d]", dest_scalar_data->panel_roi.x,
+ dest_scalar_data->panel_roi.y, dest_scalar_data->panel_roi.w,
+ dest_scalar_data->panel_roi.h);
+#endif
+ DLOGD_IF(kTagDriverConfig, "*****************************************************************");
+ }
+ mdp_commit.dest_scaler_cnt = UINT32(hw_layer_info.dest_scale_info_map.size());
+
+ mdp_commit.flags |= MDP_VALIDATE_LAYER;
+#ifdef MDP_COMMIT_RECT_NUM
+ mdp_commit.flags |= MDP_COMMIT_RECT_NUM;
+#endif
+ if (Sys::ioctl_(device_fd_, INT(MSMFB_ATOMIC_COMMIT), &mdp_disp_commit_) < 0) {
+ if (errno == ESHUTDOWN) {
+ DLOGI_IF(kTagDriverConfig, "Driver is processing shutdown sequence");
+ return kErrorShutDown;
+ }
+ IOCTL_LOGE(MSMFB_ATOMIC_COMMIT, device_type_);
+ DumpLayerCommit(mdp_disp_commit_);
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+void HWDevice::DumpLayerCommit(const mdp_layer_commit &layer_commit) {
+ const mdp_layer_commit_v1 &mdp_commit = layer_commit.commit_v1;
+ const mdp_input_layer *mdp_layers = mdp_commit.input_layers;
+ const mdp_rect &l_roi = mdp_commit.left_roi;
+ const mdp_rect &r_roi = mdp_commit.right_roi;
+
+ DLOGI("mdp_commit: flags = %x, release fence = %x", mdp_commit.flags, mdp_commit.release_fence);
+ DLOGI("left_roi: x = %d, y = %d, w = %d, h = %d", l_roi.x, l_roi.y, l_roi.w, l_roi.h);
+ DLOGI("right_roi: x = %d, y = %d, w = %d, h = %d", r_roi.x, r_roi.y, r_roi.w, r_roi.h);
+ for (uint32_t i = 0; i < mdp_commit.dest_scaler_cnt; i++) {
+ mdp_destination_scaler_data *dest_scalar_data = &mdp_dest_scalar_data_[i];
+ mdp_scale_data_v2 *mdp_scale = reinterpret_cast<mdp_scale_data_v2 *>(dest_scalar_data->scale);
+
+ DLOGI("Dest scalar index %d Mixer WxH %dx%d", dest_scalar_data->dest_scaler_ndx,
+ dest_scalar_data->lm_width, dest_scalar_data->lm_height);
+#ifdef MDP_DESTSCALER_ROI_ENABLE
+ DLOGI("Panel ROI [%d, %d, %d, %d]", dest_scalar_data->panel_roi.x,
+ dest_scalar_data->panel_roi.y, dest_scalar_data->panel_roi.w,
+ dest_scalar_data->panel_roi.h);
+#endif
+ DLOGI("Dest scalar Dst WxH %dx%d", mdp_scale->dst_width, mdp_scale->dst_height);
+ }
+ for (uint32_t i = 0; i < mdp_commit.input_layer_cnt; i++) {
+ const mdp_input_layer &layer = mdp_layers[i];
+ const mdp_rect &src_rect = layer.src_rect;
+ const mdp_rect &dst_rect = layer.dst_rect;
+ DLOGI("layer = %d, pipe_ndx = %x, z = %d, flags = %x",
+ i, layer.pipe_ndx, layer.z_order, layer.flags);
+ DLOGI("src_width = %d, src_height = %d, src_format = %d",
+ layer.buffer.width, layer.buffer.height, layer.buffer.format);
+ DLOGI("src_rect: x = %d, y = %d, w = %d, h = %d",
+ src_rect.x, src_rect.y, src_rect.w, src_rect.h);
+ DLOGI("dst_rect: x = %d, y = %d, w = %d, h = %d",
+ dst_rect.x, dst_rect.y, dst_rect.w, dst_rect.h);
+ }
+}
+
+DisplayError HWDevice::Commit(HWLayers *hw_layers) {
+ DTRACE_SCOPED();
+
+ HWLayersInfo &hw_layer_info = hw_layers->info;
+ uint32_t hw_layer_count = UINT32(hw_layer_info.hw_layers.size());
+
+ DLOGD_IF(kTagDriverConfig, "*************************** %s Commit Input ************************",
+ device_name_);
+ DLOGD_IF(kTagDriverConfig, "SDE layer count is %d", hw_layer_count);
+
+ mdp_layer_commit_v1 &mdp_commit = mdp_disp_commit_.commit_v1;
+ uint32_t mdp_layer_index = 0;
+
+ for (uint32_t i = 0; i < hw_layer_count; i++) {
+ const Layer &layer = hw_layer_info.hw_layers.at(i);
+ LayerBuffer *input_buffer = const_cast<LayerBuffer *>(&layer.input_buffer);
+ HWPipeInfo *left_pipe = &hw_layers->config[i].left_pipe;
+ HWPipeInfo *right_pipe = &hw_layers->config[i].right_pipe;
+ HWRotatorSession *hw_rotator_session = &hw_layers->config[i].hw_rotator_session;
+
+ for (uint32_t count = 0; count < 2; count++) {
+ HWPipeInfo *pipe_info = (count == 0) ? left_pipe : right_pipe;
+ HWRotateInfo *hw_rotate_info = &hw_rotator_session->hw_rotate_info[count];
+
+ if (hw_rotate_info->valid) {
+ input_buffer = &hw_rotator_session->output_buffer;
+ }
+
+ if (pipe_info->valid) {
+ mdp_layer_buffer &mdp_buffer = mdp_in_layers_[mdp_layer_index].buffer;
+ mdp_input_layer &mdp_layer = mdp_in_layers_[mdp_layer_index];
+ if (input_buffer->planes[0].fd >= 0) {
+ mdp_buffer.plane_count = 1;
+ mdp_buffer.planes[0].fd = input_buffer->planes[0].fd;
+ mdp_buffer.planes[0].offset = input_buffer->planes[0].offset;
+ SetStride(device_type_, input_buffer->format, input_buffer->planes[0].stride,
+ &mdp_buffer.planes[0].stride);
+ } else {
+ mdp_buffer.plane_count = 0;
+ }
+
+ mdp_buffer.fence = input_buffer->acquire_fence_fd;
+ mdp_layer_index++;
+
+ DLOGD_IF(kTagDriverConfig, "****************** Layer[%d] %s pipe Input *******************",
+ i, count ? "Right" : "Left");
+ DLOGD_IF(kTagDriverConfig, "in_w %d, in_h %d, in_f %d, horz_deci %d, vert_deci %d",
+ mdp_buffer.width, mdp_buffer.height, mdp_buffer.format, mdp_layer.horz_deci,
+ mdp_layer.vert_deci);
+ DLOGV_IF(kTagDriverConfig, "in_buf_fd %d, in_buf_offset %d, in_buf_stride %d, " \
+ "in_plane_count %d, in_fence %d, layer count %d", mdp_buffer.planes[0].fd,
+ mdp_buffer.planes[0].offset, mdp_buffer.planes[0].stride, mdp_buffer.plane_count,
+ mdp_buffer.fence, mdp_commit.input_layer_cnt);
+ DLOGD_IF(kTagDriverConfig, "*************************************************************");
+ }
+ }
+ }
+
+ // TODO(user): Move to derived class
+ if (device_type_ == kDeviceVirtual) {
+ LayerBuffer *output_buffer = hw_layers->info.stack->output_buffer;
+
+ if (output_buffer->planes[0].fd >= 0) {
+ mdp_out_layer_.buffer.planes[0].fd = output_buffer->planes[0].fd;
+ mdp_out_layer_.buffer.planes[0].offset = output_buffer->planes[0].offset;
+ SetStride(device_type_, output_buffer->format, output_buffer->planes[0].stride,
+ &mdp_out_layer_.buffer.planes[0].stride);
+ mdp_out_layer_.buffer.plane_count = 1;
+ } else {
+ DLOGE("Invalid output buffer fd");
+ return kErrorParameters;
+ }
+
+ mdp_out_layer_.buffer.fence = output_buffer->acquire_fence_fd;
+
+ DLOGI_IF(kTagDriverConfig, "********************** Output buffer Info ***********************");
+ DLOGI_IF(kTagDriverConfig, "out_fd %d, out_offset %d, out_stride %d, acquire_fence %d",
+ mdp_out_layer_.buffer.planes[0].fd, mdp_out_layer_.buffer.planes[0].offset,
+ mdp_out_layer_.buffer.planes[0].stride, mdp_out_layer_.buffer.fence);
+ DLOGI_IF(kTagDriverConfig, "*****************************************************************");
+ }
+
+ mdp_commit.release_fence = -1;
+ mdp_commit.flags &= UINT32(~MDP_VALIDATE_LAYER);
+ if (synchronous_commit_) {
+ mdp_commit.flags |= MDP_COMMIT_WAIT_FOR_FINISH;
+ }
+ if (Sys::ioctl_(device_fd_, INT(MSMFB_ATOMIC_COMMIT), &mdp_disp_commit_) < 0) {
+ if (errno == ESHUTDOWN) {
+ DLOGI_IF(kTagDriverConfig, "Driver is processing shutdown sequence");
+ return kErrorShutDown;
+ }
+ IOCTL_LOGE(MSMFB_ATOMIC_COMMIT, device_type_);
+ DumpLayerCommit(mdp_disp_commit_);
+ synchronous_commit_ = false;
+ return kErrorHardware;
+ }
+
+ LayerStack *stack = hw_layer_info.stack;
+ stack->retire_fence_fd = mdp_commit.retire_fence;
+#ifdef VIDEO_MODE_DEFER_RETIRE_FENCE
+ if (hw_panel_info_.mode == kModeVideo) {
+ stack->retire_fence_fd = stored_retire_fence;
+ stored_retire_fence = mdp_commit.retire_fence;
+ }
+#endif
+ // MDP returns only one release fence for the entire layer stack. Duplicate this fence into all
+ // layers being composed by MDP.
+
+ for (uint32_t i = 0; i < hw_layer_count; i++) {
+ const Layer &layer = hw_layer_info.hw_layers.at(i);
+ LayerBuffer *input_buffer = const_cast<LayerBuffer *>(&layer.input_buffer);
+ HWRotatorSession *hw_rotator_session = &hw_layers->config[i].hw_rotator_session;
+
+ if (hw_rotator_session->hw_block_count) {
+ input_buffer = &hw_rotator_session->output_buffer;
+ input_buffer->release_fence_fd = Sys::dup_(mdp_commit.release_fence);
+ continue;
+ }
+
+ input_buffer->release_fence_fd = Sys::dup_(mdp_commit.release_fence);
+ }
+
+ hw_layer_info.sync_handle = Sys::dup_(mdp_commit.release_fence);
+
+ DLOGI_IF(kTagDriverConfig, "*************************** %s Commit Input ************************",
+ device_name_);
+ DLOGI_IF(kTagDriverConfig, "retire_fence_fd %d", stack->retire_fence_fd);
+ DLOGI_IF(kTagDriverConfig, "*******************************************************************");
+
+ if (mdp_commit.release_fence >= 0) {
+ Sys::close_(mdp_commit.release_fence);
+ }
+
+ if (synchronous_commit_) {
+ // A synchronous commit can be requested when changing the display mode so we need to update
+ // panel info.
+ PopulateHWPanelInfo();
+ synchronous_commit_ = false;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWDevice::Flush(HWLayers *hw_layers) {
+ ResetDisplayParams();
+ mdp_layer_commit_v1 &mdp_commit = mdp_disp_commit_.commit_v1;
+ mdp_commit.input_layer_cnt = 0;
+ mdp_commit.output_layer = NULL;
+
+ mdp_commit.flags &= UINT32(~MDP_VALIDATE_LAYER);
+ if (Sys::ioctl_(device_fd_, INT(MSMFB_ATOMIC_COMMIT), &mdp_disp_commit_) < 0) {
+ if (errno == ESHUTDOWN) {
+ DLOGI_IF(kTagDriverConfig, "Driver is processing shutdown sequence");
+ return kErrorShutDown;
+ }
+ IOCTL_LOGE(MSMFB_ATOMIC_COMMIT, device_type_);
+ DumpLayerCommit(mdp_disp_commit_);
+ return kErrorHardware;
+ }
+ return kErrorNone;
+}
+
+DisplayError HWDevice::SetFormat(const LayerBufferFormat &source, uint32_t *target) {
+ switch (source) {
+ case kFormatARGB8888: *target = MDP_ARGB_8888; break;
+ case kFormatRGBA8888: *target = MDP_RGBA_8888; break;
+ case kFormatBGRA8888: *target = MDP_BGRA_8888; break;
+ case kFormatRGBX8888: *target = MDP_RGBX_8888; break;
+ case kFormatBGRX8888: *target = MDP_BGRX_8888; break;
+ case kFormatRGBA5551: *target = MDP_RGBA_5551; break;
+ case kFormatRGBA4444: *target = MDP_RGBA_4444; break;
+ case kFormatRGB888: *target = MDP_RGB_888; break;
+ case kFormatBGR888: *target = MDP_BGR_888; break;
+ case kFormatRGB565: *target = MDP_RGB_565; break;
+ case kFormatBGR565: *target = MDP_BGR_565; break;
+ case kFormatYCbCr420Planar: *target = MDP_Y_CB_CR_H2V2; break;
+ case kFormatYCrCb420Planar: *target = MDP_Y_CR_CB_H2V2; break;
+ case kFormatYCrCb420PlanarStride16: *target = MDP_Y_CR_CB_GH2V2; break;
+ case kFormatYCbCr420SemiPlanar: *target = MDP_Y_CBCR_H2V2; break;
+ case kFormatYCrCb420SemiPlanar: *target = MDP_Y_CRCB_H2V2; break;
+ case kFormatYCbCr422H1V2SemiPlanar: *target = MDP_Y_CBCR_H1V2; break;
+ case kFormatYCrCb422H1V2SemiPlanar: *target = MDP_Y_CRCB_H1V2; break;
+ case kFormatYCbCr422H2V1SemiPlanar: *target = MDP_Y_CBCR_H2V1; break;
+ case kFormatYCrCb422H2V1SemiPlanar: *target = MDP_Y_CRCB_H2V1; break;
+ case kFormatYCbCr422H2V1Packed: *target = MDP_YCBYCR_H2V1; break;
+ case kFormatYCbCr420SemiPlanarVenus: *target = MDP_Y_CBCR_H2V2_VENUS; break;
+ case kFormatRGBA8888Ubwc: *target = MDP_RGBA_8888_UBWC; break;
+ case kFormatRGBX8888Ubwc: *target = MDP_RGBX_8888_UBWC; break;
+ case kFormatBGR565Ubwc: *target = MDP_RGB_565_UBWC; break;
+ case kFormatYCbCr420SPVenusUbwc: *target = MDP_Y_CBCR_H2V2_UBWC; break;
+ case kFormatCbYCrY422H2V1Packed: *target = MDP_CBYCRY_H2V1; break;
+ case kFormatRGBA1010102: *target = MDP_RGBA_1010102; break;
+ case kFormatARGB2101010: *target = MDP_ARGB_2101010; break;
+ case kFormatRGBX1010102: *target = MDP_RGBX_1010102; break;
+ case kFormatXRGB2101010: *target = MDP_XRGB_2101010; break;
+ case kFormatBGRA1010102: *target = MDP_BGRA_1010102; break;
+ case kFormatABGR2101010: *target = MDP_ABGR_2101010; break;
+ case kFormatBGRX1010102: *target = MDP_BGRX_1010102; break;
+ case kFormatXBGR2101010: *target = MDP_XBGR_2101010; break;
+ case kFormatRGBA1010102Ubwc: *target = MDP_RGBA_1010102_UBWC; break;
+ case kFormatRGBX1010102Ubwc: *target = MDP_RGBX_1010102_UBWC; break;
+ case kFormatYCbCr420P010: *target = MDP_Y_CBCR_H2V2_P010; break;
+ case kFormatYCbCr420TP10Ubwc: *target = MDP_Y_CBCR_H2V2_TP10_UBWC; break;
+ default:
+ DLOGE("Unsupported format type %d", source);
+ return kErrorParameters;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWDevice::SetStride(HWDeviceType device_type, LayerBufferFormat format,
+ uint32_t width, uint32_t *target) {
+ // TODO(user): This SetStride function is a workaround to satisfy the driver expectation for
+ // rotator and virtual devices. Eventually this will be taken care in the driver.
+ if (device_type != kDeviceRotator && device_type != kDeviceVirtual) {
+ *target = width;
+ return kErrorNone;
+ }
+
+ switch (format) {
+ case kFormatARGB8888:
+ case kFormatRGBA8888:
+ case kFormatBGRA8888:
+ case kFormatRGBX8888:
+ case kFormatBGRX8888:
+ case kFormatRGBA8888Ubwc:
+ case kFormatRGBX8888Ubwc:
+ case kFormatRGBA1010102:
+ case kFormatARGB2101010:
+ case kFormatRGBX1010102:
+ case kFormatXRGB2101010:
+ case kFormatBGRA1010102:
+ case kFormatABGR2101010:
+ case kFormatBGRX1010102:
+ case kFormatXBGR2101010:
+ case kFormatRGBA1010102Ubwc:
+ case kFormatRGBX1010102Ubwc:
+ *target = width * 4;
+ break;
+ case kFormatRGB888:
+ case kFormatBGR888:
+ *target = width * 3;
+ break;
+ case kFormatRGB565:
+ case kFormatBGR565:
+ case kFormatBGR565Ubwc:
+ *target = width * 2;
+ break;
+ case kFormatYCbCr420SemiPlanarVenus:
+ case kFormatYCbCr420SPVenusUbwc:
+ case kFormatYCbCr420Planar:
+ case kFormatYCrCb420Planar:
+ case kFormatYCrCb420PlanarStride16:
+ case kFormatYCbCr420SemiPlanar:
+ case kFormatYCrCb420SemiPlanar:
+ case kFormatYCbCr420TP10Ubwc:
+ *target = width;
+ break;
+ case kFormatYCbCr422H2V1Packed:
+ case kFormatCbYCrY422H2V1Packed:
+ case kFormatYCrCb422H2V1SemiPlanar:
+ case kFormatYCrCb422H1V2SemiPlanar:
+ case kFormatYCbCr422H2V1SemiPlanar:
+ case kFormatYCbCr422H1V2SemiPlanar:
+ case kFormatYCbCr420P010:
+ case kFormatRGBA5551:
+ case kFormatRGBA4444:
+ *target = width * 2;
+ break;
+ default:
+ DLOGE("Unsupported format type %d", format);
+ return kErrorParameters;
+ }
+
+ return kErrorNone;
+}
+
+void HWDevice::SetBlending(const LayerBlending &source, mdss_mdp_blend_op *target) {
+ switch (source) {
+ case kBlendingPremultiplied: *target = BLEND_OP_PREMULTIPLIED; break;
+ case kBlendingOpaque: *target = BLEND_OP_OPAQUE; break;
+ case kBlendingCoverage: *target = BLEND_OP_COVERAGE; break;
+ default: *target = BLEND_OP_NOT_DEFINED; break;
+ }
+}
+
+void HWDevice::SetRect(const LayerRect &source, mdp_rect *target) {
+ target->x = UINT32(source.left);
+ target->y = UINT32(source.top);
+ target->w = UINT32(source.right) - target->x;
+ target->h = UINT32(source.bottom) - target->y;
+}
+
+void HWDevice::SetMDPFlags(const Layer *layer, const bool &is_rotator_used,
+ bool async_cursor_updates, uint32_t *mdp_flags) {
+ const LayerBuffer &input_buffer = layer->input_buffer;
+
+ // Flips will be taken care by rotator, if layer uses rotator for downscale/rotation. So ignore
+ // flip flags for MDP.
+ if (!is_rotator_used) {
+ if (layer->transform.flip_vertical) {
+ *mdp_flags |= MDP_LAYER_FLIP_UD;
+ }
+
+ if (layer->transform.flip_horizontal) {
+ *mdp_flags |= MDP_LAYER_FLIP_LR;
+ }
+
+ if (input_buffer.flags.interlace) {
+ *mdp_flags |= MDP_LAYER_DEINTERLACE;
+ }
+ }
+
+ if (input_buffer.flags.secure_camera) {
+ *mdp_flags |= MDP_LAYER_SECURE_CAMERA_SESSION;
+ } else if (input_buffer.flags.secure) {
+ *mdp_flags |= MDP_LAYER_SECURE_SESSION;
+ }
+
+ if (input_buffer.flags.secure_display) {
+ *mdp_flags |= MDP_LAYER_SECURE_DISPLAY_SESSION;
+ }
+
+ if (layer->flags.solid_fill) {
+ *mdp_flags |= MDP_LAYER_SOLID_FILL;
+ }
+
+ if (layer->flags.cursor && async_cursor_updates) {
+ // command mode panels does not support async position update
+ *mdp_flags |= MDP_LAYER_ASYNC;
+ }
+}
+
+int HWDevice::GetFBNodeIndex(HWDeviceType device_type) {
+ for (int i = 0; i < kFBNodeMax; i++) {
+ HWPanelInfo panel_info;
+ GetHWPanelInfoByNode(i, &panel_info);
+ switch (device_type) {
+ case kDeviceBuiltIn:
+ if (panel_info.is_primary_panel) {
+ return i;
+ }
+ break;
+ case kDevicePluggable:
+ if (panel_info.is_pluggable) {
+ if (IsFBNodeConnected(i)) {
+ return i;
+ }
+ }
+ break;
+ case kDeviceVirtual:
+ if (panel_info.port == kPortWriteBack) {
+ return i;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ return -1;
+}
+
+void HWDevice::PopulateHWPanelInfo() {
+ hw_panel_info_ = HWPanelInfo();
+ GetHWPanelInfoByNode(fb_node_index_, &hw_panel_info_);
+ DLOGI("Device type = %d, Display Port = %d, Display Mode = %d, Device Node = %d, Is Primary = %d",
+ device_type_, hw_panel_info_.port, hw_panel_info_.mode, fb_node_index_,
+ hw_panel_info_.is_primary_panel);
+ DLOGI("Partial Update = %d, supported roi_count =%d, Dynamic FPS = %d",
+ hw_panel_info_.partial_update, hw_panel_info_.left_roi_count, hw_panel_info_.dynamic_fps);
+ DLOGI("Align: left = %d, width = %d, top = %d, height = %d",
+ hw_panel_info_.left_align, hw_panel_info_.width_align,
+ hw_panel_info_.top_align, hw_panel_info_.height_align);
+ DLOGI("ROI: min_width = %d, min_height = %d, need_merge = %d",
+ hw_panel_info_.min_roi_width, hw_panel_info_.min_roi_height,
+ hw_panel_info_.needs_roi_merge);
+ DLOGI("FPS: min = %d, max =%d", hw_panel_info_.min_fps, hw_panel_info_.max_fps);
+ DLOGI("Ping Pong Split = %d", hw_panel_info_.ping_pong_split);
+ DLOGI("Left Split = %d, Right Split = %d", hw_panel_info_.split_info.left_split,
+ hw_panel_info_.split_info.right_split);
+}
+
+void HWDevice::GetHWPanelNameByNode(int device_node, HWPanelInfo *panel_info) {
+ string file_name = fb_path_ + to_string(device_node) + "/msm_fb_panel_info";
+
+ Sys::fstream fs(file_name, fstream::in);
+ if (!fs.is_open()) {
+ DLOGW("Failed to open msm_fb_panel_info node device node %d", device_node);
+ return;
+ }
+
+ string line;
+ while (Sys::getline_(fs, line)) {
+ uint32_t token_count = 0;
+ const uint32_t max_count = 10;
+ char *tokens[max_count] = { NULL };
+ if (!ParseLine(line.c_str(), "=\n", tokens, max_count, &token_count)) {
+ if (tokens[0] != NULL) {
+ if (!strncmp(tokens[0], "panel_name", strlen("panel_name"))) {
+ snprintf(panel_info->panel_name, sizeof(panel_info->panel_name), "%s", tokens[1]);
+ break;
+ }
+ }
+ }
+ }
+}
+
+void HWDevice::GetHWPanelInfoByNode(int device_node, HWPanelInfo *panel_info) {
+ string file_name = fb_path_ + to_string(device_node) + "/msm_fb_panel_info";
+
+ Sys::fstream fs(file_name, fstream::in);
+ if (!fs.is_open()) {
+ DLOGW("Failed to open msm_fb_panel_info node device node %d", device_node);
+ return;
+ }
+
+ string line;
+ while (Sys::getline_(fs, line)) {
+ uint32_t token_count = 0;
+ const uint32_t max_count = 10;
+ char *tokens[max_count] = { NULL };
+ if (!ParseLine(line.c_str(), tokens, max_count, &token_count)) {
+ if (!strncmp(tokens[0], "pu_en", strlen("pu_en"))) {
+ panel_info->partial_update = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "xstart", strlen("xstart"))) {
+ panel_info->left_align = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "walign", strlen("walign"))) {
+ panel_info->width_align = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "ystart", strlen("ystart"))) {
+ panel_info->top_align = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "halign", strlen("halign"))) {
+ panel_info->height_align = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "min_w", strlen("min_w"))) {
+ panel_info->min_roi_width = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "min_h", strlen("min_h"))) {
+ panel_info->min_roi_height = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "roi_merge", strlen("roi_merge"))) {
+ panel_info->needs_roi_merge = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "dyn_fps_en", strlen("dyn_fps_en"))) {
+ panel_info->dynamic_fps = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "dfps_porch_mode", strlen("dfps_porch_mode"))) {
+ panel_info->dfps_porch_mode = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "is_pingpong_split", strlen("is_pingpong_split"))) {
+ panel_info->ping_pong_split = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "min_fps", strlen("min_fps"))) {
+ panel_info->min_fps = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_fps", strlen("max_fps"))) {
+ panel_info->max_fps = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "primary_panel", strlen("primary_panel"))) {
+ panel_info->is_primary_panel = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "is_pluggable", strlen("is_pluggable"))) {
+ panel_info->is_pluggable = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "pu_roi_cnt", strlen("pu_roi_cnt"))) {
+ panel_info->left_roi_count = UINT32(atoi(tokens[1]));
+ panel_info->right_roi_count = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "is_hdr_enabled", strlen("is_hdr_enabled"))) {
+ panel_info->hdr_enabled = atoi(tokens[1]);
+ } else if (!strncmp(tokens[0], "peak_brightness", strlen("peak_brightness"))) {
+ panel_info->peak_luminance = FLOAT(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "average_brightness", strlen("average_brightness"))) {
+ panel_info->average_luminance = FLOAT(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "blackness_level", strlen("blackness_level"))) {
+ panel_info->blackness_level = FLOAT(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "white_chromaticity_x", strlen("white_chromaticity_x"))) {
+ panel_info->primaries.white_point[0] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "white_chromaticity_y", strlen("white_chromaticity_y"))) {
+ panel_info->primaries.white_point[1] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "red_chromaticity_x", strlen("red_chromaticity_x"))) {
+ panel_info->primaries.red[0] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "red_chromaticity_y", strlen("red_chromaticity_y"))) {
+ panel_info->primaries.red[1] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "green_chromaticity_x", strlen("green_chromaticity_x"))) {
+ panel_info->primaries.green[0] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "green_chromaticity_y", strlen("green_chromaticity_y"))) {
+ panel_info->primaries.green[1] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "blue_chromaticity_x", strlen("blue_chromaticity_x"))) {
+ panel_info->primaries.blue[0] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "blue_chromaticity_y", strlen("blue_chromaticity_y"))) {
+ panel_info->primaries.blue[1] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "panel_orientation", strlen("panel_orientation"))) {
+ int32_t panel_orient = atoi(tokens[1]);
+ panel_info->panel_orientation.flip_horizontal = ((panel_orient & MDP_FLIP_LR) > 0);
+ panel_info->panel_orientation.flip_vertical = ((panel_orient & MDP_FLIP_UD) > 0);
+ panel_info->panel_orientation.rotation = ((panel_orient & MDP_ROT_90) > 0);
+ }
+ }
+ }
+
+ GetHWDisplayPortAndMode(device_node, panel_info);
+ GetSplitInfo(device_node, panel_info);
+ GetHWPanelNameByNode(device_node, panel_info);
+ GetHWPanelMaxBrightnessFromNode(panel_info);
+}
+
+void HWDevice::GetHWDisplayPortAndMode(int device_node, HWPanelInfo *panel_info) {
+ DisplayPort *port = &panel_info->port;
+ HWDisplayMode *mode = &panel_info->mode;
+
+ *port = kPortDefault;
+ *mode = kModeDefault;
+
+ string file_name = fb_path_ + to_string(device_node) + "/msm_fb_type";
+
+ Sys::fstream fs(file_name, fstream::in);
+ if (!fs.is_open()) {
+ DLOGW("File not found %s", file_name.c_str());
+ return;
+ }
+
+ string line;
+ if (!Sys::getline_(fs, line)) {
+ return;
+ }
+
+ if ((strncmp(line.c_str(), "mipi dsi cmd panel", strlen("mipi dsi cmd panel")) == 0)) {
+ *port = kPortDSI;
+ *mode = kModeCommand;
+ } else if ((strncmp(line.c_str(), "mipi dsi video panel", strlen("mipi dsi video panel")) == 0)) {
+ *port = kPortDSI;
+ *mode = kModeVideo;
+ } else if ((strncmp(line.c_str(), "lvds panel", strlen("lvds panel")) == 0)) {
+ *port = kPortLVDS;
+ *mode = kModeVideo;
+ } else if ((strncmp(line.c_str(), "edp panel", strlen("edp panel")) == 0)) {
+ *port = kPortEDP;
+ *mode = kModeVideo;
+ } else if ((strncmp(line.c_str(), "dtv panel", strlen("dtv panel")) == 0)) {
+ *port = kPortDTV;
+ *mode = kModeVideo;
+ } else if ((strncmp(line.c_str(), "writeback panel", strlen("writeback panel")) == 0)) {
+ *port = kPortWriteBack;
+ *mode = kModeCommand;
+ } else if ((strncmp(line.c_str(), "dp panel", strlen("dp panel")) == 0)) {
+ *port = kPortDP;
+ *mode = kModeVideo;
+ }
+
+ return;
+}
+
+void HWDevice::GetSplitInfo(int device_node, HWPanelInfo *panel_info) {
+ // Split info - for MDSS Version 5 - No need to check version here
+ string file_name = fb_path_ + to_string(device_node) + "/msm_fb_split";
+
+ Sys::fstream fs(file_name, fstream::in);
+ if (!fs.is_open()) {
+ DLOGW("File not found %s", file_name.c_str());
+ return;
+ }
+
+ // Format "left right" space as delimiter
+ uint32_t token_count = 0;
+ const uint32_t max_count = 10;
+ char *tokens[max_count] = { NULL };
+ string line;
+ if (Sys::getline_(fs, line)) {
+ if (!ParseLine(line.c_str(), tokens, max_count, &token_count)) {
+ panel_info->split_info.left_split = UINT32(atoi(tokens[0]));
+ panel_info->split_info.right_split = UINT32(atoi(tokens[1]));
+ }
+ }
+}
+
+void HWDevice::GetHWPanelMaxBrightnessFromNode(HWPanelInfo *panel_info) {
+ char brightness[kMaxStringLength] = { 0 };
+ char kMaxBrightnessNode[64] = { 0 };
+
+ snprintf(kMaxBrightnessNode, sizeof(kMaxBrightnessNode), "%s",
+ "/sys/class/leds/lcd-backlight/max_brightness");
+
+ panel_info->panel_max_brightness = 0;
+ int fd = Sys::open_(kMaxBrightnessNode, O_RDONLY);
+ if (fd < 0) {
+ DLOGW("Failed to open max brightness node = %s, error = %s", kMaxBrightnessNode,
+ strerror(errno));
+ return;
+ }
+
+ if (Sys::pread_(fd, brightness, sizeof(brightness), 0) > 0) {
+ panel_info->panel_max_brightness = atoi(brightness);
+ DLOGI("Max brightness level = %d", panel_info->panel_max_brightness);
+ } else {
+ DLOGW("Failed to read max brightness level. error = %s", strerror(errno));
+ }
+ Sys::close_(fd);
+}
+
+int HWDevice::ParseLine(const char *input, char *tokens[], const uint32_t max_token,
+ uint32_t *count) {
+ char *tmp_token = NULL;
+ char *temp_ptr;
+ uint32_t index = 0;
+ const char *delim = ", =\n";
+ if (!input) {
+ return -1;
+ }
+ tmp_token = strtok_r(const_cast<char *>(input), delim, &temp_ptr);
+ while (tmp_token && index < max_token) {
+ tokens[index++] = tmp_token;
+ tmp_token = strtok_r(NULL, delim, &temp_ptr);
+ }
+ *count = index;
+
+ return 0;
+}
+
+int HWDevice::ParseLine(const char *input, const char *delim, char *tokens[],
+ const uint32_t max_token, uint32_t *count) {
+ char *tmp_token = NULL;
+ char *temp_ptr;
+ uint32_t index = 0;
+ if (!input) {
+ return -1;
+ }
+ tmp_token = strtok_r(const_cast<char *>(input), delim, &temp_ptr);
+ while (tmp_token && index < max_token) {
+ tokens[index++] = tmp_token;
+ tmp_token = strtok_r(NULL, delim, &temp_ptr);
+ }
+ *count = index;
+
+ return 0;
+}
+
+bool HWDevice::EnableHotPlugDetection(int enable) {
+ char hpdpath[kMaxStringLength];
+ const char *value = enable ? "1" : "0";
+
+ // Enable HPD for all pluggable devices.
+ for (int i = 0; i < kFBNodeMax; i++) {
+ HWPanelInfo panel_info;
+ GetHWPanelInfoByNode(i, &panel_info);
+ if (panel_info.is_pluggable) {
+ snprintf(hpdpath , sizeof(hpdpath), "%s%d/hpd", fb_path_, i);
+
+ ssize_t length = SysFsWrite(hpdpath, value, 1);
+ if (length <= 0) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+void HWDevice::ResetDisplayParams() {
+ memset(&mdp_disp_commit_, 0, sizeof(mdp_disp_commit_));
+ memset(&mdp_in_layers_, 0, sizeof(mdp_in_layers_));
+ memset(&mdp_out_layer_, 0, sizeof(mdp_out_layer_));
+ mdp_out_layer_.buffer.fence = -1;
+ hw_scale_->ResetScaleParams();
+ memset(&pp_params_, 0, sizeof(pp_params_));
+ memset(&igc_lut_data_, 0, sizeof(igc_lut_data_));
+
+ for (size_t i = 0; i < mdp_dest_scalar_data_.size(); i++) {
+ mdp_dest_scalar_data_[i] = {};
+ }
+
+ for (uint32_t i = 0; i < kMaxSDELayers * 2; i++) {
+ mdp_in_layers_[i].buffer.fence = -1;
+ }
+
+ mdp_disp_commit_.version = MDP_COMMIT_VERSION_1_0;
+ mdp_disp_commit_.commit_v1.input_layers = mdp_in_layers_;
+ mdp_disp_commit_.commit_v1.output_layer = &mdp_out_layer_;
+ mdp_disp_commit_.commit_v1.release_fence = -1;
+ mdp_disp_commit_.commit_v1.retire_fence = -1;
+ mdp_disp_commit_.commit_v1.dest_scaler = mdp_dest_scalar_data_.data();
+}
+
+void HWDevice::SetCSC(const ColorMetaData &color_metadata, mdp_color_space *color_space) {
+ switch (color_metadata.colorPrimaries) {
+ case ColorPrimaries_BT601_6_525:
+ case ColorPrimaries_BT601_6_625:
+ *color_space = ((color_metadata.range == Range_Full) ? MDP_CSC_ITU_R_601_FR :
+ MDP_CSC_ITU_R_601);
+ break;
+ case ColorPrimaries_BT709_5:
+ *color_space = MDP_CSC_ITU_R_709;
+ break;
+ case ColorPrimaries_BT2020:
+ *color_space = static_cast<mdp_color_space>((color_metadata.range == Range_Full) ?
+ MDP_CSC_ITU_R_2020_FR : MDP_CSC_ITU_R_2020);
+ break;
+ default:
+ break;
+ }
+}
+
+void HWDevice::SetIGC(const LayerBuffer *layer_buffer, uint32_t index) {
+ mdp_input_layer &mdp_layer = mdp_in_layers_[index];
+ mdp_overlay_pp_params &pp_params = pp_params_[index];
+ mdp_igc_lut_data_v1_7 &igc_lut_data = igc_lut_data_[index];
+
+ switch (layer_buffer->igc) {
+ case kIGCsRGB:
+ igc_lut_data.table_fmt = mdp_igc_srgb;
+ pp_params.igc_cfg.ops = MDP_PP_OPS_WRITE | MDP_PP_OPS_ENABLE;
+ break;
+
+ default:
+ pp_params.igc_cfg.ops = MDP_PP_OPS_DISABLE;
+ break;
+ }
+
+ pp_params.config_ops = MDP_OVERLAY_PP_IGC_CFG;
+ pp_params.igc_cfg.version = mdp_igc_v1_7;
+ pp_params.igc_cfg.cfg_payload = &igc_lut_data;
+
+ mdp_layer.pp_info = &pp_params;
+ mdp_layer.flags |= MDP_LAYER_PP;
+}
+
+DisplayError HWDevice::SetCursorPosition(HWLayers *hw_layers, int x, int y) {
+ DTRACE_SCOPED();
+
+ HWLayersInfo &hw_layer_info = hw_layers->info;
+ uint32_t count = UINT32(hw_layer_info.hw_layers.size());
+ uint32_t cursor_index = count - 1;
+ HWPipeInfo *left_pipe = &hw_layers->config[cursor_index].left_pipe;
+
+ mdp_async_layer async_layer = {};
+ async_layer.flags = MDP_LAYER_ASYNC;
+ async_layer.pipe_ndx = left_pipe->pipe_id;
+ async_layer.src.x = UINT32(left_pipe->src_roi.left);
+ async_layer.src.y = UINT32(left_pipe->src_roi.top);
+ async_layer.dst.x = UINT32(left_pipe->dst_roi.left);
+ async_layer.dst.y = UINT32(left_pipe->dst_roi.top);
+
+ mdp_position_update pos_update = {};
+ pos_update.input_layer_cnt = 1;
+ pos_update.input_layers = &async_layer;
+ if (Sys::ioctl_(device_fd_, INT(MSMFB_ASYNC_POSITION_UPDATE), &pos_update) < 0) {
+ if (errno == ESHUTDOWN) {
+ DLOGI_IF(kTagDriverConfig, "Driver is processing shutdown sequence");
+ return kErrorShutDown;
+ }
+ IOCTL_LOGE(MSMFB_ASYNC_POSITION_UPDATE, device_type_);
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWDevice::GetPPFeaturesVersion(PPFeatureVersion *vers) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::SetPPFeatures(PPFeaturesConfig *feature_list) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::SetVSyncState(bool enable) {
+ int vsync_on = enable ? 1 : 0;
+ if (Sys::ioctl_(device_fd_, MSMFB_OVERLAY_VSYNC_CTRL, &vsync_on) < 0) {
+ if (errno == ESHUTDOWN) {
+ DLOGI_IF(kTagDriverConfig, "Driver is processing shutdown sequence");
+ return kErrorShutDown;
+ }
+ IOCTL_LOGE(MSMFB_OVERLAY_VSYNC_CTRL, device_type_);
+ return kErrorHardware;
+ }
+ return kErrorNone;
+}
+
+void HWDevice::SetIdleTimeoutMs(uint32_t timeout_ms) {
+}
+
+DisplayError HWDevice::SetDisplayMode(const HWDisplayMode hw_display_mode) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::SetRefreshRate(uint32_t refresh_rate) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::SetPanelBrightness(int level) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::GetHWScanInfo(HWScanInfo *scan_info) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::GetVideoFormat(uint32_t config_index, uint32_t *video_format) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::GetMaxCEAFormat(uint32_t *max_cea_format) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::GetPanelBrightness(int *level) {
+ return kErrorNotSupported;
+}
+
+ssize_t HWDevice::SysFsWrite(const char* file_node, const char* value, ssize_t length) {
+ int fd = Sys::open_(file_node, O_RDWR, 0);
+ if (fd < 0) {
+ DLOGW("Open failed = %s", file_node);
+ return -1;
+ }
+ ssize_t len = Sys::pwrite_(fd, value, static_cast<size_t>(length), 0);
+ if (len <= 0) {
+ DLOGE("Write failed for path %s with value %s", file_node, value);
+ }
+ Sys::close_(fd);
+
+ return len;
+}
+
+bool HWDevice::IsFBNodeConnected(int fb_node) {
+ string file_name = fb_path_ + to_string(fb_node) + "/connected";
+
+ Sys::fstream fs(file_name, fstream::in);
+ if (!fs.is_open()) {
+ DLOGW("File not found %s", file_name.c_str());
+ return false;
+ }
+
+ string line;
+ if (!Sys::getline_(fs, line)) {
+ return false;
+ }
+
+ return atoi(line.c_str());
+}
+
+DisplayError HWDevice::SetS3DMode(HWS3DMode s3d_mode) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::SetScaleLutConfig(HWScaleLutInfo *lut_info) {
+ mdp_scale_luts_info mdp_lut_info = {};
+ mdp_set_cfg cfg = {};
+
+ if (!hw_resource_.has_qseed3) {
+ DLOGV_IF(kTagDriverConfig, "No support for QSEED3 luts");
+ return kErrorNone;
+ }
+
+ if (!lut_info->dir_lut_size && !lut_info->dir_lut && !lut_info->cir_lut_size &&
+ !lut_info->cir_lut && !lut_info->sep_lut_size && !lut_info->sep_lut) {
+ // HWSupports QSEED3, but LutInfo is invalid as scalar is disabled by property or
+ // its loading failed. Driver will use default settings/filter
+ return kErrorNone;
+ }
+
+ mdp_lut_info.dir_lut_size = lut_info->dir_lut_size;
+ mdp_lut_info.dir_lut = lut_info->dir_lut;
+ mdp_lut_info.cir_lut_size = lut_info->cir_lut_size;
+ mdp_lut_info.cir_lut = lut_info->cir_lut;
+ mdp_lut_info.sep_lut_size = lut_info->sep_lut_size;
+ mdp_lut_info.sep_lut = lut_info->sep_lut;
+
+ cfg.flags = MDP_QSEED3_LUT_CFG;
+ cfg.len = sizeof(mdp_scale_luts_info);
+ cfg.payload = reinterpret_cast<uint64_t>(&mdp_lut_info);
+
+ if (Sys::ioctl_(device_fd_, MSMFB_MDP_SET_CFG, &cfg) < 0) {
+ if (errno == ESHUTDOWN) {
+ DLOGI_IF(kTagDriverConfig, "Driver is processing shutdown sequence");
+ return kErrorShutDown;
+ }
+ IOCTL_LOGE(MSMFB_MDP_SET_CFG, device_type_);
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWDevice::SetMixerAttributes(const HWMixerAttributes &mixer_attributes) {
+ if (!hw_resource_.hw_dest_scalar_info.count) {
+ return kErrorNotSupported;
+ }
+
+ if (mixer_attributes.width > display_attributes_.x_pixels ||
+ mixer_attributes.height > display_attributes_.y_pixels) {
+ DLOGW_IF(kTagDriverConfig, "Input resolution exceeds display resolution! input: res %dx%d "\
+ "display: res %dx%d", mixer_attributes.width, mixer_attributes.height,
+ display_attributes_.x_pixels, display_attributes_.y_pixels);
+ return kErrorNotSupported;
+ }
+
+ uint32_t max_input_width = hw_resource_.hw_dest_scalar_info.max_input_width;
+ if (display_attributes_.is_device_split) {
+ max_input_width *= 2;
+ }
+
+ if (mixer_attributes.width > max_input_width) {
+ DLOGW_IF(kTagDriverConfig, "Input width exceeds width limit! input_width %d width_limit %d",
+ mixer_attributes.width, max_input_width);
+ return kErrorNotSupported;
+ }
+
+ float mixer_aspect_ratio = FLOAT(mixer_attributes.width) / FLOAT(mixer_attributes.height);
+ float display_aspect_ratio =
+ FLOAT(display_attributes_.x_pixels) / FLOAT(display_attributes_.y_pixels);
+
+ if (display_aspect_ratio != mixer_aspect_ratio) {
+ DLOGW_IF(kTagDriverConfig, "Aspect ratio mismatch! input: res %dx%d display: res %dx%d",
+ mixer_attributes.width, mixer_attributes.height, display_attributes_.x_pixels,
+ display_attributes_.y_pixels);
+ return kErrorNotSupported;
+ }
+
+ float scale_x = FLOAT(display_attributes_.x_pixels) / FLOAT(mixer_attributes.width);
+ float scale_y = FLOAT(display_attributes_.y_pixels) / FLOAT(mixer_attributes.height);
+ float max_scale_up = hw_resource_.hw_dest_scalar_info.max_scale_up;
+ if (scale_x > max_scale_up || scale_y > max_scale_up) {
+ DLOGW_IF(kTagDriverConfig, "Up scaling ratio exceeds for destination scalar upscale " \
+ "limit scale_x %f scale_y %f max_scale_up %f", scale_x, scale_y, max_scale_up);
+ return kErrorNotSupported;
+ }
+
+ float mixer_split_ratio = FLOAT(mixer_attributes_.split_left) / FLOAT(mixer_attributes_.width);
+
+ mixer_attributes_ = mixer_attributes;
+ mixer_attributes_.split_left = mixer_attributes_.width;
+ if (display_attributes_.is_device_split) {
+ mixer_attributes_.split_left = UINT32(FLOAT(mixer_attributes.width) * mixer_split_ratio);
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWDevice::GetMixerAttributes(HWMixerAttributes *mixer_attributes) {
+ if (!mixer_attributes) {
+ return kErrorParameters;
+ }
+
+ *mixer_attributes = mixer_attributes_;
+
+ return kErrorNone;
+}
+
+DisplayError HWDevice::DumpDebugData() {
+ DLOGW("Pingpong timeout occurred in the driver.");
+#ifdef USER_DEBUG
+ // Save the xlogs on ping pong time out
+ const char* xlog_path = "/data/vendor/display/mdp_xlog";
+ DLOGD("Dumping debugfs data to %s", xlog_path);
+ std::ostringstream dst;
+ auto file = open(xlog_path, O_CREAT | O_TRUNC | O_DSYNC | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP);
+ if (file < 0) {
+ DLOGE("Couldn't open file: err:%d (%s)", errno, strerror(errno));
+ return kErrorResources;
+ }
+ dst << "+++ MDP:XLOG +++" << std::endl;
+ std::ifstream src("/sys/kernel/debug/mdp/xlog/dump");
+ dst << src.rdbuf() << std::endl;
+ src.close();
+
+ dst << "+++ MDP:REG_XLOG +++" << std::endl;
+ src.open("/sys/kernel/debug/mdp/xlog/reg_xlog");
+ dst << src.rdbuf() << std::endl;
+ src.close();
+
+ dst << "+++ MDP:DBGBUS_XLOG +++" << std::endl;
+ src.open("/sys/kernel/debug/mdp/xlog/dbgbus_xlog");
+ dst << src.rdbuf() << std::endl;
+ src.close();
+
+ dst << "+++ MDP:VBIF_DBGBUS_XLOG +++" << std::endl;
+ src.open("/sys/kernel/debug/mdp/xlog/vbif_dbgbus_xlog");
+ dst << src.rdbuf() << std::endl;
+ src.close();
+ auto ret = write(file, dst.str().c_str(), dst.str().size());
+ if (ret < 0) {
+ DLOGE("Failed to write xlog data err: %d (%s)", errno, strerror(errno));
+ } else {
+ fsync(file);
+ }
+ close(file);
+ DLOGD("Finished dumping xlogs");;
+#endif
+ return kErrorNone;
+}
+
+DisplayError HWDevice::SetDynamicDSIClock(uint64_t bit_clk_rate) {
+ return kErrorNotSupported;
+}
+
+DisplayError HWDevice::GetDynamicDSIClock(uint64_t *bit_clk_rate) {
+ return kErrorNotSupported;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/core/fb/hw_device.h b/sdm/libs/core/fb/hw_device.h
new file mode 100644
index 0000000..5e4e1cf
--- /dev/null
+++ b/sdm/libs/core/fb/hw_device.h
@@ -0,0 +1,185 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_DEVICE_H__
+#define __HW_DEVICE_H__
+
+#include <errno.h>
+#include <linux/msm_mdp_ext.h>
+#include <linux/mdss_rotator.h>
+#include <pthread.h>
+#include <vector>
+
+#include "hw_interface.h"
+#include "hw_scale.h"
+
+#define IOCTL_LOGE(ioctl, type) DLOGE("ioctl %s, device = %d errno = %d, desc = %s", #ioctl, \
+ type, errno, strerror(errno))
+
+#ifndef MDP_LAYER_MULTIRECT_ENABLE
+#define MDP_LAYER_MULTIRECT_ENABLE 0
+#endif
+
+#ifndef MDP_LAYER_MULTIRECT_PARALLEL_MODE
+#define MDP_LAYER_MULTIRECT_PARALLEL_MODE 0
+#endif
+
+#ifndef MDP_LAYER_SECURE_CAMERA_SESSION
+#define MDP_LAYER_SECURE_CAMERA_SESSION 0
+#endif
+
+namespace sdm {
+class HWInfoInterface;
+
+class HWDevice : public HWInterface {
+ public:
+ virtual ~HWDevice() {}
+ virtual DisplayError Init();
+ virtual DisplayError Deinit();
+
+ protected:
+ explicit HWDevice(BufferSyncHandler *buffer_sync_handler);
+
+ // From HWInterface
+ virtual DisplayError GetDisplayId(int32_t *display_id);
+ virtual DisplayError GetActiveConfig(uint32_t *active_config);
+ virtual DisplayError GetDefaultConfig(uint32_t *default_config) { return kErrorNotSupported; }
+ virtual DisplayError GetNumDisplayAttributes(uint32_t *count);
+ virtual DisplayError GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes);
+ virtual DisplayError GetHWPanelInfo(HWPanelInfo *panel_info);
+ virtual DisplayError SetDisplayAttributes(uint32_t index);
+ virtual DisplayError SetDisplayAttributes(const HWDisplayAttributes &display_attributes);
+ virtual DisplayError GetConfigIndex(char *mode, uint32_t *index);
+ virtual DisplayError PowerOn(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError PowerOff(bool teardown);
+ virtual DisplayError Doze(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError DozeSuspend(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError Standby();
+ virtual DisplayError Validate(HWLayers *hw_layers);
+ virtual DisplayError Commit(HWLayers *hw_layers);
+ virtual DisplayError Flush(HWLayers *hw_layers);
+ virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
+ virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
+ virtual DisplayError SetVSyncState(bool enable);
+ virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
+ virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode);
+ virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
+ virtual DisplayError SetPanelBrightness(int level);
+ virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info);
+ virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format);
+ virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format);
+ virtual DisplayError SetCursorPosition(HWLayers *hw_layers, int x, int y);
+ virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level);
+ virtual DisplayError GetPanelBrightness(int *level);
+ virtual DisplayError SetAutoRefresh(bool enable) { return kErrorNone; }
+ virtual DisplayError SetS3DMode(HWS3DMode s3d_mode);
+ virtual DisplayError SetScaleLutConfig(HWScaleLutInfo *lut_info);
+ virtual DisplayError UnsetScaleLutConfig() { return kErrorNotSupported; }
+ virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes);
+ virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes);
+ virtual DisplayError DumpDebugData();
+ virtual DisplayError SetDppsFeature(void *payload, size_t size) { return kErrorNotSupported; }
+ virtual DisplayError GetDppsFeatureInfo(void *payload, size_t size) { return kErrorNotSupported; }
+ virtual DisplayError DumpDebugData(DisplayType type) { return kErrorNone; }
+ virtual DisplayError HandleSecureEvent(SecureEvent secure_event, HWLayers *hw_layers) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError ControlIdlePowerCollapse(bool enable, bool synchronous) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError SetDisplayDppsAdROI(void *payload) { return kErrorNotSupported; }
+ virtual DisplayError SetDynamicDSIClock(uint64_t bit_clk_rate);
+ virtual DisplayError GetDynamicDSIClock(uint64_t *bit_clk_rate);
+ virtual DisplayError TeardownConcurrentWriteback(void) { return kErrorNotSupported; }
+ virtual DisplayError GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data) {
+ return kErrorNotSupported;
+ }
+
+ enum {
+ kHWEventVSync,
+ kHWEventBlank,
+ };
+
+ static const int kMaxStringLength = 1024;
+ static const int kNumPhysicalDisplays = 2;
+ // This indicates the number of fb devices created in the driver for all interfaces. Any addition
+ // of new fb devices should be added here.
+ static const int kFBNodeMax = 4;
+
+ void DumpLayerCommit(const mdp_layer_commit &layer_commit);
+ DisplayError SetFormat(const LayerBufferFormat &source, uint32_t *target);
+ DisplayError SetStride(HWDeviceType device_type, LayerBufferFormat format,
+ uint32_t width, uint32_t *target);
+ void SetBlending(const LayerBlending &source, mdss_mdp_blend_op *target);
+ void SetRect(const LayerRect &source, mdp_rect *target);
+ void SetMDPFlags(const Layer *layer, const bool &is_rotator_used,
+ bool async_cursor_updates, uint32_t *mdp_flags);
+ // Retrieves HW FrameBuffer Node Index
+ int GetFBNodeIndex(HWDeviceType device_type);
+ // Populates HWPanelInfo based on node index
+ void PopulateHWPanelInfo();
+ void GetHWPanelInfoByNode(int device_node, HWPanelInfo *panel_info);
+ void GetHWPanelNameByNode(int device_node, HWPanelInfo *panel_info);
+ void GetHWDisplayPortAndMode(int device_node, HWPanelInfo *panel_info);
+ void GetSplitInfo(int device_node, HWPanelInfo *panel_info);
+ void GetHWPanelMaxBrightnessFromNode(HWPanelInfo *panel_info);
+ int ParseLine(const char *input, char *tokens[], const uint32_t max_token, uint32_t *count);
+ int ParseLine(const char *input, const char *delim, char *tokens[],
+ const uint32_t max_token, uint32_t *count);
+ void ResetDisplayParams();
+ void SetCSC(const ColorMetaData &color_metadata, mdp_color_space *color_space);
+ void SetIGC(const LayerBuffer *layer_buffer, uint32_t index);
+
+ bool EnableHotPlugDetection(int enable);
+ ssize_t SysFsWrite(const char* file_node, const char* value, ssize_t length);
+ bool IsFBNodeConnected(int fb_node);
+
+ HWResourceInfo hw_resource_;
+ HWPanelInfo hw_panel_info_;
+ HWInfoInterface *hw_info_intf_;
+ int fb_node_index_;
+ const char *fb_path_;
+ BufferSyncHandler *buffer_sync_handler_;
+ int device_fd_ = -1;
+ int stored_retire_fence = -1;
+ HWDeviceType device_type_;
+ mdp_layer_commit mdp_disp_commit_;
+ mdp_input_layer mdp_in_layers_[kMaxSDELayers * 2]; // split panel (left + right)
+ HWScale *hw_scale_ = NULL;
+ mdp_overlay_pp_params pp_params_[kMaxSDELayers * 2];
+ mdp_igc_lut_data_v1_7 igc_lut_data_[kMaxSDELayers * 2];
+ mdp_output_layer mdp_out_layer_;
+ const char *device_name_;
+ bool synchronous_commit_;
+ HWDisplayAttributes display_attributes_ = {};
+ HWMixerAttributes mixer_attributes_ = {};
+ std::vector<mdp_destination_scaler_data> mdp_dest_scalar_data_;
+};
+
+} // namespace sdm
+
+#endif // __HW_DEVICE_H__
+
diff --git a/sdm/libs/core/fb/hw_events.cpp b/sdm/libs/core/fb/hw_events.cpp
new file mode 100644
index 0000000..2247a3b
--- /dev/null
+++ b/sdm/libs/core/fb/hw_events.cpp
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 2015 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/resource.h>
+#include <sys/prctl.h>
+#include <utils/debug.h>
+#include <utils/sys.h>
+#include <pthread.h>
+#include <algorithm>
+#include <vector>
+#include <map>
+#include <utility>
+
+#include "hw_events.h"
+
+#define __CLASS__ "HWEvents"
+
+namespace sdm {
+
+pollfd HWEvents::InitializePollFd(HWEventData *event_data) {
+ char node_path[kMaxStringLength] = {0};
+ char data[kMaxStringLength] = {0};
+ pollfd poll_fd = {0};
+ poll_fd.fd = -1;
+
+ if (event_data->event_type == HWEvent::EXIT) {
+ // Create an eventfd to be used to unblock the poll system call when
+ // a thread is exiting.
+ poll_fd.fd = Sys::eventfd_(0, 0);
+ poll_fd.events |= POLLIN;
+ exit_fd_ = poll_fd.fd;
+ } else {
+ snprintf(node_path, sizeof(node_path), "%s%d/%s", fb_path_, fb_num_,
+ map_event_to_node_[event_data->event_type]);
+ poll_fd.fd = Sys::open_(node_path, O_RDONLY);
+ poll_fd.events |= POLLPRI | POLLERR;
+ }
+
+ if (poll_fd.fd < 0) {
+ DLOGW("open failed for display=%d event=%s, error=%s", fb_num_,
+ map_event_to_node_[event_data->event_type], strerror(errno));
+ return poll_fd;
+ }
+
+ // Read once on all fds to clear data on all fds.
+ Sys::pread_(poll_fd.fd, data , kMaxStringLength, 0);
+
+ return poll_fd;
+}
+
+DisplayError HWEvents::SetEventParser(HWEvent event_type, HWEventData *event_data) {
+ DisplayError error = kErrorNone;
+ switch (event_type) {
+ case HWEvent::VSYNC:
+ event_data->event_parser = &HWEvents::HandleVSync;
+ break;
+ case HWEvent::IDLE_NOTIFY:
+ event_data->event_parser = &HWEvents::HandleIdleTimeout;
+ break;
+ case HWEvent::CEC_READ_MESSAGE:
+ event_data->event_parser = &HWEvents::HandleCECMessage;
+ break;
+ case HWEvent::EXIT:
+ event_data->event_parser = &HWEvents::HandleThreadExit;
+ break;
+ case HWEvent::SHOW_BLANK_EVENT:
+ event_data->event_parser = &HWEvents::HandleBlank;
+ break;
+ case HWEvent::THERMAL_LEVEL:
+ event_data->event_parser = &HWEvents::HandleThermal;
+ break;
+ case HWEvent::IDLE_POWER_COLLAPSE:
+ event_data->event_parser = &HWEvents::HandleIdlePowerCollapse;
+ break;
+ case HWEvent::PINGPONG_TIMEOUT:
+ event_data->event_parser = &HWEvents::HandlePingPongTimeout;
+ break;
+ default:
+ error = kErrorParameters;
+ break;
+ }
+
+ return error;
+}
+
+void HWEvents::PopulateHWEventData() {
+ for (uint32_t i = 0; i < event_list_.size(); i++) {
+ HWEventData event_data;
+ event_data.event_type = event_list_[i];
+ SetEventParser(event_list_[i], &event_data);
+ poll_fds_[i] = InitializePollFd(&event_data);
+ event_data_list_.push_back(event_data);
+ }
+}
+
+DisplayError HWEvents::Init(int fb_num, DisplayType display_type, HWEventHandler *event_handler,
+ const vector<HWEvent> &event_list, const HWInterface *hw_intf) {
+ if (!event_handler)
+ return kErrorParameters;
+
+ event_handler_ = event_handler;
+ fb_num_ = display_type;
+ event_list_ = event_list;
+ poll_fds_.resize(event_list_.size());
+ event_thread_name_ += " - " + std::to_string(fb_num_);
+ map_event_to_node_ = {{HWEvent::VSYNC, "vsync_event"},
+ {HWEvent::EXIT, "thread_exit"},
+ {HWEvent::IDLE_NOTIFY, "idle_notify"},
+ {HWEvent::SHOW_BLANK_EVENT, "show_blank_event"},
+ {HWEvent::CEC_READ_MESSAGE, "cec/rd_msg"},
+ {HWEvent::THERMAL_LEVEL, "msm_fb_thermal_level"},
+ {HWEvent::IDLE_POWER_COLLAPSE, "idle_power_collapse"},
+ {HWEvent::PINGPONG_TIMEOUT, "pingpong_timeout"}};
+
+ PopulateHWEventData();
+
+ if (pthread_create(&event_thread_, NULL, &DisplayEventThread, this) < 0) {
+ DLOGE("Failed to start %s, error = %s", event_thread_name_.c_str());
+ return kErrorResources;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWEvents::Deinit() {
+ exit_threads_ = true;
+ Sys::pthread_cancel_(event_thread_);
+
+ uint64_t exit_value = 1;
+ ssize_t write_size = Sys::write_(exit_fd_, &exit_value, sizeof(uint64_t));
+ if (write_size != sizeof(uint64_t))
+ DLOGW("Error triggering exit_fd_ (%d). write size = %d, error = %s", exit_fd_, write_size,
+ strerror(errno));
+
+ pthread_join(event_thread_, NULL);
+
+ for (uint32_t i = 0; i < event_list_.size(); i++) {
+ Sys::close_(poll_fds_[i].fd);
+ poll_fds_[i].fd = -1;
+ }
+
+ return kErrorNone;
+}
+
+void* HWEvents::DisplayEventThread(void *context) {
+ if (context) {
+ return reinterpret_cast<HWEvents *>(context)->DisplayEventHandler();
+ }
+
+ return NULL;
+}
+
+void* HWEvents::DisplayEventHandler() {
+ char data[kMaxStringLength] = {0};
+
+ prctl(PR_SET_NAME, event_thread_name_.c_str(), 0, 0, 0);
+ setpriority(PRIO_PROCESS, 0, kThreadPriorityUrgent);
+
+ while (!exit_threads_) {
+ int error = Sys::poll_(poll_fds_.data(), UINT32(event_list_.size()), -1);
+
+ if (error <= 0) {
+ DLOGW("poll failed. error = %s", strerror(errno));
+ continue;
+ }
+
+ for (uint32_t event = 0; event < event_list_.size(); event++) {
+ pollfd &poll_fd = poll_fds_[event];
+
+ if (event_list_.at(event) == HWEvent::EXIT) {
+ if ((poll_fd.revents & POLLIN) && (Sys::read_(poll_fd.fd, data, kMaxStringLength) > 0)) {
+ (this->*(event_data_list_[event]).event_parser)(data);
+ }
+ } else {
+ if ((poll_fd.revents & POLLPRI) &&
+ (Sys::pread_(poll_fd.fd, data, kMaxStringLength, 0) > 0)) {
+ (this->*(event_data_list_[event]).event_parser)(data);
+ }
+ }
+ }
+ }
+
+ pthread_exit(0);
+
+ return NULL;
+}
+
+void HWEvents::HandleVSync(char *data) {
+ int64_t timestamp = 0;
+ if (!strncmp(data, "VSYNC=", strlen("VSYNC="))) {
+ timestamp = strtoll(data + strlen("VSYNC="), NULL, 0);
+ }
+
+ event_handler_->VSync(timestamp);
+}
+
+void HWEvents::HandleIdleTimeout(char *data) {
+ event_handler_->IdleTimeout();
+}
+
+void HWEvents::HandlePingPongTimeout(char *data) {
+ event_handler_->PingPongTimeout();
+}
+
+void HWEvents::HandleThermal(char *data) {
+ int64_t thermal_level = 0;
+ if (!strncmp(data, "thermal_level=", strlen("thermal_level="))) {
+ thermal_level = strtoll(data + strlen("thermal_level="), NULL, 0);
+ }
+
+ DLOGI("Received thermal notification with thermal level = %d", thermal_level);
+
+ event_handler_->ThermalEvent(thermal_level);
+}
+
+void HWEvents::HandleCECMessage(char *data) {
+ event_handler_->CECMessage(data);
+}
+
+void HWEvents::HandleIdlePowerCollapse(char *data) {
+ event_handler_->IdlePowerCollapse();
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/fb/hw_events.h b/sdm/libs/core/fb/hw_events.h
new file mode 100644
index 0000000..55b2cac
--- /dev/null
+++ b/sdm/libs/core/fb/hw_events.h
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2015 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_EVENTS_H__
+#define __HW_EVENTS_H__
+
+#include <sys/poll.h>
+#include <string>
+#include <vector>
+#include <map>
+#include <utility>
+
+#include "hw_interface.h"
+#include "hw_events_interface.h"
+
+namespace sdm {
+
+using std::vector;
+using std::map;
+
+class HWEvents : public HWEventsInterface {
+ public:
+ virtual DisplayError Init(int fb_num, DisplayType display_type, HWEventHandler *event_handler,
+ const vector<HWEvent> &event_list, const HWInterface *hw_intf);
+ virtual DisplayError Deinit();
+ virtual DisplayError SetEventState(HWEvent event, bool enable, void *aux = nullptr) {
+ return kErrorNotSupported;
+ }
+
+ private:
+ static const int kMaxStringLength = 1024;
+
+ typedef void (HWEvents::*EventParser)(char *);
+
+ struct HWEventData {
+ HWEvent event_type {};
+ EventParser event_parser {};
+ };
+
+ static void* DisplayEventThread(void *context);
+ void* DisplayEventHandler();
+ void HandleVSync(char *data);
+ void HandleBlank(char *data) { }
+ void HandleIdleTimeout(char *data);
+ void HandleThermal(char *data);
+ void HandleCECMessage(char *data);
+ void HandleThreadExit(char *data) { }
+ void HandleIdlePowerCollapse(char *data);
+ void HandlePingPongTimeout(char *data);
+ void PopulateHWEventData();
+ DisplayError SetEventParser(HWEvent event_type, HWEventData *event_data);
+ pollfd InitializePollFd(HWEventData *event_data);
+
+ HWEventHandler *event_handler_ = {};
+ vector<HWEvent> event_list_ = {};
+ vector<HWEventData> event_data_list_ = {};
+ vector<pollfd> poll_fds_ = {};
+ map<HWEvent, const char *> map_event_to_node_ = {};
+ pthread_t event_thread_ = {};
+ std::string event_thread_name_ = "SDM_EventThread";
+ bool exit_threads_ = false;
+ const char* fb_path_ = "/sys/devices/virtual/graphics/fb";
+ int fb_num_ = -1;
+ int exit_fd_ = -1;
+};
+
+} // namespace sdm
+
+#endif // __HW_EVENTS_H__
+
diff --git a/sdm/libs/core/fb/hw_hdmi.cpp b/sdm/libs/core/fb/hw_hdmi.cpp
new file mode 100644
index 0000000..b8b196d
--- /dev/null
+++ b/sdm/libs/core/fb/hw_hdmi.cpp
@@ -0,0 +1,1130 @@
+/*
+* Copyright (c) 2015 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <ctype.h>
+#include <fcntl.h>
+#include <linux/videodev2.h>
+#include <utils/debug.h>
+#include <utils/sys.h>
+#include <utils/formats.h>
+
+#include <string>
+#include <vector>
+#include <map>
+#include <utility>
+
+#include "hw_hdmi.h"
+
+#define __CLASS__ "HWHDMI"
+
+#define MIN_HDR_RESET_WAITTIME_SEC 2
+
+namespace sdm {
+
+#ifdef MDP_HDR_STREAM
+static int32_t GetEOTF(const GammaTransfer &transfer) {
+ int32_t mdp_transfer = -1;
+
+ switch (transfer) {
+ case Transfer_SMPTE_ST2084:
+ mdp_transfer = MDP_HDR_EOTF_SMTPE_ST2084;
+ break;
+ case Transfer_HLG:
+ mdp_transfer = MDP_HDR_EOTF_HLG;
+ break;
+ default:
+ DLOGW("Unknown Transfer: %d", transfer);
+ }
+
+ return mdp_transfer;
+}
+
+static int32_t GetColoriMetry(const LayerBuffer & layer_buffer) {
+ bool is_yuv = layer_buffer.flags.video;
+ int32_t colorimetry = -1;
+
+ if (is_yuv) {
+ switch (layer_buffer.color_metadata.colorPrimaries) {
+ case ColorPrimaries_BT601_6_525:
+ case ColorPrimaries_BT601_6_625:
+ colorimetry = MDP_COLORIMETRY_YCBCR_ITU_R_BT_601;
+ break;
+ case ColorPrimaries_BT709_5:
+ colorimetry = MDP_COLORIMETRY_YCBCR_ITU_R_BT_709;
+ break;
+ case ColorPrimaries_BT2020:
+ colorimetry = MDP_COLORIMETRY_YCBCR_ITU_R_BT_2020_YCBCR;
+ break;
+ default:
+ DLOGW("Unknown color primary = %d for YUV", layer_buffer.color_metadata.colorPrimaries);
+ }
+ }
+
+ return colorimetry;
+}
+
+static int32_t GetPixelEncoding(const LayerBuffer &layer_buffer) {
+ bool is_yuv = layer_buffer.flags.video;
+ int32_t mdp_pixel_encoding = -1;
+ mdp_pixel_encoding = MDP_PIXEL_ENCODING_RGB; // set RGB as default
+
+ if (is_yuv) {
+ switch (layer_buffer.format) {
+ case kFormatYCbCr420SemiPlanarVenus:
+ case kFormatYCbCr420SPVenusUbwc:
+ case kFormatYCbCr420Planar:
+ case kFormatYCrCb420Planar:
+ case kFormatYCrCb420PlanarStride16:
+ case kFormatYCbCr420SemiPlanar:
+ case kFormatYCrCb420SemiPlanar:
+ case kFormatYCbCr420P010:
+ case kFormatYCbCr420TP10Ubwc:
+ mdp_pixel_encoding = MDP_PIXEL_ENCODING_YCBCR_420;
+ break;
+ case kFormatYCbCr422H2V1Packed:
+ case kFormatYCrCb422H2V1SemiPlanar:
+ case kFormatYCrCb422H1V2SemiPlanar:
+ case kFormatYCbCr422H2V1SemiPlanar:
+ case kFormatYCbCr422H1V2SemiPlanar:
+ mdp_pixel_encoding = MDP_PIXEL_ENCODING_YCBCR_422;
+ break;
+ default: // other yuv formats
+ DLOGW("New YUV format = %d, need to add support", layer_buffer.format);
+ break;
+ }
+ }
+
+ return mdp_pixel_encoding;
+}
+
+static int32_t GetBitsPerComponent(const LayerBuffer &layer_buffer) {
+ bool is_yuv = layer_buffer.flags.video;
+ bool is_10_bit = Is10BitFormat(layer_buffer.format);
+ int32_t mdp_bpc = -1;
+
+ if (is_yuv) {
+ mdp_bpc = is_10_bit ? MDP_YUV_10_BPC : MDP_YUV_8_BPC;
+ } else {
+ mdp_bpc = is_10_bit ? MDP_RGB_10_BPC : MDP_RGB_8_BPC;
+ }
+
+ return mdp_bpc;
+}
+
+static uint32_t GetRange(const ColorRange &range) {
+ return ((range == Range_Full) ? MDP_DYNAMIC_RANGE_VESA : MDP_DYNAMIC_RANGE_CEA);
+}
+
+static uint32_t GetContentType(const LayerBuffer &layer_buffer) {
+ return (layer_buffer.flags.video ? MDP_CONTENT_TYPE_VIDEO : MDP_CONTENT_TYPE_GRAPHICS);
+}
+#endif
+
+static bool MapHDMIDisplayTiming(const msm_hdmi_mode_timing_info *mode,
+ fb_var_screeninfo *info) {
+ if (!mode || !info) {
+ return false;
+ }
+
+ info->reserved[0] = 0;
+ info->reserved[1] = 0;
+ info->reserved[2] = 0;
+ info->reserved[3] = (info->reserved[3] & 0xFFFF) | (mode->video_format << 16);
+ info->xoffset = 0;
+ info->yoffset = 0;
+ info->xres = mode->active_h;
+ info->yres = mode->active_v;
+ info->pixclock = (mode->pixel_freq) * 1000;
+ info->vmode = mode->interlaced ? FB_VMODE_INTERLACED : FB_VMODE_NONINTERLACED;
+ info->right_margin = mode->front_porch_h;
+ info->hsync_len = mode->pulse_width_h;
+ info->left_margin = mode->back_porch_h;
+ info->lower_margin = mode->front_porch_v;
+ info->vsync_len = mode->pulse_width_v;
+ info->upper_margin = mode->back_porch_v;
+
+ info->grayscale = V4L2_PIX_FMT_RGB24;
+ // If the mode supports YUV420 set grayscale to the FOURCC value for YUV420.
+ std::bitset<32> pixel_formats = mode->pixel_formats;
+ if (pixel_formats[1]) {
+ info->grayscale = V4L2_PIX_FMT_NV12;
+ }
+
+ return true;
+}
+
+HWHDMI::HWHDMI(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf)
+ : HWDevice(buffer_sync_handler), hw_scan_info_(), active_config_index_(0) {
+ HWDevice::device_type_ = kDevicePluggable;
+ HWDevice::device_name_ = "Pluggable Display Device";
+ HWDevice::hw_info_intf_ = hw_info_intf;
+ (void)hdr_reset_start_;
+ (void)hdr_reset_end_;
+ (void)reset_hdr_flag_;
+ (void)cdm_color_space_;
+}
+
+DisplayError HWHDMI::Init() {
+ DisplayError error = kErrorNone;
+
+ SetSourceProductInformation("vendor_name", "ro.product.manufacturer");
+ SetSourceProductInformation("product_description", "ro.product.name");
+
+ error = HWDevice::Init();
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ mdp_dest_scalar_data_.resize(hw_resource_.hw_dest_scalar_info.count);
+
+ error = ReadEDIDInfo();
+ if (error != kErrorNone) {
+ Deinit();
+ return error;
+ }
+
+ if (!IsResolutionFilePresent()) {
+ Deinit();
+ return kErrorHardware;
+ }
+
+ error = ReadTimingInfo();
+ if (error != kErrorNone) {
+ Deinit();
+ return error;
+ }
+
+ ReadScanInfo();
+
+ GetPanelS3DMode();
+
+ error = SetDisplayAttributes(active_config_index_);
+ if (error != kErrorNone) {
+ Deinit();
+ return error;
+ }
+
+ s3d_mode_sdm_to_mdp_.insert(std::pair<HWS3DMode, msm_hdmi_s3d_mode>
+ (kS3DModeNone, HDMI_S3D_NONE));
+ s3d_mode_sdm_to_mdp_.insert(std::pair<HWS3DMode, msm_hdmi_s3d_mode>
+ (kS3DModeLR, HDMI_S3D_SIDE_BY_SIDE));
+ s3d_mode_sdm_to_mdp_.insert(std::pair<HWS3DMode, msm_hdmi_s3d_mode>
+ (kS3DModeRL, HDMI_S3D_SIDE_BY_SIDE));
+ s3d_mode_sdm_to_mdp_.insert(std::pair<HWS3DMode, msm_hdmi_s3d_mode>
+ (kS3DModeTB, HDMI_S3D_TOP_AND_BOTTOM));
+ s3d_mode_sdm_to_mdp_.insert(std::pair<HWS3DMode, msm_hdmi_s3d_mode>
+ (kS3DModeFP, HDMI_S3D_FRAME_PACKING));
+
+ return error;
+}
+
+DisplayError HWHDMI::GetNumDisplayAttributes(uint32_t *count) {
+ *count = UINT32(hdmi_modes_.size());
+ if (*count <= 0) {
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::GetActiveConfig(uint32_t *active_config_index) {
+ *active_config_index = active_config_index_;
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::ReadEDIDInfo() {
+ ssize_t length = -1;
+ char edid_str[kPageSize] = {'\0'};
+ char edid_path[kMaxStringLength] = {'\0'};
+ snprintf(edid_path, sizeof(edid_path), "%s%d/edid_modes", fb_path_, fb_node_index_);
+ int edid_file = Sys::open_(edid_path, O_RDONLY);
+ if (edid_file < 0) {
+ DLOGE("EDID file open failed.");
+ return kErrorHardware;
+ }
+
+ length = Sys::pread_(edid_file, edid_str, sizeof(edid_str)-1, 0);
+ if (length <= 0) {
+ DLOGE("%s: edid_modes file empty");
+ return kErrorHardware;
+ }
+ Sys::close_(edid_file);
+
+ DLOGI("EDID mode string: %s", edid_str);
+ while (length > 1 && isspace(edid_str[length-1])) {
+ --length;
+ }
+ edid_str[length] = '\0';
+
+ if (length > 0) {
+ // Get EDID modes from the EDID string
+ char *ptr = edid_str;
+ const uint32_t edid_count_max = 128;
+ char *tokens[edid_count_max] = { NULL };
+ uint32_t hdmi_mode_count = 0;
+
+ ParseLine(ptr, tokens, edid_count_max, &hdmi_mode_count);
+
+ supported_video_modes_.resize(hdmi_mode_count);
+
+ hdmi_modes_.resize(hdmi_mode_count);
+ for (uint32_t i = 0; i < hdmi_mode_count; i++) {
+ hdmi_modes_[i] = UINT32(atoi(tokens[i]));
+ }
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes) {
+ DTRACE_SCOPED();
+
+ if (index >= hdmi_modes_.size()) {
+ return kErrorNotSupported;
+ }
+
+ // Get the resolution info from the look up table
+ msm_hdmi_mode_timing_info *timing_mode = &supported_video_modes_[0];
+ for (uint32_t i = 0; i < hdmi_modes_.size(); i++) {
+ msm_hdmi_mode_timing_info *cur = &supported_video_modes_[i];
+ if (cur->video_format == hdmi_modes_[index]) {
+ timing_mode = cur;
+ break;
+ }
+ }
+ display_attributes->x_pixels = timing_mode->active_h;
+ display_attributes->y_pixels = timing_mode->active_v;
+ display_attributes->v_front_porch = timing_mode->front_porch_v;
+ display_attributes->v_back_porch = timing_mode->back_porch_v;
+ display_attributes->v_pulse_width = timing_mode->pulse_width_v;
+ uint32_t h_blanking = timing_mode->front_porch_h + timing_mode->back_porch_h +
+ timing_mode->pulse_width_h;
+ display_attributes->h_total = timing_mode->active_h + h_blanking;
+ display_attributes->x_dpi = 0;
+ display_attributes->y_dpi = 0;
+ display_attributes->fps = timing_mode->refresh_rate / 1000;
+ display_attributes->vsync_period_ns = UINT32(1000000000L / display_attributes->fps);
+ display_attributes->is_device_split = false;
+ if (display_attributes->x_pixels > hw_resource_.max_mixer_width) {
+ display_attributes->is_device_split = true;
+ display_attributes->h_total += h_blanking;
+ }
+
+ GetDisplayS3DSupport(index, display_attributes);
+ std::bitset<32> pixel_formats = timing_mode->pixel_formats;
+
+ display_attributes->is_yuv = pixel_formats[1];
+
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::SetDisplayAttributes(uint32_t index) {
+ DTRACE_SCOPED();
+
+ if (index > hdmi_modes_.size()) {
+ return kErrorNotSupported;
+ }
+
+ // Variable screen info
+ fb_var_screeninfo vscreeninfo = {};
+ if (Sys::ioctl_(device_fd_, FBIOGET_VSCREENINFO, &vscreeninfo) < 0) {
+ IOCTL_LOGE(FBIOGET_VSCREENINFO, device_type_);
+ return kErrorHardware;
+ }
+
+ DLOGI("GetInfo<Mode=%d %dx%d (%d,%d,%d),(%d,%d,%d) %dMHz>", vscreeninfo.reserved[3],
+ vscreeninfo.xres, vscreeninfo.yres, vscreeninfo.right_margin, vscreeninfo.hsync_len,
+ vscreeninfo.left_margin, vscreeninfo.lower_margin, vscreeninfo.vsync_len,
+ vscreeninfo.upper_margin, vscreeninfo.pixclock/1000000);
+
+ msm_hdmi_mode_timing_info *timing_mode = &supported_video_modes_[0];
+ for (uint32_t i = 0; i < hdmi_modes_.size(); i++) {
+ msm_hdmi_mode_timing_info *cur = &supported_video_modes_[i];
+ if (cur->video_format == hdmi_modes_[index]) {
+ timing_mode = cur;
+ break;
+ }
+ }
+
+ if (MapHDMIDisplayTiming(timing_mode, &vscreeninfo) == false) {
+ return kErrorParameters;
+ }
+
+ msmfb_metadata metadata = {};
+ metadata.op = metadata_op_vic;
+ metadata.data.video_info_code = timing_mode->video_format;
+ if (Sys::ioctl_(device_fd_, MSMFB_METADATA_SET, &metadata) < 0) {
+ IOCTL_LOGE(MSMFB_METADATA_SET, device_type_);
+ return kErrorHardware;
+ }
+
+ DLOGI("SetInfo<Mode=%d %dx%d (%d,%d,%d),(%d,%d,%d) %dMHz>", vscreeninfo.reserved[3] & 0xFF00,
+ vscreeninfo.xres, vscreeninfo.yres, vscreeninfo.right_margin, vscreeninfo.hsync_len,
+ vscreeninfo.left_margin, vscreeninfo.lower_margin, vscreeninfo.vsync_len,
+ vscreeninfo.upper_margin, vscreeninfo.pixclock/1000000);
+
+ vscreeninfo.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_ALL | FB_ACTIVATE_FORCE;
+ if (Sys::ioctl_(device_fd_, FBIOPUT_VSCREENINFO, &vscreeninfo) < 0) {
+ IOCTL_LOGE(FBIOPUT_VSCREENINFO, device_type_);
+ return kErrorHardware;
+ }
+
+ active_config_index_ = index;
+
+ frame_rate_ = timing_mode->refresh_rate;
+
+ // Get the display attributes for current active config index
+ GetDisplayAttributes(active_config_index_, &display_attributes_);
+ UpdateMixerAttributes();
+
+ supported_s3d_modes_.clear();
+ supported_s3d_modes_.push_back(kS3DModeNone);
+ for (uint32_t mode = kS3DModeNone + 1; mode < kS3DModeMax; mode ++) {
+ if (display_attributes_.s3d_config[(HWS3DMode)mode]) {
+ supported_s3d_modes_.push_back((HWS3DMode)mode);
+ }
+ }
+
+ SetS3DMode(kS3DModeNone);
+
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::GetConfigIndex(char *mode, uint32_t *index) {
+ std::string str(mode);
+ uint32_t value = UINT32(stoi(str));
+
+ // Check if the mode is valid and return corresponding index
+ for (uint32_t i = 0; i < hdmi_modes_.size(); i++) {
+ if (hdmi_modes_[i] == value) {
+ *index = i;
+ DLOGI("Index = %d for config = %d", *index, value);
+ return kErrorNone;
+ }
+ }
+
+ DLOGE("Config = %d not supported", value);
+ return kErrorNotSupported;
+}
+
+DisplayError HWHDMI::Validate(HWLayers *hw_layers) {
+ HWDevice::ResetDisplayParams();
+ return HWDevice::Validate(hw_layers);
+}
+
+DisplayError HWHDMI::Commit(HWLayers *hw_layers) {
+ DisplayError error = UpdateHDRMetaData(hw_layers);
+ if (error != kErrorNone) {
+ return error;
+ }
+ if (cdm_color_space_commit_) {
+#ifdef MDP_COMMIT_UPDATE_CDM_COLOR_SPACE
+ mdp_layer_commit_v1 &mdp_commit = mdp_disp_commit_.commit_v1;
+ mdp_commit.cdm_color_space = cdm_color_space_;
+ mdp_commit.flags |= MDP_COMMIT_UPDATE_CDM_COLOR_SPACE;
+#endif
+ }
+
+ error = HWDevice::Commit(hw_layers);
+ if (cdm_color_space_commit_)
+ cdm_color_space_commit_ = false;
+
+ return error;
+}
+
+DisplayError HWHDMI::GetHWScanInfo(HWScanInfo *scan_info) {
+ if (!scan_info) {
+ return kErrorParameters;
+ }
+ *scan_info = hw_scan_info_;
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::GetVideoFormat(uint32_t config_index, uint32_t *video_format) {
+ if (config_index > hdmi_modes_.size()) {
+ return kErrorNotSupported;
+ }
+
+ *video_format = hdmi_modes_[config_index];
+
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::GetMaxCEAFormat(uint32_t *max_cea_format) {
+ *max_cea_format = HDMI_VFRMT_END;
+
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) {
+ DisplayError error = kErrorNone;
+ int fd = -1;
+ char data[kMaxStringLength] = {'\0'};
+
+ snprintf(data, sizeof(data), "%s%d/hdcp2p2/min_level_change", fb_path_, fb_node_index_);
+
+ fd = Sys::open_(data, O_WRONLY);
+ if (fd < 0) {
+ DLOGW("File '%s' could not be opened.", data);
+ return kErrorHardware;
+ }
+
+ snprintf(data, sizeof(data), "%d", min_enc_level);
+
+ ssize_t err = Sys::pwrite_(fd, data, strlen(data), 0);
+ if (err <= 0) {
+ DLOGE("Write failed, Error = %s", strerror(errno));
+ error = kErrorHardware;
+ }
+
+ Sys::close_(fd);
+
+ return error;
+}
+
+HWScanSupport HWHDMI::MapHWScanSupport(uint32_t value) {
+ switch (value) {
+ // TODO(user): Read the scan type from driver defined values instead of hardcoding
+ case 0:
+ return kScanNotSupported;
+ case 1:
+ return kScanAlwaysOverscanned;
+ case 2:
+ return kScanAlwaysUnderscanned;
+ case 3:
+ return kScanBoth;
+ default:
+ return kScanNotSupported;
+ break;
+ }
+}
+
+void HWHDMI::ReadScanInfo() {
+ int scan_info_file = -1;
+ ssize_t len = -1;
+ char data[kPageSize] = {'\0'};
+
+ snprintf(data, sizeof(data), "%s%d/scan_info", fb_path_, fb_node_index_);
+ scan_info_file = Sys::open_(data, O_RDONLY);
+ if (scan_info_file < 0) {
+ DLOGW("File '%s' not found.", data);
+ return;
+ }
+
+ memset(&data[0], 0, sizeof(data));
+ len = Sys::pread_(scan_info_file, data, sizeof(data) - 1, 0);
+ if (len <= 0) {
+ Sys::close_(scan_info_file);
+ DLOGW("File %s%d/scan_info is empty.", fb_path_, fb_node_index_);
+ return;
+ }
+ data[len] = '\0';
+ Sys::close_(scan_info_file);
+
+ const uint32_t scan_info_max_count = 3;
+ uint32_t scan_info_count = 0;
+ char *tokens[scan_info_max_count] = { NULL };
+ ParseLine(data, tokens, scan_info_max_count, &scan_info_count);
+ if (scan_info_count != scan_info_max_count) {
+ DLOGW("Failed to parse scan info string %s", data);
+ return;
+ }
+
+ hw_scan_info_.pt_scan_support = MapHWScanSupport(UINT32(atoi(tokens[0])));
+ hw_scan_info_.it_scan_support = MapHWScanSupport(UINT32(atoi(tokens[1])));
+ hw_scan_info_.cea_scan_support = MapHWScanSupport(UINT32(atoi(tokens[2])));
+ DLOGI("PT %d IT %d CEA %d", hw_scan_info_.pt_scan_support, hw_scan_info_.it_scan_support,
+ hw_scan_info_.cea_scan_support);
+}
+
+int HWHDMI::OpenResolutionFile(int file_mode) {
+ char file_path[kMaxStringLength];
+ memset(file_path, 0, sizeof(file_path));
+ snprintf(file_path , sizeof(file_path), "%s%d/res_info", fb_path_, fb_node_index_);
+
+ int fd = Sys::open_(file_path, file_mode);
+
+ if (fd < 0) {
+ DLOGE("file '%s' not found : ret = %d err str: %s", file_path, fd, strerror(errno));
+ }
+
+ return fd;
+}
+
+// Method to request HDMI driver to write a new page of timing info into res_info node
+void HWHDMI::RequestNewPage(uint32_t page_number) {
+ char page_string[kPageSize];
+ int fd = OpenResolutionFile(O_WRONLY);
+ if (fd < 0) {
+ return;
+ }
+
+ snprintf(page_string, sizeof(page_string), "%d", page_number);
+
+ DLOGI_IF(kTagDriverConfig, "page=%s", page_string);
+
+ ssize_t err = Sys::pwrite_(fd, page_string, sizeof(page_string), 0);
+ if (err <= 0) {
+ DLOGE("Write to res_info failed (%s)", strerror(errno));
+ }
+
+ Sys::close_(fd);
+}
+
+// Reads the contents of res_info node into a buffer if the file is not empty
+bool HWHDMI::ReadResolutionFile(char *config_buffer) {
+ ssize_t bytes_read = 0;
+ int fd = OpenResolutionFile(O_RDONLY);
+ if (fd >= 0) {
+ bytes_read = Sys::pread_(fd, config_buffer, kPageSize, 0);
+ Sys::close_(fd);
+ }
+
+ DLOGI_IF(kTagDriverConfig, "bytes_read = %d", bytes_read);
+
+ return (bytes_read > 0);
+}
+
+// Populates the internal timing info structure with the timing info obtained
+// from the HDMI driver
+DisplayError HWHDMI::ReadTimingInfo() {
+ uint32_t config_index = 0;
+ uint32_t page_number = MSM_HDMI_INIT_RES_PAGE;
+ uint32_t size = sizeof(msm_hdmi_mode_timing_info);
+
+ while (true) {
+ char config_buffer[kPageSize] = {0};
+ msm_hdmi_mode_timing_info *info = reinterpret_cast<msm_hdmi_mode_timing_info *>(config_buffer);
+ RequestNewPage(page_number);
+
+ if (!ReadResolutionFile(config_buffer)) {
+ break;
+ }
+
+ while (info->video_format && size < kPageSize && config_index < hdmi_modes_.size()) {
+ supported_video_modes_[config_index] = *info;
+ size += sizeof(msm_hdmi_mode_timing_info);
+
+ DLOGI_IF(kTagDriverConfig, "Config=%d Mode %d: (%dx%d) @ %d, pixel formats %d",
+ config_index,
+ supported_video_modes_[config_index].video_format,
+ supported_video_modes_[config_index].active_h,
+ supported_video_modes_[config_index].active_v,
+ supported_video_modes_[config_index].refresh_rate,
+ supported_video_modes_[config_index].pixel_formats);
+
+ info++;
+ config_index++;
+ }
+
+ size = sizeof(msm_hdmi_mode_timing_info);
+ // Request HDMI driver to populate res_info with more
+ // timing information
+ page_number++;
+ }
+
+ if (page_number == MSM_HDMI_INIT_RES_PAGE || config_index == 0) {
+ DLOGE("No timing information found.");
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+bool HWHDMI::IsResolutionFilePresent() {
+ bool is_file_present = false;
+ int fd = OpenResolutionFile(O_RDONLY);
+ if (fd >= 0) {
+ is_file_present = true;
+ Sys::close_(fd);
+ }
+
+ return is_file_present;
+}
+
+void HWHDMI::SetSourceProductInformation(const char *node, const char *name) {
+ char property_value[kMaxStringLength];
+ char sys_fs_path[kMaxStringLength];
+ int hdmi_node_index = GetFBNodeIndex(kDevicePluggable);
+ if (hdmi_node_index < 0) {
+ return;
+ }
+
+ ssize_t length = 0;
+ DisplayError error = Debug::GetProperty(name, property_value);
+ if (error != kErrorNone) {
+ return;
+ }
+
+ snprintf(sys_fs_path , sizeof(sys_fs_path), "%s%d/%s", fb_path_, hdmi_node_index, node);
+ length = HWDevice::SysFsWrite(sys_fs_path, property_value,
+ static_cast<ssize_t>(strlen(property_value)));
+ if (length <= 0) {
+ DLOGW("Failed to write %s = %s", node, property_value);
+ }
+}
+
+DisplayError HWHDMI::GetDisplayS3DSupport(uint32_t index,
+ HWDisplayAttributes *attrib) {
+ ssize_t length = -1;
+ char edid_s3d_str[kPageSize] = {'\0'};
+ char edid_s3d_path[kMaxStringLength] = {'\0'};
+ snprintf(edid_s3d_path, sizeof(edid_s3d_path), "%s%d/edid_3d_modes", fb_path_, fb_node_index_);
+
+ if (index > hdmi_modes_.size()) {
+ return kErrorNotSupported;
+ }
+
+ attrib->s3d_config[kS3DModeNone] = 1;
+
+ // Three level inception!
+ // The string looks like 16=SSH,4=FP:TAB:SSH,5=FP:SSH,32=FP:TAB:SSH
+ // Initialize all the pointers to NULL to avoid crash in function strtok_r()
+ char *saveptr_l1 = NULL, *saveptr_l2 = NULL, *saveptr_l3 = NULL;
+ char *l1 = NULL, *l2 = NULL, *l3 = NULL;
+
+ int edid_s3d_node = Sys::open_(edid_s3d_path, O_RDONLY);
+ if (edid_s3d_node < 0) {
+ DLOGW("%s could not be opened : %s", edid_s3d_path, strerror(errno));
+ return kErrorNotSupported;
+ }
+
+ length = Sys::pread_(edid_s3d_node, edid_s3d_str, sizeof(edid_s3d_str)-1, 0);
+ if (length <= 0) {
+ Sys::close_(edid_s3d_node);
+ return kErrorNotSupported;
+ }
+
+ l1 = strtok_r(edid_s3d_str, ",", &saveptr_l1);
+ while (l1 != NULL) {
+ l2 = strtok_r(l1, "=", &saveptr_l2);
+ if (l2 != NULL) {
+ if (hdmi_modes_[index] == (uint32_t)atoi(l2)) {
+ l3 = strtok_r(saveptr_l2, ":", &saveptr_l3);
+ while (l3 != NULL) {
+ if (strncmp("SSH", l3, strlen("SSH")) == 0) {
+ attrib->s3d_config[kS3DModeLR] = 1;
+ attrib->s3d_config[kS3DModeRL] = 1;
+ } else if (strncmp("TAB", l3, strlen("TAB")) == 0) {
+ attrib->s3d_config[kS3DModeTB] = 1;
+ } else if (strncmp("FP", l3, strlen("FP")) == 0) {
+ attrib->s3d_config[kS3DModeFP] = 1;
+ }
+ l3 = strtok_r(NULL, ":", &saveptr_l3);
+ }
+ }
+ }
+ l1 = strtok_r(NULL, ",", &saveptr_l1);
+ }
+
+ Sys::close_(edid_s3d_node);
+ return kErrorNone;
+}
+
+bool HWHDMI::IsSupportedS3DMode(HWS3DMode s3d_mode) {
+ for (uint32_t i = 0; i < supported_s3d_modes_.size(); i++) {
+ if (supported_s3d_modes_[i] == s3d_mode) {
+ return true;
+ }
+ }
+ return false;
+}
+
+DisplayError HWHDMI::SetS3DMode(HWS3DMode s3d_mode) {
+ if (!IsSupportedS3DMode(s3d_mode)) {
+ DLOGW("S3D mode is not supported s3d_mode = %d", s3d_mode);
+ return kErrorNotSupported;
+ }
+
+ std::map<HWS3DMode, msm_hdmi_s3d_mode>::iterator it = s3d_mode_sdm_to_mdp_.find(s3d_mode);
+ if (it == s3d_mode_sdm_to_mdp_.end()) {
+ return kErrorNotSupported;
+ }
+ msm_hdmi_s3d_mode s3d_mdp_mode = it->second;
+
+ if (active_mdp_s3d_mode_ == s3d_mdp_mode) {
+ // HDMI_S3D_SIDE_BY_SIDE is an mdp mapping for kS3DModeLR and kS3DModeRL s3d modes. So no need
+ // to update the s3d_mode node. hw_panel_info needs to be updated to differentiate these two s3d
+ // modes in strategy
+ hw_panel_info_.s3d_mode = s3d_mode;
+ return kErrorNone;
+ }
+
+ ssize_t length = -1;
+ char s3d_mode_path[kMaxStringLength] = {'\0'};
+ char s3d_mode_string[kMaxStringLength] = {'\0'};
+ snprintf(s3d_mode_path, sizeof(s3d_mode_path), "%s%d/s3d_mode", fb_path_, fb_node_index_);
+
+ int s3d_mode_node = Sys::open_(s3d_mode_path, O_RDWR);
+ if (s3d_mode_node < 0) {
+ DLOGW("%s could not be opened : %s", s3d_mode_path, strerror(errno));
+ return kErrorNotSupported;
+ }
+
+ snprintf(s3d_mode_string, sizeof(s3d_mode_string), "%d", s3d_mdp_mode);
+ length = Sys::pwrite_(s3d_mode_node, s3d_mode_string, sizeof(s3d_mode_string), 0);
+ if (length <= 0) {
+ DLOGW("Failed to write into s3d node: %s", strerror(errno));
+ Sys::close_(s3d_mode_node);
+ return kErrorNotSupported;
+ }
+
+ active_mdp_s3d_mode_ = s3d_mdp_mode;
+ hw_panel_info_.s3d_mode = s3d_mode;
+ Sys::close_(s3d_mode_node);
+
+ DLOGI_IF(kTagDriverConfig, "Set s3d mode %d", hw_panel_info_.s3d_mode);
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::GetPanelS3DMode() {
+ ssize_t length = -1;
+ char s3d_mode_path[kMaxStringLength] = {'\0'};
+ char s3d_mode_string[kMaxStringLength] = {'\0'};
+ snprintf(s3d_mode_path, sizeof(s3d_mode_path), "%s%d/s3d_mode", fb_path_, fb_node_index_);
+ int panel_s3d_mode = 0;
+
+ int s3d_mode_node = Sys::open_(s3d_mode_path, O_RDWR);
+ if (s3d_mode_node < 0) {
+ DLOGE("%s could not be opened : %s", s3d_mode_path, strerror(errno));
+ return kErrorNotSupported;
+ }
+
+ length = Sys::pread_(s3d_mode_node, s3d_mode_string, sizeof(s3d_mode_string), 0);
+ if (length <= 0) {
+ DLOGE("Failed read s3d node: %s", strerror(errno));
+ Sys::close_(s3d_mode_node);
+ return kErrorNotSupported;
+ }
+
+ panel_s3d_mode = atoi(s3d_mode_string);
+ if (panel_s3d_mode < HDMI_S3D_NONE || panel_s3d_mode >= HDMI_S3D_MAX) {
+ Sys::close_(s3d_mode_node);
+ DLOGW("HDMI panel S3D mode is not supported panel_s3d_mode = %d", panel_s3d_mode);
+ return kErrorUndefined;
+ }
+
+ active_mdp_s3d_mode_ = static_cast<msm_hdmi_s3d_mode>(panel_s3d_mode);
+ Sys::close_(s3d_mode_node);
+
+ DLOGI_IF(kTagDriverConfig, "Get HDMI panel s3d mode %d", active_mdp_s3d_mode_);
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::GetDynamicFrameRateMode(uint32_t refresh_rate, uint32_t *mode,
+ DynamicFPSData *data, uint32_t *config_index) {
+ msm_hdmi_mode_timing_info *cur = NULL;
+ msm_hdmi_mode_timing_info *dst = NULL;
+ uint32_t i = 0;
+ int pre_refresh_rate_diff = 0;
+ bool pre_unstd_mode = false;
+
+ for (i = 0; i < hdmi_modes_.size(); i++) {
+ msm_hdmi_mode_timing_info *timing_mode = &supported_video_modes_[i];
+ if (timing_mode->video_format == hdmi_modes_[active_config_index_]) {
+ cur = timing_mode;
+ break;
+ }
+ }
+
+ if (cur == NULL) {
+ DLOGE("can't find timing info for active config index(%d)", active_config_index_);
+ return kErrorUndefined;
+ }
+
+ if (cur->refresh_rate != frame_rate_) {
+ pre_unstd_mode = true;
+ }
+
+ if (i >= hdmi_modes_.size()) {
+ return kErrorNotSupported;
+ }
+
+ dst = cur;
+ pre_refresh_rate_diff = static_cast<int>(dst->refresh_rate) - static_cast<int>(refresh_rate);
+
+ for (i = 0; i < hdmi_modes_.size(); i++) {
+ msm_hdmi_mode_timing_info *timing_mode = &supported_video_modes_[i];
+ if (cur->active_h == timing_mode->active_h &&
+ cur->active_v == timing_mode->active_v &&
+ cur->pixel_formats == timing_mode->pixel_formats ) {
+ int cur_refresh_rate_diff = static_cast<int>(timing_mode->refresh_rate) -
+ static_cast<int>(refresh_rate);
+ if (abs(pre_refresh_rate_diff) > abs(cur_refresh_rate_diff)) {
+ pre_refresh_rate_diff = cur_refresh_rate_diff;
+ dst = timing_mode;
+ }
+ }
+ }
+
+ if (pre_refresh_rate_diff > kThresholdRefreshRate) {
+ return kErrorNotSupported;
+ }
+
+ char mode_val[kVideoFormatArrayMax]={};
+ snprintf(mode_val, sizeof(mode_val), "%d", dst->video_format);
+ GetConfigIndex(mode_val, config_index);
+
+ data->hor_front_porch = dst->front_porch_h;
+ data->hor_back_porch = dst->back_porch_h;
+ data->hor_pulse_width = dst->pulse_width_h;
+ data->clk_rate_hz = dst->pixel_freq;
+ data->fps = refresh_rate;
+
+ if (dst->front_porch_h != cur->front_porch_h) {
+ *mode = kModeHFP;
+ }
+
+ if (dst->refresh_rate != refresh_rate || dst->pixel_freq != cur->pixel_freq) {
+ if (*mode == kModeHFP) {
+ if (dst->refresh_rate != refresh_rate) {
+ *mode = kModeHFPCalcClock;
+ } else {
+ *mode = kModeClockHFP;
+ }
+ } else {
+ *mode = kModeClock;
+ }
+ }
+
+ if (pre_unstd_mode && (*mode == kModeHFP)) {
+ *mode = kModeClockHFP;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWHDMI::SetRefreshRate(uint32_t refresh_rate) {
+ char mode_path[kMaxStringLength] = {0};
+ char node_path[kMaxStringLength] = {0};
+ uint32_t mode = kModeClock;
+ uint32_t config_index = 0;
+ DynamicFPSData data;
+ DisplayError error = kErrorNone;
+
+ if (refresh_rate == frame_rate_) {
+ return error;
+ }
+
+ error = GetDynamicFrameRateMode(refresh_rate, &mode, &data, &config_index);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ snprintf(mode_path, sizeof(mode_path), "%s%d/msm_fb_dfps_mode", fb_path_, fb_node_index_);
+ snprintf(node_path, sizeof(node_path), "%s%d/dynamic_fps", fb_path_, fb_node_index_);
+
+ int fd_mode = Sys::open_(mode_path, O_WRONLY);
+ if (fd_mode < 0) {
+ DLOGE("Failed to open %s with error %s", mode_path, strerror(errno));
+ return kErrorFileDescriptor;
+ }
+
+ char dfps_mode[kMaxStringLength];
+ snprintf(dfps_mode, sizeof(dfps_mode), "%d", mode);
+ DLOGI_IF(kTagDriverConfig, "Setting dfps_mode = %d", mode);
+ ssize_t len = Sys::pwrite_(fd_mode, dfps_mode, strlen(dfps_mode), 0);
+ if (len < 0) {
+ DLOGE("Failed to enable dfps mode %d with error %s", mode, strerror(errno));
+ Sys::close_(fd_mode);
+ return kErrorUndefined;
+ }
+ Sys::close_(fd_mode);
+
+ int fd_node = Sys::open_(node_path, O_WRONLY);
+ if (fd_node < 0) {
+ DLOGE("Failed to open %s with error %s", node_path, strerror(errno));
+ return kErrorFileDescriptor;
+ }
+
+ char refresh_rate_string[kMaxStringLength];
+ if (mode == kModeHFP || mode == kModeClock) {
+ snprintf(refresh_rate_string, sizeof(refresh_rate_string), "%d", data.fps);
+ DLOGI_IF(kTagDriverConfig, "Setting refresh rate = %d", data.fps);
+ } else {
+ snprintf(refresh_rate_string, sizeof(refresh_rate_string), "%d %d %d %d %d",
+ data.hor_front_porch, data.hor_back_porch, data.hor_pulse_width,
+ data.clk_rate_hz, data.fps);
+ }
+ len = Sys::pwrite_(fd_node, refresh_rate_string, strlen(refresh_rate_string), 0);
+ if (len < 0) {
+ DLOGE("Failed to write %d with error %s", refresh_rate, strerror(errno));
+ Sys::close_(fd_node);
+ return kErrorUndefined;
+ }
+ Sys::close_(fd_node);
+
+ error = ReadTimingInfo();
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ GetDisplayAttributes(config_index, &display_attributes_);
+ UpdateMixerAttributes();
+
+ frame_rate_ = refresh_rate;
+ active_config_index_ = config_index;
+
+ DLOGI_IF(kTagDriverConfig, "config_index(%d) Mode(%d) frame_rate(%d)",
+ config_index,
+ mode,
+ frame_rate_);
+
+ return kErrorNone;
+}
+
+void HWHDMI::UpdateMixerAttributes() {
+ mixer_attributes_.width = display_attributes_.x_pixels;
+ mixer_attributes_.height = display_attributes_.y_pixels;
+ mixer_attributes_.split_left = display_attributes_.is_device_split ?
+ (display_attributes_.x_pixels / 2) : mixer_attributes_.width;
+}
+
+DisplayError HWHDMI::UpdateHDRMetaData(HWLayers *hw_layers) {
+ if (!hw_panel_info_.hdr_enabled) {
+ return kErrorNone;
+ }
+
+ DisplayError error = kErrorNone;
+
+#ifdef MDP_HDR_STREAM
+ const HWHDRLayerInfo &hdr_layer_info = hw_layers->info.hdr_layer_info;
+ char hdr_stream_path[kMaxStringLength] = {};
+ snprintf(hdr_stream_path, sizeof(hdr_stream_path), "%s%d/hdr_stream", fb_path_, fb_node_index_);
+
+ Layer hdr_layer = {};
+ if (hdr_layer_info.operation == HWHDRLayerInfo::kSet && hdr_layer_info.layer_index > -1) {
+ hdr_layer = *(hw_layers->info.stack->layers.at(UINT32(hdr_layer_info.layer_index)));
+ }
+
+ const LayerBuffer *layer_buffer = &hdr_layer.input_buffer;
+ const MasteringDisplay &mastering_display = layer_buffer->color_metadata.masteringDisplayInfo;
+ const ContentLightLevel &light_level = layer_buffer->color_metadata.contentLightLevel;
+ const Primaries &primaries = mastering_display.primaries;
+
+ mdp_hdr_stream_ctrl hdr_ctrl = {};
+ if (hdr_layer_info.operation == HWHDRLayerInfo::kSet) {
+ int32_t eotf = GetEOTF(layer_buffer->color_metadata.transfer);
+ hdr_ctrl.hdr_stream.eotf = (eotf < 0) ? 0 : UINT32(eotf);
+ hdr_ctrl.hdr_stream.white_point_x = primaries.whitePoint[0];
+ hdr_ctrl.hdr_stream.white_point_y = primaries.whitePoint[1];
+ hdr_ctrl.hdr_stream.display_primaries_x[0] = primaries.rgbPrimaries[0][0];
+ hdr_ctrl.hdr_stream.display_primaries_y[0] = primaries.rgbPrimaries[0][1];
+ hdr_ctrl.hdr_stream.display_primaries_x[1] = primaries.rgbPrimaries[1][0];
+ hdr_ctrl.hdr_stream.display_primaries_y[1] = primaries.rgbPrimaries[1][1];
+ hdr_ctrl.hdr_stream.display_primaries_x[2] = primaries.rgbPrimaries[2][0];
+ hdr_ctrl.hdr_stream.display_primaries_y[2] = primaries.rgbPrimaries[2][1];
+ hdr_ctrl.hdr_stream.min_luminance = mastering_display.minDisplayLuminance;
+ hdr_ctrl.hdr_stream.max_luminance = mastering_display.maxDisplayLuminance/10000;
+ hdr_ctrl.hdr_stream.max_content_light_level = light_level.maxContentLightLevel;
+ hdr_ctrl.hdr_stream.max_average_light_level = light_level.minPicAverageLightLevel;
+ hdr_ctrl.hdr_state = HDR_ENABLE;
+ reset_hdr_flag_ = false;
+#ifdef MDP_COMMIT_UPDATE_CDM_COLOR_SPACE
+ HWDevice::SetCSC(layer_buffer->color_metadata, &cdm_color_space_);
+ cdm_color_space_commit_ = true;
+#endif
+ // DP related
+ int32_t pixel_encoding = GetPixelEncoding(hdr_layer.input_buffer);
+ hdr_ctrl.hdr_stream.pixel_encoding = (pixel_encoding < 0) ? 0 : UINT32(pixel_encoding);
+ int32_t colorimetry = GetColoriMetry(hdr_layer.input_buffer);
+ hdr_ctrl.hdr_stream.colorimetry = (colorimetry < 0) ? 0 : UINT32(colorimetry);
+ hdr_ctrl.hdr_stream.range = GetRange(hdr_layer.input_buffer.color_metadata.range);
+ int32_t bits_per_component = GetBitsPerComponent(hdr_layer.input_buffer);
+ hdr_ctrl.hdr_stream.bits_per_component =
+ (bits_per_component < 0) ? 0 : UINT32(bits_per_component);
+ hdr_ctrl.hdr_stream.content_type = GetContentType(hdr_layer.input_buffer);
+
+ DLOGD_IF(kTagDriverConfig, "kSet: HDR Stream : MaxDisplayLuminance = %d\n"
+ "MinDisplayLuminance = %d MaxContentLightLevel = %d MaxAverageLightLevel = %d\n"
+ "Red_x = %d Red_y = %d Green_x = %d Green_y = %d Blue_x = %d Blue_y = %d\n"
+ "WhitePoint_x = %d WhitePoint_y = %d EOTF = %d PixelEncoding = %d Colorimetry = %d\n"
+ "Range = %d BPC = %d ContentType = %d hdr_state = %d",
+ hdr_ctrl.hdr_stream.max_luminance, hdr_ctrl.hdr_stream.min_luminance,
+ hdr_ctrl.hdr_stream.max_content_light_level, hdr_ctrl.hdr_stream.max_average_light_level,
+ hdr_ctrl.hdr_stream.display_primaries_x[0], hdr_ctrl.hdr_stream.display_primaries_y[0],
+ hdr_ctrl.hdr_stream.display_primaries_x[1], hdr_ctrl.hdr_stream.display_primaries_y[1],
+ hdr_ctrl.hdr_stream.display_primaries_x[2], hdr_ctrl.hdr_stream.display_primaries_y[2],
+ hdr_ctrl.hdr_stream.white_point_x, hdr_ctrl.hdr_stream.white_point_x,
+ hdr_ctrl.hdr_stream.eotf, hdr_ctrl.hdr_stream.pixel_encoding,
+ hdr_ctrl.hdr_stream.colorimetry, hdr_ctrl.hdr_stream.range,
+ hdr_ctrl.hdr_stream.bits_per_component, hdr_ctrl.hdr_stream.content_type,
+ hdr_ctrl.hdr_state);
+ } else if (hdr_layer_info.operation == HWHDRLayerInfo::kReset) {
+ memset(&hdr_ctrl.hdr_stream, 0, sizeof(hdr_ctrl.hdr_stream));
+ hdr_ctrl.hdr_state = HDR_RESET;
+ reset_hdr_flag_ = true;
+ hdr_reset_start_ = time(NULL);
+#ifdef MDP_COMMIT_UPDATE_CDM_COLOR_SPACE
+ cdm_color_space_ = (mdp_color_space) MDP_CSC_DEFAULT;
+ cdm_color_space_commit_ = true;
+#endif
+ DLOGD_IF(kTagDriverConfig, "kReset: HDR Stream: HDR_RESET");
+ } else if (hdr_layer_info.operation == HWHDRLayerInfo::kNoOp) {
+ if (reset_hdr_flag_) {
+ hdr_reset_end_ = time(NULL);
+
+ if ((hdr_reset_end_ - hdr_reset_start_) >= MIN_HDR_RESET_WAITTIME_SEC) {
+ reset_hdr_flag_ = false;
+ memset(&hdr_ctrl.hdr_stream, 0, sizeof(hdr_ctrl.hdr_stream));
+ hdr_ctrl.hdr_state = HDR_DISABLE;
+ DLOGD_IF(kTagDriverConfig, "kNoOp: HDR Stream: HDR_DISABLE");
+ } else {
+ return kErrorNone;
+ }
+ } else {
+ return kErrorNone;
+ }
+ }
+
+ int fd = Sys::open_(hdr_stream_path, O_WRONLY);
+ if (fd < 0) {
+ DLOGE("Failed to open %s with error %s", hdr_stream_path, strerror(errno));
+ return kErrorFileDescriptor;
+ }
+
+ const void *hdr_metadata = reinterpret_cast<const void*>(&hdr_ctrl);
+ ssize_t len = Sys::pwrite_(fd, hdr_metadata, sizeof(hdr_ctrl), 0);
+ if (len <= 0) {
+ DLOGE("Failed to write hdr_metadata");
+ error = kErrorUndefined;
+ }
+ Sys::close_(fd);
+#endif
+
+ return error;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/core/fb/hw_hdmi.h b/sdm/libs/core/fb/hw_hdmi.h
new file mode 100644
index 0000000..183e9db
--- /dev/null
+++ b/sdm/libs/core/fb/hw_hdmi.h
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2015 - 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_HDMI_H__
+#define __HW_HDMI_H__
+
+#include <video/msm_hdmi_modes.h>
+#include <map>
+#include <vector>
+
+#include "hw_device.h"
+
+namespace sdm {
+
+using std::vector;
+
+class HWHDMI : public HWDevice {
+ public:
+ HWHDMI(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
+
+ protected:
+ enum HWFramerateUpdate {
+ // Switch framerate by switch to other standard modes though panel blank/unblank
+ kModeSuspendResume,
+ // Switch framerate by tuning pixel clock
+ kModeClock,
+ // Switch framerate by tuning vertical front porch
+ kModeVFP,
+ // Switch framerate by tuning horizontal front porch
+ kModeHFP,
+ // Switch framerate by tuning horizontal front porch and clock
+ kModeClockHFP,
+ // Switch framerate by tuning horizontal front porch and re-caculate clock
+ kModeHFPCalcClock,
+ kModeMAX
+ };
+
+ /**
+ * struct DynamicFPSData - defines dynamic fps related data
+ * @hor_front_porch: horizontal front porch
+ * @hor_back_porch: horizontal back porch
+ * @hor_pulse_width: horizontal pulse width
+ * @clk_rate_hz: panel clock rate in HZ
+ * @fps: frames per second
+ */
+ struct DynamicFPSData {
+ uint32_t hor_front_porch;
+ uint32_t hor_back_porch;
+ uint32_t hor_pulse_width;
+ uint32_t clk_rate_hz;
+ uint32_t fps;
+ };
+
+ virtual DisplayError Init();
+ virtual DisplayError GetNumDisplayAttributes(uint32_t *count);
+ // Requirement to call this only after the first config has been explicitly set by client
+ virtual DisplayError GetActiveConfig(uint32_t *active_config);
+ virtual DisplayError GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes);
+ virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info);
+ virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format);
+ virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format);
+ virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level);
+ virtual DisplayError SetDisplayAttributes(uint32_t index);
+ virtual DisplayError GetConfigIndex(char *mode, uint32_t *index);
+ virtual DisplayError Validate(HWLayers *hw_layers);
+ virtual DisplayError Commit(HWLayers *hw_layers);
+ virtual DisplayError SetS3DMode(HWS3DMode s3d_mode);
+ virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
+
+ private:
+ DisplayError ReadEDIDInfo();
+ void ReadScanInfo();
+ HWScanSupport MapHWScanSupport(uint32_t value);
+ int OpenResolutionFile(int file_mode);
+ void RequestNewPage(uint32_t page_number);
+ DisplayError ReadTimingInfo();
+ bool ReadResolutionFile(char *config_buffer);
+ bool IsResolutionFilePresent();
+ void SetSourceProductInformation(const char *node, const char *name);
+ DisplayError GetDisplayS3DSupport(uint32_t index,
+ HWDisplayAttributes *attrib);
+ DisplayError GetPanelS3DMode();
+ bool IsSupportedS3DMode(HWS3DMode s3d_mode);
+ void UpdateMixerAttributes();
+ DisplayError UpdateHDRMetaData(HWLayers *hw_layers);
+
+ DisplayError GetDynamicFrameRateMode(uint32_t refresh_rate, uint32_t*mode,
+ DynamicFPSData *data, uint32_t *config_index);
+ static const int kThresholdRefreshRate = 1000;
+ static const int kVideoFormatArrayMax = 8;
+ vector<uint32_t> hdmi_modes_;
+ // Holds the hdmi timing information. Ex: resolution, fps etc.,
+ vector<msm_hdmi_mode_timing_info> supported_video_modes_;
+ HWScanInfo hw_scan_info_;
+ uint32_t active_config_index_;
+ std::map<HWS3DMode, msm_hdmi_s3d_mode> s3d_mode_sdm_to_mdp_;
+ vector<HWS3DMode> supported_s3d_modes_;
+ msm_hdmi_s3d_mode active_mdp_s3d_mode_ = HDMI_S3D_NONE;
+ uint32_t frame_rate_ = 0;
+ time_t hdr_reset_start_ = 0, hdr_reset_end_ = 0;
+ bool reset_hdr_flag_ = false;
+ mdp_color_space cdm_color_space_ = {};
+ bool cdm_color_space_commit_ = false;
+};
+
+} // namespace sdm
+
+#endif // __HW_HDMI_H__
+
diff --git a/sdm/libs/core/fb/hw_info.cpp b/sdm/libs/core/fb/hw_info.cpp
new file mode 100644
index 0000000..1444947
--- /dev/null
+++ b/sdm/libs/core/fb/hw_info.cpp
@@ -0,0 +1,605 @@
+/*
+* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/sys.h>
+#include <dlfcn.h>
+
+#include <algorithm>
+#include <iostream>
+#include <fstream>
+#include <map>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "hw_info.h"
+
+#define __CLASS__ "HWInfo"
+
+using std::vector;
+using std::map;
+using std::string;
+using std::fstream;
+using std::to_string;
+
+namespace sdm {
+
+// kDefaultFormatSupport contains the bit map of supported formats for each hw blocks.
+// For eg: if Cursor supports MDP_RGBA_8888[bit-13] and MDP_RGB_565[bit-0], then cursor pipe array
+// contains { 0x01[0-3], 0x00[4-7], 0x00[8-12], 0x01[13-16], 0x00[17-20], 0x00[21-24], 0x00[24-28] }
+const std::bitset<8> HWInfo::kDefaultFormatSupport[kHWSubBlockMax][
+ BITS_TO_BYTES(MDP_IMGTYPE_LIMIT1)] = {
+ { 0xFF, 0xF5, 0x1C, 0x1E, 0x20, 0xFF, 0x01, 0x00, 0xFE, 0x1F }, // kHWVIGPipe
+ { 0x33, 0xE0, 0x00, 0x16, 0x00, 0xBF, 0x00, 0x00, 0xFE, 0x07 }, // kHWRGBPipe
+ { 0x33, 0xE0, 0x00, 0x16, 0x00, 0xBF, 0x00, 0x00, 0xFE, 0x07 }, // kHWDMAPipe
+ { 0x12, 0x60, 0x0C, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00 }, // kHWCursorPipe
+ { 0xFF, 0xF5, 0x1C, 0x1E, 0x20, 0xFF, 0x01, 0x00, 0xFE, 0x1F }, // kHWRotatorInput
+ { 0xFF, 0xF5, 0x1C, 0x1E, 0x20, 0xFF, 0x01, 0x00, 0xFE, 0x1F }, // kHWRotatorOutput
+ { 0x3F, 0xF4, 0x10, 0x1E, 0x20, 0xFF, 0x01, 0x00, 0xAA, 0x16 }, // kHWWBIntfOutput
+};
+
+int HWInfo::ParseString(const char *input, char *tokens[], const uint32_t max_token,
+ const char *delim, uint32_t *count) {
+ char *tmp_token = NULL;
+ char *temp_ptr;
+ uint32_t index = 0;
+ if (!input) {
+ return -1;
+ }
+ tmp_token = strtok_r(const_cast<char *>(input), delim, &temp_ptr);
+ while (tmp_token && index < max_token) {
+ tokens[index++] = tmp_token;
+ tmp_token = strtok_r(NULL, delim, &temp_ptr);
+ }
+ *count = index;
+
+ return 0;
+}
+
+DisplayError HWInfo::GetDynamicBWLimits(HWResourceInfo *hw_resource) {
+ Sys::fstream fs(kBWModeBitmap, fstream::in);
+ if (!fs.is_open()) {
+ DLOGE("File '%s' not found", kBWModeBitmap);
+ return kErrorHardware;
+ }
+
+ HWDynBwLimitInfo* bw_info = &hw_resource->dyn_bw_info;
+ for (int index = 0; index < kBwModeMax; index++) {
+ bw_info->total_bw_limit[index] = hw_resource->max_bandwidth_low;
+ bw_info->pipe_bw_limit[index] = hw_resource->max_pipe_bw;
+ }
+
+ uint32_t token_count = 0;
+ const uint32_t max_count = kBwModeMax;
+ char *tokens[max_count] = { NULL };
+ string line;
+ while (Sys::getline_(fs, line)) {
+ if (!ParseString(line.c_str(), tokens, max_count, ":, =\n", &token_count)) {
+ if (!strncmp(tokens[0], "default_pipe", strlen("default_pipe"))) {
+ bw_info->pipe_bw_limit[kBwDefault] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "camera_pipe", strlen("camera_pipe"))) {
+ bw_info->pipe_bw_limit[kBwCamera] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "vflip_pipe", strlen("vflip_pipe"))) {
+ bw_info->pipe_bw_limit[kBwVFlip] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "hflip_pipe", strlen("hflip_pipe"))) {
+ bw_info->pipe_bw_limit[kBwHFlip] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "default", strlen("default"))) {
+ bw_info->total_bw_limit[kBwDefault] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "camera", strlen("camera"))) {
+ bw_info->total_bw_limit[kBwCamera] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "vflip", strlen("vflip"))) {
+ bw_info->total_bw_limit[kBwVFlip] = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "hflip", strlen("hflip"))) {
+ bw_info->total_bw_limit[kBwHFlip] = UINT32(atoi(tokens[1]));
+ }
+ }
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWInfo::GetHWResourceInfo(HWResourceInfo *hw_resource) {
+ if (hw_resource_) {
+ *hw_resource = *hw_resource_;
+ return kErrorNone;
+ }
+ string fb_path = "/sys/devices/virtual/graphics/fb"
+ + to_string(kHWCapabilitiesNode) + "/mdp/caps";
+
+ Sys::fstream fs(fb_path, fstream::in);
+ if (!fs.is_open()) {
+ DLOGE("File '%s' not found", fb_path.c_str());
+ return kErrorHardware;
+ }
+
+ hw_resource_ = new HWResourceInfo;
+
+ InitSupportedFormatMap(hw_resource_);
+ hw_resource_->hw_version = kHWMdssVersion5;
+
+ uint32_t token_count = 0;
+ const uint32_t max_count = 256;
+ char *tokens[max_count] = { NULL };
+ string line;
+ while (Sys::getline_(fs, line)) {
+ // parse the line and update information accordingly
+ if (!ParseString(line.c_str(), tokens, max_count, ":, =\n", &token_count)) {
+ if (!strncmp(tokens[0], "hw_rev", strlen("hw_rev"))) {
+ hw_resource_->hw_revision = UINT32(atoi(tokens[1])); // HW Rev, v1/v2
+ } else if (!strncmp(tokens[0], "rot_input_fmts", strlen("rot_input_fmts"))) {
+ ParseFormats(&tokens[1], (token_count - 1), kHWRotatorInput, hw_resource_);
+ } else if (!strncmp(tokens[0], "rot_output_fmts", strlen("rot_output_fmts"))) {
+ ParseFormats(&tokens[1], (token_count - 1), kHWRotatorOutput, hw_resource_);
+ } else if (!strncmp(tokens[0], "wb_output_fmts", strlen("wb_output_fmts"))) {
+ ParseFormats(&tokens[1], (token_count - 1), kHWWBIntfOutput, hw_resource_);
+ } else if (!strncmp(tokens[0], "blending_stages", strlen("blending_stages"))) {
+ hw_resource_->num_blending_stages = UINT8(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_downscale_ratio", strlen("max_downscale_ratio"))) {
+ hw_resource_->max_scale_down = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_upscale_ratio", strlen("max_upscale_ratio"))) {
+ hw_resource_->max_scale_up = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_bandwidth_low", strlen("max_bandwidth_low"))) {
+ hw_resource_->max_bandwidth_low = std::stoull(tokens[1]);
+ } else if (!strncmp(tokens[0], "max_bandwidth_high", strlen("max_bandwidth_high"))) {
+ hw_resource_->max_bandwidth_high = std::stoull(tokens[1]);
+ } else if (!strncmp(tokens[0], "max_mixer_width", strlen("max_mixer_width"))) {
+ hw_resource_->max_mixer_width = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_pipe_width", strlen("max_pipe_width"))) {
+ hw_resource_->max_pipe_width = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_cursor_size", strlen("max_cursor_size"))) {
+ hw_resource_->max_cursor_size = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_pipe_bw", strlen("max_pipe_bw"))) {
+ hw_resource_->max_pipe_bw = std::stoull(tokens[1]);
+ } else if (!strncmp(tokens[0], "max_mdp_clk", strlen("max_mdp_clk"))) {
+ hw_resource_->max_sde_clk = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "clk_fudge_factor", strlen("clk_fudge_factor"))) {
+ hw_resource_->clk_fudge_factor = FLOAT(atoi(tokens[1])) / FLOAT(atoi(tokens[2]));
+ } else if (!strncmp(tokens[0], "fmt_mt_nv12_factor", strlen("fmt_mt_nv12_factor"))) {
+ hw_resource_->macrotile_nv12_factor = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "fmt_mt_factor", strlen("fmt_mt_factor"))) {
+ hw_resource_->macrotile_factor = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "fmt_linear_factor", strlen("fmt_linear_factor"))) {
+ hw_resource_->linear_factor = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "scale_factor", strlen("scale_factor"))) {
+ hw_resource_->scale_factor = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "xtra_ff_factor", strlen("xtra_ff_factor"))) {
+ hw_resource_->extra_fudge_factor = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "amortizable_threshold", strlen("amortizable_threshold"))) {
+ hw_resource_->amortizable_threshold = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "system_overhead_lines", strlen("system_overhead_lines"))) {
+ hw_resource_->system_overhead_lines = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "wb_intf_index", strlen("wb_intf_index"))) {
+ hw_resource_->writeback_index = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "dest_scaler_count", strlen("dest_scaler_count"))) {
+ hw_resource_->hw_dest_scalar_info.count = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_dest_scale_up", strlen("max_dest_scale_up"))) {
+ hw_resource_->hw_dest_scalar_info.max_scale_up = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_dest_scaler_input_width",
+ strlen("max_dest_scaler_input_width"))) {
+ hw_resource_->hw_dest_scalar_info.max_input_width = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_dest_scaler_output_width",
+ strlen("max_dest_scaler_output_width"))) {
+ hw_resource_->hw_dest_scalar_info.max_output_width = UINT32(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "features", strlen("features"))) {
+ for (uint32_t i = 0; i < token_count; i++) {
+ if (!strncmp(tokens[i], "bwc", strlen("bwc"))) {
+ hw_resource_->has_bwc = true;
+ } else if (!strncmp(tokens[i], "ubwc", strlen("ubwc"))) {
+ hw_resource_->has_ubwc = true;
+ } else if (!strncmp(tokens[i], "decimation", strlen("decimation"))) {
+ hw_resource_->has_decimation = true;
+ } else if (!strncmp(tokens[i], "tile_format", strlen("tile_format"))) {
+ hw_resource_->has_macrotile = true;
+ } else if (!strncmp(tokens[i], "src_split", strlen("src_split"))) {
+ hw_resource_->is_src_split = true;
+ } else if (!strncmp(tokens[i], "non_scalar_rgb", strlen("non_scalar_rgb"))) {
+ hw_resource_->has_non_scalar_rgb = true;
+ } else if (!strncmp(tokens[i], "dynamic_bw_limit", strlen("dynamic_bw_limit"))) {
+ hw_resource_->has_dyn_bw_support = true;
+ } else if (!strncmp(tokens[i], "separate_rotator", strlen("separate_rotator"))) {
+ hw_resource_->separate_rotator = true;
+ } else if (!strncmp(tokens[i], "qseed3", strlen("qseed3"))) {
+ hw_resource_->has_qseed3 = true;
+ } else if (!strncmp(tokens[i], "has_ppp", strlen("has_ppp"))) {
+ hw_resource_->has_ppp = true;
+ } else if (!strncmp(tokens[i], "concurrent_writeback", strlen("concurrent_writeback"))) {
+ hw_resource_->has_concurrent_writeback = true;
+ } else if (!strncmp(tokens[i], "avr", strlen("avr"))) {
+ hw_resource_->has_avr = true;
+ } else if (!strncmp(tokens[i], "hdr", strlen("hdr"))) {
+ hw_resource_->has_hdr = true;
+ }
+ }
+ } else if (!strncmp(tokens[0], "pipe_count", strlen("pipe_count"))) {
+ uint32_t pipe_count = UINT8(atoi(tokens[1]));
+ for (uint32_t i = 0; i < pipe_count; i++) {
+ Sys::getline_(fs, line);
+ if (!ParseString(line.c_str(), tokens, max_count, ": =\n", &token_count)) {
+ HWPipeCaps pipe_caps;
+ pipe_caps.type = kPipeTypeUnused;
+ for (uint32_t j = 0; j < token_count; j += 2) {
+ if (!strncmp(tokens[j], "pipe_type", strlen("pipe_type"))) {
+ if (!strncmp(tokens[j+1], "vig", strlen("vig"))) {
+ pipe_caps.type = kPipeTypeVIG;
+ hw_resource_->num_vig_pipe++;
+ } else if (!strncmp(tokens[j+1], "rgb", strlen("rgb"))) {
+ pipe_caps.type = kPipeTypeRGB;
+ hw_resource_->num_rgb_pipe++;
+ } else if (!strncmp(tokens[j+1], "dma", strlen("dma"))) {
+ pipe_caps.type = kPipeTypeDMA;
+ hw_resource_->num_dma_pipe++;
+ } else if (!strncmp(tokens[j+1], "cursor", strlen("cursor"))) {
+ pipe_caps.type = kPipeTypeCursor;
+ hw_resource_->num_cursor_pipe++;
+ }
+ } else if (!strncmp(tokens[j], "pipe_ndx", strlen("pipe_ndx"))) {
+ pipe_caps.id = UINT32(atoi(tokens[j+1]));
+ } else if (!strncmp(tokens[j], "rects", strlen("rects"))) {
+ pipe_caps.max_rects = UINT32(atoi(tokens[j+1]));
+ } else if (!strncmp(tokens[j], "fmts_supported", strlen("fmts_supported"))) {
+ char *tokens_fmt[max_count] = { NULL };
+ uint32_t token_fmt_count = 0;
+ if (!ParseString(tokens[j+1], tokens_fmt, max_count, ",\n", &token_fmt_count)) {
+ if (pipe_caps.type == kPipeTypeVIG) {
+ ParseFormats(tokens_fmt, token_fmt_count, kHWVIGPipe, hw_resource_);
+ } else if (pipe_caps.type == kPipeTypeRGB) {
+ ParseFormats(tokens_fmt, token_fmt_count, kHWRGBPipe, hw_resource_);
+ } else if (pipe_caps.type == kPipeTypeDMA) {
+ ParseFormats(tokens_fmt, token_fmt_count, kHWDMAPipe, hw_resource_);
+ } else if (pipe_caps.type == kPipeTypeCursor) {
+ ParseFormats(tokens_fmt, token_fmt_count, kHWCursorPipe, hw_resource_);
+ }
+ }
+ }
+ }
+ hw_resource_->hw_pipes.push_back(pipe_caps);
+ }
+ }
+ }
+ }
+ }
+
+ // Disable destination scalar count to 0 if extension library is not present
+ DynLib extension_lib;
+ if (!extension_lib.Open("libsdmextension.so")) {
+ hw_resource_->hw_dest_scalar_info.count = 0;
+ }
+
+ DLOGI("SDE Version = %d, SDE Revision = %x, RGB = %d, VIG = %d, DMA = %d, Cursor = %d",
+ hw_resource_->hw_version, hw_resource_->hw_revision, hw_resource_->num_rgb_pipe,
+ hw_resource_->num_vig_pipe, hw_resource_->num_dma_pipe, hw_resource_->num_cursor_pipe);
+ DLOGI("Upscale Ratio = %d, Downscale Ratio = %d, Blending Stages = %d",
+ hw_resource_->max_scale_up, hw_resource_->max_scale_down,
+ hw_resource_->num_blending_stages);
+ DLOGI("SourceSplit = %d QSEED3 = %d", hw_resource_->is_src_split, hw_resource_->has_qseed3);
+ DLOGI("BWC = %d, UBWC = %d, Decimation = %d, Tile Format = %d Concurrent Writeback = %d",
+ hw_resource_->has_bwc, hw_resource_->has_ubwc, hw_resource_->has_decimation,
+ hw_resource_->has_macrotile, hw_resource_->has_concurrent_writeback);
+ DLOGI("MaxLowBw = %" PRIu64 " , MaxHighBw = % " PRIu64 "", hw_resource_->max_bandwidth_low,
+ hw_resource_->max_bandwidth_high);
+ DLOGI("MaxPipeBw = %" PRIu64 " KBps, MaxSDEClock = % " PRIu64 " Hz, ClockFudgeFactor = %f",
+ hw_resource_->max_pipe_bw, hw_resource_->max_sde_clk, hw_resource_->clk_fudge_factor);
+ DLOGI("Prefill factors: Tiled_NV12 = %d, Tiled = %d, Linear = %d, Scale = %d, Fudge_factor = %d",
+ hw_resource_->macrotile_nv12_factor, hw_resource_->macrotile_factor,
+ hw_resource_->linear_factor, hw_resource_->scale_factor, hw_resource_->extra_fudge_factor);
+
+ if (hw_resource_->separate_rotator || hw_resource_->num_dma_pipe) {
+ GetHWRotatorInfo(hw_resource_);
+ }
+
+ // If the driver doesn't spell out the wb index, assume it to be the number of rotators,
+ // based on legacy implementation.
+ if (hw_resource_->writeback_index == kHWBlockMax) {
+ hw_resource_->writeback_index = hw_resource_->hw_rot_info.num_rotator;
+ }
+
+ if (hw_resource_->has_dyn_bw_support) {
+ DisplayError ret = GetDynamicBWLimits(hw_resource_);
+ if (ret != kErrorNone) {
+ DLOGE("Failed to read dynamic band width info");
+ return ret;
+ }
+
+ DLOGI("Has Support for multiple bw limits shown below");
+ for (int index = 0; index < kBwModeMax; index++) {
+ DLOGI("Mode-index=%d total_bw_limit=%d and pipe_bw_limit=%d",
+ index, hw_resource_->dyn_bw_info.total_bw_limit[index],
+ hw_resource_->dyn_bw_info.pipe_bw_limit[index]);
+ }
+ }
+
+ *hw_resource = *hw_resource_;
+
+ return kErrorNone;
+}
+
+DisplayError HWInfo::GetHWRotatorInfo(HWResourceInfo *hw_resource) {
+ if (GetMDSSRotatorInfo(hw_resource) != kErrorNone)
+ return GetV4L2RotatorInfo(hw_resource);
+
+ return kErrorNone;
+}
+
+DisplayError HWInfo::GetMDSSRotatorInfo(HWResourceInfo *hw_resource) {
+ Sys::fstream fs(kRotatorCapsPath, fstream::in);
+ if (!fs.is_open()) {
+ DLOGW("File '%s' not found", kRotatorCapsPath);
+ return kErrorNotSupported;
+ }
+
+ uint32_t token_count = 0;
+ const uint32_t max_count = 10;
+ char *tokens[max_count] = { NULL };
+ string line;
+
+ hw_resource->hw_rot_info.type = HWRotatorInfo::ROT_TYPE_MDSS;
+ while (Sys::getline_(fs, line)) {
+ if (!ParseString(line.c_str(), tokens, max_count, ":, =\n", &token_count)) {
+ if (!strncmp(tokens[0], "wb_count", strlen("wb_count"))) {
+ hw_resource->hw_rot_info.num_rotator = UINT8(atoi(tokens[1]));
+ hw_resource->hw_rot_info.device_path = "/dev/mdss_rotator";
+ } else if (!strncmp(tokens[0], "downscale", strlen("downscale"))) {
+ hw_resource->hw_rot_info.has_downscale = UINT8(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_line_width", strlen("max_line_width"))) {
+ hw_resource->hw_rot_info.max_line_width = UINT64(atoi(tokens[1]));
+ }
+ }
+ }
+
+ DLOGI("MDSS Rotator: Count = %d, Downscale = %d, Min_downscale = %f Max_line_width= %d",
+ hw_resource->hw_rot_info.num_rotator, hw_resource->hw_rot_info.has_downscale,
+ hw_resource->hw_rot_info.min_downscale, hw_resource->hw_rot_info.max_line_width);
+
+ return kErrorNone;
+}
+
+DisplayError HWInfo::GetV4L2RotatorInfo(HWResourceInfo *hw_resource) {
+ string v4l2_path = "/sys/class/video4linux/video";
+ const uint32_t kMaxV4L2Nodes = 64;
+ bool found = false;
+
+ for (uint32_t i = 0; (i < kMaxV4L2Nodes) && (!found); i++) {
+ string path = v4l2_path + to_string(i) + "/name";
+ Sys::fstream fs(path, fstream::in);
+ if (!fs.is_open()) {
+ continue;
+ }
+
+ string line;
+ if (Sys::getline_(fs, line) &&
+ (!strncmp(line.c_str(), "sde_rotator", strlen("sde_rotator")))) {
+ hw_resource->hw_rot_info.device_path = string("/dev/video" + to_string(i));
+ hw_resource->hw_rot_info.num_rotator++;
+ hw_resource->hw_rot_info.type = HWRotatorInfo::ROT_TYPE_V4L2;
+ hw_resource->hw_rot_info.has_downscale = true;
+
+ string caps_path = v4l2_path + to_string(i) + "/device/caps";
+ Sys::fstream caps_fs(caps_path, fstream::in);
+
+ if (caps_fs.is_open()) {
+ uint32_t token_count = 0;
+ const uint32_t max_count = 10;
+ char *tokens[max_count] = { NULL };
+ string caps;
+ while (Sys::getline_(caps_fs, caps)) {
+ if (!ParseString(caps.c_str(), tokens, max_count, ":, =\n", &token_count)) {
+ if (tokens[0] != NULL) {
+ if (!strncmp(tokens[0], "downscale_compression", strlen("downscale_compression"))) {
+ hw_resource->hw_rot_info.downscale_compression = UINT8(atoi(tokens[1]));
+ } else if (!strncmp(tokens[0], "min_downscale", strlen("min_downscale"))) {
+ hw_resource->hw_rot_info.min_downscale = FLOAT(atof(tokens[1]));
+ } else if (!strncmp(tokens[0], "max_line_width", strlen("max_line_width"))) {
+ hw_resource->hw_rot_info.max_line_width = UINT64(atoi(tokens[1]));
+ }
+ }
+ }
+ }
+ }
+
+ // We support only 1 rotator
+ found = true;
+ }
+ }
+
+ DLOGI("V4L2 Rotator: Count = %d, Downscale = %d, Min_downscale = %f, Downscale_compression =%d", \
+ "Max_line_width = %d", hw_resource->hw_rot_info.num_rotator,
+ hw_resource->hw_rot_info.has_downscale, hw_resource->hw_rot_info.min_downscale,
+ hw_resource->hw_rot_info.downscale_compression, hw_resource->hw_rot_info.max_line_width);
+
+ return kErrorNone;
+}
+
+LayerBufferFormat HWInfo::GetSDMFormat(int mdp_format) {
+ switch (mdp_format) {
+ case MDP_ARGB_8888: return kFormatARGB8888;
+ case MDP_RGBA_8888: return kFormatRGBA8888;
+ case MDP_BGRA_8888: return kFormatBGRA8888;
+ case MDP_XRGB_8888: return kFormatXRGB8888;
+ case MDP_RGBX_8888: return kFormatRGBX8888;
+ case MDP_BGRX_8888: return kFormatBGRX8888;
+ case MDP_RGBA_5551: return kFormatRGBA5551;
+ case MDP_RGBA_4444: return kFormatRGBA4444;
+ case MDP_RGB_888: return kFormatRGB888;
+ case MDP_BGR_888: return kFormatBGR888;
+ case MDP_RGB_565: return kFormatRGB565;
+ case MDP_BGR_565: return kFormatBGR565;
+ case MDP_RGBA_8888_UBWC: return kFormatRGBA8888Ubwc;
+ case MDP_RGBX_8888_UBWC: return kFormatRGBX8888Ubwc;
+ case MDP_RGB_565_UBWC: return kFormatBGR565Ubwc;
+ case MDP_Y_CB_CR_H2V2: return kFormatYCbCr420Planar;
+ case MDP_Y_CR_CB_H2V2: return kFormatYCrCb420Planar;
+ case MDP_Y_CR_CB_GH2V2: return kFormatYCrCb420PlanarStride16;
+ case MDP_Y_CBCR_H2V2: return kFormatYCbCr420SemiPlanar;
+ case MDP_Y_CRCB_H2V2: return kFormatYCrCb420SemiPlanar;
+ case MDP_Y_CBCR_H2V2_VENUS: return kFormatYCbCr420SemiPlanarVenus;
+ case MDP_Y_CBCR_H1V2: return kFormatYCbCr422H1V2SemiPlanar;
+ case MDP_Y_CRCB_H1V2: return kFormatYCrCb422H1V2SemiPlanar;
+ case MDP_Y_CBCR_H2V1: return kFormatYCbCr422H2V1SemiPlanar;
+ case MDP_Y_CRCB_H2V1: return kFormatYCrCb422H2V1SemiPlanar;
+ case MDP_Y_CBCR_H2V2_UBWC: return kFormatYCbCr420SPVenusUbwc;
+ case MDP_Y_CRCB_H2V2_VENUS: return kFormatYCrCb420SemiPlanarVenus;
+ case MDP_YCBYCR_H2V1: return kFormatYCbCr422H2V1Packed;
+ case MDP_RGBA_1010102: return kFormatRGBA1010102;
+ case MDP_ARGB_2101010: return kFormatARGB2101010;
+ case MDP_RGBX_1010102: return kFormatRGBX1010102;
+ case MDP_XRGB_2101010: return kFormatXRGB2101010;
+ case MDP_BGRA_1010102: return kFormatBGRA1010102;
+ case MDP_ABGR_2101010: return kFormatABGR2101010;
+ case MDP_BGRX_1010102: return kFormatBGRX1010102;
+ case MDP_XBGR_2101010: return kFormatXBGR2101010;
+ case MDP_RGBA_1010102_UBWC: return kFormatRGBA1010102Ubwc;
+ case MDP_RGBX_1010102_UBWC: return kFormatRGBX1010102Ubwc;
+ case MDP_Y_CBCR_H2V2_P010: return kFormatYCbCr420P010;
+ case MDP_Y_CBCR_H2V2_TP10_UBWC: return kFormatYCbCr420TP10Ubwc;
+ default: return kFormatInvalid;
+ }
+}
+
+void HWInfo::InitSupportedFormatMap(HWResourceInfo *hw_resource) {
+ hw_resource->supported_formats_map.clear();
+
+ for (int sub_blk_type = INT(kHWVIGPipe); sub_blk_type < INT(kHWSubBlockMax); sub_blk_type++) {
+ PopulateSupportedFormatMap(kDefaultFormatSupport[sub_blk_type], MDP_IMGTYPE_LIMIT1,
+ (HWSubBlockType)sub_blk_type, hw_resource);
+ }
+}
+
+void HWInfo::ParseFormats(char *tokens[], uint32_t token_count, HWSubBlockType sub_blk_type,
+ HWResourceInfo *hw_resource) {
+ if (token_count > BITS_TO_BYTES(MDP_IMGTYPE_LIMIT1)) {
+ return;
+ }
+
+ std::unique_ptr<std::bitset<8>[]> format_supported(new std::bitset<8>[token_count]);
+ for (uint32_t i = 0; i < token_count; i++) {
+ format_supported[i] = UINT8(atoi(tokens[i]));
+ }
+
+ PopulateSupportedFormatMap(format_supported.get(), (token_count << 3), sub_blk_type, hw_resource);
+}
+
+void HWInfo::PopulateSupportedFormatMap(const std::bitset<8> *format_supported,
+ uint32_t format_count, HWSubBlockType sub_blk_type,
+ HWResourceInfo *hw_resource) {
+ vector <LayerBufferFormat> supported_sdm_formats;
+ for (uint32_t mdp_format = 0; mdp_format < format_count; mdp_format++) {
+ if (format_supported[mdp_format >> 3][mdp_format & 7]) {
+ LayerBufferFormat sdm_format = GetSDMFormat(INT(mdp_format));
+ if (sdm_format != kFormatInvalid) {
+ supported_sdm_formats.push_back(sdm_format);
+ }
+ }
+ }
+
+ hw_resource->supported_formats_map.erase(sub_blk_type);
+ hw_resource->supported_formats_map.insert(make_pair(sub_blk_type, supported_sdm_formats));
+}
+
+DisplayError HWInfo::GetFirstDisplayInterfaceType(HWDisplayInterfaceInfo *hw_disp_info) {
+ Sys::fstream fs("/sys/devices/virtual/graphics/fb0/msm_fb_type", fstream::in);
+ if (!fs.is_open()) {
+ return kErrorHardware;
+ }
+
+ string line;
+ if (!Sys::getline_(fs, line)) {
+ return kErrorHardware;
+ }
+
+ if (!strncmp(line.c_str(), "dtv panel", strlen("dtv panel")) ||
+ !strncmp(line.c_str(), "dp panel", strlen("dp panel"))) {
+ hw_disp_info->type = kPluggable;
+ DLOGI("First display is HDMI/pluggable");
+ } else {
+ hw_disp_info->type = kBuiltIn;
+ DLOGI("First display is internal display");
+ }
+
+ fs.close();
+ fs.open("/sys/devices/virtual/graphics/fb0/connected", fstream::in);
+ if (!fs.is_open()) {
+ // If fb0 is for a DSI/connected panel, then connected node will not exist.
+ hw_disp_info->is_connected = true;
+ } else {
+ if (!Sys::getline_(fs, line)) {
+ return kErrorHardware;
+ }
+
+ hw_disp_info->is_connected = (!strncmp(line.c_str(), "1", strlen("1")));
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWInfo::GetDisplaysStatus(HWDisplaysInfo *hw_displays_info) {
+ // TODO(user):
+ DLOGW("This operation is not supported on FB Driver.");
+
+ return kErrorNotSupported;
+}
+
+DisplayError HWInfo::GetMaxDisplaysSupported(DisplayType type, int32_t *max_displays) {
+ static DebugTag log_once = kTagNone;
+
+ if (!max_displays) {
+ DLOGE("No output parameter provided!");
+ return kErrorParameters;
+ }
+
+ switch (type) {
+ case kBuiltIn:
+ case kPluggable:
+ case kVirtual:
+ *max_displays = 1;
+ break;
+ case kDisplayTypeMax:
+ *max_displays = 3;
+ break;
+ default:
+ *max_displays = 0;
+ DLOGE("Unknown display type %d.", type);
+ return kErrorParameters;
+ }
+
+ DLOGI_IF(log_once, "Max 3 concurrent displays.");
+ DLOGI_IF(log_once, "Max 1 concurrent display of type %d (BuiltIn).", kBuiltIn);
+ DLOGI_IF(log_once, "Max 1 concurrent display of type %d (Pluggable).", kPluggable);
+ DLOGI_IF(log_once, "Max 1 concurrent display of type %d (Virtual).", kVirtual);
+
+ log_once = kTagDisplay;
+
+ return kErrorNone;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/core/fb/hw_info.h b/sdm/libs/core/fb/hw_info.h
new file mode 100644
index 0000000..b114e9c
--- /dev/null
+++ b/sdm/libs/core/fb/hw_info.h
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2015 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_INFO_H__
+#define __HW_INFO_H__
+
+#include <core/sdm_types.h>
+#include <core/core_interface.h>
+#include <private/hw_info_types.h>
+#include <linux/msm_mdp.h>
+#include <bitset>
+
+#include "hw_info_interface.h"
+
+#ifndef MDP_IMGTYPE_END
+#define MDP_IMGTYPE_LIMIT1 0x100
+#endif
+
+namespace sdm {
+
+class HWInfo: public HWInfoInterface {
+ public:
+ virtual DisplayError Init() { return kErrorNone; }
+ virtual ~HWInfo() { delete hw_resource_; }
+ virtual DisplayError GetHWResourceInfo(HWResourceInfo *hw_resource);
+ virtual DisplayError GetFirstDisplayInterfaceType(HWDisplayInterfaceInfo *hw_disp_info);
+ virtual DisplayError GetDisplaysStatus(HWDisplaysInfo *hw_displays_info);
+ virtual DisplayError GetMaxDisplaysSupported(DisplayType type, int32_t *max_displays);
+
+ private:
+ virtual DisplayError GetHWRotatorInfo(HWResourceInfo *hw_resource);
+ virtual DisplayError GetMDSSRotatorInfo(HWResourceInfo *hw_resource);
+ virtual DisplayError GetV4L2RotatorInfo(HWResourceInfo *hw_resource);
+
+ // TODO(user): Read Mdss version from the driver
+ static const int kHWMdssVersion5 = 500; // MDSS_V5
+ static const int kMaxStringLength = 1024;
+ // MDP Capabilities are replicated across all frame buffer devices.
+ // However, we rely on reading the capabalities from fbO since this
+ // is guaranteed to be available.
+ static const int kHWCapabilitiesNode = 0;
+ static const std::bitset<8> kDefaultFormatSupport[kHWSubBlockMax][
+ BITS_TO_BYTES(MDP_IMGTYPE_LIMIT1)];
+ static constexpr const char *kRotatorCapsPath = "/sys/devices/virtual/rotator/mdss_rotator/caps";
+ static constexpr const char *kBWModeBitmap
+ = "/sys/devices/virtual/graphics/fb0/mdp/bw_mode_bitmap";
+
+ static int ParseString(const char *input, char *tokens[], const uint32_t max_token,
+ const char *delim, uint32_t *count);
+ DisplayError GetDynamicBWLimits(HWResourceInfo *hw_resource);
+ LayerBufferFormat GetSDMFormat(int mdp_format);
+ void InitSupportedFormatMap(HWResourceInfo *hw_resource);
+ void ParseFormats(char *tokens[], uint32_t token_count, HWSubBlockType sub_block_type,
+ HWResourceInfo *hw_resource);
+ void PopulateSupportedFormatMap(const std::bitset<8> *format_supported, uint32_t format_count,
+ HWSubBlockType sub_blk_type, HWResourceInfo *hw_resource);
+ HWResourceInfo *hw_resource_ = NULL;
+};
+
+} // namespace sdm
+
+#endif // __HW_INFO_H__
+
diff --git a/sdm/libs/core/fb/hw_primary.cpp b/sdm/libs/core/fb/hw_primary.cpp
new file mode 100644
index 0000000..ad375a6
--- /dev/null
+++ b/sdm/libs/core/fb/hw_primary.cpp
@@ -0,0 +1,670 @@
+/*
+* Copyright (c) 2015 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <pthread.h>
+#include <fcntl.h>
+#include <sys/prctl.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <utils/debug.h>
+#include <utils/sys.h>
+#include <core/display_interface.h>
+#include <linux/msm_mdp_ext.h>
+#include <utils/rect.h>
+
+#include <string>
+
+#include "hw_primary.h"
+#include "hw_color_manager.h"
+
+#define __CLASS__ "HWPrimary"
+
+#ifndef MDP_COMMIT_CWB_EN
+#define MDP_COMMIT_CWB_EN 0x800
+#endif
+
+#ifndef MDP_COMMIT_CWB_DSPP
+#define MDP_COMMIT_CWB_DSPP 0x1000
+#endif
+
+#ifndef MDP_COMMIT_AVR_EN
+#define MDP_COMMIT_AVR_EN 0x08
+#endif
+
+#ifndef MDP_COMMIT_AVR_ONE_SHOT_MODE
+#define MDP_COMMIT_AVR_ONE_SHOT_MODE 0x10
+#endif
+
+#ifndef MDP_COMMIT_PARTIAL_UPDATE_DUAL_ROI
+#define MDP_COMMIT_PARTIAL_UPDATE_DUAL_ROI 0x20
+#endif
+
+namespace sdm {
+
+using std::string;
+using std::to_string;
+using std::fstream;
+
+HWPrimary::HWPrimary(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf)
+ : HWDevice(buffer_sync_handler) {
+ HWDevice::device_type_ = kDeviceBuiltIn;
+ HWDevice::device_name_ = "BuiltIn Display Device";
+ HWDevice::hw_info_intf_ = hw_info_intf;
+}
+
+DisplayError HWPrimary::Init() {
+ DisplayError error = kErrorNone;
+
+ error = HWDevice::Init();
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ mdp_dest_scalar_data_.resize(hw_resource_.hw_dest_scalar_info.count);
+
+ error = PopulateDisplayAttributes();
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ UpdateMixerAttributes();
+
+ // Need to enable HPD, but toggle at start when HDMI is external
+ // This helps for framework reboot or adb shell stop/start
+ EnableHotPlugDetection(0);
+ EnableHotPlugDetection(1);
+ InitializeConfigs();
+
+ avr_prop_disabled_ = Debug::IsAVRDisabled();
+
+ return error;
+}
+
+bool HWPrimary::GetCurrentModeFromSysfs(size_t *curr_x_pixels, size_t *curr_y_pixels) {
+ bool ret = false;
+ string mode_path = fb_path_ + string("0/mode");
+
+ Sys::fstream fs(mode_path, fstream::in);
+ if (!fs.is_open()) {
+ return false;
+ }
+
+ string line;
+ if (Sys::getline_(fs, line)) {
+ // String is of form "U:1600x2560p-0". Documentation/fb/modedb.txt in
+ // kernel has more info on the format.
+ size_t xpos = line.find(':');
+ size_t ypos = line.find('x');
+
+ if (xpos == string::npos || ypos == string::npos) {
+ DLOGI("Resolution switch not supported");
+ } else {
+ *curr_x_pixels = static_cast<size_t>(atoi(line.c_str() + xpos + 1));
+ *curr_y_pixels = static_cast<size_t>(atoi(line.c_str() + ypos + 1));
+ DLOGI("Current Config: %u x %u", *curr_x_pixels, *curr_y_pixels);
+ ret = true;
+ }
+ }
+
+ return ret;
+}
+
+void HWPrimary::InitializeConfigs() {
+ size_t curr_x_pixels = 0;
+ size_t curr_y_pixels = 0;
+
+ if (!GetCurrentModeFromSysfs(&curr_x_pixels, &curr_y_pixels)) {
+ return;
+ }
+
+ string modes_path = string(fb_path_) + string("0/modes");
+
+ Sys::fstream fs(modes_path, fstream::in);
+ if (!fs.is_open()) {
+ DLOGI("Unable to process modes");
+ return;
+ }
+
+ string line;
+ while (Sys::getline_(fs, line)) {
+ DisplayConfigVariableInfo config;
+ // std::getline (unlike ::getline) removes \n while driver expects it in mode, so add back
+ line += '\n';
+ size_t xpos = line.find(':');
+ size_t ypos = line.find('x');
+
+ if (xpos == string::npos || ypos == string::npos) {
+ continue;
+ }
+
+ config.x_pixels = UINT32(atoi(line.c_str() + xpos + 1));
+ config.y_pixels = UINT32(atoi(line.c_str() + ypos + 1));
+ DLOGI("Found mode %d x %d", config.x_pixels, config.y_pixels);
+ display_configs_.push_back(config);
+ display_config_strings_.push_back(string(line.c_str()));
+
+ if (curr_x_pixels == config.x_pixels && curr_y_pixels == config.y_pixels) {
+ active_config_index_ = UINT32(display_configs_.size() - 1);
+ DLOGI("Active config index %u", active_config_index_);
+ }
+ }
+}
+
+DisplayError HWPrimary::GetNumDisplayAttributes(uint32_t *count) {
+ *count = IsResolutionSwitchEnabled() ? UINT32(display_configs_.size()) : 1;
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::GetActiveConfig(uint32_t *active_config_index) {
+ *active_config_index = active_config_index_;
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes) {
+ if (!display_attributes) {
+ return kErrorParameters;
+ }
+
+ if (IsResolutionSwitchEnabled() && index >= display_configs_.size()) {
+ return kErrorParameters;
+ }
+
+ *display_attributes = display_attributes_;
+ if (IsResolutionSwitchEnabled()) {
+ // Overwrite only the parent portion of object
+ display_attributes->x_pixels = display_configs_.at(index).x_pixels;
+ display_attributes->y_pixels = display_configs_.at(index).y_pixels;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::PopulateDisplayAttributes() {
+ DTRACE_SCOPED();
+
+ // Variable screen info
+ fb_var_screeninfo var_screeninfo = {};
+
+ if (Sys::ioctl_(device_fd_, FBIOGET_VSCREENINFO, &var_screeninfo) < 0) {
+ IOCTL_LOGE(FBIOGET_VSCREENINFO, device_type_);
+ return kErrorHardware;
+ }
+
+ // Frame rate
+ msmfb_metadata meta_data = {};
+ meta_data.op = metadata_op_frame_rate;
+ if (Sys::ioctl_(device_fd_, MSMFB_METADATA_GET, &meta_data) < 0) {
+ IOCTL_LOGE(MSMFB_METADATA_GET, device_type_);
+ return kErrorHardware;
+ }
+
+ // If driver doesn't return width/height information, default to 320 dpi
+ if (INT(var_screeninfo.width) <= 0 || INT(var_screeninfo.height) <= 0) {
+ var_screeninfo.width = UINT32(((FLOAT(var_screeninfo.xres) * 25.4f)/320.0f) + 0.5f);
+ var_screeninfo.height = UINT32(((FLOAT(var_screeninfo.yres) * 25.4f)/320.0f) + 0.5f);
+ DLOGW("Driver doesn't report panel physical width and height - defaulting to 320dpi");
+ }
+
+ display_attributes_.x_pixels = var_screeninfo.xres;
+ display_attributes_.y_pixels = var_screeninfo.yres;
+ display_attributes_.v_front_porch = var_screeninfo.lower_margin;
+ display_attributes_.v_back_porch = var_screeninfo.upper_margin;
+ display_attributes_.v_pulse_width = var_screeninfo.vsync_len;
+ uint32_t h_blanking = var_screeninfo.right_margin + var_screeninfo.left_margin +
+ var_screeninfo.hsync_len;
+ display_attributes_.h_total = var_screeninfo.xres + h_blanking;
+ display_attributes_.x_dpi =
+ (FLOAT(var_screeninfo.xres) * 25.4f) / FLOAT(var_screeninfo.width);
+ display_attributes_.y_dpi =
+ (FLOAT(var_screeninfo.yres) * 25.4f) / FLOAT(var_screeninfo.height);
+ display_attributes_.fps = meta_data.data.panel_frame_rate;
+ display_attributes_.vsync_period_ns = UINT32(1000000000L / display_attributes_.fps);
+ display_attributes_.is_device_split = (hw_panel_info_.split_info.right_split ||
+ (var_screeninfo.xres > hw_resource_.max_mixer_width));
+ display_attributes_.h_total += (display_attributes_.is_device_split ||
+ hw_panel_info_.ping_pong_split)? h_blanking : 0;
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::SetDisplayAttributes(uint32_t index) {
+ DisplayError ret = kErrorNone;
+
+ if (!IsResolutionSwitchEnabled()) {
+ return kErrorNotSupported;
+ }
+
+ if (index >= display_configs_.size()) {
+ return kErrorParameters;
+ }
+
+ string mode_path = string(fb_path_) + string("0/mode");
+ int fd = Sys::open_(mode_path.c_str(), O_WRONLY);
+
+ if (fd < 0) {
+ DLOGE("Opening mode failed");
+ return kErrorNotSupported;
+ }
+
+ ssize_t written = Sys::pwrite_(fd, display_config_strings_.at(index).c_str(),
+ display_config_strings_.at(index).length(), 0);
+ if (written > 0) {
+ DLOGI("Successfully set config %u", index);
+ PopulateHWPanelInfo();
+ PopulateDisplayAttributes();
+ UpdateMixerAttributes();
+ active_config_index_ = index;
+ } else {
+ DLOGE("Writing config index %u failed with error: %s", index, strerror(errno));
+ ret = kErrorParameters;
+ }
+
+ Sys::close_(fd);
+
+ return ret;
+}
+
+DisplayError HWPrimary::SetRefreshRate(uint32_t refresh_rate) {
+ char node_path[kMaxStringLength] = {0};
+
+ if (hw_resource_.has_avr && !avr_prop_disabled_) {
+ return kErrorNotSupported;
+ }
+
+ snprintf(node_path, sizeof(node_path), "%s%d/dynamic_fps", fb_path_, fb_node_index_);
+
+ int fd = Sys::open_(node_path, O_WRONLY);
+ if (fd < 0) {
+ DLOGE("Failed to open %s with error %s", node_path, strerror(errno));
+ return kErrorFileDescriptor;
+ }
+
+ char refresh_rate_string[kMaxStringLength];
+ snprintf(refresh_rate_string, sizeof(refresh_rate_string), "%d", refresh_rate);
+ DLOGI_IF(kTagDriverConfig, "Setting refresh rate = %d", refresh_rate);
+ ssize_t len = Sys::pwrite_(fd, refresh_rate_string, strlen(refresh_rate_string), 0);
+ if (len < 0) {
+ DLOGE("Failed to write %d with error %s", refresh_rate, strerror(errno));
+ Sys::close_(fd);
+ return kErrorUndefined;
+ }
+ Sys::close_(fd);
+
+ DisplayError error = PopulateDisplayAttributes();
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::GetConfigIndex(char *mode, uint32_t *index) {
+ return HWDevice::GetConfigIndex(mode, index);
+}
+
+DisplayError HWPrimary::PowerOff(bool teardown) {
+ if (Sys::ioctl_(device_fd_, FBIOBLANK, FB_BLANK_POWERDOWN) < 0) {
+ IOCTL_LOGE(FB_BLANK_POWERDOWN, device_type_);
+ return kErrorHardware;
+ }
+
+ auto_refresh_ = false;
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::Doze(const HWQosData &qos_data, int *release_fence) {
+ if (Sys::ioctl_(device_fd_, FBIOBLANK, FB_BLANK_NORMAL) < 0) {
+ IOCTL_LOGE(FB_BLANK_NORMAL, device_type_);
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::DozeSuspend(const HWQosData &qos_data, int *release_fence) {
+ if (Sys::ioctl_(device_fd_, FBIOBLANK, FB_BLANK_VSYNC_SUSPEND) < 0) {
+ IOCTL_LOGE(FB_BLANK_VSYNC_SUSPEND, device_type_);
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::Validate(HWLayers *hw_layers) {
+ HWLayersInfo &hw_layer_info = hw_layers->info;
+ LayerStack *stack = hw_layer_info.stack;
+
+ HWDevice::ResetDisplayParams();
+
+ mdp_layer_commit_v1 &mdp_commit = mdp_disp_commit_.commit_v1;
+
+ LayerRect left_roi = hw_layer_info.left_frame_roi.at(0);
+ LayerRect right_roi = hw_layer_info.right_frame_roi.at(0);
+
+ mdp_commit.left_roi.x = UINT32(left_roi.left);
+ mdp_commit.left_roi.y = UINT32(left_roi.top);
+ mdp_commit.left_roi.w = UINT32(left_roi.right - left_roi.left);
+ mdp_commit.left_roi.h = UINT32(left_roi.bottom - left_roi.top);
+
+ // Update second roi information in right_roi
+ if (hw_layer_info.left_frame_roi.size() == 2) {
+ mdp_commit.flags |= MDP_COMMIT_PARTIAL_UPDATE_DUAL_ROI;
+ right_roi = hw_layer_info.left_frame_roi.at(1);
+ }
+
+ // SDM treats ROI as one full coordinate system.
+ // In case source split is disabled, However, Driver assumes Mixer to operate in
+ // different co-ordinate system.
+ if (IsValid(right_roi)) {
+ mdp_commit.right_roi.x = UINT32(right_roi.left);
+ if (!hw_resource_.is_src_split) {
+ mdp_commit.right_roi.x = UINT32(right_roi.left) - mixer_attributes_.split_left;
+ }
+ mdp_commit.right_roi.y = UINT32(right_roi.top);
+ mdp_commit.right_roi.w = UINT32(right_roi.right - right_roi.left);
+ mdp_commit.right_roi.h = UINT32(right_roi.bottom - right_roi.top);
+ }
+
+ if (stack->output_buffer && hw_resource_.has_concurrent_writeback) {
+ LayerBuffer *output_buffer = stack->output_buffer;
+ mdp_out_layer_.writeback_ndx = hw_resource_.writeback_index;
+ mdp_out_layer_.buffer.width = output_buffer->unaligned_width;
+ mdp_out_layer_.buffer.height = output_buffer->unaligned_height;
+ mdp_out_layer_.buffer.comp_ratio.denom = 1000;
+ mdp_out_layer_.buffer.comp_ratio.numer = UINT32(hw_layers->output_compression * 1000);
+ mdp_out_layer_.buffer.fence = -1;
+#ifdef OUT_LAYER_COLOR_SPACE
+ SetCSC(output_buffer->color_metadata, &mdp_out_layer_.color_space);
+#endif
+ SetFormat(output_buffer->format, &mdp_out_layer_.buffer.format);
+ mdp_commit.flags |= MDP_COMMIT_CWB_EN;
+ mdp_commit.flags |= (stack->flags.post_processed_output) ? MDP_COMMIT_CWB_DSPP : 0;
+ DLOGI_IF(kTagDriverConfig, "****************** Conc WB Output buffer Info ******************");
+ DLOGI_IF(kTagDriverConfig, "out_w %d, out_h %d, out_f %d, wb_id %d DSPP output %d",
+ mdp_out_layer_.buffer.width, mdp_out_layer_.buffer.height,
+ mdp_out_layer_.buffer.format, mdp_out_layer_.writeback_ndx,
+ stack->flags.post_processed_output);
+ DLOGI_IF(kTagDriverConfig, "****************************************************************");
+ }
+
+ if (hw_resource_.has_avr) {
+ SetAVRFlags(hw_layers->hw_avr_info, &mdp_commit.flags);
+ }
+
+ return HWDevice::Validate(hw_layers);
+}
+
+DisplayError HWPrimary::Commit(HWLayers *hw_layers) {
+ LayerBuffer *output_buffer = hw_layers->info.stack->output_buffer;
+
+ if (hw_resource_.has_concurrent_writeback && output_buffer) {
+ if (output_buffer->planes[0].fd >= 0) {
+ mdp_out_layer_.buffer.planes[0].fd = output_buffer->planes[0].fd;
+ mdp_out_layer_.buffer.planes[0].offset = output_buffer->planes[0].offset;
+ SetStride(device_type_, output_buffer->format, output_buffer->planes[0].stride,
+ &mdp_out_layer_.buffer.planes[0].stride);
+ mdp_out_layer_.buffer.plane_count = 1;
+ mdp_out_layer_.buffer.fence = -1;
+
+ DLOGI_IF(kTagDriverConfig, "****************** Conc WB Output buffer Info ****************");
+ DLOGI_IF(kTagDriverConfig, "out_fd %d, out_offset %d, out_stride %d",
+ mdp_out_layer_.buffer.planes[0].fd, mdp_out_layer_.buffer.planes[0].offset,
+ mdp_out_layer_.buffer.planes[0].stride);
+ DLOGI_IF(kTagDriverConfig, "**************************************************************");
+ } else {
+ DLOGE("Invalid output buffer fd");
+ return kErrorParameters;
+ }
+ }
+
+ DisplayError ret = HWDevice::Commit(hw_layers);
+
+ if (ret == kErrorNone && hw_resource_.has_concurrent_writeback && output_buffer) {
+ output_buffer->release_fence_fd = mdp_out_layer_.buffer.fence;
+ }
+
+ return ret;
+}
+
+void HWPrimary::SetIdleTimeoutMs(uint32_t timeout_ms) {
+ char node_path[kMaxStringLength] = {0};
+
+ DLOGI_IF(kTagDriverConfig, "Setting idle timeout to = %d ms", timeout_ms);
+
+ snprintf(node_path, sizeof(node_path), "%s%d/idle_time", fb_path_, fb_node_index_);
+
+ // Open a sysfs node to send the timeout value to driver.
+ int fd = Sys::open_(node_path, O_WRONLY);
+ if (fd < 0) {
+ DLOGE("Unable to open %s, node %s", node_path, strerror(errno));
+ return;
+ }
+
+ char timeout_string[64];
+ snprintf(timeout_string, sizeof(timeout_string), "%d", timeout_ms);
+
+ // Notify driver about the timeout value
+ ssize_t length = Sys::pwrite_(fd, timeout_string, strlen(timeout_string), 0);
+ if (length <= 0) {
+ DLOGE("Unable to write into %s, node %s", node_path, strerror(errno));
+ }
+
+ Sys::close_(fd);
+}
+
+DisplayError HWPrimary::SetVSyncState(bool enable) {
+ DTRACE_SCOPED();
+ return HWDevice::SetVSyncState(enable);
+}
+
+DisplayError HWPrimary::SetDisplayMode(const HWDisplayMode hw_display_mode) {
+ uint32_t mode = kModeDefault;
+
+ switch (hw_display_mode) {
+ case kModeVideo:
+ mode = kModeLPMVideo;
+ break;
+ case kModeCommand:
+ mode = kModeLPMCommand;
+ break;
+ default:
+ DLOGW("Failed to translate SDE display mode %d to a MSMFB_LPM_ENABLE mode",
+ hw_display_mode);
+ return kErrorParameters;
+ }
+
+ if (Sys::ioctl_(device_fd_, INT(MSMFB_LPM_ENABLE), &mode) < 0) {
+ IOCTL_LOGE(MSMFB_LPM_ENABLE, device_type_);
+ return kErrorHardware;
+ }
+
+ DLOGI("Triggering display mode change to %d on next commit.", hw_display_mode);
+ synchronous_commit_ = true;
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::SetPanelBrightness(int level) {
+ char buffer[kMaxSysfsCommandLength] = {0};
+
+ DLOGV_IF(kTagDriverConfig, "Set brightness level to %d", level);
+ int fd = Sys::open_(kBrightnessNode, O_RDWR);
+ if (fd < 0) {
+ DLOGV_IF(kTagDriverConfig, "Failed to open node = %s, error = %s ", kBrightnessNode,
+ strerror(errno));
+ return kErrorFileDescriptor;
+ }
+
+ int32_t bytes = snprintf(buffer, kMaxSysfsCommandLength, "%d\n", level);
+ if (bytes < 0) {
+ DLOGV_IF(kTagDriverConfig, "Failed to copy new brightness level = %d", level);
+ Sys::close_(fd);
+ return kErrorUndefined;
+ }
+
+ ssize_t ret = Sys::pwrite_(fd, buffer, static_cast<size_t>(bytes), 0);
+ if (ret <= 0) {
+ DLOGV_IF(kTagDriverConfig, "Failed to write to node = %s, error = %s ", kBrightnessNode,
+ strerror(errno));
+ Sys::close_(fd);
+ return kErrorUndefined;
+ }
+ Sys::close_(fd);
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::GetPanelBrightness(int *level) {
+ char brightness[kMaxStringLength] = {0};
+
+ if (!level) {
+ DLOGV_IF(kTagDriverConfig, "Invalid input, null pointer.");
+ return kErrorParameters;
+ }
+
+ int fd = Sys::open_(kBrightnessNode, O_RDWR);
+ if (fd < 0) {
+ DLOGV_IF(kTagDriverConfig, "Failed to open brightness node = %s, error = %s", kBrightnessNode,
+ strerror(errno));
+ return kErrorFileDescriptor;
+ }
+
+ if (Sys::pread_(fd, brightness, sizeof(brightness), 0) > 0) {
+ *level = atoi(brightness);
+ DLOGV_IF(kTagDriverConfig, "Brightness level = %d", *level);
+ }
+ Sys::close_(fd);
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::SetAutoRefresh(bool enable) {
+ const int kWriteLength = 2;
+ char buffer[kWriteLength] = {'\0'};
+ ssize_t bytes = snprintf(buffer, kWriteLength, "%d", enable);
+
+ if (enable == auto_refresh_) {
+ return kErrorNone;
+ }
+
+ if (HWDevice::SysFsWrite(kAutoRefreshNode, buffer, bytes) <= 0) { // Returns bytes written
+ return kErrorUndefined;
+ }
+
+ auto_refresh_ = enable;
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::GetPPFeaturesVersion(PPFeatureVersion *vers) {
+ mdp_pp_feature_version version = {};
+
+#ifdef PA_DITHER
+ uint32_t feature_id_mapping[kMaxNumPPFeatures] = { PCC, IGC, GC, GC, PA,
+ DITHER, GAMUT, PA_DITHER };
+#else
+ uint32_t feature_id_mapping[kMaxNumPPFeatures] = { PCC, IGC, GC, GC, PA, DITHER, GAMUT };
+#endif
+
+ for (int i(0); i < kMaxNumPPFeatures; i++) {
+ version.pp_feature = feature_id_mapping[i];
+
+ if (Sys::ioctl_(device_fd_, INT(MSMFB_MDP_PP_GET_FEATURE_VERSION), &version) < 0) {
+ IOCTL_LOGE(MSMFB_MDP_PP_GET_FEATURE_VERSION, device_type_);
+ return kErrorHardware;
+ }
+ vers->version[i] = version.version_info;
+ }
+
+ return kErrorNone;
+}
+
+// It was entered with PPFeaturesConfig::locker_ being hold.
+DisplayError HWPrimary::SetPPFeatures(PPFeaturesConfig *feature_list) {
+ msmfb_mdp_pp kernel_params = {};
+ int ret = 0;
+ PPFeatureInfo *feature = NULL;
+
+ while (true) {
+ ret = feature_list->RetrieveNextFeature(&feature);
+ if (ret)
+ break;
+
+ if (feature) {
+ DLOGV_IF(kTagDriverConfig, "feature_id = %d", feature->feature_id_);
+
+ if ((feature->feature_id_ < kMaxNumPPFeatures)) {
+ HWColorManager::SetFeature[feature->feature_id_](*feature, &kernel_params);
+ if (Sys::ioctl_(device_fd_, INT(MSMFB_MDP_PP), &kernel_params) < 0) {
+ IOCTL_LOGE(MSMFB_MDP_PP, device_type_);
+
+ feature_list->Reset();
+ return kErrorHardware;
+ }
+ }
+ }
+ } // while(true)
+
+ // Once all features were consumed, then destroy all feature instance from feature_list,
+ // Then mark it as non-dirty of PPFeaturesConfig cache.
+ feature_list->Reset();
+
+ return kErrorNone;
+}
+
+DisplayError HWPrimary::SetMixerAttributes(const HWMixerAttributes &mixer_attributes) {
+ if (IsResolutionSwitchEnabled()) {
+ return kErrorNotSupported;
+ }
+
+ return HWDevice::SetMixerAttributes(mixer_attributes);
+}
+
+void HWPrimary::UpdateMixerAttributes() {
+ mixer_attributes_.width = display_attributes_.x_pixels;
+ mixer_attributes_.height = display_attributes_.y_pixels;
+ mixer_attributes_.split_left = display_attributes_.is_device_split ?
+ hw_panel_info_.split_info.left_split : mixer_attributes_.width;
+}
+
+void HWPrimary::SetAVRFlags(const HWAVRInfo &hw_avr_info, uint32_t *avr_flags) {
+ // TODO(user): Add explicit cont. flag.
+ if (hw_avr_info.mode == kOneShotMode) {
+ *avr_flags |= MDP_COMMIT_AVR_ONE_SHOT_MODE | MDP_COMMIT_AVR_EN;
+ }
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/core/fb/hw_primary.h b/sdm/libs/core/fb/hw_primary.h
new file mode 100644
index 0000000..6d611a5
--- /dev/null
+++ b/sdm/libs/core/fb/hw_primary.h
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2015-2016, 2018 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_PRIMARY_H__
+#define __HW_PRIMARY_H__
+
+#include <sys/poll.h>
+#include <vector>
+#include <string>
+
+#include "hw_device.h"
+
+namespace sdm {
+
+class HWPrimary : public HWDevice {
+ public:
+ HWPrimary(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
+
+ protected:
+ virtual DisplayError Init();
+ virtual DisplayError GetNumDisplayAttributes(uint32_t *count);
+ virtual DisplayError GetActiveConfig(uint32_t *active_config);
+ virtual DisplayError GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes);
+ virtual DisplayError SetDisplayAttributes(uint32_t index);
+ virtual DisplayError GetConfigIndex(char *mode, uint32_t *index);
+ virtual DisplayError PowerOff(bool teardown);
+ virtual DisplayError Doze(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError DozeSuspend(const HWQosData &qos_data, int *release_fence);
+ virtual DisplayError Validate(HWLayers *hw_layers);
+ virtual DisplayError Commit(HWLayers *hw_layers);
+ virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
+ virtual DisplayError SetVSyncState(bool enable);
+ virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode);
+ virtual DisplayError SetRefreshRate(uint32_t refresh_rate);
+ virtual DisplayError SetPanelBrightness(int level);
+ virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers);
+ virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list);
+ virtual DisplayError GetPanelBrightness(int *level);
+ virtual DisplayError SetAutoRefresh(bool enable);
+ virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes);
+
+ private:
+ // Panel modes for the MSMFB_LPM_ENABLE ioctl
+ enum {
+ kModeLPMVideo,
+ kModeLPMCommand,
+ };
+
+ enum {
+ kMaxSysfsCommandLength = 12,
+ };
+
+ DisplayError PopulateDisplayAttributes();
+ void InitializeConfigs();
+ bool IsResolutionSwitchEnabled() { return !display_configs_.empty(); }
+ bool GetCurrentModeFromSysfs(size_t *curr_x_pixels, size_t *curr_y_pixels);
+ void UpdateMixerAttributes();
+ void SetAVRFlags(const HWAVRInfo &hw_avr_info, uint32_t *avr_flags);
+
+ std::vector<DisplayConfigVariableInfo> display_configs_;
+ std::vector<std::string> display_config_strings_;
+ uint32_t active_config_index_ = 0;
+ const char *kBrightnessNode = "/sys/class/leds/lcd-backlight/brightness";
+ const char *kAutoRefreshNode = "/sys/devices/virtual/graphics/fb0/msm_cmd_autorefresh_en";
+ bool auto_refresh_ = false;
+ bool avr_prop_disabled_ = false;
+};
+
+} // namespace sdm
+
+#endif // __HW_PRIMARY_H__
+
diff --git a/sdm/libs/core/fb/hw_scale.cpp b/sdm/libs/core/fb/hw_scale.cpp
new file mode 100644
index 0000000..0258570
--- /dev/null
+++ b/sdm/libs/core/fb/hw_scale.cpp
@@ -0,0 +1,314 @@
+/*
+* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#include <stdio.h>
+#include <utils/debug.h>
+#include "hw_scale.h"
+
+#define __CLASS__ "HWScale"
+
+namespace sdm {
+
+DisplayError HWScale::Create(HWScale **intf, bool has_qseed3) {
+ if (has_qseed3) {
+ *intf = new HWScaleV2();
+ } else {
+ *intf = new HWScaleV1();
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWScale::Destroy(HWScale *intf) {
+ delete intf;
+
+ return kErrorNone;
+}
+
+void HWScaleV1::SetHWScaleData(const HWScaleData &scale_data, uint32_t index,
+ mdp_layer_commit_v1 *mdp_commit, HWSubBlockType sub_block_type) {
+ if (!scale_data.enable.scale) {
+ return;
+ }
+
+ if (sub_block_type == kHWDestinationScalar) {
+ return;
+ }
+
+ mdp_input_layer *mdp_layer = &mdp_commit->input_layers[index];
+ mdp_layer->flags |= MDP_LAYER_ENABLE_PIXEL_EXT;
+ mdp_scale_data *mdp_scale = &scale_data_v1_.at(index);
+ mdp_scale->enable_pxl_ext = scale_data.enable.scale;
+ for (int i = 0; i < MAX_PLANES; i++) {
+ const HWPlane &plane = scale_data.plane[i];
+ mdp_scale->init_phase_x[i] = plane.init_phase_x;
+ mdp_scale->phase_step_x[i] = plane.phase_step_x;
+ mdp_scale->init_phase_y[i] = plane.init_phase_y;
+ mdp_scale->phase_step_y[i] = plane.phase_step_y;
+
+ mdp_scale->num_ext_pxls_left[i] = plane.left.extension;
+ mdp_scale->left_ftch[i] = plane.left.overfetch;
+ mdp_scale->left_rpt[i] = plane.left.repeat;
+
+ mdp_scale->num_ext_pxls_top[i] = plane.top.extension;
+ mdp_scale->top_ftch[i] = plane.top.overfetch;
+ mdp_scale->top_rpt[i] = plane.top.repeat;
+
+ mdp_scale->num_ext_pxls_right[i] = plane.right.extension;
+ mdp_scale->right_ftch[i] = plane.right.overfetch;
+ mdp_scale->right_rpt[i] = plane.right.repeat;
+
+ mdp_scale->num_ext_pxls_btm[i] = plane.bottom.extension;
+ mdp_scale->btm_ftch[i] = plane.bottom.overfetch;
+ mdp_scale->btm_rpt[i] = plane.bottom.repeat;
+
+ mdp_scale->roi_w[i] = plane.roi_width;
+ }
+
+ return;
+}
+
+void* HWScaleV1::GetScaleDataRef(uint32_t index, HWSubBlockType sub_block_type) {
+ if (sub_block_type != kHWDestinationScalar) {
+ return &scale_data_v1_.at(index);
+ }
+
+ return NULL;
+}
+
+void HWScaleV1::DumpScaleData(void *mdp_scale) {
+ if (!mdp_scale) {
+ return;
+ }
+
+ mdp_scale_data *scale = reinterpret_cast<mdp_scale_data *>(mdp_scale);
+ if (scale->enable_pxl_ext) {
+ DLOGD_IF(kTagDriverConfig, "Scale Enable = %d", scale->enable_pxl_ext);
+ for (int j = 0; j < MAX_PLANES; j++) {
+ DLOGV_IF(kTagDriverConfig, "Scale Data[%d] : Phase=[%x %x %x %x] Pixel_Ext=[%d %d %d %d]",
+ j, scale->init_phase_x[j], scale->phase_step_x[j], scale->init_phase_y[j],
+ scale->phase_step_y[j], scale->num_ext_pxls_left[j], scale->num_ext_pxls_top[j],
+ scale->num_ext_pxls_right[j], scale->num_ext_pxls_btm[j]);
+ DLOGV_IF(kTagDriverConfig, "Fetch=[%d %d %d %d] Repeat=[%d %d %d %d] roi_width = %d",
+ scale->left_ftch[j], scale->top_ftch[j], scale->right_ftch[j], scale->btm_ftch[j],
+ scale->left_rpt[j], scale->top_rpt[j], scale->right_rpt[j], scale->btm_rpt[j],
+ scale->roi_w[j]);
+ }
+ }
+
+ return;
+}
+
+void HWScaleV2::SetHWScaleData(const HWScaleData &scale_data, uint32_t index,
+ mdp_layer_commit_v1 *mdp_commit, HWSubBlockType sub_block_type) {
+ if (!scale_data.enable.scale && !scale_data.enable.direction_detection &&
+ !scale_data.enable.detail_enhance ) {
+ return;
+ }
+
+ mdp_scale_data_v2 *mdp_scale;
+ if (sub_block_type != kHWDestinationScalar) {
+ mdp_input_layer *mdp_layer = &mdp_commit->input_layers[index];
+ mdp_layer->flags |= MDP_LAYER_ENABLE_QSEED3_SCALE;
+ mdp_scale = &scale_data_v2_.at(index);
+ } else {
+ mdp_scale_data_v2 mdp_dest_scale = {0};
+
+ dest_scale_data_v2_.insert(std::make_pair(index, mdp_dest_scale));
+ mdp_scale = &dest_scale_data_v2_[index];
+ }
+
+ mdp_scale->enable = (scale_data.enable.scale ? ENABLE_SCALE : 0) |
+ (scale_data.enable.direction_detection ? ENABLE_DIRECTION_DETECTION : 0) |
+ (scale_data.enable.detail_enhance ? ENABLE_DETAIL_ENHANCE : 0);
+
+ if (sub_block_type == kHWDestinationScalar) {
+ mdp_destination_scaler_data *mdp_dest_scalar =
+ reinterpret_cast<mdp_destination_scaler_data *>(mdp_commit->dest_scaler);
+
+ mdp_dest_scalar[index].flags = mdp_scale->enable ? MDP_DESTSCALER_ENABLE : 0;
+
+ if (scale_data.enable.detail_enhance) {
+ mdp_dest_scalar[index].flags |= MDP_DESTSCALER_ENHANCER_UPDATE;
+ }
+ }
+
+ for (int i = 0; i < MAX_PLANES; i++) {
+ const HWPlane &plane = scale_data.plane[i];
+ mdp_scale->init_phase_x[i] = plane.init_phase_x;
+ mdp_scale->phase_step_x[i] = plane.phase_step_x;
+ mdp_scale->init_phase_y[i] = plane.init_phase_y;
+ mdp_scale->phase_step_y[i] = plane.phase_step_y;
+
+ mdp_scale->num_ext_pxls_left[i] = UINT32(plane.left.extension);
+ mdp_scale->left_ftch[i] = plane.left.overfetch;
+ mdp_scale->left_rpt[i] = plane.left.repeat;
+
+ mdp_scale->num_ext_pxls_top[i] = UINT32(plane.top.extension);
+ mdp_scale->top_ftch[i] = UINT32(plane.top.overfetch);
+ mdp_scale->top_rpt[i] = UINT32(plane.top.repeat);
+
+ mdp_scale->num_ext_pxls_right[i] = UINT32(plane.right.extension);
+ mdp_scale->right_ftch[i] = plane.right.overfetch;
+ mdp_scale->right_rpt[i] = plane.right.repeat;
+
+ mdp_scale->num_ext_pxls_btm[i] = UINT32(plane.bottom.extension);
+ mdp_scale->btm_ftch[i] = UINT32(plane.bottom.overfetch);
+ mdp_scale->btm_rpt[i] = UINT32(plane.bottom.repeat);
+
+ mdp_scale->roi_w[i] = plane.roi_width;
+
+ mdp_scale->preload_x[i] = UINT32(plane.preload_x);
+ mdp_scale->preload_y[i] = UINT32(plane.preload_y);
+
+ mdp_scale->src_width[i] = plane.src_width;
+ mdp_scale->src_height[i] = plane.src_height;
+ }
+
+ mdp_scale->dst_width = scale_data.dst_width;
+ mdp_scale->dst_height = scale_data.dst_height;
+
+ mdp_scale->y_rgb_filter_cfg = GetMDPScalingFilter(scale_data.y_rgb_filter_cfg);
+ mdp_scale->uv_filter_cfg = GetMDPScalingFilter(scale_data.uv_filter_cfg);
+ mdp_scale->alpha_filter_cfg = GetMDPAlphaInterpolation(scale_data.alpha_filter_cfg);
+ mdp_scale->blend_cfg = scale_data.blend_cfg;
+
+ mdp_scale->lut_flag = (scale_data.lut_flag.lut_swap ? SCALER_LUT_SWAP : 0) |
+ (scale_data.lut_flag.lut_dir_wr ? SCALER_LUT_DIR_WR : 0) |
+ (scale_data.lut_flag.lut_y_cir_wr ? SCALER_LUT_Y_CIR_WR : 0) |
+ (scale_data.lut_flag.lut_uv_cir_wr ? SCALER_LUT_UV_CIR_WR : 0) |
+ (scale_data.lut_flag.lut_y_sep_wr ? SCALER_LUT_Y_SEP_WR : 0) |
+ (scale_data.lut_flag.lut_uv_sep_wr ? SCALER_LUT_UV_SEP_WR : 0);
+
+ mdp_scale->dir_lut_idx = scale_data.dir_lut_idx;
+ mdp_scale->y_rgb_cir_lut_idx = scale_data.y_rgb_cir_lut_idx;
+ mdp_scale->uv_cir_lut_idx = scale_data.uv_cir_lut_idx;
+ mdp_scale->y_rgb_sep_lut_idx = scale_data.y_rgb_sep_lut_idx;
+ mdp_scale->uv_sep_lut_idx = scale_data.uv_sep_lut_idx;
+
+ if (mdp_scale->enable & ENABLE_DETAIL_ENHANCE) {
+ mdp_det_enhance_data *mdp_det_enhance = &mdp_scale->detail_enhance;
+ mdp_det_enhance->enable = scale_data.detail_enhance.enable;
+ mdp_det_enhance->sharpen_level1 = scale_data.detail_enhance.sharpen_level1;
+ mdp_det_enhance->sharpen_level2 = scale_data.detail_enhance.sharpen_level2;
+ mdp_det_enhance->clip = scale_data.detail_enhance.clip;
+ mdp_det_enhance->limit = scale_data.detail_enhance.limit;
+ mdp_det_enhance->thr_quiet = scale_data.detail_enhance.thr_quiet;
+ mdp_det_enhance->thr_dieout = scale_data.detail_enhance.thr_dieout;
+ mdp_det_enhance->thr_low = scale_data.detail_enhance.thr_low;
+ mdp_det_enhance->thr_high = scale_data.detail_enhance.thr_high;
+ mdp_det_enhance->prec_shift = scale_data.detail_enhance.prec_shift;
+
+ for (int i = 0; i < MAX_DET_CURVES; i++) {
+ mdp_det_enhance->adjust_a[i] = scale_data.detail_enhance.adjust_a[i];
+ mdp_det_enhance->adjust_b[i] = scale_data.detail_enhance.adjust_b[i];
+ mdp_det_enhance->adjust_c[i] = scale_data.detail_enhance.adjust_c[i];
+ }
+ }
+
+ return;
+}
+
+void* HWScaleV2::GetScaleDataRef(uint32_t index, HWSubBlockType sub_block_type) {
+ if (sub_block_type != kHWDestinationScalar) {
+ return &scale_data_v2_.at(index);
+ } else {
+ return &dest_scale_data_v2_[index];
+ }
+}
+
+uint32_t HWScaleV2::GetMDPScalingFilter(ScalingFilterConfig filter_cfg) {
+ switch (filter_cfg) {
+ case kFilterEdgeDirected:
+ return FILTER_EDGE_DIRECTED_2D;
+ case kFilterCircular:
+ return FILTER_CIRCULAR_2D;
+ case kFilterSeparable:
+ return FILTER_SEPARABLE_1D;
+ case kFilterBilinear:
+ return FILTER_BILINEAR;
+ default:
+ DLOGE("Invalid Scaling Filter");
+ return kFilterMax;
+ }
+}
+
+uint32_t HWScaleV2::GetMDPAlphaInterpolation(HWAlphaInterpolation alpha_filter_cfg) {
+ switch (alpha_filter_cfg) {
+ case kInterpolationPixelRepeat:
+ return FILTER_ALPHA_DROP_REPEAT;
+ case kInterpolationBilinear:
+ return FILTER_ALPHA_BILINEAR;
+ default:
+ DLOGE("Invalid Alpha Interpolation");
+ return kInterpolationMax;
+ }
+}
+
+void HWScaleV2::DumpScaleData(void *mdp_scale) {
+ if (!mdp_scale) {
+ return;
+ }
+
+ mdp_scale_data_v2 *scale = reinterpret_cast<mdp_scale_data_v2 *>(mdp_scale);
+ if (scale->enable) {
+ DLOGD_IF(kTagDriverConfig, "Scale Enable = %d", scale->enable);
+ for (int j = 0; j < MAX_PLANES; j++) {
+ DLOGV_IF(kTagDriverConfig, "Scale Data[%d]: Phase_init[x y]=[%x %x] Phase_step:[x y]=[%x %x]",
+ j, scale->init_phase_x[j], scale->init_phase_y[j], scale->phase_step_x[j],
+ scale->phase_step_y[j]);
+ DLOGV_IF(kTagDriverConfig, "Preload[x y]=[%x %x], Pixel Ext=[%d %d] Ovfetch=[%d %d %d %d]",
+ scale->preload_x[j], scale->preload_y[j], scale->num_ext_pxls_left[j],
+ scale->num_ext_pxls_top[j], scale->left_ftch[j], scale->top_ftch[j], scale->right_ftch[j],
+ scale->btm_ftch[j]);
+ DLOGV_IF(kTagDriverConfig, "Repeat=[%d %d %d %d] Src[w x h]=[%d %d] roi_width = %d",
+ scale->left_rpt[j], scale->top_rpt[j], scale->right_rpt[j], scale->btm_rpt[j],
+ scale->src_width[j], scale->src_height[j], scale->roi_w[j]);
+ }
+
+ DLOGD_IF(kTagDriverConfig, "LUT flags = %d", scale->lut_flag);
+ DLOGV_IF(kTagDriverConfig, "y_rgb_filter=%d, uv_filter=%d, alpha_filter=%d, blend_cfg=%d",
+ scale->y_rgb_filter_cfg, scale->uv_filter_cfg, scale->alpha_filter_cfg, scale->blend_cfg);
+ DLOGV_IF(kTagDriverConfig, "dir_lut=%d, y_rgb_cir=%d, uv_cir=%d, y_rgb_sep=%d, uv_sep=%d",
+ scale->dir_lut_idx, scale->y_rgb_cir_lut_idx, scale->uv_cir_lut_idx,
+ scale->y_rgb_sep_lut_idx, scale->uv_sep_lut_idx);
+ if (scale->enable & ENABLE_DETAIL_ENHANCE) {
+ mdp_det_enhance_data *de = &scale->detail_enhance;
+ DLOGV_IF(kTagDriverConfig, "Detail Enhance: enable: %d sharpen_level1: %d sharpen_level2: %d",
+ de->enable, de->sharpen_level1, de->sharpen_level2);
+ DLOGV_IF(kTagDriverConfig, "clip: %d limit:%d thr_quiet: %d thr_dieout: %d",
+ de->clip, de->limit, de->thr_quiet, de->thr_dieout);
+ DLOGV_IF(kTagDriverConfig, "thr_low: %d thr_high: %d prec_shift: %d", de->thr_low,
+ de->thr_high, de->prec_shift);
+ for (uint32_t i = 0; i < MAX_DET_CURVES; i++) {
+ DLOGV_IF(kTagDriverConfig, "adjust_a[%d]: %d adjust_b[%d]: %d adjust_c[%d]: %d", i,
+ de->adjust_a[i], i, de->adjust_b[i], i, de->adjust_c[i]);
+ }
+ }
+ }
+
+ return;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/fb/hw_scale.h b/sdm/libs/core/fb/hw_scale.h
new file mode 100644
index 0000000..7590833
--- /dev/null
+++ b/sdm/libs/core/fb/hw_scale.h
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_SCALE_H__
+#define __HW_SCALE_H__
+
+#include <linux/msm_mdp_ext.h>
+#include <private/hw_info_types.h>
+
+#include <cstring>
+#include <array>
+#include <map>
+
+namespace sdm {
+
+class HWScale {
+ public:
+ static DisplayError Create(HWScale **intf, bool has_qseed3);
+ static DisplayError Destroy(HWScale *intf);
+
+ virtual void SetHWScaleData(const HWScaleData &scale, uint32_t index,
+ mdp_layer_commit_v1 *mdp_commit, HWSubBlockType sub_block_type) = 0;
+ virtual void* GetScaleDataRef(uint32_t index, HWSubBlockType sub_block_type) = 0;
+ virtual void DumpScaleData(void *mdp_scale) = 0;
+ virtual void ResetScaleParams() = 0;
+ protected:
+ virtual ~HWScale() { }
+};
+
+class HWScaleV1 : public HWScale {
+ public:
+ virtual void SetHWScaleData(const HWScaleData &scale, uint32_t index,
+ mdp_layer_commit_v1 *mdp_commit, HWSubBlockType sub_block_type);
+ virtual void* GetScaleDataRef(uint32_t index, HWSubBlockType sub_block_type);
+ virtual void DumpScaleData(void *mdp_scale);
+ virtual void ResetScaleParams() { scale_data_v1_ = {}; }
+
+ protected:
+ ~HWScaleV1() {}
+ std::array<mdp_scale_data, (kMaxSDELayers * 2)> scale_data_v1_ = {};
+};
+
+class HWScaleV2 : public HWScale {
+ public:
+ virtual void SetHWScaleData(const HWScaleData &scale, uint32_t index,
+ mdp_layer_commit_v1 *mdp_commit, HWSubBlockType sub_block_type);
+ virtual void* GetScaleDataRef(uint32_t index, HWSubBlockType sub_block_type);
+ virtual void DumpScaleData(void *mdp_scale);
+ virtual void ResetScaleParams() { scale_data_v2_ = {}; dest_scale_data_v2_ = {}; }
+
+ protected:
+ ~HWScaleV2() {}
+ std::array<mdp_scale_data_v2, (kMaxSDELayers * 2)> scale_data_v2_ = {};
+ std::map<uint32_t, mdp_scale_data_v2> dest_scale_data_v2_ = {};
+
+ private:
+ uint32_t GetMDPAlphaInterpolation(HWAlphaInterpolation alpha_filter_cfg);
+ uint32_t GetMDPScalingFilter(ScalingFilterConfig filter_cfg);
+};
+
+} // namespace sdm
+
+#endif // __HW_SCALE_H__
+
diff --git a/sdm/libs/core/fb/hw_virtual.cpp b/sdm/libs/core/fb/hw_virtual.cpp
new file mode 100644
index 0000000..21017a5
--- /dev/null
+++ b/sdm/libs/core/fb/hw_virtual.cpp
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2015 - 2016, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <utils/debug.h>
+#include "hw_virtual.h"
+
+#define __CLASS__ "HWVirtual"
+
+namespace sdm {
+
+HWVirtual::HWVirtual(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf)
+ : HWDevice(buffer_sync_handler) {
+ HWDevice::device_type_ = kDeviceVirtual;
+ HWDevice::device_name_ = "Virtual Display Device";
+ HWDevice::hw_info_intf_ = hw_info_intf;
+}
+
+DisplayError HWVirtual::Init() {
+ return HWDevice::Init();
+}
+
+DisplayError HWVirtual::Validate(HWLayers *hw_layers) {
+ HWDevice::ResetDisplayParams();
+ return HWDevice::Validate(hw_layers);
+}
+
+DisplayError HWVirtual::GetMixerAttributes(HWMixerAttributes *mixer_attributes) {
+ mixer_attributes->width = display_attributes_.x_pixels;
+ mixer_attributes->height = display_attributes_.y_pixels;
+ mixer_attributes_.split_left = display_attributes_.is_device_split ?
+ (display_attributes_.x_pixels / 2) : mixer_attributes_.width;
+
+ return kErrorNone;
+}
+
+DisplayError HWVirtual::SetDisplayAttributes(const HWDisplayAttributes &display_attributes) {
+ if (display_attributes.x_pixels == 0 || display_attributes.y_pixels == 0) {
+ return kErrorParameters;
+ }
+
+ display_attributes_ = display_attributes;
+
+ if (display_attributes_.x_pixels > hw_resource_.max_mixer_width) {
+ display_attributes_.is_device_split = true;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWVirtual::GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes) {
+ display_attributes->fps = 60;
+ // TODO(user): Need to update WB fps
+
+ return kErrorNone;
+}
+
+
+} // namespace sdm
+
diff --git a/sdm/libs/core/fb/hw_virtual.h b/sdm/libs/core/fb/hw_virtual.h
new file mode 100644
index 0000000..1c204cd
--- /dev/null
+++ b/sdm/libs/core/fb/hw_virtual.h
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2015 - 2016, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_VIRTUAL_H__
+#define __HW_VIRTUAL_H__
+
+#include "hw_device.h"
+
+namespace sdm {
+
+class HWVirtual : public HWDevice {
+ public:
+ HWVirtual(BufferSyncHandler *buffer_sync_handler, HWInfoInterface *hw_info_intf);
+ virtual DisplayError SetVSyncState(bool enable) { return kErrorNotSupported; }
+ virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes);
+ virtual DisplayError SetDisplayAttributes(const HWDisplayAttributes &display_attributes);
+ virtual DisplayError GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes);
+
+ protected:
+ virtual DisplayError Init();
+ virtual DisplayError Validate(HWLayers *hw_layers);
+};
+
+} // namespace sdm
+
+#endif // __HW_VIRTUAL_H__
+
diff --git a/sdm/libs/core/hw_events_interface.cpp b/sdm/libs/core/hw_events_interface.cpp
new file mode 100644
index 0000000..1a8f42f
--- /dev/null
+++ b/sdm/libs/core/hw_events_interface.cpp
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <utils/utils.h>
+#include <vector>
+
+#include "hw_events_interface.h"
+#include "fb/hw_events.h"
+#include "drm/hw_events_drm.h"
+
+#define __CLASS__ "HWEventsInterface"
+
+namespace sdm {
+
+DisplayError HWEventsInterface::Create(int display_id, DisplayType display_type,
+ HWEventHandler *event_handler,
+ const std::vector<HWEvent> &event_list,
+ const HWInterface *hw_intf, HWEventsInterface **intf) {
+ DisplayError error = kErrorNone;
+ HWEventsInterface *hw_events = nullptr;
+ if (GetDriverType() == DriverType::FB) {
+ hw_events = new HWEvents();
+ } else {
+ hw_events = new HWEventsDRM();
+ }
+
+ error = hw_events->Init(display_id, display_type, event_handler, event_list, hw_intf);
+ if (error != kErrorNone) {
+ delete hw_events;
+ } else {
+ *intf = hw_events;
+ }
+
+ return error;
+}
+
+DisplayError HWEventsInterface::Destroy(HWEventsInterface *intf) {
+ if (intf) {
+ intf->Deinit();
+ delete intf;
+ }
+
+ return kErrorNone;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/hw_events_interface.h b/sdm/libs/core/hw_events_interface.h
new file mode 100644
index 0000000..81d9b04
--- /dev/null
+++ b/sdm/libs/core/hw_events_interface.h
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_EVENTS_INTERFACE_H__
+#define __HW_EVENTS_INTERFACE_H__
+
+#include <private/hw_info_types.h>
+#include <inttypes.h>
+#include <utility>
+#include <vector>
+
+namespace sdm {
+
+class HWEventHandler;
+class HWInterface;
+
+enum HWEvent {
+ VSYNC = 0,
+ EXIT,
+ IDLE_NOTIFY,
+ CEC_READ_MESSAGE,
+ SHOW_BLANK_EVENT,
+ THERMAL_LEVEL,
+ IDLE_POWER_COLLAPSE,
+ PINGPONG_TIMEOUT,
+ PANEL_DEAD,
+ HW_RECOVERY,
+};
+
+class HWEventsInterface {
+ public:
+ virtual DisplayError Init(int display_id, DisplayType display_type, HWEventHandler *event_handler,
+ const std::vector<HWEvent> &event_list, const HWInterface *hw_intf) = 0;
+ virtual DisplayError Deinit() = 0;
+ virtual DisplayError SetEventState(HWEvent event, bool enable, void *aux = nullptr) = 0;
+
+ static DisplayError Create(int display_id, DisplayType display_type,
+ HWEventHandler *event_handler, const std::vector<HWEvent> &event_list,
+ const HWInterface *hw_intf, HWEventsInterface **intf);
+ static DisplayError Destroy(HWEventsInterface *intf);
+
+ protected:
+ virtual ~HWEventsInterface() { }
+};
+
+} // namespace sdm
+
+#endif // __HW_EVENTS_INTERFACE_H__
+
diff --git a/sdm/libs/core/hw_info_interface.cpp b/sdm/libs/core/hw_info_interface.cpp
new file mode 100644
index 0000000..498a04c
--- /dev/null
+++ b/sdm/libs/core/hw_info_interface.cpp
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <utils/utils.h>
+
+#include "hw_info_interface.h"
+#include "fb/hw_info.h"
+#include "drm/hw_info_drm.h"
+
+#define __CLASS__ "HWInfoInterface"
+
+namespace sdm {
+
+DisplayError HWInfoInterface::Create(HWInfoInterface **intf) {
+ if (GetDriverType() == DriverType::FB) {
+ *intf = new HWInfo();
+ } else {
+ *intf = new HWInfoDRM();
+ }
+
+ DisplayError error = kErrorNone;
+ if (*intf) {
+ error = (*intf)->Init();
+ if (error != kErrorNone) {
+ delete *intf;
+ *intf = nullptr;
+ }
+ } else {
+ error = kErrorCriticalResource;
+ }
+
+ return error;
+}
+
+DisplayError HWInfoInterface::Destroy(HWInfoInterface *intf) {
+ if (intf) {
+ delete intf;
+ }
+
+ return kErrorNone;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/hw_info_interface.h b/sdm/libs/core/hw_info_interface.h
new file mode 100644
index 0000000..5eb2107
--- /dev/null
+++ b/sdm/libs/core/hw_info_interface.h
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2014 - 2016, 2018 The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_INFO_INTERFACE_H__
+#define __HW_INFO_INTERFACE_H__
+
+#include <inttypes.h>
+#include <core/core_interface.h>
+#include <private/hw_info_types.h>
+
+namespace sdm {
+
+class HWInfoInterface {
+ public:
+ static DisplayError Create(HWInfoInterface **intf);
+ static DisplayError Destroy(HWInfoInterface *intf);
+ virtual DisplayError Init() = 0;
+ virtual DisplayError GetHWResourceInfo(HWResourceInfo *hw_resource) = 0;
+ virtual DisplayError GetFirstDisplayInterfaceType(HWDisplayInterfaceInfo *hw_disp_info) = 0;
+ virtual DisplayError GetDisplaysStatus(HWDisplaysInfo *hw_displays_info) = 0;
+ virtual DisplayError GetMaxDisplaysSupported(DisplayType type, int32_t *max_displays) = 0;
+
+ protected:
+ virtual ~HWInfoInterface() { }
+};
+
+} // namespace sdm
+
+#endif // __HW_INFO_INTERFACE_H__
+
diff --git a/sdm/libs/core/hw_interface.cpp b/sdm/libs/core/hw_interface.cpp
new file mode 100644
index 0000000..9276237
--- /dev/null
+++ b/sdm/libs/core/hw_interface.cpp
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <utils/debug.h>
+#include <utils/utils.h>
+
+#include "hw_interface.h"
+#include "fb/hw_device.h"
+#include "fb/hw_primary.h"
+#include "fb/hw_hdmi.h"
+#include "fb/hw_virtual.h"
+#include "drm/hw_peripheral_drm.h"
+#include "drm/hw_virtual_drm.h"
+#include "drm/hw_tv_drm.h"
+
+#define __CLASS__ "HWInterface"
+
+namespace sdm {
+
+DisplayError HWInterface::Create(int32_t display_id, DisplayType type,
+ HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, HWInterface **intf) {
+ DisplayError error = kErrorNone;
+ HWInterface *hw = nullptr;
+ DriverType driver_type = GetDriverType();
+
+ switch (type) {
+ case kBuiltIn:
+ if (driver_type == DriverType::FB) {
+ hw = new HWPrimary(buffer_sync_handler, hw_info_intf);
+ } else {
+ hw = new HWPeripheralDRM(display_id, buffer_sync_handler, buffer_allocator, hw_info_intf);
+ }
+ break;
+ case kPluggable:
+ if (driver_type == DriverType::FB) {
+ hw = new HWHDMI(buffer_sync_handler, hw_info_intf);
+ } else {
+ hw = new HWTVDRM(display_id, buffer_sync_handler, buffer_allocator, hw_info_intf);
+ }
+ break;
+ case kVirtual:
+ if (driver_type == DriverType::FB) {
+ hw = new HWVirtual(buffer_sync_handler, hw_info_intf);
+ } else {
+ hw = new HWVirtualDRM(display_id, buffer_sync_handler, buffer_allocator, hw_info_intf);
+ }
+ break;
+ default:
+ DLOGE("Undefined display type");
+ return kErrorUndefined;
+ }
+
+ error = hw->Init();
+ if (error != kErrorNone) {
+ delete hw;
+ if (kErrorDeviceRemoved == error) {
+ DLOGW("Init on HWInterface for display %d-%d aborted.", display_id, type);
+ } else {
+ DLOGE("Init on HWInterface for display %d-%d failed.", display_id, type);
+ }
+ return error;
+ }
+ *intf = hw;
+
+ return error;
+}
+
+DisplayError HWInterface::Destroy(HWInterface *intf) {
+ if (intf) {
+ intf->Deinit();
+ delete intf;
+ }
+
+ return kErrorNone;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/hw_interface.h b/sdm/libs/core/hw_interface.h
new file mode 100644
index 0000000..5b68536
--- /dev/null
+++ b/sdm/libs/core/hw_interface.h
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __HW_INTERFACE_H__
+#define __HW_INTERFACE_H__
+
+#include <core/buffer_allocator.h>
+#include <core/buffer_sync_handler.h>
+#include <core/display_interface.h>
+#include <private/hw_info_types.h>
+#include <private/color_interface.h>
+#include <utils/constants.h>
+
+#include "hw_info_interface.h"
+
+namespace sdm {
+
+enum HWScanSupport {
+ kScanNotSupported,
+ kScanAlwaysOverscanned,
+ kScanAlwaysUnderscanned,
+ kScanBoth,
+};
+
+struct HWScanInfo {
+ HWScanSupport pt_scan_support; // Scan support for preferred timing
+ HWScanSupport it_scan_support; // Scan support for digital monitor or industry timings
+ HWScanSupport cea_scan_support; // Scan support for CEA resolution timings
+
+ HWScanInfo() : pt_scan_support(kScanNotSupported), it_scan_support(kScanNotSupported),
+ cea_scan_support(kScanNotSupported) { }
+};
+
+// HWEventHandler - Implemented in DisplayBase and HWInterface implementation
+class HWEventHandler {
+ public:
+ virtual DisplayError VSync(int64_t timestamp) = 0;
+ virtual DisplayError Blank(bool blank) = 0;
+ virtual void IdleTimeout() = 0;
+ virtual void ThermalEvent(int64_t thermal_level) = 0;
+ virtual void CECMessage(char *message) = 0;
+ virtual void IdlePowerCollapse() = 0;
+ virtual void PingPongTimeout() = 0;
+ virtual void PanelDead() = 0;
+ virtual void HwRecovery(const HWRecoveryEvent sdm_event_code) = 0;
+
+ protected:
+ virtual ~HWEventHandler() { }
+};
+
+class HWInterface {
+ public:
+ static DisplayError Create(int32_t display_id, DisplayType type, HWInfoInterface *hw_info_intf,
+ BufferSyncHandler *buffer_sync_handler,
+ BufferAllocator *buffer_allocator, HWInterface **intf);
+ static DisplayError Destroy(HWInterface *intf);
+
+ virtual DisplayError Init() = 0;
+ virtual DisplayError Deinit() = 0;
+ virtual DisplayError GetDisplayId(int32_t *display_id) = 0;
+ virtual DisplayError GetActiveConfig(uint32_t *active_config) = 0;
+ virtual DisplayError GetDefaultConfig(uint32_t *default_config) = 0;
+ virtual DisplayError GetNumDisplayAttributes(uint32_t *count) = 0;
+ virtual DisplayError GetDisplayAttributes(uint32_t index,
+ HWDisplayAttributes *display_attributes) = 0;
+ virtual DisplayError GetHWPanelInfo(HWPanelInfo *panel_info) = 0;
+ virtual DisplayError SetDisplayAttributes(uint32_t index) = 0;
+ virtual DisplayError SetDisplayAttributes(const HWDisplayAttributes &display_attributes) = 0;
+ virtual DisplayError GetConfigIndex(char *mode, uint32_t *index) = 0;
+ virtual DisplayError PowerOn(const HWQosData &qos_data, int *release_fence) = 0;
+ virtual DisplayError PowerOff(bool teardown) = 0;
+ virtual DisplayError Doze(const HWQosData &qos_data, int *release_fence) = 0;
+ virtual DisplayError DozeSuspend(const HWQosData &qos_data, int *release_fence) = 0;
+ virtual DisplayError Standby() = 0;
+ virtual DisplayError Validate(HWLayers *hw_layers) = 0;
+ virtual DisplayError Commit(HWLayers *hw_layers) = 0;
+ virtual DisplayError Flush(HWLayers *hw_layers) = 0;
+ virtual DisplayError GetPPFeaturesVersion(PPFeatureVersion *vers) = 0;
+ virtual DisplayError SetPPFeatures(PPFeaturesConfig *feature_list) = 0;
+ virtual DisplayError SetVSyncState(bool enable) = 0;
+ virtual void SetIdleTimeoutMs(uint32_t timeout_ms) = 0;
+ virtual DisplayError SetDisplayMode(const HWDisplayMode hw_display_mode) = 0;
+ virtual DisplayError SetRefreshRate(uint32_t refresh_rate) = 0;
+ virtual DisplayError SetPanelBrightness(int level) = 0;
+ virtual DisplayError GetHWScanInfo(HWScanInfo *scan_info) = 0;
+ virtual DisplayError GetVideoFormat(uint32_t config_index, uint32_t *video_format) = 0;
+ virtual DisplayError GetMaxCEAFormat(uint32_t *max_cea_format) = 0;
+ virtual DisplayError SetCursorPosition(HWLayers *hw_layers, int x, int y) = 0;
+ virtual DisplayError OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) = 0;
+ virtual DisplayError GetPanelBrightness(int *level) = 0;
+ virtual DisplayError SetAutoRefresh(bool enable) = 0;
+ virtual DisplayError SetS3DMode(HWS3DMode s3d_mode) = 0;
+ virtual DisplayError SetScaleLutConfig(HWScaleLutInfo *lut_info) = 0;
+ virtual DisplayError UnsetScaleLutConfig() = 0;
+ virtual DisplayError SetMixerAttributes(const HWMixerAttributes &mixer_attributes) = 0;
+ virtual DisplayError GetMixerAttributes(HWMixerAttributes *mixer_attributes) = 0;
+ virtual DisplayError DumpDebugData() = 0;
+ virtual DisplayError SetDppsFeature(void *payload, size_t size) = 0;
+ virtual DisplayError GetDppsFeatureInfo(void *payload, size_t size) = 0;
+ virtual DisplayError HandleSecureEvent(SecureEvent secure_event, HWLayers *hw_layers) = 0;
+ virtual DisplayError ControlIdlePowerCollapse(bool enable, bool synchronous) = 0;
+ virtual DisplayError SetDisplayDppsAdROI(void *payload) = 0;
+ virtual DisplayError SetDynamicDSIClock(uint64_t bit_clk_rate) = 0;
+ virtual DisplayError GetDynamicDSIClock(uint64_t *bit_clk_rate) = 0;
+ virtual DisplayError TeardownConcurrentWriteback(void) = 0;
+ virtual DisplayError GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data) = 0;
+
+ protected:
+ virtual ~HWInterface() { }
+};
+
+} // namespace sdm
+
+#endif // __HW_INTERFACE_H__
+
diff --git a/sdm/libs/core/resource_default.cpp b/sdm/libs/core/resource_default.cpp
new file mode 100644
index 0000000..6abdb99
--- /dev/null
+++ b/sdm/libs/core/resource_default.cpp
@@ -0,0 +1,937 @@
+/*
+* Copyright (c) 2014-2016, 2018-2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#include <math.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/rect.h>
+#include <utils/formats.h>
+#include <utils/sys.h>
+#include <dlfcn.h>
+#include <algorithm>
+
+#include "resource_default.h"
+
+#define __CLASS__ "ResourceDefault"
+
+namespace sdm {
+
+DisplayError ResourceDefault::CreateResourceDefault(const HWResourceInfo &hw_resource_info,
+ ResourceInterface **resource_intf) {
+ DisplayError error = kErrorNone;
+
+ ResourceDefault *resource_default = new ResourceDefault(hw_resource_info);
+ if (!resource_default) {
+ return kErrorNone;
+ }
+
+ error = resource_default->Init();
+ if (error != kErrorNone) {
+ delete resource_default;
+ }
+
+ *resource_intf = resource_default;
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::DestroyResourceDefault(ResourceInterface *resource_intf) {
+ ResourceDefault *resource_default = static_cast<ResourceDefault *>(resource_intf);
+
+ resource_default->Deinit();
+ delete resource_default;
+
+ return kErrorNone;
+}
+
+ResourceDefault::ResourceDefault(const HWResourceInfo &hw_res_info)
+ : hw_res_info_(hw_res_info) {
+}
+
+DisplayError ResourceDefault::Init() {
+ DisplayError error = kErrorNone;
+
+ num_pipe_ = hw_res_info_.num_vig_pipe + hw_res_info_.num_rgb_pipe + hw_res_info_.num_dma_pipe;
+
+ if (!num_pipe_) {
+ DLOGE("Number of H/W pipes is Zero!");
+ return kErrorParameters;
+ }
+
+ src_pipes_.resize(num_pipe_);
+
+ // Priority order of pipes: VIG, RGB, DMA
+ uint32_t vig_index = 0;
+ uint32_t rgb_index = hw_res_info_.num_vig_pipe;
+ uint32_t dma_index = rgb_index + hw_res_info_.num_rgb_pipe;
+
+ for (uint32_t i = 0; i < num_pipe_; i++) {
+ const HWPipeCaps &pipe_caps = hw_res_info_.hw_pipes.at(i);
+ if (pipe_caps.type == kPipeTypeVIG) {
+ src_pipes_[vig_index].type = kPipeTypeVIG;
+ src_pipes_[vig_index].index = i;
+ src_pipes_[vig_index].mdss_pipe_id = pipe_caps.id;
+ vig_index++;
+ } else if (pipe_caps.type == kPipeTypeRGB) {
+ src_pipes_[rgb_index].type = kPipeTypeRGB;
+ src_pipes_[rgb_index].index = i;
+ src_pipes_[rgb_index].mdss_pipe_id = pipe_caps.id;
+ rgb_index++;
+ } else if (pipe_caps.type == kPipeTypeDMA) {
+ src_pipes_[dma_index].type = kPipeTypeDMA;
+ src_pipes_[dma_index].index = i;
+ src_pipes_[dma_index].mdss_pipe_id = pipe_caps.id;
+ dma_index++;
+ }
+ }
+
+ for (uint32_t i = 0; i < num_pipe_; i++) {
+ src_pipes_[i].priority = INT(i);
+ }
+
+ DLOGI("hw_rev=%x, DMA=%d RGB=%d VIG=%d", hw_res_info_.hw_revision, hw_res_info_.num_dma_pipe,
+ hw_res_info_.num_rgb_pipe, hw_res_info_.num_vig_pipe);
+
+ if (hw_res_info_.max_scale_down < 1 || hw_res_info_.max_scale_up < 1) {
+ DLOGE("Max scaling setting is invalid! max_scale_down = %d, max_scale_up = %d",
+ hw_res_info_.max_scale_down, hw_res_info_.max_scale_up);
+ hw_res_info_.max_scale_down = 1;
+ hw_res_info_.max_scale_up = 1;
+ }
+
+ // TODO(user): clean it up, query from driver for initial pipe status.
+#ifndef SDM_VIRTUAL_DRIVER
+ rgb_index = hw_res_info_.num_vig_pipe;
+ src_pipes_[rgb_index].owner = kPipeOwnerKernelMode;
+ src_pipes_[rgb_index + 1].owner = kPipeOwnerKernelMode;
+#endif
+
+ return error;
+}
+
+DisplayError ResourceDefault::Deinit() {
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::RegisterDisplay(int32_t display_id, DisplayType type,
+ const HWDisplayAttributes &display_attributes,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes,
+ Handle *display_ctx) {
+ DisplayError error = kErrorNone;
+
+ HWBlockType hw_block_type = kHWBlockMax;
+ switch (type) {
+ case kBuiltIn:
+ if (!hw_block_ctx_[kHWBuiltIn].is_in_use) {
+ hw_block_type = kHWBuiltIn;
+ }
+ break;
+
+ case kPluggable:
+ if (!hw_block_ctx_[kHWPluggable].is_in_use) {
+ hw_block_type = kHWPluggable;
+ }
+ break;
+
+ default:
+ DLOGW("RegisterDisplay, invalid type %d", type);
+ return kErrorParameters;
+ }
+
+ if (hw_block_type == kHWBlockMax) {
+ return kErrorResources;
+ }
+
+ DisplayResourceContext *display_resource_ctx = new DisplayResourceContext();
+ if (!display_resource_ctx) {
+ return kErrorMemory;
+ }
+
+ hw_block_ctx_[hw_block_type].is_in_use = true;
+
+ display_resource_ctx->display_attributes = display_attributes;
+ display_resource_ctx->hw_block_type = hw_block_type;
+ display_resource_ctx->mixer_attributes = mixer_attributes;
+
+ *display_ctx = display_resource_ctx;
+ return error;
+}
+
+DisplayError ResourceDefault::UnregisterDisplay(Handle display_ctx) {
+ DisplayResourceContext *display_resource_ctx =
+ reinterpret_cast<DisplayResourceContext *>(display_ctx);
+ Purge(display_ctx);
+
+ hw_block_ctx_[display_resource_ctx->hw_block_type].is_in_use = false;
+
+ delete display_resource_ctx;
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::ReconfigureDisplay(Handle display_ctx,
+ const HWDisplayAttributes &display_attributes,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes) {
+ DisplayResourceContext *display_resource_ctx =
+ reinterpret_cast<DisplayResourceContext *>(display_ctx);
+
+ display_resource_ctx->display_attributes = display_attributes;
+ display_resource_ctx->mixer_attributes = mixer_attributes;
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::Start(Handle display_ctx) {
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::Stop(Handle display_ctx, HWLayers *hw_layers) {
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::Prepare(Handle display_ctx, HWLayers *hw_layers) {
+ DisplayResourceContext *display_resource_ctx =
+ reinterpret_cast<DisplayResourceContext *>(display_ctx);
+
+ DisplayError error = kErrorNone;
+ const struct HWLayersInfo &layer_info = hw_layers->info;
+ HWBlockType hw_block_type = display_resource_ctx->hw_block_type;
+
+ DLOGV_IF(kTagResources, "==== Resource reserving start: hw_block_type = %d ====", hw_block_type);
+
+ if (layer_info.hw_layers.size() > 1) {
+ DLOGV_IF(kTagResources, "More than one FB layers");
+ return kErrorResources;
+ }
+
+ const Layer &layer = layer_info.hw_layers.at(0);
+
+ if (layer.composition != kCompositionGPUTarget) {
+ DLOGV_IF(kTagResources, "Not an FB layer");
+ return kErrorParameters;
+ }
+
+ error = Config(display_resource_ctx, hw_layers);
+ if (error != kErrorNone) {
+ DLOGV_IF(kTagResources, "Resource config failed");
+ return error;
+ }
+
+ for (uint32_t i = 0; i < num_pipe_; i++) {
+ if (src_pipes_[i].hw_block_type == hw_block_type && src_pipes_[i].owner == kPipeOwnerUserMode) {
+ src_pipes_[i].ResetState();
+ }
+ }
+
+ uint32_t left_index = num_pipe_;
+ uint32_t right_index = num_pipe_;
+ bool need_scale = false;
+
+ struct HWLayerConfig &layer_config = hw_layers->config[0];
+
+ HWPipeInfo *left_pipe = &layer_config.left_pipe;
+ HWPipeInfo *right_pipe = &layer_config.right_pipe;
+
+ // left pipe is needed
+ if (left_pipe->valid) {
+ need_scale = IsScalingNeeded(left_pipe);
+ left_index = GetPipe(hw_block_type, need_scale);
+ if (left_index >= num_pipe_) {
+ DLOGV_IF(kTagResources, "Get left pipe failed: hw_block_type = %d, need_scale = %d",
+ hw_block_type, need_scale);
+ ResourceStateLog();
+ goto CleanupOnError;
+ }
+ }
+
+ error = SetDecimationFactor(left_pipe);
+ if (error != kErrorNone) {
+ goto CleanupOnError;
+ }
+
+ if (!right_pipe->valid) {
+ // assign single pipe
+ if (left_index < num_pipe_) {
+ left_pipe->pipe_id = src_pipes_[left_index].mdss_pipe_id;
+ }
+ DLOGV_IF(kTagResources, "1 pipe acquired for FB layer, left_pipe = %x", left_pipe->pipe_id);
+ return kErrorNone;
+ }
+
+ need_scale = IsScalingNeeded(right_pipe);
+
+ right_index = GetPipe(hw_block_type, need_scale);
+ if (right_index >= num_pipe_) {
+ DLOGV_IF(kTagResources, "Get right pipe failed: hw_block_type = %d, need_scale = %d",
+ hw_block_type, need_scale);
+ ResourceStateLog();
+ goto CleanupOnError;
+ }
+
+ if (src_pipes_[right_index].priority < src_pipes_[left_index].priority) {
+ // Swap pipe based on priority
+ std::swap(left_index, right_index);
+ }
+
+ // assign dual pipes
+ left_pipe->pipe_id = src_pipes_[left_index].mdss_pipe_id;
+ right_pipe->pipe_id = src_pipes_[right_index].mdss_pipe_id;
+
+ error = SetDecimationFactor(right_pipe);
+ if (error != kErrorNone) {
+ goto CleanupOnError;
+ }
+
+ DLOGV_IF(kTagResources, "2 pipes acquired for FB layer, left_pipe = %x, right_pipe = %x",
+ left_pipe->pipe_id, right_pipe->pipe_id);
+
+ return kErrorNone;
+
+CleanupOnError:
+ DLOGV_IF(kTagResources, "Resource reserving failed! hw_block_type = %d", hw_block_type);
+
+ return kErrorResources;
+}
+
+DisplayError ResourceDefault::PostPrepare(Handle display_ctx, HWLayers *hw_layers) {
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::Commit(Handle display_ctx, HWLayers *hw_layers) {
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::PostCommit(Handle display_ctx, HWLayers *hw_layers) {
+ DisplayResourceContext *display_resource_ctx =
+ reinterpret_cast<DisplayResourceContext *>(display_ctx);
+ HWBlockType hw_block_type = display_resource_ctx->hw_block_type;
+ uint64_t frame_count = display_resource_ctx->frame_count;
+
+ DLOGV_IF(kTagResources, "Resource for hw_block = %d, frame_count = %d", hw_block_type,
+ frame_count);
+
+ // handoff pipes which are used by splash screen
+ if ((frame_count == 0) && (hw_block_type == kHWBuiltIn)) {
+ for (uint32_t i = 0; i < num_pipe_; i++) {
+ if (src_pipes_[i].hw_block_type == hw_block_type &&
+ src_pipes_[i].owner == kPipeOwnerKernelMode) {
+ src_pipes_[i].owner = kPipeOwnerUserMode;
+ }
+ }
+ }
+
+ if (hw_layers->info.sync_handle >= 0)
+ Sys::close_(hw_layers->info.sync_handle);
+
+ display_resource_ctx->frame_count++;
+
+ return kErrorNone;
+}
+
+void ResourceDefault::Purge(Handle display_ctx) {
+ DisplayResourceContext *display_resource_ctx =
+ reinterpret_cast<DisplayResourceContext *>(display_ctx);
+ HWBlockType hw_block_type = display_resource_ctx->hw_block_type;
+
+ for (uint32_t i = 0; i < num_pipe_; i++) {
+ if (src_pipes_[i].hw_block_type == hw_block_type && src_pipes_[i].owner == kPipeOwnerUserMode) {
+ src_pipes_[i].ResetState();
+ }
+ }
+ DLOGV_IF(kTagResources, "display hw_block_type = %d", display_resource_ctx->hw_block_type);
+}
+
+DisplayError ResourceDefault::SetMaxMixerStages(Handle display_ctx, uint32_t max_mixer_stages) {
+ return kErrorNone;
+}
+
+uint32_t ResourceDefault::SearchPipe(HWBlockType hw_block_type, SourcePipe *src_pipes,
+ uint32_t num_pipe) {
+ uint32_t index = num_pipe_;
+ SourcePipe *src_pipe;
+
+ // search the pipe being used
+ for (uint32_t i = 0; i < num_pipe; i++) {
+ src_pipe = &src_pipes[i];
+ if (src_pipe->owner == kPipeOwnerUserMode && src_pipe->hw_block_type == kHWBlockMax) {
+ index = src_pipe->index;
+ src_pipe->hw_block_type = hw_block_type;
+ break;
+ }
+ }
+
+ return index;
+}
+
+uint32_t ResourceDefault::NextPipe(PipeType type, HWBlockType hw_block_type) {
+ uint32_t num_pipe = 0;
+ SourcePipe *src_pipes = NULL;
+
+ switch (type) {
+ case kPipeTypeVIG:
+ src_pipes = &src_pipes_[0];
+ num_pipe = hw_res_info_.num_vig_pipe;
+ break;
+ case kPipeTypeRGB:
+ src_pipes = &src_pipes_[hw_res_info_.num_vig_pipe];
+ num_pipe = hw_res_info_.num_rgb_pipe;
+ break;
+ case kPipeTypeDMA:
+ default:
+ src_pipes = &src_pipes_[hw_res_info_.num_vig_pipe + hw_res_info_.num_rgb_pipe];
+ num_pipe = hw_res_info_.num_dma_pipe;
+ break;
+ }
+
+ return SearchPipe(hw_block_type, src_pipes, num_pipe);
+}
+
+uint32_t ResourceDefault::GetPipe(HWBlockType hw_block_type, bool need_scale) {
+ uint32_t index = num_pipe_;
+
+ // The default behavior is to assume RGB and VG pipes have scalars
+ if (!need_scale) {
+ index = NextPipe(kPipeTypeDMA, hw_block_type);
+ }
+
+ if ((index >= num_pipe_) && (!need_scale || !hw_res_info_.has_non_scalar_rgb)) {
+ index = NextPipe(kPipeTypeRGB, hw_block_type);
+ }
+
+ if (index >= num_pipe_) {
+ index = NextPipe(kPipeTypeVIG, hw_block_type);
+ }
+
+ return index;
+}
+
+bool ResourceDefault::IsScalingNeeded(const HWPipeInfo *pipe_info) {
+ const LayerRect &src_roi = pipe_info->src_roi;
+ const LayerRect &dst_roi = pipe_info->dst_roi;
+
+ return ((dst_roi.right - dst_roi.left) != (src_roi.right - src_roi.left)) ||
+ ((dst_roi.bottom - dst_roi.top) != (src_roi.bottom - src_roi.top));
+}
+
+void ResourceDefault::ResourceStateLog() {
+ DLOGV_IF(kTagResources, "==== resource manager pipe state ====");
+ uint32_t i;
+ for (i = 0; i < num_pipe_; i++) {
+ SourcePipe *src_pipe = &src_pipes_[i];
+ DLOGV_IF(kTagResources, "index = %d, id = %x, hw_block_type = %d, owner = %s", src_pipe->index,
+ src_pipe->mdss_pipe_id, src_pipe->hw_block_type,
+ (src_pipe->owner == kPipeOwnerUserMode) ? "user mode" : "kernel mode");
+ }
+}
+
+DisplayError ResourceDefault::SrcSplitConfig(DisplayResourceContext *display_resource_ctx,
+ const LayerRect &src_rect, const LayerRect &dst_rect,
+ HWLayerConfig *layer_config) {
+ HWPipeInfo *left_pipe = &layer_config->left_pipe;
+ HWPipeInfo *right_pipe = &layer_config->right_pipe;
+ uint32_t max_pipe_width = hw_res_info_.max_pipe_width;
+ uint32_t src_width = (uint32_t)(src_rect.right - src_rect.left);
+ uint32_t dst_width = (uint32_t)(dst_rect.right - dst_rect.left);
+
+ if (src_width != dst_width) {
+ max_pipe_width = hw_res_info_.max_scaler_pipe_width;
+ }
+
+ // Layer cannot qualify for SrcSplit if source or destination width exceeds max pipe width.
+ if ((src_width > max_pipe_width) || (dst_width > max_pipe_width)) {
+ SplitRect(src_rect, dst_rect, &left_pipe->src_roi, &left_pipe->dst_roi, &right_pipe->src_roi,
+ &right_pipe->dst_roi);
+ left_pipe->valid = true;
+ right_pipe->valid = true;
+ } else {
+ left_pipe->src_roi = src_rect;
+ left_pipe->dst_roi = dst_rect;
+ left_pipe->valid = true;
+ *right_pipe = {};
+ }
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::DisplaySplitConfig(DisplayResourceContext *display_resource_ctx,
+ const LayerRect &src_rect, const LayerRect &dst_rect,
+ HWLayerConfig *layer_config) {
+ HWMixerAttributes &mixer_attributes = display_resource_ctx->mixer_attributes;
+
+ // for display split case
+ HWPipeInfo *left_pipe = &layer_config->left_pipe;
+ HWPipeInfo *right_pipe = &layer_config->right_pipe;
+ LayerRect scissor_left, scissor_right, dst_left, crop_left, crop_right, dst_right;
+
+ scissor_left.right = FLOAT(mixer_attributes.split_left);
+ scissor_left.bottom = FLOAT(mixer_attributes.height);
+
+ scissor_right.left = FLOAT(mixer_attributes.split_left);
+ scissor_right.top = 0.0f;
+ scissor_right.right = FLOAT(mixer_attributes.width);
+ scissor_right.bottom = FLOAT(mixer_attributes.height);
+
+ crop_left = src_rect;
+ dst_left = dst_rect;
+ crop_right = crop_left;
+ dst_right = dst_left;
+
+ bool crop_left_valid = CalculateCropRects(scissor_left, &crop_left, &dst_left);
+ bool crop_right_valid = false;
+
+ if (IsValid(scissor_right)) {
+ crop_right_valid = CalculateCropRects(scissor_right, &crop_right, &dst_right);
+ }
+
+ // Reset left_pipe and right_pipe to invalid by default
+ *left_pipe = {};
+ *right_pipe = {};
+
+ if (crop_left_valid) {
+ // assign left pipe
+ left_pipe->src_roi = crop_left;
+ left_pipe->dst_roi = dst_left;
+ left_pipe->valid = true;
+ }
+
+ // assign right pipe if needed
+ if (crop_right_valid) {
+ right_pipe->src_roi = crop_right;
+ right_pipe->dst_roi = dst_right;
+ right_pipe->valid = true;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::Config(DisplayResourceContext *display_resource_ctx,
+ HWLayers *hw_layers) {
+ HWLayersInfo &layer_info = hw_layers->info;
+ DisplayError error = kErrorNone;
+ const Layer &layer = layer_info.hw_layers.at(0);
+
+ error = ValidateLayerParams(&layer);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ struct HWLayerConfig *layer_config = &hw_layers->config[0];
+ HWPipeInfo &left_pipe = layer_config->left_pipe;
+ HWPipeInfo &right_pipe = layer_config->right_pipe;
+
+ LayerRect src_rect = layer.src_rect;
+ LayerRect dst_rect = layer.dst_rect;
+
+ error = ValidateDimensions(src_rect, dst_rect);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ BufferLayout layout = GetBufferLayout(layer.input_buffer.format);
+ error = ValidateScaling(src_rect, dst_rect, false /*rotated90 */, layout,
+ false /* use_rotator_downscale */);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ if (hw_res_info_.is_src_split) {
+ error = SrcSplitConfig(display_resource_ctx, src_rect, dst_rect, layer_config);
+ } else {
+ error = DisplaySplitConfig(display_resource_ctx, src_rect, dst_rect, layer_config);
+ }
+
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = AlignPipeConfig(&layer, &left_pipe, &right_pipe);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ // set z_order, left_pipe should always be valid
+ left_pipe.z_order = 0;
+
+ DLOGV_IF(kTagResources, "==== FB layer Config ====");
+ Log(kTagResources, "input layer src_rect", layer.src_rect);
+ Log(kTagResources, "input layer dst_rect", layer.dst_rect);
+ Log(kTagResources, "cropped src_rect", src_rect);
+ Log(kTagResources, "cropped dst_rect", dst_rect);
+ Log(kTagResources, "left pipe src", layer_config->left_pipe.src_roi);
+ Log(kTagResources, "left pipe dst", layer_config->left_pipe.dst_roi);
+ if (right_pipe.valid) {
+ right_pipe.z_order = 0;
+ Log(kTagResources, "right pipe src", layer_config->right_pipe.src_roi);
+ Log(kTagResources, "right pipe dst", layer_config->right_pipe.dst_roi);
+ }
+
+ return error;
+}
+
+bool ResourceDefault::CalculateCropRects(const LayerRect &scissor, LayerRect *crop,
+ LayerRect *dst) {
+ float &crop_left = crop->left;
+ float &crop_top = crop->top;
+ float &crop_right = crop->right;
+ float &crop_bottom = crop->bottom;
+ float crop_width = crop->right - crop->left;
+ float crop_height = crop->bottom - crop->top;
+
+ float &dst_left = dst->left;
+ float &dst_top = dst->top;
+ float &dst_right = dst->right;
+ float &dst_bottom = dst->bottom;
+ float dst_width = dst->right - dst->left;
+ float dst_height = dst->bottom - dst->top;
+
+ const float &sci_left = scissor.left;
+ const float &sci_top = scissor.top;
+ const float &sci_right = scissor.right;
+ const float &sci_bottom = scissor.bottom;
+
+ float left_cut_ratio = 0.0, right_cut_ratio = 0.0, top_cut_ratio = 0.0, bottom_cut_ratio = 0.0;
+ bool need_cut = false;
+
+ if (dst_left < sci_left) {
+ left_cut_ratio = (sci_left - dst_left) / dst_width;
+ dst_left = sci_left;
+ need_cut = true;
+ }
+
+ if (dst_right > sci_right) {
+ right_cut_ratio = (dst_right - sci_right) / dst_width;
+ dst_right = sci_right;
+ need_cut = true;
+ }
+
+ if (dst_top < sci_top) {
+ top_cut_ratio = (sci_top - dst_top) / (dst_height);
+ dst_top = sci_top;
+ need_cut = true;
+ }
+
+ if (dst_bottom > sci_bottom) {
+ bottom_cut_ratio = (dst_bottom - sci_bottom) / (dst_height);
+ dst_bottom = sci_bottom;
+ need_cut = true;
+ }
+
+ if (!need_cut)
+ return true;
+
+ crop_left += crop_width * left_cut_ratio;
+ crop_top += crop_height * top_cut_ratio;
+ crop_right -= crop_width * right_cut_ratio;
+ crop_bottom -= crop_height * bottom_cut_ratio;
+ Normalize(1, 1, crop);
+ Normalize(1, 1, dst);
+ if (IsValid(*crop) && IsValid(*dst))
+ return true;
+ else
+ return false;
+}
+
+DisplayError ResourceDefault::ValidateLayerParams(const Layer *layer) {
+ const LayerRect &src = layer->src_rect;
+ const LayerRect &dst = layer->dst_rect;
+ const LayerBuffer &input_buffer = layer->input_buffer;
+
+ if (input_buffer.format == kFormatInvalid) {
+ DLOGV_IF(kTagResources, "Invalid input buffer format %d", input_buffer.format);
+ return kErrorNotSupported;
+ }
+
+ if (!IsValid(src) || !IsValid(dst)) {
+ Log(kTagResources, "input layer src_rect", src);
+ Log(kTagResources, "input layer dst_rect", dst);
+ return kErrorNotSupported;
+ }
+
+ // Make sure source in integral only if it is a non secure layer.
+ if (!input_buffer.flags.secure &&
+ ((src.left - roundf(src.left) != 0.0f) ||
+ (src.top - roundf(src.top) != 0.0f) ||
+ (src.right - roundf(src.right) != 0.0f) ||
+ (src.bottom - roundf(src.bottom) != 0.0f))) {
+ DLOGV_IF(kTagResources, "Input ROI is not integral");
+ return kErrorNotSupported;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::ValidateDimensions(const LayerRect &crop, const LayerRect &dst) {
+ if (!IsValid(crop)) {
+ Log(kTagResources, "Invalid crop rect", crop);
+ return kErrorNotSupported;
+ }
+
+ if (!IsValid(dst)) {
+ Log(kTagResources, "Invalid dst rect", dst);
+ return kErrorNotSupported;
+ }
+
+ float crop_width = crop.right - crop.left;
+ float crop_height = crop.bottom - crop.top;
+ float dst_width = dst.right - dst.left;
+ float dst_height = dst.bottom - dst.top;
+
+ if ((UINT32(crop_width - dst_width) == 1) || (UINT32(crop_height - dst_height) == 1)) {
+ DLOGV_IF(kTagResources, "One pixel downscaling detected crop_w = %.0f, dst_w = %.0f, " \
+ "crop_h = %.0f, dst_h = %.0f", crop_width, dst_width, crop_height, dst_height);
+ return kErrorNotSupported;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::ValidatePipeParams(HWPipeInfo *pipe_info, LayerBufferFormat format) {
+ DisplayError error = kErrorNone;
+
+ const LayerRect &src_rect = pipe_info->src_roi;
+ const LayerRect &dst_rect = pipe_info->dst_roi;
+
+ error = ValidateDimensions(src_rect, dst_rect);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ BufferLayout layout = GetBufferLayout(format);
+ error = ValidateScaling(src_rect, dst_rect, false /* rotated90 */, layout,
+ false /* use_rotator_downscale */);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::ValidateScaling(const LayerRect &crop, const LayerRect &dst,
+ bool rotate90, BufferLayout layout,
+ bool use_rotator_downscale) {
+ DisplayError error = kErrorNone;
+
+ float scale_x = 1.0f;
+ float scale_y = 1.0f;
+
+ error = GetScaleFactor(crop, dst, &scale_x, &scale_y);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = ValidateDownScaling(scale_x, scale_y, (layout != kLinear));
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ error = ValidateUpScaling(scale_x, scale_y);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::ValidateDownScaling(float scale_x, float scale_y, bool ubwc_tiled) {
+ if ((UINT32(scale_x) > 1) || (UINT32(scale_y) > 1)) {
+ float max_scale_down = FLOAT(hw_res_info_.max_scale_down);
+
+ // MDP H/W cannot apply decimation on UBWC tiled framebuffer
+ if (!ubwc_tiled && hw_res_info_.has_decimation) {
+ max_scale_down *= FLOAT(kMaxDecimationDownScaleRatio);
+ }
+
+ if (scale_x > max_scale_down || scale_y > max_scale_down) {
+ DLOGV_IF(kTagResources,
+ "Scaling down is over the limit: scale_x = %.0f, scale_y = %.0f, " \
+ "has_deci = %d", scale_x, scale_y, hw_res_info_.has_decimation);
+ return kErrorNotSupported;
+ }
+ }
+
+ DLOGV_IF(kTagResources, "scale_x = %.4f, scale_y = %.4f", scale_x, scale_y);
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::ValidateUpScaling(float scale_x, float scale_y) {
+ float max_scale_up = FLOAT(hw_res_info_.max_scale_up);
+
+ if (UINT32(scale_x) < 1 && scale_x > 0.0f) {
+ if ((1.0f / scale_x) > max_scale_up) {
+ DLOGV_IF(kTagResources, "Scaling up is over limit scale_x = %f", 1.0f / scale_x);
+ return kErrorNotSupported;
+ }
+ }
+
+ if (UINT32(scale_y) < 1 && scale_y > 0.0f) {
+ if ((1.0f / scale_y) > max_scale_up) {
+ DLOGV_IF(kTagResources, "Scaling up is over limit scale_y = %f", 1.0f / scale_y);
+ return kErrorNotSupported;
+ }
+ }
+
+ DLOGV_IF(kTagResources, "scale_x = %.4f, scale_y = %.4f", scale_x, scale_y);
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::GetScaleFactor(const LayerRect &crop, const LayerRect &dst,
+ float *scale_x, float *scale_y) {
+ float crop_width = crop.right - crop.left;
+ float crop_height = crop.bottom - crop.top;
+ float dst_width = dst.right - dst.left;
+ float dst_height = dst.bottom - dst.top;
+
+ *scale_x = crop_width / dst_width;
+ *scale_y = crop_height / dst_height;
+
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::SetDecimationFactor(HWPipeInfo *pipe) {
+ float src_h = pipe->src_roi.bottom - pipe->src_roi.top;
+ float dst_h = pipe->dst_roi.bottom - pipe->dst_roi.top;
+ float down_scale_h = src_h / dst_h;
+
+ float src_w = pipe->src_roi.right - pipe->src_roi.left;
+ float dst_w = pipe->dst_roi.right - pipe->dst_roi.left;
+ float down_scale_w = src_w / dst_w;
+
+ pipe->horizontal_decimation = 0;
+ pipe->vertical_decimation = 0;
+
+ if (CalculateDecimation(down_scale_w, &pipe->horizontal_decimation) != kErrorNone) {
+ return kErrorNotSupported;
+ }
+
+ if (CalculateDecimation(down_scale_h, &pipe->vertical_decimation) != kErrorNone) {
+ return kErrorNotSupported;
+ }
+
+ DLOGI_IF(kTagResources, "horizontal_decimation %d, vertical_decimation %d",
+ pipe->horizontal_decimation, pipe->vertical_decimation);
+
+ return kErrorNone;
+}
+
+void ResourceDefault::SplitRect(const LayerRect &src_rect, const LayerRect &dst_rect,
+ LayerRect *src_left, LayerRect *dst_left, LayerRect *src_right,
+ LayerRect *dst_right) {
+ // Split rectangle horizontally and evenly into two.
+ float src_width = src_rect.right - src_rect.left;
+ float dst_width = dst_rect.right - dst_rect.left;
+ float src_width_ori = src_width;
+ src_width = ROUND_UP_ALIGN_DOWN(src_width / 2, 1);
+ dst_width = ROUND_UP_ALIGN_DOWN(dst_width * src_width / src_width_ori, 1);
+
+ src_left->left = src_rect.left;
+ src_left->right = src_rect.left + src_width;
+ src_right->left = src_left->right;
+ src_right->right = src_rect.right;
+
+ src_left->top = src_rect.top;
+ src_left->bottom = src_rect.bottom;
+ src_right->top = src_rect.top;
+ src_right->bottom = src_rect.bottom;
+
+ dst_left->top = dst_rect.top;
+ dst_left->bottom = dst_rect.bottom;
+ dst_right->top = dst_rect.top;
+ dst_right->bottom = dst_rect.bottom;
+
+ dst_left->left = dst_rect.left;
+ dst_left->right = dst_rect.left + dst_width;
+ dst_right->left = dst_left->right;
+ dst_right->right = dst_rect.right;
+}
+
+DisplayError ResourceDefault::AlignPipeConfig(const Layer *layer, HWPipeInfo *left_pipe,
+ HWPipeInfo *right_pipe) {
+ DisplayError error = kErrorNone;
+ if (!left_pipe->valid) {
+ DLOGE_IF(kTagResources, "left_pipe should not be invalid");
+ return kErrorNotSupported;
+ }
+
+ error = ValidatePipeParams(left_pipe, layer->input_buffer.format);
+ if (error != kErrorNone) {
+ goto PipeConfigExit;
+ }
+
+ if (right_pipe->valid) {
+ // Make sure the left and right ROI are conjunct
+ right_pipe->src_roi.left = left_pipe->src_roi.right;
+ right_pipe->dst_roi.left = left_pipe->dst_roi.right;
+ error = ValidatePipeParams(right_pipe, layer->input_buffer.format);
+ }
+
+PipeConfigExit:
+ if (error != kErrorNone) {
+ DLOGV_IF(kTagResources, "AlignPipeConfig failed");
+ }
+ return error;
+}
+
+DisplayError ResourceDefault::CalculateDecimation(float downscale, uint8_t *decimation) {
+ float max_down_scale = FLOAT(hw_res_info_.max_scale_down);
+
+ if (downscale <= max_down_scale) {
+ *decimation = 0;
+ return kErrorNone;
+ } else if (!hw_res_info_.has_decimation) {
+ DLOGE("Downscaling exceeds the maximum MDP downscale limit but decimation not enabled");
+ return kErrorNotSupported;
+ }
+
+ // Decimation is the remaining downscale factor after doing max SDE downscale.
+ // In SDE, decimation is supported in powers of 2.
+ // For ex: If a pipe needs downscale of 8 but max_down_scale is 4
+ // So decimation = powf(2.0, ceilf(log2f(8 / 4))) = powf(2.0, 1.0) = 2
+ *decimation = UINT8(ceilf(log2f(downscale / max_down_scale)));
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::ValidateAndSetCursorPosition(Handle display_ctx, HWLayers *hw_layers,
+ int x, int y,
+ DisplayConfigVariableInfo *fb_config) {
+ return kErrorNotSupported;
+}
+
+DisplayError ResourceDefault::SetMaxBandwidthMode(HWBwModes mode) {
+ return kErrorNotSupported;
+}
+
+DisplayError ResourceDefault::GetScaleLutConfig(HWScaleLutInfo *lut_info) {
+ return kErrorNone;
+}
+
+DisplayError ResourceDefault::SetDetailEnhancerData(Handle display_ctx,
+ const DisplayDetailEnhancerData &de_data) {
+ return kErrorNotSupported;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/resource_default.h b/sdm/libs/core/resource_default.h
new file mode 100644
index 0000000..f09f0a8
--- /dev/null
+++ b/sdm/libs/core/resource_default.h
@@ -0,0 +1,154 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __RESOURCE_DEFAULT_H__
+#define __RESOURCE_DEFAULT_H__
+
+#include <core/display_interface.h>
+#include <private/resource_interface.h>
+#include <utils/locker.h>
+#include <vector>
+
+#include "hw_interface.h"
+
+namespace sdm {
+
+class ResourceDefault : public ResourceInterface {
+ public:
+ static DisplayError CreateResourceDefault(const HWResourceInfo &hw_resource_info,
+ ResourceInterface **resource_intf);
+ static DisplayError DestroyResourceDefault(ResourceInterface *resource_intf);
+ virtual DisplayError RegisterDisplay(int32_t display_id, DisplayType type,
+ const HWDisplayAttributes &display_attributes,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes,
+ Handle *display_ctx);
+ virtual DisplayError UnregisterDisplay(Handle display_ctx);
+ virtual DisplayError ReconfigureDisplay(Handle display_ctx,
+ const HWDisplayAttributes &display_attributes,
+ const HWPanelInfo &hw_panel_info,
+ const HWMixerAttributes &mixer_attributes);
+ virtual DisplayError Start(Handle display_ctx);
+ virtual DisplayError Stop(Handle display_ctx, HWLayers *hw_layers);
+ virtual DisplayError Prepare(Handle display_ctx, HWLayers *hw_layers);
+ virtual DisplayError PostPrepare(Handle display_ctx, HWLayers *hw_layers);
+ virtual DisplayError Commit(Handle display_ctx, HWLayers *hw_layers);
+ virtual DisplayError PostCommit(Handle display_ctx, HWLayers *hw_layers);
+ virtual void Purge(Handle display_ctx);
+ virtual DisplayError SetMaxMixerStages(Handle display_ctx, uint32_t max_mixer_stages);
+ virtual DisplayError ValidateScaling(const LayerRect &crop, const LayerRect &dst, bool rotate90,
+ BufferLayout layout, bool use_rotator_downscale);
+ DisplayError ValidateCursorConfig(Handle display_ctx, const Layer *layer, bool is_top);
+ DisplayError ValidateAndSetCursorPosition(Handle display_ctx, HWLayers *hw_layers, int x, int y,
+ DisplayConfigVariableInfo *fb_config);
+ DisplayError SetMaxBandwidthMode(HWBwModes mode);
+ virtual DisplayError SetDetailEnhancerData(Handle display_ctx,
+ const DisplayDetailEnhancerData &de_data);
+ virtual DisplayError Perform(int cmd, ...) { return kErrorNone; }
+
+ private:
+ enum PipeOwner {
+ kPipeOwnerUserMode, // Pipe state when it is available for reservation
+ kPipeOwnerKernelMode, // Pipe state when pipe is owned by kernel
+ };
+
+ // todo: retrieve all these from kernel
+ enum {
+ kMaxDecimationDownScaleRatio = 16,
+ };
+
+ struct SourcePipe {
+ PipeType type;
+ PipeOwner owner;
+ uint32_t mdss_pipe_id;
+ uint32_t index;
+ HWBlockType hw_block_type;
+ int priority;
+
+ SourcePipe()
+ : type(kPipeTypeUnused),
+ owner(kPipeOwnerUserMode),
+ mdss_pipe_id(0),
+ index(0),
+ hw_block_type(kHWBlockMax),
+ priority(0) {}
+
+ inline void ResetState() { hw_block_type = kHWBlockMax; }
+ };
+
+ struct DisplayResourceContext {
+ HWDisplayAttributes display_attributes;
+ HWBlockType hw_block_type;
+ uint64_t frame_count;
+ HWMixerAttributes mixer_attributes;
+
+ DisplayResourceContext() : hw_block_type(kHWBlockMax), frame_count(0) {}
+ };
+
+ struct HWBlockContext {
+ bool is_in_use;
+ HWBlockContext() : is_in_use(false) { }
+ };
+
+ explicit ResourceDefault(const HWResourceInfo &hw_res_info);
+ DisplayError Init();
+ DisplayError Deinit();
+ uint32_t NextPipe(PipeType pipe_type, HWBlockType hw_block_type);
+ uint32_t SearchPipe(HWBlockType hw_block_type, SourcePipe *src_pipes, uint32_t num_pipe);
+ uint32_t GetPipe(HWBlockType hw_block_type, bool need_scale);
+ bool IsScalingNeeded(const HWPipeInfo *pipe_info);
+ DisplayError Config(DisplayResourceContext *display_resource_ctx, HWLayers *hw_layers);
+ DisplayError DisplaySplitConfig(DisplayResourceContext *display_resource_ctx,
+ const LayerRect &src_rect, const LayerRect &dst_rect,
+ HWLayerConfig *layer_config);
+ DisplayError SrcSplitConfig(DisplayResourceContext *display_resource_ctx,
+ const LayerRect &src_rect, const LayerRect &dst_rect,
+ HWLayerConfig *layer_config);
+ bool CalculateCropRects(const LayerRect &scissor, LayerRect *crop, LayerRect *dst);
+ DisplayError ValidateLayerParams(const Layer *layer);
+ DisplayError ValidateDimensions(const LayerRect &crop, const LayerRect &dst);
+ DisplayError ValidatePipeParams(HWPipeInfo *pipe_info, LayerBufferFormat format);
+ DisplayError ValidateDownScaling(float scale_x, float scale_y, bool ubwc_tiled);
+ DisplayError ValidateUpScaling(float scale_x, float scale_y);
+ DisplayError GetScaleFactor(const LayerRect &crop, const LayerRect &dst, float *scale_x,
+ float *scale_y);
+ DisplayError SetDecimationFactor(HWPipeInfo *pipe);
+ void SplitRect(const LayerRect &src_rect, const LayerRect &dst_rect, LayerRect *src_left,
+ LayerRect *dst_left, LayerRect *src_right, LayerRect *dst_right);
+ DisplayError AlignPipeConfig(const Layer *layer, HWPipeInfo *left_pipe,
+ HWPipeInfo *right_pipe);
+ void ResourceStateLog(void);
+ DisplayError CalculateDecimation(float downscale, uint8_t *decimation);
+ DisplayError GetScaleLutConfig(HWScaleLutInfo *lut_info);
+
+ HWResourceInfo hw_res_info_;
+ HWBlockContext hw_block_ctx_[kHWBlockMax];
+ std::vector<SourcePipe> src_pipes_;
+ uint32_t num_pipe_ = 0;
+};
+
+} // namespace sdm
+
+#endif // __RESOURCE_DEFAULT_H__
+
diff --git a/sdm/libs/core/strategy.cpp b/sdm/libs/core/strategy.cpp
new file mode 100644
index 0000000..8b7740d
--- /dev/null
+++ b/sdm/libs/core/strategy.cpp
@@ -0,0 +1,285 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <vector>
+
+#include "strategy.h"
+#include "utils/rect.h"
+
+#define __CLASS__ "Strategy"
+
+namespace sdm {
+
+Strategy::Strategy(ExtensionInterface *extension_intf, BufferAllocator *buffer_allocator,
+ int32_t display_id, DisplayType type, const HWResourceInfo &hw_resource_info,
+ const HWPanelInfo &hw_panel_info, const HWMixerAttributes &mixer_attributes,
+ const HWDisplayAttributes &display_attributes,
+ const DisplayConfigVariableInfo &fb_config)
+ : extension_intf_(extension_intf),
+ display_id_(display_id),
+ display_type_(type),
+ hw_resource_info_(hw_resource_info),
+ hw_panel_info_(hw_panel_info),
+ mixer_attributes_(mixer_attributes),
+ display_attributes_(display_attributes),
+ fb_config_(fb_config),
+ buffer_allocator_(buffer_allocator) {}
+
+DisplayError Strategy::Init() {
+ DisplayError error = kErrorNone;
+
+ if (extension_intf_) {
+ error = extension_intf_->CreateStrategyExtn(display_id_, display_type_, buffer_allocator_,
+ hw_resource_info_, hw_panel_info_,
+ mixer_attributes_, fb_config_, &strategy_intf_);
+ if (error != kErrorNone) {
+ DLOGE("Failed to create strategy");
+ return error;
+ }
+
+ error = extension_intf_->CreatePartialUpdate(
+ display_id_, display_type_, hw_resource_info_, hw_panel_info_, mixer_attributes_,
+ display_attributes_, fb_config_, &partial_update_intf_);
+ }
+
+ return kErrorNone;
+}
+
+DisplayError Strategy::Deinit() {
+ if (strategy_intf_) {
+ if (partial_update_intf_) {
+ extension_intf_->DestroyPartialUpdate(partial_update_intf_);
+ }
+
+ extension_intf_->DestroyStrategyExtn(strategy_intf_);
+ }
+
+ return kErrorNone;
+}
+
+void Strategy::GenerateROI(HWLayersInfo *hw_layers_info, const PUConstraints &pu_constraints) {
+ hw_layers_info_ = hw_layers_info;
+
+ if (partial_update_intf_) {
+ partial_update_intf_->Start(pu_constraints);
+ }
+
+ return GenerateROI();
+}
+
+DisplayError Strategy::Start(HWLayersInfo *hw_layers_info, uint32_t *max_attempts) {
+ DisplayError error = kErrorNone;
+ hw_layers_info_ = hw_layers_info;
+ extn_start_success_ = false;
+
+ if (!disable_gpu_comp_ && !hw_layers_info_->gpu_target_index) {
+ DLOGE("GPU composition is enabled and GPU target buffer not provided.");
+ return kErrorNotSupported;
+ }
+
+ if (strategy_intf_) {
+ error = strategy_intf_->Start(hw_layers_info_, max_attempts);
+ if (error == kErrorNone) {
+ extn_start_success_ = true;
+ return kErrorNone;
+ }
+ }
+
+ *max_attempts = 1;
+
+ return kErrorNone;
+}
+
+DisplayError Strategy::Stop() {
+ if (strategy_intf_) {
+ return strategy_intf_->Stop();
+ }
+
+ return kErrorNone;
+}
+
+DisplayError Strategy::GetNextStrategy(StrategyConstraints *constraints) {
+ DTRACE_SCOPED();
+
+ if (extn_start_success_) {
+ return strategy_intf_->GetNextStrategy(constraints);
+ }
+
+ // Do not fallback to GPU if GPU comp is disabled.
+ if (disable_gpu_comp_) {
+ return kErrorNotSupported;
+ }
+
+ // Mark all application layers for GPU composition. Find GPU target buffer and store its index for
+ // programming the hardware.
+ LayerStack *layer_stack = hw_layers_info_->stack;
+ for (uint32_t i = 0; i < hw_layers_info_->app_layer_count; i++) {
+ layer_stack->layers.at(i)->composition = kCompositionGPU;
+ layer_stack->layers.at(i)->request.flags.request_flags = 0; // Reset layer request
+ }
+
+ // When mixer resolution and panel resolutions are same (1600x2560) and FB resolution is
+ // 1080x1920 FB_Target destination coordinates(mapped to FB resolution 1080x1920) need to
+ // be mapped to destination coordinates of mixer resolution(1600x2560).
+ Layer *gpu_target_layer = layer_stack->layers.at(hw_layers_info_->gpu_target_index);
+ float layer_mixer_width = FLOAT(mixer_attributes_.width);
+ float layer_mixer_height = FLOAT(mixer_attributes_.height);
+ float fb_width = FLOAT(fb_config_.x_pixels);
+ float fb_height = FLOAT(fb_config_.y_pixels);
+ LayerRect src_domain = (LayerRect){0.0f, 0.0f, fb_width, fb_height};
+ LayerRect dst_domain = (LayerRect){0.0f, 0.0f, layer_mixer_width, layer_mixer_height};
+
+ Layer layer = *gpu_target_layer;
+ hw_layers_info_->index.push_back(hw_layers_info_->gpu_target_index);
+ hw_layers_info_->roi_index.push_back(0);
+ layer.transform.flip_horizontal ^= hw_panel_info_.panel_orientation.flip_horizontal;
+ layer.transform.flip_vertical ^= hw_panel_info_.panel_orientation.flip_vertical;
+ // Flip rect to match transform.
+ TransformHV(src_domain, layer.dst_rect, layer.transform, &layer.dst_rect);
+ // Scale to mixer resolution.
+ MapRect(src_domain, dst_domain, layer.dst_rect, &layer.dst_rect);
+ hw_layers_info_->hw_layers.push_back(layer);
+
+ return kErrorNone;
+}
+
+void Strategy::GenerateROI() {
+ bool split_display = false;
+
+ if (partial_update_intf_ && partial_update_intf_->GenerateROI(hw_layers_info_) == kErrorNone) {
+ return;
+ }
+
+ float layer_mixer_width = mixer_attributes_.width;
+ float layer_mixer_height = mixer_attributes_.height;
+
+ if (!hw_resource_info_.is_src_split && display_attributes_.is_device_split) {
+ split_display = true;
+ }
+
+ hw_layers_info_->left_frame_roi = {};
+ hw_layers_info_->right_frame_roi = {};
+
+ if (split_display) {
+ float left_split = FLOAT(mixer_attributes_.split_left);
+ hw_layers_info_->left_frame_roi.push_back(LayerRect(0.0f, 0.0f,
+ left_split, layer_mixer_height));
+ hw_layers_info_->right_frame_roi.push_back(LayerRect(left_split,
+ 0.0f, layer_mixer_width, layer_mixer_height));
+ } else {
+ hw_layers_info_->left_frame_roi.push_back(LayerRect(0.0f, 0.0f,
+ layer_mixer_width, layer_mixer_height));
+ hw_layers_info_->right_frame_roi.push_back(LayerRect(0.0f, 0.0f, 0.0f, 0.0f));
+ }
+}
+
+DisplayError Strategy::Reconfigure(const HWPanelInfo &hw_panel_info,
+ const HWDisplayAttributes &display_attributes,
+ const HWMixerAttributes &mixer_attributes,
+ const DisplayConfigVariableInfo &fb_config) {
+ DisplayError error = kErrorNone;
+
+ if (!extension_intf_) {
+ return kErrorNone;
+ }
+
+ // TODO(user): PU Intf will not be created for video mode panels, hence re-evaluate if
+ // reconfigure is needed.
+ if (partial_update_intf_) {
+ extension_intf_->DestroyPartialUpdate(partial_update_intf_);
+ partial_update_intf_ = NULL;
+ }
+
+ extension_intf_->CreatePartialUpdate(display_id_, display_type_, hw_resource_info_, hw_panel_info,
+ mixer_attributes, display_attributes, fb_config,
+ &partial_update_intf_);
+
+ error = strategy_intf_->Reconfigure(hw_panel_info, hw_resource_info_, mixer_attributes,
+ fb_config);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ hw_panel_info_ = hw_panel_info;
+ display_attributes_ = display_attributes;
+ mixer_attributes_ = mixer_attributes;
+ fb_config_ = fb_config;
+
+ return kErrorNone;
+}
+
+DisplayError Strategy::SetCompositionState(LayerComposition composition_type, bool enable) {
+ DLOGI("composition type = %d, enable = %d", composition_type, enable);
+
+ if (composition_type == kCompositionGPU) {
+ disable_gpu_comp_ = !enable;
+ }
+
+ if (strategy_intf_) {
+ return strategy_intf_->SetCompositionState(composition_type, enable);
+ }
+
+ return kErrorNone;
+}
+
+DisplayError Strategy::Purge() {
+ if (strategy_intf_) {
+ return strategy_intf_->Purge();
+ }
+
+ return kErrorNone;
+}
+
+DisplayError Strategy::SetIdleTimeoutMs(uint32_t active_ms) {
+ if (strategy_intf_) {
+ return strategy_intf_->SetIdleTimeoutMs(active_ms);
+ }
+
+ return kErrorNotSupported;
+}
+
+DisplayError Strategy::SetColorModesInfo(const std::vector<PrimariesTransfer> &colormodes_cs) {
+ if (strategy_intf_) {
+ return strategy_intf_->SetColorModesInfo(colormodes_cs);
+ }
+ return kErrorNotSupported;
+}
+
+DisplayError Strategy::SetBlendSpace(const PrimariesTransfer &blend_space) {
+ if (strategy_intf_) {
+ return strategy_intf_->SetBlendSpace(blend_space);
+ }
+ return kErrorNotSupported;
+}
+
+bool Strategy::CanSkipValidate() {
+ if (strategy_intf_) {
+ return strategy_intf_->CanSkipValidate();
+ }
+ return true;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/core/strategy.h b/sdm/libs/core/strategy.h
new file mode 100644
index 0000000..292b88c
--- /dev/null
+++ b/sdm/libs/core/strategy.h
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2014 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its contributors may be used to
+* endorse or promote products derived from this software without specific prior written
+* permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NON-INFRINGEMENT 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.
+*/
+
+#ifndef __STRATEGY_H__
+#define __STRATEGY_H__
+
+#include <core/display_interface.h>
+#include <private/extension_interface.h>
+#include <core/buffer_allocator.h>
+#include <vector>
+
+namespace sdm {
+
+class Strategy {
+ public:
+ Strategy(ExtensionInterface *extension_intf, BufferAllocator *buffer_allocator,
+ int32_t display_id, DisplayType type, const HWResourceInfo &hw_resource_info,
+ const HWPanelInfo &hw_panel_info, const HWMixerAttributes &mixer_attributes,
+ const HWDisplayAttributes &display_attributes,
+ const DisplayConfigVariableInfo &fb_config);
+
+ DisplayError Init();
+ DisplayError Deinit();
+
+ DisplayError Start(HWLayersInfo *hw_layers_info, uint32_t *max_attempts);
+ DisplayError GetNextStrategy(StrategyConstraints *constraints);
+ DisplayError Stop();
+ DisplayError Reconfigure(const HWPanelInfo &hw_panel_info,
+ const HWDisplayAttributes &hw_display_attributes,
+ const HWMixerAttributes &mixer_attributes,
+ const DisplayConfigVariableInfo &fb_config);
+ DisplayError SetCompositionState(LayerComposition composition_type, bool enable);
+ DisplayError Purge();
+ DisplayError SetIdleTimeoutMs(uint32_t active_ms);
+ DisplayError SetColorModesInfo(const std::vector<PrimariesTransfer> &colormodes_cs);
+ DisplayError SetBlendSpace(const PrimariesTransfer &blend_space);
+ void GenerateROI(HWLayersInfo *hw_layers_info, const PUConstraints &pu_constraints);
+ bool CanSkipValidate();
+
+ private:
+ void GenerateROI();
+
+ ExtensionInterface *extension_intf_ = NULL;
+ StrategyInterface *strategy_intf_ = NULL;
+ PartialUpdateInterface *partial_update_intf_ = NULL;
+ int32_t display_id_;
+ DisplayType display_type_;
+ HWResourceInfo hw_resource_info_;
+ HWPanelInfo hw_panel_info_;
+ HWLayersInfo *hw_layers_info_ = NULL;
+ HWMixerAttributes mixer_attributes_ = {};
+ HWDisplayAttributes display_attributes_ = {};
+ DisplayConfigVariableInfo fb_config_ = {};
+ bool extn_start_success_ = false;
+ bool disable_gpu_comp_ = false;
+ BufferAllocator *buffer_allocator_ = NULL;
+};
+
+} // namespace sdm
+
+#endif // __STRATEGY_H__
+
diff --git a/sdm/libs/hwc2/Android.mk b/sdm/libs/hwc2/Android.mk
new file mode 100644
index 0000000..bdaeeb2
--- /dev/null
+++ b/sdm/libs/hwc2/Android.mk
@@ -0,0 +1,72 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+include $(LOCAL_PATH)/../../../common.mk
+
+ifeq ($(use_hwc2),true)
+
+LOCAL_MODULE := hwcomposer.$(TARGET_BOARD_PLATFORM)
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := $(common_includes)
+LOCAL_C_INCLUDES += $(kernel_includes)
+LOCAL_ADDITIONAL_DEPENDENCIES := $(common_deps)
+LOCAL_HEADER_LIBRARIES := display_headers
+
+LOCAL_CFLAGS := -Wno-missing-field-initializers -Wno-unused-parameter \
+ -fcolor-diagnostics\
+ -DLOG_TAG=\"SDM\" $(common_flags)
+LOCAL_CLANG := true
+
+LOCAL_SHARED_LIBRARIES := libsdmcore libqservice libbinder libhardware libhardware_legacy \
+ libutils libcutils libsync libqdutils libqdMetaData \
+ libdisplaydebug libsdmutils libc++ liblog libgrallocutils libui \
+ libgpu_tonemapper libhidlbase libhidltransport libdisplayconfig.qti \
+ android.hardware.graphics.mapper@2.0 \
+ android.hardware.graphics.mapper@2.1 \
+ android.hardware.graphics.mapper@3.0 \
+ android.hardware.graphics.allocator@2.0 \
+ android.hardware.graphics.allocator@3.0 \
+ android.hardware.graphics.composer@2.2 \
+ android.hardware.graphics.composer@2.3 \
+ android.hardware.graphics.composer@2.4 \
+ vendor.display.config@1.0 \
+ vendor.display.config@1.1 \
+ vendor.display.config@1.2 \
+ vendor.display.config@1.3 \
+ vendor.display.config@1.4 \
+ vendor.display.config@1.5 \
+ vendor.display.config@1.6 \
+ vendor.display.config@1.7 \
+ vendor.display.config@1.8 \
+ vendor.display.config@1.9 \
+ vendor.display.config@1.10 \
+ vendor.display.config@1.11 \
+ vendor.display.config@2.0
+
+ifeq ($(TARGET_BOARD_AUTO), true)
+LOCAL_CFLAGS += -DCONFIG_BASEID_FROM_PROP
+endif
+
+LOCAL_SRC_FILES := hwc_session.cpp \
+ hwc_session_services.cpp \
+ hwc_display.cpp \
+ hwc_display_builtin.cpp \
+ hwc_display_pluggable.cpp \
+ hwc_display_dummy.cpp \
+ hwc_display_pluggable_test.cpp \
+ hwc_display_virtual.cpp \
+ hwc_debugger.cpp \
+ hwc_buffer_sync_handler.cpp \
+ hwc_color_manager.cpp \
+ hwc_layers.cpp \
+ hwc_callbacks.cpp \
+ cpuhint.cpp \
+ hwc_tonemapper.cpp \
+ display_null.cpp \
+ hwc_socket_handler.cpp \
+ hwc_buffer_allocator.cpp
+LOCAL_VINTF_FRAGMENTS := android.hardware.graphics.composer-qti-display.xml
+
+include $(BUILD_SHARED_LIBRARY)
+endif
diff --git a/sdm/libs/hwc2/android.hardware.graphics.composer-qti-display.xml b/sdm/libs/hwc2/android.hardware.graphics.composer-qti-display.xml
new file mode 100644
index 0000000..66c85ab
--- /dev/null
+++ b/sdm/libs/hwc2/android.hardware.graphics.composer-qti-display.xml
@@ -0,0 +1,48 @@
+<!--
+Copyright (c) 2020, The Linux Foundation. All rights reserved.
+
+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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+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.
+-->
+<manifest version="1.0" type="device">
+ <hal format="hidl">
+ <name>android.hardware.graphics.composer</name>
+ <transport>hwbinder</transport>
+ <version>2.4</version>
+ <interface>
+ <name>IComposer</name>
+ <instance>default</instance>
+ </interface>
+ </hal>
+ <hal format="hidl">
+ <name>vendor.display.config</name>
+ <transport>hwbinder</transport>
+ <version>2.0</version>
+ <interface>
+ <name>IDisplayConfig</name>
+ <instance>default</instance>
+ </interface>
+ </hal>
+</manifest>
diff --git a/sdm/libs/hwc2/cpuhint.cpp b/sdm/libs/hwc2/cpuhint.cpp
new file mode 100644
index 0000000..ca88ead
--- /dev/null
+++ b/sdm/libs/hwc2/cpuhint.cpp
@@ -0,0 +1,108 @@
+/* Copyright (c) 2015, The Linux Foundataion. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*
+*/
+
+#include <cutils/properties.h>
+#include <dlfcn.h>
+#include <utils/debug.h>
+
+#include "cpuhint.h"
+#include "hwc_debugger.h"
+
+#define __CLASS__ "CPUHint"
+
+namespace sdm {
+
+DisplayError CPUHint::Init(HWCDebugHandler *debug_handler) {
+ char path[PROPERTY_VALUE_MAX];
+ if (debug_handler->GetProperty("ro.vendor.extension_library", path) != kErrorNone) {
+ DLOGI("Vendor Extension Library not enabled");
+ return kErrorNotSupported;
+ }
+
+ int pre_enable_window = -1;
+ debug_handler->GetProperty(PERF_HINT_WINDOW_PROP, &pre_enable_window);
+ if (pre_enable_window <= 0) {
+ DLOGI("Invalid CPU Hint Pre-enable Window %d", pre_enable_window);
+ return kErrorNotSupported;
+ }
+
+ DLOGI("CPU Hint Pre-enable Window %d", pre_enable_window);
+ pre_enable_window_ = pre_enable_window;
+
+ if (vendor_ext_lib_.Open(path)) {
+ if (!vendor_ext_lib_.Sym("perf_lock_acq", reinterpret_cast<void **>(&fn_lock_acquire_)) ||
+ !vendor_ext_lib_.Sym("perf_lock_rel", reinterpret_cast<void **>(&fn_lock_release_))) {
+ DLOGW("Failed to load symbols for Vendor Extension Library");
+ return kErrorNotSupported;
+ }
+ DLOGI("Successfully Loaded Vendor Extension Library symbols");
+ enabled_ = true;
+ } else {
+ DLOGW("Failed to open %s : %s", path, vendor_ext_lib_.Error());
+ }
+
+ return kErrorNone;
+}
+
+void CPUHint::Set() {
+ if (!enabled_) {
+ return;
+ }
+ if (lock_acquired_) {
+ return;
+ }
+ if (frame_countdown_) {
+ --frame_countdown_;
+ return;
+ }
+
+ int hint = HINT;
+ lock_handle_ = fn_lock_acquire_(0 /*handle*/, 0/*duration*/,
+ &hint, sizeof(hint) / sizeof(int));
+ if (lock_handle_ >= 0) {
+ lock_acquired_ = true;
+ }
+}
+
+void CPUHint::Reset() {
+ if (!enabled_) {
+ return;
+ }
+
+ frame_countdown_ = pre_enable_window_;
+
+ if (!lock_acquired_) {
+ return;
+ }
+
+ fn_lock_release_(lock_handle_);
+ lock_acquired_ = false;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/cpuhint.h b/sdm/libs/hwc2/cpuhint.h
new file mode 100644
index 0000000..e758763
--- /dev/null
+++ b/sdm/libs/hwc2/cpuhint.h
@@ -0,0 +1,61 @@
+/* Copyright (c) 2015, The Linux Foundataion. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*
+*/
+
+#ifndef __CPUHINT_H__
+#define __CPUHINT_H__
+
+#include <core/sdm_types.h>
+#include <utils/sys.h>
+
+namespace sdm {
+
+class HWCDebugHandler;
+
+class CPUHint {
+ public:
+ DisplayError Init(HWCDebugHandler *debug_handler);
+ void Set();
+ void Reset();
+
+ private:
+ enum { HINT = 0x4501 /* 45-display layer hint, 01-Enable */ };
+ bool enabled_ = false;
+ // frames to wait before setting this hint
+ int pre_enable_window_ = 0;
+ int frame_countdown_ = 0;
+ int lock_handle_ = 0;
+ bool lock_acquired_ = false;
+ DynLib vendor_ext_lib_;
+ int (*fn_lock_acquire_)(int handle, int duration, int *hints, int num_args) = NULL;
+ int (*fn_lock_release_)(int value) = NULL;
+};
+
+} // namespace sdm
+
+#endif // __CPUHINT_H__
diff --git a/sdm/libs/hwc2/display_null.cpp b/sdm/libs/hwc2/display_null.cpp
new file mode 100644
index 0000000..48f5a13
--- /dev/null
+++ b/sdm/libs/hwc2/display_null.cpp
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <algorithm>
+#include "display_null.h"
+
+#define __CLASS__ "DisplayNull"
+
+namespace sdm {
+
+DisplayError DisplayNull::Init() {
+ default_variable_config_.vsync_period_ns = 16600000;
+ default_variable_config_.x_pixels = 1080;
+ default_variable_config_.y_pixels = 1920;
+ default_variable_config_.x_dpi = 300;
+ default_variable_config_.y_dpi = 300;
+ default_variable_config_.fps = 60;
+ default_variable_config_.is_yuv = false;
+
+ return kErrorNone;
+}
+
+DisplayError DisplayNull::GetMixerResolution(uint32_t *width, uint32_t *height) {
+ if (!width || !height) {
+ return kErrorParameters;
+ }
+
+ *width = default_variable_config_.x_pixels;
+ *height = default_variable_config_.y_pixels;
+ return kErrorNone;
+}
+
+DisplayError DisplayNull::GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info) {
+ if (!variable_info) {
+ return kErrorParameters;
+ }
+
+ *variable_info = default_variable_config_;
+ return kErrorNone;
+}
+
+DisplayError DisplayNull::GetConfig(uint32_t index, DisplayConfigVariableInfo *disp_attr) {
+ if (!disp_attr) {
+ return kErrorParameters;
+ }
+
+ *disp_attr = default_variable_config_;
+ return kErrorNone;
+}
+
+DisplayError DisplayNull::GetConfig(DisplayConfigFixedInfo *fixed_info) {
+ if (!fixed_info) {
+ return kErrorParameters;
+ }
+
+ *fixed_info = default_fixed_config_;
+ return kErrorNone;
+}
+
+DisplayError DisplayNull::GetRefreshRateRange(uint32_t *min_refresh_rate,
+ uint32_t *max_refresh_rate) {
+ if (!min_refresh_rate || !max_refresh_rate) {
+ return kErrorParameters;
+ }
+
+ *min_refresh_rate = 60;
+ *max_refresh_rate = 60;
+ return kErrorNone;
+}
+
+DisplayError DisplayNull::GetActiveConfig(uint32_t *config) {
+ if (!config) {
+ return kErrorParameters;
+ }
+
+ *config = 0;
+ return kErrorNone;
+}
+
+DisplayError DisplayNull::GetNumVariableInfoConfigs(uint32_t *count) {
+ if (!count) {
+ return kErrorParameters;
+ }
+
+ *count = 1;
+ return kErrorNone;
+}
+
+DisplayError DisplayNull::Prepare(LayerStack *layer_stack) {
+ if (!layer_stack) {
+ return kErrorParameters;
+ }
+
+ for (auto layer : layer_stack->layers) {
+ layer->composition = kCompositionGPU;
+ }
+ return kErrorNone;
+}
+
+DisplayError DisplayNull::GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data) {
+ *out_port = 1; // DSI0 Encoder Index
+ if (out_data == nullptr) {
+ *out_data_size = (uint32_t)(edid_.size());
+ } else {
+ *out_data_size = std::min(*out_data_size, (uint32_t)(edid_.size()));
+ memcpy(out_data, edid_.data(), *out_data_size);
+ }
+
+ return kErrorNone;
+}
+
+DisplayError DisplayNullExternal::Commit(LayerStack *layer_stack) {
+ if (!layer_stack) {
+ return kErrorParameters;
+ }
+
+ for (Layer *layer : layer_stack->layers) {
+ if (layer->composition != kCompositionGPUTarget) {
+ layer->composition = kCompositionSDE;
+ layer->input_buffer.release_fence_fd = -1;
+ }
+ }
+ layer_stack->retire_fence_fd = -1;
+ return kErrorNone;
+}
+
+DisplayError DisplayNullExternal::GetDisplayState(DisplayState *state) {
+ if (!state) {
+ return kErrorParameters;
+ }
+
+ *state = state_;
+ return kErrorNone;
+}
+
+DisplayError DisplayNullExternal::SetDisplayState(DisplayState state, bool teardown,
+ int *release_fence) {
+ state_ = state;
+ return kErrorNone;
+}
+
+DisplayError DisplayNullExternal::SetFrameBufferConfig(const DisplayConfigVariableInfo
+ &variable_info) {
+ fb_config_ = variable_info;
+ return kErrorNone;
+}
+
+DisplayError DisplayNullExternal::GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info) {
+ if (!variable_info) {
+ return kErrorParameters;
+ }
+
+ *variable_info = fb_config_;
+ return kErrorNone;
+}
+
+DisplayError DisplayNullExternal::GetDisplayIdentificationData(uint8_t *out_port,
+ uint32_t *out_data_size,
+ uint8_t *out_data) {
+ DisplayNull::GetDisplayIdentificationData(out_port, out_data_size, out_data);
+ *out_port = 4; // TMDS Encoder Index
+
+ return kErrorNone;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/display_null.h b/sdm/libs/hwc2/display_null.h
new file mode 100644
index 0000000..5ae8d8c
--- /dev/null
+++ b/sdm/libs/hwc2/display_null.h
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __DISPLAY_NULL_H__
+#define __DISPLAY_NULL_H__
+
+#include <core/display_interface.h>
+#include <string>
+#include <vector>
+
+namespace sdm {
+
+using std::string;
+using std::vector;
+
+#define MAKE_NO_OP(virtual_method_signature) \
+ virtual DisplayError virtual_method_signature { return kErrorNone; }
+
+class DisplayNull : public DisplayInterface {
+ public:
+ virtual ~DisplayNull() { }
+ virtual DisplayError Init();
+ virtual DisplayError GetMixerResolution(uint32_t *width, uint32_t *height);
+
+ virtual DisplayError GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info);
+ virtual DisplayError GetConfig(uint32_t index, DisplayConfigVariableInfo *disp_attr);
+ virtual DisplayError GetConfig(DisplayConfigFixedInfo *fixed_info);
+ virtual DisplayError GetRefreshRateRange(uint32_t *min_refresh_rate, uint32_t *max_refresh_rate);
+ virtual DisplayError GetActiveConfig(uint32_t *config);
+ virtual DisplayError GetNumVariableInfoConfigs(uint32_t *count);
+ virtual DisplayError Prepare(LayerStack *layer_stack);
+ virtual bool IsPrimaryDisplay() { return true; }
+ virtual bool IsUnderscanSupported() { return true; }
+ virtual void SetIdleTimeoutMs(uint32_t active_ms) { }
+ virtual DisplayError GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data);
+ virtual string Dump() { return ""; }
+ virtual bool IsSupportSsppTonemap() { return false; }
+ virtual bool CanSkipValidate() { return true; }
+
+ MAKE_NO_OP(TeardownConcurrentWriteback(void))
+ MAKE_NO_OP(Commit(LayerStack *))
+ MAKE_NO_OP(GetDisplayState(DisplayState *))
+ MAKE_NO_OP(SetDisplayState(DisplayState, bool, int*))
+ MAKE_NO_OP(SetFrameBufferConfig(const DisplayConfigVariableInfo &))
+ MAKE_NO_OP(Flush(LayerStack *))
+ MAKE_NO_OP(GetVSyncState(bool *))
+ MAKE_NO_OP(SetActiveConfig(uint32_t))
+ MAKE_NO_OP(SetActiveConfig(DisplayConfigVariableInfo *))
+ MAKE_NO_OP(SetMaxMixerStages(uint32_t))
+ MAKE_NO_OP(ControlPartialUpdate(bool, uint32_t *))
+ MAKE_NO_OP(DisablePartialUpdateOneFrame())
+ MAKE_NO_OP(SetDisplayMode(uint32_t))
+ MAKE_NO_OP(SetPanelBrightness(float))
+ MAKE_NO_OP(CachePanelBrightness(int))
+ MAKE_NO_OP(OnMinHdcpEncryptionLevelChange(uint32_t))
+ MAKE_NO_OP(ColorSVCRequestRoute(const PPDisplayAPIPayload &, PPDisplayAPIPayload *,
+ PPPendingParams *))
+ MAKE_NO_OP(GetColorModeCount(uint32_t *))
+ MAKE_NO_OP(GetColorModes(uint32_t *, vector<string> *))
+ MAKE_NO_OP(GetColorModeAttr(const string &, AttrVal *))
+ MAKE_NO_OP(SetColorMode(const string &))
+ MAKE_NO_OP(SetColorModeById(int32_t))
+ MAKE_NO_OP(GetColorModeName(int32_t, string *))
+ MAKE_NO_OP(SetColorTransform(const uint32_t, const double *))
+ MAKE_NO_OP(GetDefaultColorMode(string *))
+ MAKE_NO_OP(SetCursorPosition(int, int))
+ MAKE_NO_OP(SetRefreshRate(uint32_t, bool))
+ MAKE_NO_OP(GetRefreshRate(uint32_t *))
+ MAKE_NO_OP(GetPanelBrightness(float *))
+ MAKE_NO_OP(SetVSyncState(bool))
+ MAKE_NO_OP(SetMixerResolution(uint32_t, uint32_t))
+ MAKE_NO_OP(SetDetailEnhancerData(const DisplayDetailEnhancerData &))
+ MAKE_NO_OP(GetDisplayPort(DisplayPort *))
+ MAKE_NO_OP(GetDisplayId(int32_t *))
+ MAKE_NO_OP(GetDisplayType(DisplayType *))
+ MAKE_NO_OP(SetCompositionState(LayerComposition, bool))
+ MAKE_NO_OP(GetClientTargetSupport(uint32_t, uint32_t, LayerBufferFormat,
+ const ColorMetaData &))
+ MAKE_NO_OP(HandleSecureEvent(SecureEvent, LayerStack *))
+ MAKE_NO_OP(SetQSyncMode(QSyncMode))
+ MAKE_NO_OP(ControlIdlePowerCollapse(bool, bool))
+ MAKE_NO_OP(SetDisplayDppsAdROI(void *))
+ MAKE_NO_OP(SetDynamicDSIClock(uint64_t bit_clk_rate))
+ MAKE_NO_OP(GetDynamicDSIClock(uint64_t *bit_clk_rate))
+ MAKE_NO_OP(GetSupportedDSIClock(vector<uint64_t> *bitclk_rates))
+ MAKE_NO_OP(SetPanelLuminanceAttributes(float min_lum, float max_lum))
+
+ protected:
+ DisplayConfigVariableInfo default_variable_config_ = {};
+ DisplayConfigFixedInfo default_fixed_config_ = {};
+ // 1920x1080 60fps panel of name Null Display with PnPID QCM
+ // Contains many 'don't-care' fields and valid checksum bytes
+ const vector<uint8_t> edid_{
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x44, 0x6D, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x1B, 0x10, 0x01, 0x03, 0x80, 0x50, 0x2D, 0x78, 0x0A, 0x0D, 0xC9, 0xA0, 0x57, 0x47, 0x98, 0x27,
+ 0x12, 0x48, 0x4C, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x3A, 0x80, 0x18, 0x71, 0x38, 0x2D, 0x40, 0x58, 0x2C,
+ 0x45, 0x00, 0x50, 0x1D, 0x74, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x4E, 0x75, 0x6C,
+ 0x6C, 0x20, 0x44, 0x69, 0x73, 0x70, 0x6C, 0x61, 0x79, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1
+ };
+};
+
+class DisplayNullExternal : public DisplayNull {
+ public:
+ virtual DisplayError Commit(LayerStack *layer_stack);
+ virtual DisplayError GetDisplayState(DisplayState *state);
+ virtual DisplayError SetDisplayState(DisplayState state, bool teardown,
+ int *release_fence);
+ virtual DisplayError SetFrameBufferConfig(const DisplayConfigVariableInfo &variable_info);
+ virtual DisplayError GetFrameBufferConfig(DisplayConfigVariableInfo *variable_info);
+ virtual DisplayError GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data);
+ void SetActive(bool active) { active_ = active; }
+ bool IsActive() { return active_; }
+
+ private:
+ bool active_ = false;
+ DisplayState state_ = kStateOff;
+ DisplayConfigVariableInfo fb_config_ = {};
+};
+
+} // namespace sdm
+
+#endif // __DISPLAY_NULL_H__
diff --git a/sdm/libs/hwc2/hwc_buffer_allocator.cpp b/sdm/libs/hwc2/hwc_buffer_allocator.cpp
new file mode 100644
index 0000000..7085901
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_buffer_allocator.cpp
@@ -0,0 +1,558 @@
+/*
+ * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#include <gralloc_priv.h>
+
+#include <core/buffer_allocator.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+
+#include "gr_utils.h"
+#include "hwc_buffer_allocator.h"
+#include "hwc_debugger.h"
+
+#define __CLASS__ "HWCBufferAllocator"
+
+using android::hardware::graphics::mapper::V2_0::Error;
+using MapperV3Error = android::hardware::graphics::mapper::V3_0::Error;
+using android::hardware::graphics::mapper::V2_0::BufferDescriptor;
+using MapperV3BufferDescriptor = android::hardware::graphics::mapper::V3_0::BufferDescriptor;
+using android::hardware::hidl_handle;
+using android::hardware::hidl_vec;
+
+namespace sdm {
+
+DisplayError HWCBufferAllocator::GetGrallocInstance() {
+ // Lazy initialization of gralloc HALs
+ if (mapper_V3_ != nullptr || mapper_V2_ != nullptr || allocator_V3_ != nullptr ||
+ allocator_V2_ != nullptr) {
+ return kErrorNone;
+ }
+
+ allocator_V3_ = IAllocatorV3::getService();
+ if (allocator_V3_ == nullptr) {
+ allocator_V2_ = IAllocatorV2::getService();
+ if (allocator_V2_ == nullptr) {
+ DLOGE("Unable to get allocator");
+ return kErrorCriticalResource;
+ }
+ }
+
+ mapper_V3_ = IMapperV3::getService();
+ if (mapper_V3_ == nullptr) {
+ mapper_V2_ = IMapperV2::getService();
+ if (mapper_V2_ == nullptr) {
+ DLOGE("Unable to get mapper");
+ return kErrorCriticalResource;
+ }
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWCBufferAllocator::AllocateBuffer(BufferInfo *buffer_info) {
+ auto err = GetGrallocInstance();
+ if (err != kErrorNone) {
+ return err;
+ }
+ const BufferConfig &buffer_config = buffer_info->buffer_config;
+ AllocatedBufferInfo *alloc_buffer_info = &buffer_info->alloc_buffer_info;
+ int format;
+ uint64_t alloc_flags = 0;
+ int error = SetBufferInfo(buffer_config.format, &format, &alloc_flags);
+ if (error != 0) {
+ return kErrorParameters;
+ }
+
+ if (buffer_config.secure) {
+ alloc_flags |= BufferUsage::PROTECTED;
+ }
+
+ if (buffer_config.secure_camera) {
+ alloc_flags |= BufferUsage::CAMERA_OUTPUT;
+ }
+
+ if (!buffer_config.cache) {
+ // Allocate uncached buffers
+ alloc_flags |= GRALLOC_USAGE_PRIVATE_UNCACHED;
+ }
+
+ if (buffer_config.gfx_client) {
+ alloc_flags |= BufferUsage::GPU_TEXTURE;
+ }
+
+ alloc_flags |= BufferUsage::COMPOSER_OVERLAY;
+
+ const native_handle_t *buf = nullptr;
+
+ if (mapper_V3_ != nullptr) {
+ IMapperV3::BufferDescriptorInfo descriptor_info;
+ descriptor_info.width = buffer_config.width;
+ descriptor_info.height = buffer_config.height;
+ descriptor_info.layerCount = 1;
+ descriptor_info.format =
+ static_cast<android::hardware::graphics::common::V1_2::PixelFormat>(format);
+ descriptor_info.usage = alloc_flags;
+
+ auto hidl_err = MapperV3Error::NONE;
+
+ auto descriptor = BufferDescriptor();
+ mapper_V3_->createDescriptor(descriptor_info, [&](const auto &_error, const auto &_descriptor) {
+ hidl_err = _error;
+ if (hidl_err != MapperV3Error::NONE) {
+ return;
+ }
+ descriptor = _descriptor;
+ });
+
+ if (hidl_err != MapperV3Error::NONE) {
+ DLOGE("Failed to create descriptor");
+ return kErrorMemory;
+ }
+
+ hidl_handle raw_handle = nullptr;
+
+ allocator_V3_->allocate(descriptor, 1,
+ [&](const auto &_error, const auto &_stride, const auto &_buffers) {
+ hidl_err = _error;
+ if (hidl_err != MapperV3Error::NONE) {
+ return;
+ }
+ raw_handle = _buffers[0];
+ });
+
+ if (hidl_err != MapperV3Error::NONE) {
+ DLOGE("Failed to allocate buffer");
+ return kErrorMemory;
+ }
+
+ mapper_V3_->importBuffer(raw_handle, [&](const auto &_error, const auto &_buffer) {
+ hidl_err = _error;
+ if (hidl_err != MapperV3Error::NONE) {
+ return;
+ }
+ buf = static_cast<const native_handle_t *>(_buffer);
+ });
+
+ if (hidl_err != MapperV3Error::NONE) {
+ DLOGE("Failed to import buffer into HWC");
+ return kErrorMemory;
+ }
+ } else {
+ IMapperV2::BufferDescriptorInfo descriptor_info;
+ descriptor_info.width = buffer_config.width;
+ descriptor_info.height = buffer_config.height;
+ descriptor_info.layerCount = 1;
+ descriptor_info.format =
+ static_cast<android::hardware::graphics::common::V1_0::PixelFormat>(format);
+ descriptor_info.usage = alloc_flags;
+
+ auto hidl_err = Error::NONE;
+
+ auto descriptor = BufferDescriptor();
+ mapper_V2_->createDescriptor(descriptor_info, [&](const auto &_error, const auto &_descriptor) {
+ hidl_err = _error;
+ if (hidl_err != Error::NONE) {
+ return;
+ }
+ descriptor = _descriptor;
+ });
+
+ if (hidl_err != Error::NONE) {
+ DLOGE("Failed to create descriptor");
+ return kErrorMemory;
+ }
+
+ hidl_handle raw_handle = nullptr;
+
+ allocator_V2_->allocate(descriptor, 1,
+ [&](const auto &_error, const auto &_stride, const auto &_buffers) {
+ hidl_err = _error;
+ if (hidl_err != Error::NONE) {
+ return;
+ }
+ raw_handle = _buffers[0];
+ });
+
+ if (hidl_err != Error::NONE) {
+ DLOGE("Failed to allocate buffer");
+ return kErrorMemory;
+ }
+
+ mapper_V2_->importBuffer(raw_handle, [&](const auto &_error, const auto &_buffer) {
+ hidl_err = _error;
+ if (hidl_err != Error::NONE) {
+ return;
+ }
+ buf = static_cast<const native_handle_t *>(_buffer);
+ });
+
+ if (hidl_err != Error::NONE) {
+ DLOGE("Failed to import buffer into HWC");
+ return kErrorMemory;
+ }
+ }
+
+ private_handle_t *hnd = nullptr;
+ hnd = (private_handle_t *)buf; // NOLINT
+ alloc_buffer_info->fd = hnd->fd;
+ alloc_buffer_info->stride = UINT32(hnd->width);
+ alloc_buffer_info->aligned_width = UINT32(hnd->width);
+ alloc_buffer_info->aligned_height = UINT32(hnd->height);
+ alloc_buffer_info->size = hnd->size;
+ alloc_buffer_info->id = hnd->id;
+
+ buffer_info->private_data = reinterpret_cast<void *>(hnd);
+ return kErrorNone;
+}
+
+DisplayError HWCBufferAllocator::FreeBuffer(BufferInfo *buffer_info) {
+ DisplayError err = kErrorNone;
+ auto hnd = reinterpret_cast<void *>(buffer_info->private_data);
+ if (mapper_V3_ != nullptr) {
+ mapper_V3_->freeBuffer(hnd);
+ } else {
+ mapper_V2_->freeBuffer(hnd);
+ }
+ AllocatedBufferInfo &alloc_buffer_info = buffer_info->alloc_buffer_info;
+
+ alloc_buffer_info.fd = -1;
+ alloc_buffer_info.stride = 0;
+ alloc_buffer_info.size = 0;
+ buffer_info->private_data = NULL;
+ return err;
+}
+
+void HWCBufferAllocator::GetCustomWidthAndHeight(const private_handle_t *handle, int *width,
+ int *height) {
+ *width = handle->width;
+ *height = handle->height;
+ gralloc::GetCustomDimensions(const_cast<private_handle_t *>(handle), width, height);
+}
+
+void HWCBufferAllocator::GetAlignedWidthAndHeight(int width, int height, int format,
+ uint32_t alloc_type, int *aligned_width,
+ int *aligned_height) {
+ uint64_t usage = 0;
+ if (alloc_type & GRALLOC_USAGE_HW_FB) {
+ usage |= BufferUsage::COMPOSER_CLIENT_TARGET;
+ }
+ if (alloc_type & GRALLOC_USAGE_PRIVATE_ALLOC_UBWC) {
+ usage |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ }
+ uint32_t aligned_w = UINT(width);
+ uint32_t aligned_h = UINT(height);
+ gralloc::BufferInfo info(width, height, format, usage);
+ gralloc::GetAlignedWidthAndHeight(info, &aligned_w, &aligned_h);
+ *aligned_width = INT(aligned_w);
+ *aligned_height = INT(aligned_h);
+}
+
+uint32_t HWCBufferAllocator::GetBufferSize(BufferInfo *buffer_info) {
+ const BufferConfig &buffer_config = buffer_info->buffer_config;
+ uint64_t alloc_flags = GRALLOC_USAGE_PRIVATE_IOMMU_HEAP;
+
+ int width = INT(buffer_config.width);
+ int height = INT(buffer_config.height);
+ int format;
+
+ if (buffer_config.secure) {
+ alloc_flags |= INT(GRALLOC_USAGE_PROTECTED);
+ }
+
+ if (!buffer_config.cache) {
+ // Allocate uncached buffers
+ alloc_flags |= GRALLOC_USAGE_PRIVATE_UNCACHED;
+ }
+
+ if (SetBufferInfo(buffer_config.format, &format, &alloc_flags) < 0) {
+ return 0;
+ }
+
+ uint32_t aligned_width = 0, aligned_height = 0, buffer_size = 0;
+ gralloc::BufferInfo info(width, height, format, alloc_flags);
+ int ret = GetBufferSizeAndDimensions(info, &buffer_size, &aligned_width, &aligned_height);
+ if (ret < 0) {
+ return 0;
+ }
+ return buffer_size;
+}
+
+int HWCBufferAllocator::SetBufferInfo(LayerBufferFormat format, int *target, uint64_t *flags) {
+ switch (format) {
+ case kFormatRGBA8888:
+ *target = HAL_PIXEL_FORMAT_RGBA_8888;
+ break;
+ case kFormatRGBX8888:
+ *target = HAL_PIXEL_FORMAT_RGBX_8888;
+ break;
+ case kFormatRGB888:
+ *target = HAL_PIXEL_FORMAT_RGB_888;
+ break;
+ case kFormatRGB565:
+ *target = HAL_PIXEL_FORMAT_RGB_565;
+ break;
+ case kFormatBGR565:
+ *target = HAL_PIXEL_FORMAT_BGR_565;
+ break;
+ case kFormatBGR888:
+ *target = HAL_PIXEL_FORMAT_BGR_888;
+ break;
+ case kFormatBGRA8888:
+ *target = HAL_PIXEL_FORMAT_BGRA_8888;
+ break;
+ case kFormatYCrCb420PlanarStride16:
+ *target = HAL_PIXEL_FORMAT_YV12;
+ break;
+ case kFormatYCrCb420SemiPlanar:
+ *target = HAL_PIXEL_FORMAT_YCrCb_420_SP;
+ break;
+ case kFormatYCbCr420SemiPlanar:
+ *target = HAL_PIXEL_FORMAT_YCbCr_420_SP;
+ break;
+ case kFormatYCbCr422H2V1Packed:
+ *target = HAL_PIXEL_FORMAT_YCbCr_422_I;
+ break;
+ case kFormatCbYCrY422H2V1Packed:
+ *target = HAL_PIXEL_FORMAT_CbYCrY_422_I;
+ break;
+ case kFormatYCbCr422H2V1SemiPlanar:
+ *target = HAL_PIXEL_FORMAT_YCbCr_422_SP;
+ break;
+ case kFormatYCbCr420SemiPlanarVenus:
+ *target = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS;
+ break;
+ case kFormatYCrCb420SemiPlanarVenus:
+ *target = HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS;
+ break;
+ case kFormatYCbCr420SPVenusUbwc:
+ case kFormatYCbCr420SPVenusTile:
+ *target = HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC;
+ *flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ break;
+ case kFormatRGBA5551:
+ *target = HAL_PIXEL_FORMAT_RGBA_5551;
+ break;
+ case kFormatRGBA4444:
+ *target = HAL_PIXEL_FORMAT_RGBA_4444;
+ break;
+ case kFormatRGBA1010102:
+ *target = HAL_PIXEL_FORMAT_RGBA_1010102;
+ break;
+ case kFormatARGB2101010:
+ *target = HAL_PIXEL_FORMAT_ARGB_2101010;
+ break;
+ case kFormatRGBX1010102:
+ *target = HAL_PIXEL_FORMAT_RGBX_1010102;
+ break;
+ case kFormatXRGB2101010:
+ *target = HAL_PIXEL_FORMAT_XRGB_2101010;
+ break;
+ case kFormatBGRA1010102:
+ *target = HAL_PIXEL_FORMAT_BGRA_1010102;
+ break;
+ case kFormatABGR2101010:
+ *target = HAL_PIXEL_FORMAT_ABGR_2101010;
+ break;
+ case kFormatBGRX1010102:
+ *target = HAL_PIXEL_FORMAT_BGRX_1010102;
+ break;
+ case kFormatXBGR2101010:
+ *target = HAL_PIXEL_FORMAT_XBGR_2101010;
+ break;
+ case kFormatYCbCr420P010:
+ *target = HAL_PIXEL_FORMAT_YCbCr_420_P010;
+ break;
+ case kFormatYCbCr420TP10Ubwc:
+ case kFormatYCbCr420TP10Tile:
+ *target = HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC;
+ *flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ break;
+ case kFormatYCbCr420P010Ubwc:
+ case kFormatYCbCr420P010Tile:
+ *target = HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC;
+ *flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ break;
+ case kFormatYCbCr420P010Venus:
+ *target = HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS;
+ break;
+ case kFormatRGBA8888Ubwc:
+ *target = HAL_PIXEL_FORMAT_RGBA_8888;
+ *flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ break;
+ case kFormatRGBX8888Ubwc:
+ *target = HAL_PIXEL_FORMAT_RGBX_8888;
+ *flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ break;
+ case kFormatBGR565Ubwc:
+ *target = HAL_PIXEL_FORMAT_BGR_565;
+ *flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ break;
+ case kFormatRGBA1010102Ubwc:
+ *target = HAL_PIXEL_FORMAT_RGBA_1010102;
+ *flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ break;
+ case kFormatRGBX1010102Ubwc:
+ *target = HAL_PIXEL_FORMAT_RGBX_1010102;
+ *flags |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ break;
+ default:
+ DLOGE("Unsupported format = 0x%x", format);
+ return -EINVAL;
+ }
+ return 0;
+}
+
+DisplayError HWCBufferAllocator::GetAllocatedBufferInfo(
+ const BufferConfig &buffer_config, AllocatedBufferInfo *allocated_buffer_info) {
+ // TODO(user): This API should pass the buffer_info of the already allocated buffer
+ // The private_data can then be typecast to the private_handle and used directly.
+ uint64_t alloc_flags = GRALLOC_USAGE_PRIVATE_IOMMU_HEAP;
+
+ int width = INT(buffer_config.width);
+ int height = INT(buffer_config.height);
+ int format;
+
+ if (buffer_config.secure) {
+ alloc_flags |= INT(GRALLOC_USAGE_PROTECTED);
+ }
+
+ if (!buffer_config.cache) {
+ // Allocate uncached buffers
+ alloc_flags |= GRALLOC_USAGE_PRIVATE_UNCACHED;
+ }
+
+ if (SetBufferInfo(buffer_config.format, &format, &alloc_flags) < 0) {
+ return kErrorParameters;
+ }
+
+ uint32_t aligned_width = 0, aligned_height = 0, buffer_size = 0;
+ gralloc::BufferInfo info(width, height, format, alloc_flags);
+ int ret = GetBufferSizeAndDimensions(info, &buffer_size, &aligned_width, &aligned_height);
+ if (ret < 0) {
+ return kErrorParameters;
+ }
+ allocated_buffer_info->stride = UINT32(aligned_width);
+ allocated_buffer_info->aligned_width = UINT32(aligned_width);
+ allocated_buffer_info->aligned_height = UINT32(aligned_height);
+ allocated_buffer_info->size = UINT32(buffer_size);
+
+ return kErrorNone;
+}
+
+DisplayError HWCBufferAllocator::GetBufferLayout(const AllocatedBufferInfo &buf_info,
+ uint32_t stride[4], uint32_t offset[4],
+ uint32_t *num_planes) {
+ // TODO(user): Transition APIs to not need a private handle
+ private_handle_t hnd(-1, 0, 0, 0, 0, 0, 0);
+ int format = HAL_PIXEL_FORMAT_RGBA_8888;
+ uint64_t flags = 0;
+
+ SetBufferInfo(buf_info.format, &format, &flags);
+ // Setup only the required stuff, skip rest
+ hnd.format = format;
+ hnd.width = INT32(buf_info.aligned_width);
+ hnd.height = INT32(buf_info.aligned_height);
+ if (flags & GRALLOC_USAGE_PRIVATE_ALLOC_UBWC) {
+ hnd.flags = private_handle_t::PRIV_FLAGS_UBWC_ALIGNED;
+ }
+
+ int ret = gralloc::GetBufferLayout(&hnd, stride, offset, num_planes);
+ if (ret < 0) {
+ DLOGE("GetBufferLayout failed");
+ return kErrorParameters;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWCBufferAllocator::MapBuffer(const private_handle_t *handle, int acquire_fence) {
+ auto err = GetGrallocInstance();
+ if (err != kErrorNone) {
+ return err;
+ }
+ NATIVE_HANDLE_DECLARE_STORAGE(acquire_fence_storage, 1, 0);
+ hidl_handle acquire_fence_handle;
+ if (acquire_fence >= 0) {
+ auto h = native_handle_init(acquire_fence_storage, 1, 0);
+ h->data[0] = acquire_fence;
+ acquire_fence_handle = h;
+ }
+
+ auto hnd = const_cast<private_handle_t *>(handle);
+ void *buffer_ptr = NULL;
+ if (mapper_V3_ != nullptr) {
+ const IMapperV3::Rect access_region = {.left = 0, .top = 0, .width = 0, .height = 0};
+ mapper_V3_->lock(
+ reinterpret_cast<void *>(hnd), (uint64_t)BufferUsage::CPU_READ_OFTEN, access_region,
+ acquire_fence_handle,
+ [&](const auto &_error, const auto &_buffer, const auto &_bpp, const auto &_stride) {
+ if (_error == MapperV3Error::NONE) {
+ buffer_ptr = _buffer;
+ }
+ });
+ } else {
+ const IMapperV2::Rect access_region = {.left = 0, .top = 0, .width = 0, .height = 0};
+ mapper_V2_->lock(reinterpret_cast<void *>(hnd), (uint64_t)BufferUsage::CPU_READ_OFTEN,
+ access_region, acquire_fence_handle,
+ [&](const auto &_error, const auto &_buffer) {
+ if (_error == Error::NONE) {
+ buffer_ptr = _buffer;
+ }
+ });
+ }
+ if (!buffer_ptr) {
+ return kErrorUndefined;
+ }
+ return kErrorNone;
+}
+
+DisplayError HWCBufferAllocator::UnmapBuffer(const private_handle_t *handle, int *release_fence) {
+ DisplayError err = kErrorNone;
+ *release_fence = -1;
+ auto hnd = const_cast<private_handle_t *>(handle);
+ if (mapper_V3_ != nullptr) {
+ mapper_V3_->unlock(reinterpret_cast<void *>(hnd),
+ [&](const auto &_error, const auto &_release_fence) {
+ if (_error != MapperV3Error::NONE) {
+ err = kErrorUndefined;
+ }
+ });
+ } else {
+ mapper_V2_->unlock(reinterpret_cast<void *>(hnd),
+ [&](const auto &_error, const auto &_release_fence) {
+ if (_error != Error::NONE) {
+ err = kErrorUndefined;
+ }
+ });
+ }
+ return err;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_buffer_allocator.h b/sdm/libs/hwc2/hwc_buffer_allocator.h
new file mode 100644
index 0000000..b412542
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_buffer_allocator.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+#ifndef __HWC_BUFFER_ALLOCATOR_H__
+#define __HWC_BUFFER_ALLOCATOR_H__
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#include <android/hardware/graphics/allocator/2.0/IAllocator.h>
+#include <android/hardware/graphics/allocator/3.0/IAllocator.h>
+#include <android/hardware/graphics/mapper/2.1/IMapper.h>
+#include <android/hardware/graphics/mapper/3.0/IMapper.h>
+#include "gralloc_priv.h"
+
+using IAllocatorV3 = android::hardware::graphics::allocator::V3_0::IAllocator;
+using IAllocatorV2 = android::hardware::graphics::allocator::V2_0::IAllocator;
+using IMapperV3 = android::hardware::graphics::mapper::V3_0::IMapper;
+using IMapperV2 = android::hardware::graphics::mapper::V2_0::IMapper;
+namespace sdm {
+
+template <class Type>
+inline Type ALIGN(Type x, Type align) {
+ return (x + align - 1) & ~(align - 1);
+}
+
+class HWCBufferAllocator : public BufferAllocator {
+ public:
+ DisplayError AllocateBuffer(BufferInfo *buffer_info);
+ DisplayError FreeBuffer(BufferInfo *buffer_info);
+ uint32_t GetBufferSize(BufferInfo *buffer_info);
+
+ void GetCustomWidthAndHeight(const private_handle_t *handle, int *width, int *height);
+ void GetAlignedWidthAndHeight(int width, int height, int format, uint32_t alloc_type,
+ int *aligned_width, int *aligned_height);
+ DisplayError GetAllocatedBufferInfo(const BufferConfig &buffer_config,
+ AllocatedBufferInfo *allocated_buffer_info);
+ DisplayError GetBufferLayout(const AllocatedBufferInfo &buf_info, uint32_t stride[4],
+ uint32_t offset[4], uint32_t *num_planes);
+ int SetBufferInfo(LayerBufferFormat format, int *target, uint64_t *flags);
+ DisplayError MapBuffer(const private_handle_t *handle, int acquire_fence);
+ DisplayError UnmapBuffer(const private_handle_t *handle, int *release_fence);
+
+ private:
+ DisplayError GetGrallocInstance();
+ android::sp<IMapperV2> mapper_V2_;
+ android::sp<IMapperV3> mapper_V3_;
+ android::sp<IAllocatorV2> allocator_V2_;
+ android::sp<IAllocatorV3> allocator_V3_;
+};
+
+} // namespace sdm
+#endif // __HWC_BUFFER_ALLOCATOR_H__
diff --git a/sdm/libs/hwc2/hwc_buffer_sync_handler.cpp b/sdm/libs/hwc2/hwc_buffer_sync_handler.cpp
new file mode 100644
index 0000000..f2dacb2
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_buffer_sync_handler.cpp
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <errno.h>
+#include <sync/sync.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+
+#include "hwc_debugger.h"
+#include "hwc_buffer_sync_handler.h"
+
+#define __CLASS__ "HWCBufferSyncHandler"
+
+namespace sdm {
+
+DisplayError HWCBufferSyncHandler::SyncWait(int fd) {
+ int error = 0;
+
+ if (fd >= 0) {
+ error = sync_wait(fd, 1000);
+ if (error < 0) {
+ DLOGE("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ return kErrorTimeOut;
+ }
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWCBufferSyncHandler::SyncMerge(int fd1, int fd2, int *merged_fd) {
+ DisplayError error = kErrorNone;
+
+ // Merge the two fences. In the case where one of the fences is not a
+ // valid fence (e.g. NO_FENCE) merge the one valid fence with itself so
+ // that a new fence with the given name is created.
+ // TODO(user): "SyncMerge"string should be replaced with user-defined string to represent
+ // why it is merged.
+ if (fd1 >= 0 && fd2 >= 0) {
+ *merged_fd = sync_merge("SyncMerge", fd1, fd2);
+ } else if (fd1 >= 0) {
+ *merged_fd = sync_merge("SyncMerge", fd1, fd1);
+ } else if (fd2 >= 0) {
+ *merged_fd = sync_merge("SyncMerge", fd2, fd2);
+ } else {
+ *merged_fd = -1;
+ return kErrorNone;
+ }
+
+ if (*merged_fd == -1) {
+ DLOGE("Sync merge error! fd1 %d fd2 %d", fd1, fd2);
+ error = kErrorFileDescriptor;
+ }
+
+ return error;
+}
+
+bool HWCBufferSyncHandler::IsSyncSignaled(int fd) {
+ if (sync_wait(fd, 0) < 0) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/hwc2/hwc_buffer_sync_handler.h b/sdm/libs/hwc2/hwc_buffer_sync_handler.h
new file mode 100644
index 0000000..81479d8
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_buffer_sync_handler.h
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+
+#ifndef __HWC_BUFFER_SYNC_HANDLER_H__
+#define __HWC_BUFFER_SYNC_HANDLER_H__
+
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <core/sdm_types.h>
+#include <core/buffer_sync_handler.h>
+
+namespace sdm {
+
+class HWCBufferSyncHandler : public BufferSyncHandler {
+ public:
+ HWCBufferSyncHandler() { }
+
+ virtual DisplayError SyncWait(int fd);
+ virtual DisplayError SyncMerge(int fd1, int fd2, int *merged_fd);
+ virtual bool IsSyncSignaled(int fd);
+};
+
+} // namespace sdm
+#endif // __HWC_BUFFER_SYNC_HANDLER_H__
+
+
diff --git a/sdm/libs/hwc2/hwc_callbacks.cpp b/sdm/libs/hwc2/hwc_callbacks.cpp
new file mode 100644
index 0000000..aec1d32
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_callbacks.cpp
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2016-2017, 2019 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include "hwc_callbacks.h"
+
+#define __CLASS__ "HWCCallbacks"
+
+namespace sdm {
+
+HWC2::Error HWCCallbacks::Hotplug(hwc2_display_t display, HWC2::Connection state) {
+ if (!hotplug_) {
+ return HWC2::Error::NoResources;
+ }
+ hotplug_(hotplug_data_, display, INT32(state));
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCCallbacks::Refresh(hwc2_display_t display) {
+ if (!refresh_) {
+ return HWC2::Error::NoResources;
+ }
+ refresh_(refresh_data_, display);
+ pending_refresh_.set(UINT32(display));
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCCallbacks::Vsync(hwc2_display_t display, int64_t timestamp) {
+ if (!vsync_) {
+ return HWC2::Error::NoResources;
+ }
+ DTRACE_SCOPED();
+ vsync_(vsync_data_, display, timestamp);
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCCallbacks::Vsync_2_4(hwc2_display_t display, int64_t timestamp, uint32_t period) {
+ DTRACE_SCOPED();
+ if (!vsync_2_4_) {
+ return HWC2::Error::NoResources;
+ }
+
+ vsync_2_4_(vsync_2_4_data_, display, timestamp, period);
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCCallbacks::VsyncPeriodTimingChanged(
+ hwc2_display_t display, hwc_vsync_period_change_timeline_t *updated_timeline) {
+ DTRACE_SCOPED();
+ if (!vsync_period_timing_changed_) {
+ return HWC2::Error::NoResources;
+ }
+
+ vsync_period_timing_changed_(vsync_period_timing_changed_data_, display, updated_timeline);
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCCallbacks::SeamlessPossible(hwc2_display_t display) {
+ DTRACE_SCOPED();
+ if (!seamless_possible_) {
+ return HWC2::Error::NoResources;
+ }
+
+ seamless_possible_(seamless_possible_data_, display);
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCCallbacks::Register(HWC2::Callback descriptor, hwc2_callback_data_t callback_data,
+ hwc2_function_pointer_t pointer) {
+ switch (descriptor) {
+ case HWC2::Callback::Hotplug:
+ hotplug_data_ = callback_data;
+ hotplug_ = reinterpret_cast<HWC2_PFN_HOTPLUG>(pointer);
+ break;
+ case HWC2::Callback::Refresh:
+ refresh_data_ = callback_data;
+ refresh_ = reinterpret_cast<HWC2_PFN_REFRESH>(pointer);
+ break;
+ case HWC2::Callback::Vsync:
+ vsync_data_ = callback_data;
+ vsync_ = reinterpret_cast<HWC2_PFN_VSYNC>(pointer);
+ break;
+ case HWC2::Callback::Vsync_2_4:
+ vsync_2_4_data_ = callback_data;
+ vsync_2_4_ = reinterpret_cast<HWC2_PFN_VSYNC_2_4>(pointer);
+ break;
+ case HWC2::Callback::VsyncPeriodTimingChanged:
+ vsync_period_timing_changed_data_ = callback_data;
+ vsync_period_timing_changed_ =
+ reinterpret_cast<HWC2_PFN_VSYNC_PERIOD_TIMING_CHANGED>(pointer);
+ break;
+ case HWC2::Callback::SeamlessPossible:
+ seamless_possible_data_ = callback_data;
+ seamless_possible_ = reinterpret_cast<HWC2_PFN_SEAMLESS_POSSIBLE>(pointer);
+ break;
+ default:
+ return HWC2::Error::BadParameter;
+ }
+ return HWC2::Error::None;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_callbacks.h b/sdm/libs/hwc2/hwc_callbacks.h
new file mode 100644
index 0000000..5e59550
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_callbacks.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2016-2017, 2019 The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * * Neither the name of The Linux Foundation. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __HWC_CALLBACKS_H__
+#define __HWC_CALLBACKS_H__
+
+#define HWC2_INCLUDE_STRINGIFICATION
+#define HWC2_USE_CPP11
+#include <hardware/hwcomposer2.h>
+#undef HWC2_INCLUDE_STRINGIFICATION
+#undef HWC2_USE_CPP11
+
+namespace sdm {
+
+class HWCCallbacks {
+ public:
+ static const int kNumBuiltIn = 4;
+ static const int kNumPluggable = 4;
+ static const int kNumVirtual = 4;
+ // Add 1 primary display which can be either a builtin or pluggable.
+ // Async powermode update requires dummy hwc displays.
+ // Limit dummy displays to builtin/pluggable type for now.
+ static const int kNumRealDisplays = 1 + kNumBuiltIn + kNumPluggable + kNumVirtual;
+ static const int kNumDisplays = 1 + kNumBuiltIn + kNumPluggable + kNumVirtual +
+ 1 + kNumBuiltIn + kNumPluggable;
+
+ HWC2::Error Hotplug(hwc2_display_t display, HWC2::Connection state);
+ HWC2::Error Refresh(hwc2_display_t display);
+ HWC2::Error Vsync(hwc2_display_t display, int64_t timestamp);
+ HWC2::Error Vsync_2_4(hwc2_display_t display, int64_t timestamp, uint32_t period);
+ HWC2::Error VsyncPeriodTimingChanged(hwc2_display_t display,
+ hwc_vsync_period_change_timeline_t *updated_timeline);
+ HWC2::Error SeamlessPossible(hwc2_display_t display);
+ HWC2::Error Register(HWC2::Callback, hwc2_callback_data_t callback_data,
+ hwc2_function_pointer_t pointer);
+ void UpdateVsyncSource(hwc2_display_t from) {
+ vsync_source_ = from;
+ }
+ hwc2_display_t GetVsyncSource() { return vsync_source_; }
+
+ bool VsyncCallbackRegistered() { return (vsync_ != nullptr && vsync_data_ != nullptr); }
+ bool Vsync_2_4CallbackRegistered() { return (vsync_2_4_ != nullptr); }
+ bool NeedsRefresh(hwc2_display_t display) { return pending_refresh_.test(UINT32(display)); }
+ void ResetRefresh(hwc2_display_t display) { pending_refresh_.reset(UINT32(display)); }
+
+ private:
+ hwc2_callback_data_t hotplug_data_ = nullptr;
+ hwc2_callback_data_t refresh_data_ = nullptr;
+ hwc2_callback_data_t vsync_data_ = nullptr;
+ hwc2_callback_data_t vsync_2_4_data_ = nullptr;
+ hwc2_callback_data_t vsync_period_timing_changed_data_ = nullptr;
+ hwc2_callback_data_t seamless_possible_data_ = nullptr;
+
+ HWC2_PFN_HOTPLUG hotplug_ = nullptr;
+ HWC2_PFN_REFRESH refresh_ = nullptr;
+ HWC2_PFN_VSYNC vsync_ = nullptr;
+ HWC2_PFN_VSYNC_2_4 vsync_2_4_ = nullptr;
+ HWC2_PFN_VSYNC_PERIOD_TIMING_CHANGED vsync_period_timing_changed_ = nullptr;
+ HWC2_PFN_SEAMLESS_POSSIBLE seamless_possible_ = nullptr;
+ hwc2_display_t vsync_source_ = HWC_DISPLAY_PRIMARY; // hw vsync is active on this display
+ std::bitset<kNumDisplays> pending_refresh_; // Displays waiting to get refreshed
+};
+
+} // namespace sdm
+
+#endif // __HWC_CALLBACKS_H__
diff --git a/sdm/libs/hwc2/hwc_color_manager.cpp b/sdm/libs/hwc2/hwc_color_manager.cpp
new file mode 100644
index 0000000..561322d
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_color_manager.cpp
@@ -0,0 +1,499 @@
+/*
+* Copyright (c) 2015 - 2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <dlfcn.h>
+#include <cutils/sockets.h>
+#include <cutils/native_handle.h>
+#include <sync/sync.h>
+#include <utils/String16.h>
+#include <binder/Parcel.h>
+#include <gralloc_priv.h>
+#include <hardware/hwcomposer.h>
+#include <hardware/hwcomposer_defs.h>
+#include <QService.h>
+
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <core/buffer_allocator.h>
+#include <private/color_params.h>
+#include "hwc_buffer_allocator.h"
+#include "hwc_buffer_sync_handler.h"
+#include "hwc_session.h"
+#include "hwc_debugger.h"
+
+#define __CLASS__ "HWCColorManager"
+
+namespace sdm {
+
+uint32_t HWCColorManager::Get8BitsARGBColorValue(const PPColorFillParams ¶ms) {
+ uint32_t argb_color = ((params.color.r << 16) & 0xff0000) | ((params.color.g << 8) & 0xff00) |
+ ((params.color.b) & 0xff);
+ return argb_color;
+}
+
+int HWCColorManager::CreatePayloadFromParcel(const android::Parcel &in, uint32_t *disp_id,
+ PPDisplayAPIPayload *sink) {
+ int ret = 0;
+ uint32_t id(0);
+ uint32_t size(0);
+
+ id = UINT32(in.readInt32());
+ size = UINT32(in.readInt32());
+ if (size > 0 && size == in.dataAvail()) {
+ const void *data = in.readInplace(size);
+ const uint8_t *temp = reinterpret_cast<const uint8_t *>(data);
+
+ sink->size = size;
+ sink->payload = const_cast<uint8_t *>(temp);
+ *disp_id = id;
+ } else {
+ DLOGW("Failing size checking, size = %d", size);
+ ret = -EINVAL;
+ }
+
+ return ret;
+}
+
+void HWCColorManager::MarshallStructIntoParcel(const PPDisplayAPIPayload &data,
+ android::Parcel *out_parcel) {
+ if (data.fd > 0) {
+ int err = out_parcel->writeDupFileDescriptor(data.fd);
+ if (err) {
+ DLOGE("writeDupFileDescriptor status = %d", err);
+ }
+ close(data.fd);
+ }
+
+ out_parcel->writeInt32(INT32(data.size));
+ if (data.payload)
+ out_parcel->write(data.payload, data.size);
+}
+
+HWCColorManager *HWCColorManager::CreateColorManager(HWCBufferAllocator * buffer_allocator) {
+ HWCColorManager *color_mgr = new HWCColorManager(buffer_allocator);
+
+ if (color_mgr) {
+ // Load display API interface library. And retrieve color API function tables.
+ DynLib &color_apis_lib = color_mgr->color_apis_lib_;
+ if (color_apis_lib.Open(DISPLAY_API_INTERFACE_LIBRARY_NAME)) {
+ if (!color_apis_lib.Sym(DISPLAY_API_FUNC_TABLES, &color_mgr->color_apis_)) {
+ DLOGE("Fail to retrieve = %s from %s", DISPLAY_API_FUNC_TABLES,
+ DISPLAY_API_INTERFACE_LIBRARY_NAME);
+ delete color_mgr;
+ return NULL;
+ }
+ } else {
+ DLOGW("Unable to load = %s", DISPLAY_API_INTERFACE_LIBRARY_NAME);
+ delete color_mgr;
+ return NULL;
+ }
+ DLOGI("Successfully loaded %s", DISPLAY_API_INTERFACE_LIBRARY_NAME);
+
+ int enable_qdcm_diag = 0;
+ HWCDebugHandler::Get()->GetProperty(ENABLE_QDCM_DIAG, &enable_qdcm_diag);
+ if (enable_qdcm_diag) {
+ // Load diagclient library and invokes its entry point to pass in display APIs.
+ DynLib &diag_client_lib = color_mgr->diag_client_lib_;
+ if (diag_client_lib.Open(QDCM_DIAG_CLIENT_LIBRARY_NAME)) {
+ if (!diag_client_lib.Sym(INIT_QDCM_DIAG_CLIENT_NAME,
+ reinterpret_cast<void **>(&color_mgr->qdcm_diag_init_)) ||
+ !diag_client_lib.Sym(DEINIT_QDCM_DIAG_CLIENT_NAME,
+ reinterpret_cast<void **>(&color_mgr->qdcm_diag_deinit_))) {
+ DLOGE("Fail to retrieve = %s from %s", INIT_QDCM_DIAG_CLIENT_NAME,
+ QDCM_DIAG_CLIENT_LIBRARY_NAME);
+ } else {
+ // invoke Diag Client entry point to initialize.
+ color_mgr->qdcm_diag_init_(color_mgr->color_apis_);
+ DLOGI("Successfully loaded %s and %s and diag_init'ed",
+ DISPLAY_API_INTERFACE_LIBRARY_NAME, QDCM_DIAG_CLIENT_LIBRARY_NAME);
+ }
+ } else {
+ DLOGW("Unable to load = %s", QDCM_DIAG_CLIENT_LIBRARY_NAME);
+ // only QDCM Diag client failed to be loaded and system still should function.
+ }
+ }
+ } else {
+ DLOGE("Unable to create HWCColorManager");
+ return NULL;
+ }
+
+ return color_mgr;
+}
+
+HWCColorManager::HWCColorManager(HWCBufferAllocator *buffer_allocator) :
+ buffer_allocator_(buffer_allocator) {
+}
+
+HWCColorManager::~HWCColorManager() {
+}
+
+void HWCColorManager::DestroyColorManager() {
+ if (qdcm_mode_mgr_) {
+ delete qdcm_mode_mgr_;
+ }
+ if (qdcm_diag_deinit_) {
+ qdcm_diag_deinit_();
+ }
+ delete this;
+}
+
+int HWCColorManager::EnableQDCMMode(bool enable, HWCDisplay *hwc_display) {
+ int ret = 0;
+
+ if (!qdcm_mode_mgr_) {
+ qdcm_mode_mgr_ = HWCQDCMModeManager::CreateQDCMModeMgr();
+ if (!qdcm_mode_mgr_) {
+ DLOGE("Unable to create QDCM operating mode manager.");
+ ret = -EFAULT;
+ }
+ }
+
+ if (qdcm_mode_mgr_) {
+ ret = qdcm_mode_mgr_->EnableQDCMMode(enable, hwc_display);
+ }
+
+ return ret;
+}
+
+int HWCColorManager::SetSolidFill(const void *params, bool enable, HWCDisplay *hwc_display) {
+ SCOPE_LOCK(locker_);
+ LayerSolidFill solid_fill_color;
+
+ if (params) {
+ solid_fill_params_ = *reinterpret_cast<const PPColorFillParams *>(params);
+ } else {
+ solid_fill_params_ = PPColorFillParams();
+ }
+
+ if (solid_fill_params_.color.r_bitdepth != solid_fill_params_.color.b_bitdepth
+ || solid_fill_params_.color.r_bitdepth != solid_fill_params_.color.g_bitdepth) {
+ DLOGE("invalid bit depth r %d g %d b %d", solid_fill_params_.color.r_bitdepth,
+ solid_fill_params_.color.g_bitdepth, solid_fill_params_.color.b_bitdepth);
+ return -EINVAL;
+ }
+
+ solid_fill_color.bit_depth = solid_fill_params_.color.r_bitdepth;
+ solid_fill_color.red = solid_fill_params_.color.r;
+ solid_fill_color.blue = solid_fill_params_.color.b;
+ solid_fill_color.green = solid_fill_params_.color.g;
+ solid_fill_color.alpha = 0x3ff;
+
+ if (enable) {
+ LayerRect solid_fill_rect = {
+ FLOAT(solid_fill_params_.rect.x), FLOAT(solid_fill_params_.rect.y),
+ FLOAT(solid_fill_params_.rect.x) + FLOAT(solid_fill_params_.rect.width),
+ FLOAT(solid_fill_params_.rect.y) + FLOAT(solid_fill_params_.rect.height),
+ };
+
+ hwc_display->Perform(HWCDisplayBuiltIn::SET_QDCM_SOLID_FILL_INFO, &solid_fill_color);
+ hwc_display->Perform(HWCDisplayBuiltIn::SET_QDCM_SOLID_FILL_RECT, &solid_fill_rect);
+ } else {
+ solid_fill_color.red = 0;
+ solid_fill_color.blue = 0;
+ solid_fill_color.green = 0;
+ solid_fill_color.alpha = 0;
+ hwc_display->Perform(HWCDisplayBuiltIn::UNSET_QDCM_SOLID_FILL_INFO, &solid_fill_color);
+ }
+
+ return 0;
+}
+
+int HWCColorManager::SetFrameCapture(void *params, bool enable, HWCDisplay *hwc_display) {
+ SCOPE_LOCK(locker_);
+ int ret = 0;
+
+ PPFrameCaptureData *frame_capture_data = reinterpret_cast<PPFrameCaptureData *>(params);
+
+ if (enable) {
+ std::memset(&buffer_info, 0x00, sizeof(buffer_info));
+ hwc_display->GetPanelResolution(&buffer_info.buffer_config.width,
+ &buffer_info.buffer_config.height);
+ if (frame_capture_data->input_params.out_pix_format == PP_PIXEL_FORMAT_RGB_888) {
+ buffer_info.buffer_config.format = kFormatRGB888;
+ } else if (frame_capture_data->input_params.out_pix_format == PP_PIXEL_FORMAT_RGB_2101010) {
+ buffer_info.buffer_config.format = kFormatRGBA1010102;
+ } else {
+ DLOGE("Pixel-format: %d NOT support.", frame_capture_data->input_params.out_pix_format);
+ return -EFAULT;
+ }
+
+ buffer_info.buffer_config.buffer_count = 1;
+ buffer_info.alloc_buffer_info.fd = -1;
+ buffer_info.alloc_buffer_info.stride = 0;
+ buffer_info.alloc_buffer_info.size = 0;
+
+ ret = buffer_allocator_->AllocateBuffer(&buffer_info);
+ if (ret != 0) {
+ DLOGE("Buffer allocation failed. ret: %d", ret);
+ return -ENOMEM;
+ } else {
+ void *buffer = mmap(NULL, buffer_info.alloc_buffer_info.size, PROT_READ | PROT_WRITE,
+ MAP_SHARED, buffer_info.alloc_buffer_info.fd, 0);
+
+ if (buffer == MAP_FAILED) {
+ DLOGE("mmap failed. err = %d", errno);
+ frame_capture_data->buffer = NULL;
+ ret = buffer_allocator_->FreeBuffer(&buffer_info);
+ return -EFAULT;
+ } else {
+ frame_capture_data->buffer = reinterpret_cast<uint8_t *>(buffer);
+ frame_capture_data->buffer_stride = buffer_info.alloc_buffer_info.stride;
+ frame_capture_data->buffer_size = buffer_info.alloc_buffer_info.size;
+ }
+ if (frame_capture_data->input_params.flags == 0x1) {
+ // Layer mixer mode
+ ret = hwc_display->FrameCaptureAsync(buffer_info, 0);
+ } else {
+ // DSPP mode
+ ret = hwc_display->FrameCaptureAsync(buffer_info, 1);
+ }
+
+ if (ret < 0) {
+ DLOGE("FrameCaptureAsync failed. ret = %d", ret);
+ }
+ }
+ } else {
+ ret = hwc_display->GetFrameCaptureStatus();
+ if (!ret) {
+ if (frame_capture_data->buffer != NULL) {
+ if (munmap(frame_capture_data->buffer, buffer_info.alloc_buffer_info.size) != 0) {
+ DLOGE("munmap failed. err = %d", errno);
+ }
+ }
+ if (buffer_allocator_ != NULL) {
+ std::memset(frame_capture_data, 0x00, sizeof(PPFrameCaptureData));
+ ret = buffer_allocator_->FreeBuffer(&buffer_info);
+ if (ret != 0) {
+ DLOGE("FreeBuffer failed. ret = %d", ret);
+ }
+ }
+ } else {
+ DLOGE("GetFrameCaptureStatus failed. ret = %d", ret);
+ }
+ }
+ return ret;
+}
+
+int HWCColorManager::SetHWDetailedEnhancerConfig(void *params, HWCDisplay *hwc_display) {
+ int err = 0;
+ DisplayDetailEnhancerData de_data;
+
+ PPDETuningCfgData *de_tuning_cfg_data = reinterpret_cast<PPDETuningCfgData*>(params);
+ if (de_tuning_cfg_data->cfg_pending) {
+ if (!de_tuning_cfg_data->cfg_en) {
+ de_data.enable = 0;
+ } else {
+ de_data.override_flags = kOverrideDEEnable;
+ de_data.enable = 1;
+
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagSharpFactor) {
+ de_data.override_flags |= kOverrideDESharpen1;
+ de_data.sharp_factor = de_tuning_cfg_data->params.sharp_factor;
+ }
+
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagClip) {
+ de_data.override_flags |= kOverrideDEClip;
+ de_data.clip = de_tuning_cfg_data->params.clip;
+ }
+
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrQuiet) {
+ de_data.override_flags |= kOverrideDEThrQuiet;
+ de_data.thr_quiet = de_tuning_cfg_data->params.thr_quiet;
+ }
+
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrDieout) {
+ de_data.override_flags |= kOverrideDEThrDieout;
+ de_data.thr_dieout = de_tuning_cfg_data->params.thr_dieout;
+ }
+
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrLow) {
+ de_data.override_flags |= kOverrideDEThrLow;
+ de_data.thr_low = de_tuning_cfg_data->params.thr_low;
+ }
+
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagThrHigh) {
+ de_data.override_flags |= kOverrideDEThrHigh;
+ de_data.thr_high = de_tuning_cfg_data->params.thr_high;
+ }
+
+ if (de_tuning_cfg_data->params.flags & kDeTuningFlagContentQualLevel) {
+ switch (de_tuning_cfg_data->params.quality) {
+ case kDeContentQualLow:
+ de_data.quality_level = kContentQualityLow;
+ break;
+ case kDeContentQualMedium:
+ de_data.quality_level = kContentQualityMedium;
+ break;
+ case kDeContentQualHigh:
+ de_data.quality_level = kContentQualityHigh;
+ break;
+ case kDeContentQualUnknown:
+ default:
+ de_data.quality_level = kContentQualityUnknown;
+ break;
+ }
+ }
+ }
+ err = hwc_display->SetDetailEnhancerConfig(de_data);
+ if (err) {
+ DLOGW("SetDetailEnhancerConfig failed. err = %d", err);
+ }
+ de_tuning_cfg_data->cfg_pending = false;
+ }
+ return err;
+}
+
+void HWCColorManager::SetColorModeDetailEnhancer(HWCDisplay *hwc_display) {
+ SCOPE_LOCK(locker_);
+ int err = -1;
+ PPPendingParams pending_action;
+ PPDisplayAPIPayload req_payload;
+ DTRACE_SCOPED();
+
+ pending_action.action = kGetDetailedEnhancerData;
+ pending_action.params = NULL;
+
+ if (hwc_display) {
+ err = hwc_display->ColorSVCRequestRoute(req_payload, NULL, &pending_action);
+ if (!err && pending_action.action == kConfigureDetailedEnhancer) {
+ err = SetHWDetailedEnhancerConfig(pending_action.params, hwc_display);
+ }
+ }
+ return;
+}
+
+int HWCColorManager::SetDetailedEnhancer(void *params, HWCDisplay *hwc_display) {
+ SCOPE_LOCK(locker_);
+ int err = -1;
+ err = SetHWDetailedEnhancerConfig(params, hwc_display);
+ return err;
+}
+
+const HWCQDCMModeManager::ActiveFeatureCMD HWCQDCMModeManager::kActiveFeatureCMD[] = {
+ HWCQDCMModeManager::ActiveFeatureCMD("cabl:on", "cabl:off", "cabl:status", "running"),
+ HWCQDCMModeManager::ActiveFeatureCMD("ad:on", "ad:off", "ad:query:status", "running"),
+ HWCQDCMModeManager::ActiveFeatureCMD("svi:on", "svi:off", "svi:status", "running"),
+};
+
+const char *const HWCQDCMModeManager::kSocketName = "pps";
+const char *const HWCQDCMModeManager::kTagName = "surfaceflinger";
+const char *const HWCQDCMModeManager::kPackageName = "colormanager";
+
+HWCQDCMModeManager *HWCQDCMModeManager::CreateQDCMModeMgr() {
+ HWCQDCMModeManager *mode_mgr = new HWCQDCMModeManager();
+
+ if (!mode_mgr) {
+ DLOGW("No memory to create HWCQDCMModeManager.");
+ return NULL;
+ } else {
+ mode_mgr->socket_fd_ =
+ ::socket_local_client(kSocketName, ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM);
+ if (mode_mgr->socket_fd_ < 0) {
+ // it should not be disastrous and we still can grab wakelock in QDCM mode.
+ DLOGW("Unable to connect to dpps socket!");
+ }
+
+ // retrieve system GPU idle timeout value for later to recover.
+ mode_mgr->entry_timeout_ = UINT32(HWCDebugHandler::GetIdleTimeoutMs());
+ }
+
+ return mode_mgr;
+}
+
+HWCQDCMModeManager::~HWCQDCMModeManager() {
+ if (socket_fd_ >= 0)
+ ::close(socket_fd_);
+}
+
+int HWCQDCMModeManager::EnableActiveFeatures(bool enable,
+ const HWCQDCMModeManager::ActiveFeatureCMD &cmds,
+ bool *was_running) {
+ int ret = 0;
+ ssize_t size = 0;
+ char response[kSocketCMDMaxLength] = {
+ 0,
+ };
+
+ if (socket_fd_ < 0) {
+ DLOGW("No socket connection available - assuming dpps is not enabled");
+ return 0;
+ }
+
+ if (!enable) { // if client requesting to disable it.
+ // query CABL status, if off, no action. keep the status.
+ size = ::write(socket_fd_, cmds.cmd_query_status, strlen(cmds.cmd_query_status));
+ if (size < 0) {
+ DLOGW("Unable to send data over socket %s", ::strerror(errno));
+ ret = -EFAULT;
+ } else {
+ size = ::read(socket_fd_, response, kSocketCMDMaxLength);
+ if (size < 0) {
+ DLOGW("Unable to read data over socket %s", ::strerror(errno));
+ ret = -EFAULT;
+ } else if (!strncmp(response, cmds.running, strlen(cmds.running))) {
+ *was_running = true;
+ }
+ }
+
+ if (*was_running) { // if was running, it's requested to disable it.
+ size = ::write(socket_fd_, cmds.cmd_off, strlen(cmds.cmd_off));
+ if (size < 0) {
+ DLOGW("Unable to send data over socket %s", ::strerror(errno));
+ ret = -EFAULT;
+ }
+ }
+ } else { // if was running, need enable it back.
+ if (*was_running) {
+ size = ::write(socket_fd_, cmds.cmd_on, strlen(cmds.cmd_on));
+ if (size < 0) {
+ DLOGW("Unable to send data over socket %s", ::strerror(errno));
+ ret = -EFAULT;
+ }
+ }
+ }
+
+ return ret;
+}
+
+int HWCQDCMModeManager::EnableQDCMMode(bool enable, HWCDisplay *hwc_display) {
+ int ret = 0;
+
+ ret = EnableActiveFeatures((enable ? false : true), kActiveFeatureCMD[kCABLFeature],
+ &cabl_was_running_);
+
+ // if enter QDCM mode, disable GPU fallback idle timeout.
+ if (hwc_display) {
+ uint32_t timeout = enable ? 0 : entry_timeout_;
+ hwc_display->SetIdleTimeoutMs(timeout);
+ }
+
+ return ret;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_color_manager.h b/sdm/libs/hwc2/hwc_color_manager.h
new file mode 100644
index 0000000..15f0da4
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_color_manager.h
@@ -0,0 +1,143 @@
+/* Copyright (c) 2015-2017, The Linux Foundataion. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*
+*/
+
+#ifndef __HWC_COLOR_MANAGER_H__
+#define __HWC_COLOR_MANAGER_H__
+
+#include <stdlib.h>
+#include <binder/Parcel.h>
+#include <binder/BinderService.h>
+#include <core/sdm_types.h>
+#include <utils/locker.h>
+
+namespace sdm {
+
+// This macro defines name for display APIs interface wrapper library.
+// This macro shall be used to load library using dlopen().
+#define DISPLAY_API_INTERFACE_LIBRARY_NAME "libsdm-disp-vndapis.so"
+
+// This macro defines variable name of display color APIs function tables
+// This macro shall be used to specify name of the variable in dlsym().
+#define DISPLAY_API_FUNC_TABLES "display_color_apis_ftables"
+#define QDCM_DIAG_CLIENT_LIBRARY_NAME "libsdm-diag.so"
+#define INIT_QDCM_DIAG_CLIENT_NAME "QDCMDiagInit"
+#define DEINIT_QDCM_DIAG_CLIENT_NAME "QDCMDiagDeInit"
+
+typedef void (*QDCMDiagInit)(void *ftables);
+
+typedef void (*QDCMDiagDeInit)(void);
+
+// Class to encapsulte all details of managing QDCM operating mode.
+class HWCQDCMModeManager {
+ public:
+ static const uint32_t kSocketCMDMaxLength = 4096;
+ static const uint32_t kFullWakeLock = 0x0000001a;
+ static const uint32_t kAcquireCauseWakeup = 0x10000000;
+ static const uint32_t kONAfterRelease = 0x20000000;
+ enum ActiveFeatureID {
+ kCABLFeature,
+ kADFeature,
+ kSVIFeature,
+ kMaxNumActiveFeature,
+ };
+
+ struct ActiveFeatureCMD {
+ const char *cmd_on = NULL;
+ const char *cmd_off = NULL;
+ const char *cmd_query_status = NULL;
+ const char *running = NULL;
+ ActiveFeatureCMD(const char *arg1, const char *arg2, const char *arg3, const char *arg4)
+ : cmd_on(arg1), cmd_off(arg2), cmd_query_status(arg3), running(arg4) {}
+ };
+
+ static const ActiveFeatureCMD kActiveFeatureCMD[kMaxNumActiveFeature];
+
+ public:
+ static HWCQDCMModeManager *CreateQDCMModeMgr();
+ ~HWCQDCMModeManager();
+ int EnableQDCMMode(bool enable, HWCDisplay *hwc_display);
+
+ protected:
+ bool SendSocketCmd();
+ int AcquireAndroidWakeLock(bool enable);
+ int EnableActiveFeatures(bool enable);
+ int EnableActiveFeatures(bool enable, const ActiveFeatureCMD &cmds, bool *was_running);
+
+ private:
+ bool cabl_was_running_ = false;
+ int socket_fd_ = -1;
+ android::sp<android::IBinder> wakelock_token_ = NULL;
+ uint32_t entry_timeout_ = 0;
+ static const char *const kSocketName;
+ static const char *const kTagName;
+ static const char *const kPackageName;
+};
+
+// Class to encapsulte all HWC/OS specific behaviours for ColorManager.
+class HWCColorManager {
+ public:
+ static const int kNumSolidFillLayers = 2;
+ static HWCColorManager *CreateColorManager(HWCBufferAllocator *buffer_allocator);
+ static int CreatePayloadFromParcel(const android::Parcel &in, uint32_t *disp_id,
+ PPDisplayAPIPayload *sink);
+ static void MarshallStructIntoParcel(const PPDisplayAPIPayload &data,
+ android::Parcel *out_parcel);
+
+ explicit HWCColorManager(HWCBufferAllocator *buffer_allocator);
+ ~HWCColorManager();
+ void DestroyColorManager();
+ int EnableQDCMMode(bool enable, HWCDisplay *hwc_display);
+ int SetSolidFill(const void *params, bool enable, HWCDisplay *hwc_display);
+ int SetFrameCapture(void *params, bool enable, HWCDisplay *hwc_display);
+ int SetDetailedEnhancer(void *params, HWCDisplay *hwc_display);
+ void SetColorModeDetailEnhancer(HWCDisplay *hwc_display);
+ int SetHWDetailedEnhancerConfig(void *params, HWCDisplay *hwc_display);
+
+ protected:
+ int CreateSolidFillLayers(HWCDisplay *hwc_display);
+ void DestroySolidFillLayers();
+ static uint32_t Get8BitsARGBColorValue(const PPColorFillParams ¶ms);
+
+ private:
+ DynLib color_apis_lib_;
+ DynLib diag_client_lib_;
+ void *color_apis_ = NULL;
+ QDCMDiagInit qdcm_diag_init_ = NULL;
+ QDCMDiagDeInit qdcm_diag_deinit_ = NULL;
+ HWCQDCMModeManager *qdcm_mode_mgr_ = NULL;
+
+ PPColorFillParams solid_fill_params_;
+ HWCBufferAllocator *buffer_allocator_ = NULL;
+ BufferInfo buffer_info;
+ Locker locker_;
+};
+
+} // namespace sdm
+
+#endif // __HWC_COLOR_MANAGER_H__
diff --git a/sdm/libs/hwc2/hwc_debugger.cpp b/sdm/libs/hwc2/hwc_debugger.cpp
new file mode 100644
index 0000000..7f116d5
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_debugger.cpp
@@ -0,0 +1,254 @@
+/*
+* Copyright (c) 2014 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <utils/constants.h>
+#include <cutils/properties.h>
+#include <display_properties.h>
+
+#include "hwc_debugger.h"
+
+namespace sdm {
+
+HWCDebugHandler HWCDebugHandler::debug_handler_;
+
+HWCDebugHandler::HWCDebugHandler() {
+ DebugHandler::Set(HWCDebugHandler::Get());
+}
+
+void HWCDebugHandler::DebugAll(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_ = 0x7FFFFFFF;
+ if (verbose_level) {
+ // Enable verbose scalar logs only when explicitly enabled
+ debug_handler_.log_mask_[kTagScalar] = 0;
+ }
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_ = 0x1; // kTagNone should always be printed.
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::DebugResources(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_[kTagResources] = 1;
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_[kTagResources] = 0;
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::DebugStrategy(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_[kTagStrategy] = 1;
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_[kTagStrategy] = 0;
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::DebugCompManager(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_[kTagCompManager] = 1;
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_[kTagCompManager] = 0;
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::DebugDriverConfig(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_[kTagDriverConfig] = 1;
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_[kTagDriverConfig] = 0;
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::DebugRotator(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_[kTagRotator] = 1;
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_[kTagRotator] = 0;
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::DebugScalar(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_[kTagScalar] = 1;
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_[kTagScalar] = 0;
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::DebugQdcm(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_[kTagQDCM] = 1;
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_[kTagQDCM] = 0;
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::DebugClient(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_[kTagClient] = 1;
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_[kTagClient] = 0;
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::DebugDisplay(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_[kTagDisplay] = 1;
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_[kTagDisplay] = 0;
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::DebugQos(bool enable, int verbose_level) {
+ if (enable) {
+ debug_handler_.log_mask_[kTagQOSClient] = 1;
+ // TODO(user): add qos impl log mask when logging available
+ debug_handler_.verbose_level_ = verbose_level;
+ } else {
+ debug_handler_.log_mask_[kTagQOSClient] = 0;
+ // TODO(user): add qos impl log mask when logging available
+ debug_handler_.verbose_level_ = 0;
+ }
+
+ DebugHandler::SetLogMask(debug_handler_.log_mask_);
+}
+
+void HWCDebugHandler::Error(const char *format, ...) {
+ va_list list;
+ va_start(list, format);
+ __android_log_vprint(ANDROID_LOG_ERROR, LOG_TAG, format, list);
+}
+
+void HWCDebugHandler::Warning(const char *format, ...) {
+ va_list list;
+ va_start(list, format);
+ __android_log_vprint(ANDROID_LOG_WARN, LOG_TAG, format, list);
+}
+
+void HWCDebugHandler::Info(const char *format, ...) {
+ va_list list;
+ va_start(list, format);
+ __android_log_vprint(ANDROID_LOG_INFO, LOG_TAG, format, list);
+}
+
+void HWCDebugHandler::Debug(const char *format, ...) {
+ va_list list;
+ va_start(list, format);
+ __android_log_vprint(ANDROID_LOG_DEBUG, LOG_TAG, format, list);
+}
+
+void HWCDebugHandler::Verbose(const char *format, ...) {
+ if (debug_handler_.verbose_level_) {
+ va_list list;
+ va_start(list, format);
+ __android_log_vprint(ANDROID_LOG_VERBOSE, LOG_TAG, format, list);
+ }
+}
+
+void HWCDebugHandler::BeginTrace(const char *class_name, const char *function_name,
+ const char *custom_string) {
+ if (atrace_is_tag_enabled(ATRACE_TAG)) {
+ char name[PATH_MAX] = {0};
+ snprintf(name, sizeof(name), "%s::%s::%s", class_name, function_name, custom_string);
+ atrace_begin(ATRACE_TAG, name);
+ }
+}
+
+void HWCDebugHandler::EndTrace() {
+ atrace_end(ATRACE_TAG);
+}
+
+int HWCDebugHandler::GetIdleTimeoutMs() {
+ int value = IDLE_TIMEOUT_DEFAULT_MS;
+ debug_handler_.GetProperty(IDLE_TIME_PROP, &value);
+
+ return value;
+}
+
+int HWCDebugHandler::GetProperty(const char *property_name, int *value) {
+ char property[PROPERTY_VALUE_MAX];
+
+ if (property_get(property_name, property, NULL) > 0) {
+ *value = atoi(property);
+ return kErrorNone;
+ }
+
+ return kErrorNotSupported;
+}
+
+int HWCDebugHandler::GetProperty(const char *property_name, char *value) {
+ if (property_get(property_name, value, NULL) > 0) {
+ return kErrorNone;
+ }
+
+ return kErrorNotSupported;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/hwc2/hwc_debugger.h b/sdm/libs/hwc2/hwc_debugger.h
new file mode 100644
index 0000000..db8c2a6
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_debugger.h
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2014 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __HWC_DEBUGGER_H__
+#define __HWC_DEBUGGER_H__
+
+#define ATRACE_TAG (ATRACE_TAG_GRAPHICS | ATRACE_TAG_HAL)
+
+#include <core/sdm_types.h>
+#include <debug_handler.h>
+#include <log/log.h>
+#include <utils/Trace.h>
+#include <bitset>
+
+namespace sdm {
+
+using display::DebugHandler;
+
+class HWCDebugHandler : public DebugHandler {
+ public:
+ HWCDebugHandler();
+ static inline DebugHandler* Get() { return &debug_handler_; }
+ static const char* DumpDir() { return "/data/vendor/display"; }
+
+ static void DebugAll(bool enable, int verbose_level);
+ static void DebugResources(bool enable, int verbose_level);
+ static void DebugStrategy(bool enable, int verbose_level);
+ static void DebugCompManager(bool enable, int verbose_level);
+ static void DebugDriverConfig(bool enable, int verbose_level);
+ static void DebugRotator(bool enable, int verbose_level);
+ static void DebugScalar(bool enable, int verbose_level);
+ static void DebugQdcm(bool enable, int verbose_level);
+ static void DebugClient(bool enable, int verbose_level);
+ static void DebugQos(bool enable, int verbose_level);
+ static void DebugDisplay(bool enable, int verbose_level);
+ static int GetIdleTimeoutMs();
+
+ virtual void Error(const char *format, ...);
+ virtual void Warning(const char *format, ...);
+ virtual void Info(const char *format, ...);
+ virtual void Debug(const char *format, ...);
+ virtual void Verbose(const char *format, ...);
+ virtual void BeginTrace(const char *class_name, const char *function_name,
+ const char *custom_string);
+ virtual void EndTrace();
+ virtual int GetProperty(const char *property_name, int *value);
+ virtual int GetProperty(const char *property_name, char *value);
+
+ private:
+ static HWCDebugHandler debug_handler_;
+ std::bitset<32> log_mask_;
+ int32_t verbose_level_;
+};
+
+} // namespace sdm
+
+#endif // __HWC_DEBUGGER_H__
+
diff --git a/sdm/libs/hwc2/hwc_display.cpp b/sdm/libs/hwc2/hwc_display.cpp
new file mode 100644
index 0000000..a4b8344
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display.cpp
@@ -0,0 +1,2649 @@
+/*
+ * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <cutils/properties.h>
+#include <errno.h>
+#include <math.h>
+#include <sync/sync.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/utils.h>
+#include <utils/formats.h>
+#include <utils/rect.h>
+#include <qd_utils.h>
+
+#include <algorithm>
+#include <iomanip>
+#include <map>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "hwc_display.h"
+#include "hwc_debugger.h"
+#include "hwc_tonemapper.h"
+#include "hwc_session.h"
+
+#ifdef QTI_BSP
+#include <hardware/display_defs.h>
+#endif
+
+#define __CLASS__ "HWCDisplay"
+
+namespace sdm {
+
+uint32_t HWCDisplay::throttling_refresh_rate_ = 60;
+constexpr uint32_t kVsyncTimeDriftNs = 1000000;
+
+bool NeedsToneMap(const LayerStack &layer_stack) {
+ for (Layer *layer : layer_stack.layers) {
+ if (layer->request.flags.tone_map) {
+ return true;
+ }
+ }
+ return false;
+}
+
+bool IsTimeAfterOrEqualVsyncTime(int64_t time, int64_t vsync_time) {
+ return ((vsync_time != INT64_MAX) && ((time - (vsync_time - kVsyncTimeDriftNs)) >= 0));
+}
+
+HWCColorMode::HWCColorMode(DisplayInterface *display_intf) : display_intf_(display_intf) {}
+
+HWC2::Error HWCColorMode::Init() {
+ PopulateColorModes();
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCColorMode::DeInit() {
+ color_mode_map_.clear();
+ return HWC2::Error::None;
+}
+
+uint32_t HWCColorMode::GetColorModeCount() {
+ uint32_t count = UINT32(color_mode_map_.size());
+ DLOGI("Supported color mode count = %d", count);
+ return std::max(1U, count);
+}
+
+uint32_t HWCColorMode::GetRenderIntentCount(ColorMode mode) {
+ uint32_t count = UINT32(color_mode_map_[mode].size());
+ DLOGI("mode: %d supported rendering intent count = %d", mode, count);
+ return std::max(1U, count);
+}
+
+HWC2::Error HWCColorMode::GetColorModes(uint32_t *out_num_modes, ColorMode *out_modes) {
+ auto it = color_mode_map_.begin();
+ *out_num_modes = std::min(*out_num_modes, UINT32(color_mode_map_.size()));
+ for (uint32_t i = 0; i < *out_num_modes; it++, i++) {
+ out_modes[i] = it->first;
+ DLOGI("Color mode = %d is supported", out_modes[i]);
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCColorMode::GetRenderIntents(ColorMode mode, uint32_t *out_num_intents,
+ RenderIntent *out_intents) {
+ if (color_mode_map_.find(mode) == color_mode_map_.end()) {
+ return HWC2::Error::BadParameter;
+ }
+ auto it = color_mode_map_[mode].begin();
+ *out_num_intents = std::min(*out_num_intents, UINT32(color_mode_map_[mode].size()));
+ for (uint32_t i = 0; i < *out_num_intents; it++, i++) {
+ out_intents[i] = it->first;
+ DLOGI("Color mode = %d is supported with render intent = %d", mode, out_intents[i]);
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCColorMode::ValidateColorModeWithRenderIntent(ColorMode mode, RenderIntent intent) {
+ if (mode < ColorMode::NATIVE || mode > ColorMode::BT2100_HLG) {
+ DLOGE("Could not find mode: %d", mode);
+ return HWC2::Error::BadParameter;
+ }
+ if (color_mode_map_.find(mode) == color_mode_map_.end()) {
+ return HWC2::Error::Unsupported;
+ }
+ if (color_mode_map_[mode].find(intent) == color_mode_map_[mode].end()) {
+ return HWC2::Error::Unsupported;
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCColorMode::SetColorModeWithRenderIntent(ColorMode mode, RenderIntent intent) {
+ DTRACE_SCOPED();
+ HWC2::Error hwc_error = ValidateColorModeWithRenderIntent(mode, intent);
+ if (hwc_error != HWC2::Error::None) {
+ return hwc_error;
+ }
+
+ if (current_color_mode_ == mode && current_render_intent_ == intent) {
+ return HWC2::Error::None;
+ }
+
+ auto mode_string = color_mode_map_[mode][intent][kSdrType];
+ DisplayError error = display_intf_->SetColorMode(mode_string);
+ if (error != kErrorNone) {
+ DLOGE("failed for mode = %d intent = %d name = %s", mode, intent, mode_string.c_str());
+ return HWC2::Error::Unsupported;
+ }
+ // The mode does not have the PCC configured, restore the transform
+ RestoreColorTransform();
+
+ current_color_mode_ = mode;
+ current_render_intent_ = intent;
+ DLOGV_IF(kTagClient, "Successfully applied mode = %d intent = %d name = %s", mode, intent,
+ mode_string.c_str());
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCColorMode::CacheColorModeWithRenderIntent(ColorMode mode, RenderIntent intent) {
+ HWC2::Error error = ValidateColorModeWithRenderIntent(mode, intent);
+ if (error != HWC2::Error::None) {
+ return error;
+ }
+
+ current_color_mode_ = mode;
+ current_render_intent_ = intent;
+ apply_mode_ = true;
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCColorMode::ApplyCurrentColorModeWithRenderIntent(bool hdr_present) {
+ // If panel does not support color modes, do not set color mode.
+ if (color_mode_map_.size() <= 1) {
+ return HWC2::Error::None;
+ }
+ if (!apply_mode_) {
+ if ((hdr_present && curr_dynamic_range_ == kHdrType) ||
+ (!hdr_present && curr_dynamic_range_ == kSdrType))
+ return HWC2::Error::None;
+ }
+
+ apply_mode_ = false;
+ curr_dynamic_range_ = (hdr_present)? kHdrType : kSdrType;
+
+ // select mode according to the blend space and dynamic range
+ std::string mode_string = preferred_mode_[current_color_mode_][curr_dynamic_range_];
+ if (mode_string.empty()) {
+ mode_string = color_mode_map_[current_color_mode_][current_render_intent_][curr_dynamic_range_];
+ if (mode_string.empty() && hdr_present) {
+ // Use the colorimetric HDR mode, if an HDR mode with the current render intent is not present
+ mode_string = color_mode_map_[current_color_mode_][RenderIntent::COLORIMETRIC][kHdrType];
+ }
+ if (mode_string.empty() &&
+ current_color_mode_ == ColorMode::DISPLAY_P3 &&
+ curr_dynamic_range_ == kHdrType) {
+ // fall back to display_p3 SDR mode if there is no HDR mode
+ mode_string = color_mode_map_[current_color_mode_][current_render_intent_][kSdrType];
+ }
+ }
+
+ auto error = SetPreferredColorModeInternal(mode_string, false, NULL, NULL);
+ if (error == HWC2::Error::None) {
+ // The mode does not have the PCC configured, restore the transform
+ RestoreColorTransform();
+ DLOGV_IF(kTagClient, "Successfully applied mode = %d intent = %d range = %d name = %s",
+ current_color_mode_, current_render_intent_, curr_dynamic_range_, mode_string.c_str());
+ }
+
+ return error;
+}
+
+HWC2::Error HWCColorMode::SetColorModeById(int32_t color_mode_id) {
+ DLOGI("Applying mode: %d", color_mode_id);
+ DisplayError error = display_intf_->SetColorModeById(color_mode_id);
+ if (error != kErrorNone) {
+ DLOGI_IF(kTagClient, "Failed to apply mode: %d", color_mode_id);
+ return HWC2::Error::BadParameter;
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCColorMode::SetPreferredColorModeInternal(const std::string &mode_string,
+ bool from_client, ColorMode *color_mode, DynamicRangeType *dynamic_range) {
+ DisplayError error = kErrorNone;
+ ColorMode mode = ColorMode::NATIVE;
+ DynamicRangeType range = kSdrType;
+
+ if (from_client) {
+ // get blend space and dynamic range of the mode
+ AttrVal attr;
+ std::string color_gamut_string, dynamic_range_string;
+ error = display_intf_->GetColorModeAttr(mode_string, &attr);
+ if (error) {
+ DLOGE("Failed to get mode attributes for mode %d", mode_string.c_str());
+ return HWC2::Error::BadParameter;
+ }
+
+ if (!attr.empty()) {
+ for (auto &it : attr) {
+ if (it.first.find(kColorGamutAttribute) != std::string::npos) {
+ color_gamut_string = it.second;
+ } else if (it.first.find(kDynamicRangeAttribute) != std::string::npos) {
+ dynamic_range_string = it.second;
+ }
+ }
+ }
+
+ if (color_gamut_string.empty() || dynamic_range_string.empty()) {
+ DLOGE("Invalid attributes for mode %s: color_gamut = %s, dynamic_range = %s",
+ mode_string.c_str(), color_gamut_string.c_str(), dynamic_range_string.c_str());
+ return HWC2::Error::BadParameter;
+ }
+
+ if (color_gamut_string == kDcip3) {
+ mode = ColorMode::DISPLAY_P3;
+ } else if (color_gamut_string == kSrgb) {
+ mode = ColorMode::SRGB;
+ }
+ if (dynamic_range_string == kHdr) {
+ range = kHdrType;
+ }
+
+ if (color_mode) {
+ *color_mode = mode;
+ }
+ if (dynamic_range) {
+ *dynamic_range = range;
+ }
+ }
+
+ // apply the mode from client if it matches
+ // the current blend space and dynamic range,
+ // skip the check for the mode from SF.
+ if ((!from_client) || (current_color_mode_ == mode && curr_dynamic_range_ == range)) {
+ DLOGI("Applying mode: %s", mode_string.c_str());
+ error = display_intf_->SetColorMode(mode_string);
+ if (error != kErrorNone) {
+ DLOGE("Failed to apply mode: %s", mode_string.c_str());
+ return HWC2::Error::BadParameter;
+ }
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCColorMode::SetColorModeFromClientApi(std::string mode_string) {
+ ColorMode mode = ColorMode::NATIVE;
+ DynamicRangeType range = kSdrType;
+
+ auto error = SetPreferredColorModeInternal(mode_string, true, &mode, &range);
+ if (error == HWC2::Error::None) {
+ preferred_mode_[mode][range] = mode_string;
+ DLOGV_IF(kTagClient, "Put mode %s(mode %d, range %d) into preferred_mode",
+ mode_string.c_str(), mode, range);
+ }
+
+ return error;
+}
+
+HWC2::Error HWCColorMode::RestoreColorTransform() {
+ DisplayError error = display_intf_->SetColorTransform(kColorTransformMatrixCount, color_matrix_);
+ if (error != kErrorNone) {
+ DLOGE("Failed to set Color Transform");
+ return HWC2::Error::BadParameter;
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCColorMode::SetColorTransform(const float *matrix,
+ android_color_transform_t /*hint*/) {
+ DTRACE_SCOPED();
+ auto status = HWC2::Error::None;
+ double color_matrix[kColorTransformMatrixCount] = {0};
+ CopyColorTransformMatrix(matrix, color_matrix);
+
+ DisplayError error = display_intf_->SetColorTransform(kColorTransformMatrixCount, color_matrix);
+ if (error != kErrorNone) {
+ DLOGE("Failed to set Color Transform Matrix");
+ status = HWC2::Error::Unsupported;
+ }
+ CopyColorTransformMatrix(matrix, color_matrix_);
+ return status;
+}
+
+void HWCColorMode::PopulateColorModes() {
+ uint32_t color_mode_count = 0;
+ // SDM returns modes which have attributes defining mode and rendering intent
+ DisplayError error = display_intf_->GetColorModeCount(&color_mode_count);
+ if (error != kErrorNone || (color_mode_count == 0)) {
+ DLOGW("GetColorModeCount failed, use native color mode");
+ color_mode_map_[ColorMode::NATIVE][RenderIntent::COLORIMETRIC]
+ [kSdrType] = "hal_native_identity";
+ return;
+ }
+
+ DLOGV_IF(kTagClient, "Color Modes supported count = %d", color_mode_count);
+
+ std::vector<std::string> color_modes(color_mode_count);
+ error = display_intf_->GetColorModes(&color_mode_count, &color_modes);
+ for (uint32_t i = 0; i < color_mode_count; i++) {
+ std::string &mode_string = color_modes.at(i);
+ DLOGV_IF(kTagClient, "Color Mode[%d] = %s", i, mode_string.c_str());
+ AttrVal attr;
+ error = display_intf_->GetColorModeAttr(mode_string, &attr);
+ std::string color_gamut = kNative, dynamic_range = kSdr, pic_quality = kStandard, transfer;
+ if (!attr.empty()) {
+ for (auto &it : attr) {
+ if (it.first.find(kColorGamutAttribute) != std::string::npos) {
+ color_gamut = it.second;
+ } else if (it.first.find(kDynamicRangeAttribute) != std::string::npos) {
+ dynamic_range = it.second;
+ } else if (it.first.find(kPictureQualityAttribute) != std::string::npos) {
+ pic_quality = it.second;
+ } else if (it.first.find(kGammaTransferAttribute) != std::string::npos) {
+ transfer = it.second;
+ }
+ }
+
+ DLOGV_IF(kTagClient, "color_gamut : %s, dynamic_range : %s, pic_quality : %s",
+ color_gamut.c_str(), dynamic_range.c_str(), pic_quality.c_str());
+ if (color_gamut == kNative) {
+ color_mode_map_[ColorMode::NATIVE][RenderIntent::COLORIMETRIC][kSdrType] = mode_string;
+ }
+
+ if (color_gamut == kSrgb && dynamic_range == kSdr) {
+ if (pic_quality == kStandard) {
+ color_mode_map_[ColorMode::SRGB][RenderIntent::COLORIMETRIC][kSdrType] = mode_string;
+ }
+ if (pic_quality == kEnhanced) {
+ color_mode_map_[ColorMode::SRGB][RenderIntent::ENHANCE][kSdrType] = mode_string;
+ }
+ }
+
+ if (color_gamut == kDcip3 && dynamic_range == kSdr) {
+ if (pic_quality == kStandard) {
+ color_mode_map_[ColorMode::DISPLAY_P3][RenderIntent::COLORIMETRIC]
+ [kSdrType] = mode_string;
+ }
+ if (pic_quality == kEnhanced) {
+ color_mode_map_[ColorMode::DISPLAY_P3][RenderIntent::ENHANCE]
+ [kSdrType] = mode_string;
+ }
+ }
+ if (color_gamut == kDcip3 && pic_quality == kStandard && dynamic_range == kHdr) {
+ if (display_intf_->IsSupportSsppTonemap()) {
+ color_mode_map_[ColorMode::DISPLAY_P3][RenderIntent::COLORIMETRIC]
+ [kHdrType] = mode_string;
+ } else {
+ color_mode_map_[ColorMode::BT2100_PQ][RenderIntent::TONE_MAP_COLORIMETRIC]
+ [kHdrType] = mode_string;
+ color_mode_map_[ColorMode::BT2100_HLG][RenderIntent::TONE_MAP_COLORIMETRIC]
+ [kHdrType] = mode_string;
+ }
+ } else if (color_gamut == kBt2020) {
+ if (transfer == kSt2084) {
+ color_mode_map_[ColorMode::BT2100_PQ][RenderIntent::COLORIMETRIC]
+ [kHdrType] = mode_string;
+ } else if (transfer == kHlg) {
+ color_mode_map_[ColorMode::BT2100_HLG][RenderIntent::COLORIMETRIC]
+ [kHdrType] = mode_string;
+ } else if (transfer == kGamma2_2) {
+ color_mode_map_[ColorMode::BT2020][RenderIntent::COLORIMETRIC]
+ [kHdrType] = mode_string;
+ }
+ }
+ } else {
+ // Look at the mode names, if no attributes are found
+ if (mode_string.find("hal_native") != std::string::npos) {
+ color_mode_map_[ColorMode::NATIVE][RenderIntent::COLORIMETRIC]
+ [kSdrType] = mode_string;
+ }
+ }
+ }
+}
+
+void HWCColorMode::Dump(std::ostringstream* os) {
+ *os << "color modes supported: \n";
+ for (auto it : color_mode_map_) {
+ *os << "mode: " << static_cast<int32_t>(it.first) << " RIs { ";
+ for (auto render_intent_it : color_mode_map_[it.first]) {
+ *os << static_cast<int32_t>(render_intent_it.first) << " dynamic_range [ ";
+ for (auto range_it : color_mode_map_[it.first][render_intent_it.first]) {
+ *os << static_cast<int32_t>(range_it.first) << " ";
+ }
+ *os << "] ";
+ }
+ *os << "} \n";
+ }
+ *os << "current mode: " << static_cast<uint32_t>(current_color_mode_) << std::endl;
+ *os << "current render_intent: " << static_cast<uint32_t>(current_render_intent_) << std::endl;
+ if (curr_dynamic_range_ == kHdrType) {
+ *os << "current dynamic_range: HDR" << std::endl;
+ } else {
+ *os << "current dynamic_range: SDR" << std::endl;
+ }
+ *os << "current transform: ";
+ for (uint32_t i = 0; i < kColorTransformMatrixCount; i++) {
+ if (i % 4 == 0) {
+ *os << std::endl;
+ }
+ *os << std::fixed << std::setprecision(2) << std::setw(6) << std::setfill(' ')
+ << color_matrix_[i] << " ";
+ }
+ *os << std::endl;
+}
+
+HWCDisplay::HWCDisplay(CoreInterface *core_intf, BufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler* event_handler,
+ qService::QService *qservice, DisplayType type, hwc2_display_t id,
+ int32_t sdm_id, bool needs_blit, DisplayClass display_class)
+ : core_intf_(core_intf),
+ callbacks_(callbacks),
+ event_handler_(event_handler),
+ type_(type),
+ id_(id),
+ sdm_id_(sdm_id),
+ needs_blit_(needs_blit),
+ qservice_(qservice),
+ display_class_(display_class) {
+ buffer_allocator_ = static_cast<HWCBufferAllocator *>(buffer_allocator);
+}
+
+int HWCDisplay::Init() {
+ DisplayError error = kErrorNone;
+
+ HWCDebugHandler::Get()->GetProperty(ENABLE_NULL_DISPLAY_PROP, &null_display_mode_);
+ HWCDebugHandler::Get()->GetProperty(ENABLE_ASYNC_POWERMODE, &async_power_mode_);
+
+ if (null_display_mode_) {
+ DisplayNull *disp_null = new DisplayNull();
+ disp_null->Init();
+ use_metadata_refresh_rate_ = false;
+ display_intf_ = disp_null;
+ DLOGI("Enabling null display mode for display type %d", type_);
+ } else {
+ error = core_intf_->CreateDisplay(sdm_id_, this, &display_intf_);
+ if (error != kErrorNone) {
+ if (kErrorDeviceRemoved == error) {
+ DLOGW("Display creation cancelled. Display %d-%d removed.", sdm_id_, type_);
+ return -ENODEV;
+ } else {
+ DLOGE("Display create failed. Error = %d display_id = %d event_handler = %p disp_intf = %p",
+ error, sdm_id_, this, &display_intf_);
+ return -EINVAL;
+ }
+ }
+ }
+
+ validated_ = false;
+ HWCDebugHandler::Get()->GetProperty(DISABLE_HDR, &disable_hdr_handling_);
+ if (disable_hdr_handling_) {
+ DLOGI("HDR Handling disabled");
+ }
+
+ int property_swap_interval = 1;
+ HWCDebugHandler::Get()->GetProperty(ZERO_SWAP_INTERVAL, &property_swap_interval);
+ if (property_swap_interval == 0) {
+ swap_interval_zero_ = true;
+ }
+
+ client_target_ = new HWCLayer(id_, buffer_allocator_);
+
+ int blit_enabled = 0;
+ HWCDebugHandler::Get()->GetProperty(DISABLE_BLIT_COMPOSITION_PROP, &blit_enabled);
+ if (needs_blit_ && blit_enabled) {
+ // TODO(user): Add blit engine when needed
+ }
+
+ error = display_intf_->GetNumVariableInfoConfigs(&num_configs_);
+ if (error != kErrorNone) {
+ DLOGE("Getting config count failed. Error = %d", error);
+ return -EINVAL;
+ }
+
+ UpdateConfigs();
+
+ tone_mapper_ = new HWCToneMapper(buffer_allocator_);
+
+ display_intf_->GetRefreshRateRange(&min_refresh_rate_, &max_refresh_rate_);
+ current_refresh_rate_ = max_refresh_rate_;
+
+ GetUnderScanConfig();
+
+ DisplayConfigFixedInfo fixed_info = {};
+ display_intf_->GetConfig(&fixed_info);
+ is_cmd_mode_ = fixed_info.is_cmdmode;
+ partial_update_enabled_ = fixed_info.partial_update || (!fixed_info.is_cmdmode);
+ client_target_->SetPartialUpdate(partial_update_enabled_);
+
+ int disable_fast_path = 0;
+ HWCDebugHandler::Get()->GetProperty(DISABLE_FAST_PATH, &disable_fast_path);
+ fast_path_enabled_ = !(disable_fast_path == 1);
+
+ DLOGI("Display created with id: %d", id_);
+
+ return 0;
+}
+
+void HWCDisplay::UpdateConfigs() {
+ // SF doesnt care about dynamic bit clk support.
+ // Exposing all configs will result in getting/setting of redundant configs.
+
+ // For each config store the corresponding index which client understands.
+ hwc_config_map_.resize(num_configs_);
+
+ for (uint32_t i = 0; i < num_configs_; i++) {
+ DisplayConfigVariableInfo info = {};
+ GetDisplayAttributesForConfig(INT(i), &info);
+ bool config_exists = false;
+ for (auto &config : variable_config_map_) {
+ if (config.second == info) {
+ config_exists = true;
+ hwc_config_map_.at(i) = config.first;
+ break;
+ }
+ }
+
+ if (!config_exists) {
+ variable_config_map_[i] = info;
+ hwc_config_map_.at(i) = i;
+ }
+ }
+
+ // Update num config count.
+ num_configs_ = UINT32(variable_config_map_.size());
+ DLOGI("num_configs = %d", num_configs_);
+}
+
+int HWCDisplay::Deinit() {
+ if (null_display_mode_) {
+ delete static_cast<DisplayNull *>(display_intf_);
+ display_intf_ = nullptr;
+ } else {
+ DisplayError error = core_intf_->DestroyDisplay(display_intf_);
+ if (error != kErrorNone) {
+ DLOGE("Display destroy failed. Error = %d", error);
+ return -EINVAL;
+ }
+ }
+
+ delete client_target_;
+ for (auto hwc_layer : layer_set_) {
+ delete hwc_layer;
+ }
+
+ // Close fbt release fence.
+ close(fbt_release_fence_);
+
+ if (color_mode_) {
+ color_mode_->DeInit();
+ delete color_mode_;
+ }
+
+ if (tone_mapper_) {
+ delete tone_mapper_;
+ tone_mapper_ = nullptr;
+ }
+
+ return 0;
+}
+
+// LayerStack operations
+HWC2::Error HWCDisplay::CreateLayer(hwc2_layer_t *out_layer_id) {
+ HWCLayer *layer = *layer_set_.emplace(new HWCLayer(id_, buffer_allocator_));
+ layer_map_.emplace(std::make_pair(layer->GetId(), layer));
+ *out_layer_id = layer->GetId();
+ geometry_changes_ |= GeometryChanges::kAdded;
+ validated_ = false;
+ layer_stack_invalid_ = true;
+ layer->SetPartialUpdate(partial_update_enabled_);
+
+ return HWC2::Error::None;
+}
+
+HWCLayer *HWCDisplay::GetHWCLayer(hwc2_layer_t layer_id) {
+ const auto map_layer = layer_map_.find(layer_id);
+ if (map_layer == layer_map_.end()) {
+ DLOGW("[%" PRIu64 "] GetLayer(%" PRIu64 ") failed: no such layer", id_, layer_id);
+ return nullptr;
+ } else {
+ return map_layer->second;
+ }
+}
+
+HWC2::Error HWCDisplay::DestroyLayer(hwc2_layer_t layer_id) {
+ const auto map_layer = layer_map_.find(layer_id);
+ if (map_layer == layer_map_.end()) {
+ DLOGW("[%" PRIu64 "] destroyLayer(%" PRIu64 ") failed: no such layer", id_, layer_id);
+ return HWC2::Error::BadLayer;
+ }
+ const auto layer = map_layer->second;
+ layer_map_.erase(map_layer);
+ const auto z_range = layer_set_.equal_range(layer);
+ for (auto current = z_range.first; current != z_range.second; ++current) {
+ if (*current == layer) {
+ current = layer_set_.erase(current);
+ delete layer;
+ break;
+ }
+ }
+
+ geometry_changes_ |= GeometryChanges::kRemoved;
+ validated_ = false;
+ layer_stack_invalid_ = true;
+
+ return HWC2::Error::None;
+}
+
+
+void HWCDisplay::BuildLayerStack() {
+ layer_stack_ = LayerStack();
+ display_rect_ = LayerRect();
+ metadata_refresh_rate_ = 0;
+ layer_stack_.flags.animating = animating_;
+ layer_stack_.flags.fast_path = fast_path_enabled_ && fast_path_composition_;
+
+ DTRACE_SCOPED();
+ // Add one layer for fb target
+ // TODO(user): Add blit target layers
+ for (auto hwc_layer : layer_set_) {
+ // Reset layer data which SDM may change
+ hwc_layer->ResetPerFrameData();
+
+ Layer *layer = hwc_layer->GetSDMLayer();
+ layer->flags = {}; // Reset earlier flags
+ // Mark all layers to skip, when client target handle is NULL
+ if (hwc_layer->GetClientRequestedCompositionType() == HWC2::Composition::Client ||
+ !client_target_->GetSDMLayer()->input_buffer.buffer_id) {
+ layer->flags.skip = true;
+ } else if (hwc_layer->GetClientRequestedCompositionType() == HWC2::Composition::SolidColor) {
+ layer->flags.solid_fill = true;
+ }
+
+ if (!hwc_layer->IsDataSpaceSupported()) {
+ layer->flags.skip = true;
+ }
+
+ // set default composition as GPU for SDM
+ layer->composition = kCompositionGPU;
+
+ if (swap_interval_zero_) {
+ if (layer->input_buffer.acquire_fence_fd >= 0) {
+ close(layer->input_buffer.acquire_fence_fd);
+ layer->input_buffer.acquire_fence_fd = -1;
+ }
+ }
+
+ bool is_secure = false;
+ const private_handle_t *handle =
+ reinterpret_cast<const private_handle_t *>(layer->input_buffer.buffer_id);
+ if (handle) {
+ if (handle->buffer_type == BUFFER_TYPE_VIDEO) {
+ layer_stack_.flags.video_present = true;
+ }
+ // TZ Protected Buffer - L1
+ // Gralloc Usage Protected Buffer - L3 - which needs to be treated as Secure & avoid fallback
+ if (handle->flags & private_handle_t::PRIV_FLAGS_PROTECTED_BUFFER ||
+ handle->flags & private_handle_t::PRIV_FLAGS_SECURE_BUFFER) {
+ layer_stack_.flags.secure_present = true;
+ is_secure = true;
+ }
+ }
+
+ if (layer->input_buffer.flags.secure_display) {
+ is_secure = true;
+ }
+
+ if (hwc_layer->IsSingleBuffered() &&
+ !(hwc_layer->IsRotationPresent() || hwc_layer->IsScalingPresent())) {
+ layer->flags.single_buffer = true;
+ layer_stack_.flags.single_buffered_layer_present = true;
+ }
+
+ bool hdr_layer = layer->input_buffer.color_metadata.colorPrimaries == ColorPrimaries_BT2020 &&
+ (layer->input_buffer.color_metadata.transfer == Transfer_SMPTE_ST2084 ||
+ layer->input_buffer.color_metadata.transfer == Transfer_HLG);
+ if (hdr_layer && !disable_hdr_handling_) {
+ // Dont honor HDR when its handling is disabled
+ layer->input_buffer.flags.hdr = true;
+ layer_stack_.flags.hdr_present = true;
+ }
+
+ if (hwc_layer->IsNonIntegralSourceCrop() && !is_secure && !hdr_layer &&
+ !layer->flags.single_buffer && !layer->flags.solid_fill) {
+ layer->flags.skip = true;
+ }
+
+ if (!layer->flags.skip &&
+ (hwc_layer->GetClientRequestedCompositionType() == HWC2::Composition::Cursor)) {
+ // Currently we support only one HWCursor & only at top most z-order
+ if ((*layer_set_.rbegin())->GetId() == hwc_layer->GetId()) {
+ layer->flags.cursor = true;
+ layer_stack_.flags.cursor_present = true;
+ }
+ }
+
+ if (layer->flags.skip) {
+ layer_stack_.flags.skip_present = true;
+ }
+
+ // TODO(user): Move to a getter if this is needed at other places
+ hwc_rect_t scaled_display_frame = {INT(layer->dst_rect.left), INT(layer->dst_rect.top),
+ INT(layer->dst_rect.right), INT(layer->dst_rect.bottom)};
+ if (hwc_layer->GetGeometryChanges() & kDisplayFrame) {
+ ApplyScanAdjustment(&scaled_display_frame);
+ }
+ hwc_layer->SetLayerDisplayFrame(scaled_display_frame);
+ hwc_layer->ResetPerFrameData();
+ // SDM requires these details even for solid fill
+ if (layer->flags.solid_fill) {
+ LayerBuffer *layer_buffer = &layer->input_buffer;
+ layer_buffer->width = UINT32(layer->dst_rect.right - layer->dst_rect.left);
+ layer_buffer->height = UINT32(layer->dst_rect.bottom - layer->dst_rect.top);
+ layer_buffer->unaligned_width = layer_buffer->width;
+ layer_buffer->unaligned_height = layer_buffer->height;
+ layer_buffer->acquire_fence_fd = -1;
+ layer_buffer->release_fence_fd = -1;
+ layer->src_rect.left = 0;
+ layer->src_rect.top = 0;
+ layer->src_rect.right = layer_buffer->width;
+ layer->src_rect.bottom = layer_buffer->height;
+ }
+
+ if (hwc_layer->HasMetaDataRefreshRate() && layer->frame_rate > metadata_refresh_rate_) {
+ metadata_refresh_rate_ = SanitizeRefreshRate(layer->frame_rate);
+ }
+
+ display_rect_ = Union(display_rect_, layer->dst_rect);
+ geometry_changes_ |= hwc_layer->GetGeometryChanges();
+
+ layer->flags.updating = true;
+ if (layer_set_.size() <= kMaxLayerCount) {
+ layer->flags.updating = IsLayerUpdating(hwc_layer);
+ }
+
+ if ((hwc_layer->GetDeviceSelectedCompositionType() != HWC2::Composition::Device) ||
+ (hwc_layer->GetClientRequestedCompositionType() != HWC2::Composition::Device) ||
+ layer->flags.skip) {
+ layer->update_mask.set(kClientCompRequest);
+ }
+
+ layer_stack_.flags.mask_present |= layer->input_buffer.flags.mask_layer;
+
+ layer_stack_.layers.push_back(layer);
+ }
+
+ // If layer stack needs Client composition, HWC display gets into InternalValidate state. If
+ // validation gets reset by any other thread in this state, enforce Geometry change to ensure
+ // that Client target gets composed by SF.
+ bool enforce_geometry_change = (validate_state_ == kInternalValidate) && !validated_;
+
+ // TODO(user): Set correctly when SDM supports geometry_changes as bitmask
+ layer_stack_.flags.geometry_changed = UINT32((geometry_changes_ ||
+ geometry_changes_on_doze_suspend_) > 0) || enforce_geometry_change;
+ layer_stack_.flags.config_changed = !validated_;
+
+ // Append client target to the layer stack
+ Layer *sdm_client_target = client_target_->GetSDMLayer();
+ sdm_client_target->flags.updating = IsLayerUpdating(client_target_);
+ // Derive client target dataspace based on the color mode - bug/115482728
+ int32_t client_target_dataspace = GetDataspaceFromColorMode(GetCurrentColorMode());
+ SetClientTargetDataSpace(client_target_dataspace);
+ layer_stack_.layers.push_back(sdm_client_target);
+
+ // fall back frame composition to GPU when client target is 10bit
+ // TODO(user): clarify the behaviour from Client(SF) and SDM Extn -
+ // when handling 10bit FBT, as it would affect blending
+ if (Is10BitFormat(sdm_client_target->input_buffer.format)) {
+ // Must fall back to client composition
+ MarkLayersForClientComposition();
+ }
+}
+
+void HWCDisplay::BuildSolidFillStack() {
+ layer_stack_ = LayerStack();
+ display_rect_ = LayerRect();
+
+ layer_stack_.layers.push_back(solid_fill_layer_);
+ layer_stack_.flags.geometry_changed = 1U;
+ // Append client target to the layer stack
+ layer_stack_.layers.push_back(client_target_->GetSDMLayer());
+}
+
+HWC2::Error HWCDisplay::SetLayerZOrder(hwc2_layer_t layer_id, uint32_t z) {
+ const auto map_layer = layer_map_.find(layer_id);
+ if (map_layer == layer_map_.end()) {
+ DLOGE("[%" PRIu64 "] updateLayerZ failed to find layer", id_);
+ return HWC2::Error::BadLayer;
+ }
+
+ const auto layer = map_layer->second;
+ const auto z_range = layer_set_.equal_range(layer);
+ bool layer_on_display = false;
+ for (auto current = z_range.first; current != z_range.second; ++current) {
+ if (*current == layer) {
+ if ((*current)->GetZ() == z) {
+ // Don't change anything if the Z hasn't changed
+ return HWC2::Error::None;
+ }
+ current = layer_set_.erase(current);
+ layer_on_display = true;
+ break;
+ }
+ }
+
+ if (!layer_on_display) {
+ DLOGE("[%" PRIu64 "] updateLayerZ failed to find layer on display", id_);
+ return HWC2::Error::BadLayer;
+ }
+
+ layer->SetLayerZOrder(z);
+ layer_set_.emplace(layer);
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::SetVsyncEnabled(HWC2::Vsync enabled) {
+ DLOGV("Display ID: %d enabled: %s", id_, to_string(enabled).c_str());
+ ATRACE_INT("SetVsyncState ", enabled == HWC2::Vsync::Enable ? 1 : 0);
+ DisplayError error = kErrorNone;
+
+ if (shutdown_pending_ ||
+ (!callbacks_->VsyncCallbackRegistered() && !callbacks_->Vsync_2_4CallbackRegistered())) {
+ return HWC2::Error::None;
+ }
+
+ bool state;
+ if (enabled == HWC2::Vsync::Enable)
+ state = true;
+ else if (enabled == HWC2::Vsync::Disable)
+ state = false;
+ else
+ return HWC2::Error::BadParameter;
+
+ error = display_intf_->SetVSyncState(state);
+
+ if (error != kErrorNone) {
+ if (error == kErrorShutDown) {
+ shutdown_pending_ = true;
+ return HWC2::Error::None;
+ }
+ DLOGE("Failed. enabled = %s, error = %d", to_string(enabled).c_str(), error);
+ return HWC2::Error::BadDisplay;
+ }
+
+ return HWC2::Error::None;
+}
+
+void HWCDisplay::PostPowerMode() {
+ if (release_fence_ < 0) {
+ return;
+ }
+
+ for (auto hwc_layer : layer_set_) {
+ auto fence = hwc_layer->PopBackReleaseFence();
+ auto merged_fence = -1;
+ if (fence >= 0) {
+ merged_fence = sync_merge("sync_merge", release_fence_, fence);
+ ::close(fence);
+ } else {
+ merged_fence = ::dup(release_fence_);
+ }
+ hwc_layer->PushBackReleaseFence(merged_fence);
+ }
+
+ // Add this release fence onto fbt_release fence.
+ CloseFd(&fbt_release_fence_);
+ fbt_release_fence_ = release_fence_;
+ release_fence_ = -1;
+}
+
+HWC2::Error HWCDisplay::SetPowerMode(HWC2::PowerMode mode, bool teardown) {
+ DLOGV("display = %d, mode = %s", id_, to_string(mode).c_str());
+ DisplayState state = kStateOff;
+ bool flush_on_error = flush_on_error_;
+
+ if (shutdown_pending_) {
+ return HWC2::Error::None;
+ }
+
+ switch (mode) {
+ case HWC2::PowerMode::Off:
+ // During power off, all of the buffers are released.
+ // Do not flush until a buffer is successfully submitted again.
+ flush_on_error = false;
+ state = kStateOff;
+ if (tone_mapper_) {
+ tone_mapper_->Terminate();
+ }
+ break;
+ case HWC2::PowerMode::On:
+ state = kStateOn;
+ break;
+ case HWC2::PowerMode::Doze:
+ state = kStateDoze;
+ break;
+ case HWC2::PowerMode::DozeSuspend:
+ state = kStateDozeSuspend;
+ break;
+ default:
+ return HWC2::Error::BadParameter;
+ }
+ int release_fence = -1;
+
+ ATRACE_INT("SetPowerMode ", state);
+ DisplayError error = display_intf_->SetDisplayState(state, teardown, &release_fence);
+ validated_ = false;
+
+ if (error == kErrorNone) {
+ flush_on_error_ = flush_on_error;
+ } else {
+ if (error == kErrorShutDown) {
+ shutdown_pending_ = true;
+ return HWC2::Error::None;
+ }
+ DLOGE("Set state failed. Error = %d", error);
+ return HWC2::Error::BadParameter;
+ }
+
+ // Update release fence.
+ release_fence_ = release_fence;
+ current_power_mode_ = mode;
+
+ // Close the release fences in synchronous power updates
+ if (!async_power_mode_) {
+ PostPowerMode();
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetClientTargetSupport(uint32_t width, uint32_t height, int32_t format,
+ int32_t dataspace) {
+ ColorMetaData color_metadata = {};
+ if (dataspace != HAL_DATASPACE_UNKNOWN) {
+ dataspace = TranslateFromLegacyDataspace(dataspace);
+ GetColorPrimary(dataspace, &(color_metadata.colorPrimaries));
+ GetTransfer(dataspace, &(color_metadata.transfer));
+ GetRange(dataspace, &(color_metadata.range));
+ }
+
+ LayerBufferFormat sdm_format = HWCLayer::GetSDMFormat(format, 0);
+ if (display_intf_->GetClientTargetSupport(width, height, sdm_format,
+ color_metadata) != kErrorNone) {
+ return HWC2::Error::Unsupported;
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetColorModes(uint32_t *out_num_modes, ColorMode *out_modes) {
+ if (out_modes == nullptr) {
+ *out_num_modes = 1;
+ } else if (out_modes && *out_num_modes > 0) {
+ *out_num_modes = 1;
+ out_modes[0] = ColorMode::NATIVE;
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetRenderIntents(ColorMode mode, uint32_t *out_num_intents,
+ RenderIntent *out_intents) {
+ if (mode != ColorMode::NATIVE) {
+ return HWC2::Error::Unsupported;
+ }
+ if (out_intents == nullptr) {
+ *out_num_intents = 1;
+ } else if (out_intents && *out_num_intents > 0) {
+ *out_num_intents = 1;
+ out_intents[0] = RenderIntent::COLORIMETRIC;
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetDisplayConfigs(uint32_t *out_num_configs, hwc2_config_t *out_configs) {
+ if (out_num_configs == nullptr) {
+ return HWC2::Error::BadParameter;
+ }
+
+ if (out_configs == nullptr) {
+ *out_num_configs = num_configs_;
+ return HWC2::Error::None;
+ }
+
+ *out_num_configs = std::min(*out_num_configs, num_configs_);
+
+ // Expose all unique config ids to cleint.
+ uint32_t i = 0;
+ for (auto &info : variable_config_map_) {
+ if (i == *out_num_configs) {
+ break;
+ }
+ out_configs[i++] = info.first;
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetDisplayAttribute(hwc2_config_t config, HWC2::Attribute attribute,
+ int32_t *out_value) {
+ if (variable_config_map_.find(config) == variable_config_map_.end()) {
+ DLOGE("Get variable config failed");
+ return HWC2::Error::BadDisplay;
+ }
+
+ DisplayConfigVariableInfo variable_config = variable_config_map_.at(config);
+ switch (attribute) {
+ case HWC2::Attribute::VsyncPeriod:
+ *out_value = INT32(variable_config.vsync_period_ns);
+ break;
+ case HWC2::Attribute::Width:
+ *out_value = INT32(variable_config.x_pixels);
+ break;
+ case HWC2::Attribute::Height:
+ *out_value = INT32(variable_config.y_pixels);
+ break;
+ case HWC2::Attribute::DpiX:
+ *out_value = INT32(variable_config.x_dpi * 1000.0f);
+ break;
+ case HWC2::Attribute::DpiY:
+ *out_value = INT32(variable_config.y_dpi * 1000.0f);
+ break;
+ case HWC2::Attribute::ConfigGroup:
+ *out_value = GetDisplayConfigGroupId(variable_config);
+ break;
+ default:
+ DLOGW("Spurious attribute type = %s", to_string(attribute).c_str());
+ *out_value = -1;
+ return HWC2::Error::BadConfig;
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetDisplayName(uint32_t *out_size, char *out_name) {
+ // TODO(user): Get panel name and EDID name and populate it here
+ if (out_size == nullptr) {
+ return HWC2::Error::BadParameter;
+ }
+
+ std::string name;
+ switch (type_) {
+ case kBuiltIn:
+ name = "Built-in Display";
+ break;
+ case kPluggable:
+ name = "Pluggable Display";
+ break;
+ case kVirtual:
+ name = "Virtual Display";
+ break;
+ default:
+ name = "Unknown";
+ break;
+ }
+
+ if (out_name == nullptr) {
+ *out_size = UINT32(name.size()) + 1;
+ } else {
+ *out_size = std::min((UINT32(name.size()) + 1), *out_size);
+ if (*out_size > 0) {
+ strlcpy(out_name, name.c_str(), *out_size);
+ out_name[*out_size - 1] = '\0';
+ } else {
+ DLOGW("Invalid size requested");
+ }
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetDisplayType(int32_t *out_type) {
+ if (out_type == nullptr) {
+ return HWC2::Error::BadParameter;
+ }
+
+ *out_type = HWC2_DISPLAY_TYPE_PHYSICAL;
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetPerFrameMetadataKeys(uint32_t *out_num_keys,
+ PerFrameMetadataKey *out_keys) {
+ if (out_num_keys == nullptr) {
+ return HWC2::Error::BadParameter;
+ }
+ const uint32_t num_keys = UINT32(PerFrameMetadataKey::HDR10_PLUS_SEI) + 1;
+ if (out_keys == nullptr) {
+ *out_num_keys = num_keys;
+ } else {
+ uint32_t max_out_key_elements = std::min(*out_num_keys, num_keys);
+ for (int32_t i = 0; i < max_out_key_elements; i++) {
+ out_keys[i] = static_cast<PerFrameMetadataKey>(i);
+ }
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetActiveConfig(hwc2_config_t *out_config) {
+ if (out_config == nullptr) {
+ return HWC2::Error::BadDisplay;
+ }
+
+ if (pending_config_) {
+ *out_config = pending_config_index_;
+ } else {
+ GetActiveDisplayConfig(out_config);
+ }
+
+ if (*out_config < hwc_config_map_.size()) {
+ *out_config = hwc_config_map_.at(*out_config);
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::SetClientTarget(buffer_handle_t target, int32_t acquire_fence,
+ int32_t dataspace, hwc_region_t damage) {
+ // TODO(user): SurfaceFlinger gives us a null pointer here when doing full SDE composition
+ // The error is problematic for layer caching as it would overwrite our cached client target.
+ // Reported bug 28569722 to resolve this.
+ // For now, continue to use the last valid buffer reported to us for layer caching.
+ if (target == nullptr) {
+ return HWC2::Error::None;
+ }
+
+ if (acquire_fence == 0) {
+ DLOGV_IF(kTagClient, "Re-using cached buffer");
+ }
+
+ Layer *sdm_layer = client_target_->GetSDMLayer();
+ sdm_layer->frame_rate = std::min(current_refresh_rate_, HWCDisplay::GetThrottlingRefreshRate());
+ client_target_->SetLayerSurfaceDamage(damage);
+ int translated_dataspace = TranslateFromLegacyDataspace(dataspace);
+ if (client_target_->GetLayerDataspace() != translated_dataspace) {
+ DLOGW("New Dataspace = %d not matching Dataspace from color mode = %d",
+ translated_dataspace, client_target_->GetLayerDataspace());
+ return HWC2::Error::BadParameter;
+ }
+ client_target_->SetLayerBuffer(target, acquire_fence);
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::SetActiveConfig(hwc2_config_t config) {
+ DTRACE_SCOPED();
+ hwc2_config_t current_config = 0;
+ GetActiveConfig(¤t_config);
+ if (current_config == config) {
+ return HWC2::Error::None;
+ }
+
+ // Store config index to be applied upon refresh.
+ pending_config_ = true;
+ pending_config_index_ = config;
+
+ validated_ = false;
+ geometry_changes_ |= kConfigChanged;
+
+ // Trigger refresh. This config gets applied on next commit.
+ callbacks_->Refresh(id_);
+
+ return HWC2::Error::None;
+}
+
+DisplayError HWCDisplay::SetMixerResolution(uint32_t width, uint32_t height) {
+ return kErrorNotSupported;
+}
+
+HWC2::Error HWCDisplay::SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type,
+ int32_t format, bool post_processed) {
+ dump_frame_count_ = count;
+ dump_frame_index_ = 0;
+ dump_input_layers_ = ((bit_mask_layer_type & (1 << INPUT_LAYER_DUMP)) != 0);
+
+ if (tone_mapper_) {
+ tone_mapper_->SetFrameDumpConfig(count);
+ }
+
+ DLOGI("num_frame_dump %d, input_layer_dump_enable %d", dump_frame_count_, dump_input_layers_);
+ validated_ = false;
+ return HWC2::Error::None;
+}
+
+HWC2::PowerMode HWCDisplay::GetCurrentPowerMode() {
+ return current_power_mode_;
+}
+
+DisplayError HWCDisplay::VSync(const DisplayEventVSync &vsync) {
+ if (callbacks_->Vsync_2_4CallbackRegistered()) {
+ hwc2_vsync_period_t vsync_period;
+ if (GetDisplayVsyncPeriod(&vsync_period) != HWC2::Error::None) {
+ vsync_period = 0;
+ }
+ ATRACE_INT("VsyncPeriod", INT32(vsync_period));
+ callbacks_->Vsync_2_4(id_, vsync.timestamp, vsync_period);
+ } else {
+ callbacks_->Vsync(id_, vsync.timestamp);
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWCDisplay::Refresh() {
+ return kErrorNotSupported;
+}
+
+DisplayError HWCDisplay::CECMessage(char *message) {
+ if (qservice_) {
+ qservice_->onCECMessageReceived(message, 0);
+ } else {
+ DLOGW("Qservice instance not available.");
+ }
+
+ return kErrorNone;
+}
+
+DisplayError HWCDisplay::HandleEvent(DisplayEvent event) {
+ switch (event) {
+ case kIdleTimeout: {
+ SCOPE_LOCK(HWCSession::locker_[id_]);
+ if (pending_commit_) {
+ // If idle timeout event comes in between prepare
+ // and commit, drop it since device is not really
+ // idle.
+ return kErrorNotSupported;
+ }
+ validated_ = false;
+ break;
+ }
+ case kThermalEvent:
+ case kIdlePowerCollapse: {
+ SEQUENCE_WAIT_SCOPE_LOCK(HWCSession::locker_[id_]);
+ validated_ = false;
+ } break;
+ case kPanelDeadEvent:
+ case kDisplayPowerResetEvent: {
+ validated_ = false;
+ if (event_handler_) {
+ event_handler_->DisplayPowerReset();
+ } else {
+ DLOGW("Cannot execute DisplayPowerReset (client_id = %d), event_handler_ is nullptr",
+ id_);
+ }
+ } break;
+ case kInvalidateDisplay:
+ validated_ = false;
+ break;
+ default:
+ DLOGW("Unknown event: %d", event);
+ break;
+ }
+
+ return kErrorNone;
+}
+
+HWC2::Error HWCDisplay::PrepareLayerStack(uint32_t *out_num_types, uint32_t *out_num_requests) {
+ layer_changes_.clear();
+ layer_requests_.clear();
+ has_client_composition_ = false;
+ has_force_client_composition_ = false;
+
+ DTRACE_SCOPED();
+ if (shutdown_pending_) {
+ validated_ = false;
+ return HWC2::Error::BadDisplay;
+ }
+
+ if (CanSkipSdmPrepare(out_num_types, out_num_requests)) {
+ return ((*out_num_types > 0) ? HWC2::Error::HasChanges : HWC2::Error::None);
+ }
+
+ UpdateRefreshRate();
+ UpdateActiveConfig();
+ DisplayError error = display_intf_->Prepare(&layer_stack_);
+ if (error != kErrorNone) {
+ if (error == kErrorShutDown) {
+ shutdown_pending_ = true;
+ } else if (error == kErrorPermission) {
+ WaitOnPreviousFence();
+ MarkLayersForGPUBypass();
+ geometry_changes_on_doze_suspend_ |= geometry_changes_;
+ } else {
+ DLOGE("Prepare failed. Error = %d", error);
+ // To prevent surfaceflinger infinite wait, flush the previous frame during Commit()
+ // so that previous buffer and fences are released, and override the error.
+ flush_ = true;
+ validated_ = false;
+ // Prepare cycle can fail on a newly connected display if insufficient pipes
+ // are available at this moment. Trigger refresh so that the other displays
+ // can free up pipes and a valid content can be attached to virtual display.
+ callbacks_->Refresh(id_);
+ return HWC2::Error::BadDisplay;
+ }
+ } else {
+ // clear geometry_changes_on_doze_suspend_ on successful prepare.
+ geometry_changes_on_doze_suspend_ = GeometryChanges::kNone;
+ }
+
+ for (auto hwc_layer : layer_set_) {
+ Layer *layer = hwc_layer->GetSDMLayer();
+ LayerComposition &composition = layer->composition;
+
+ if ((composition == kCompositionSDE) || (composition == kCompositionHybrid) ||
+ (composition == kCompositionBlit)) {
+ layer_requests_[hwc_layer->GetId()] = HWC2::LayerRequest::ClearClientTarget;
+ }
+
+ HWC2::Composition requested_composition = hwc_layer->GetClientRequestedCompositionType();
+ // Set SDM composition to HWC2 type in HWCLayer
+ hwc_layer->SetComposition(composition);
+ HWC2::Composition device_composition = hwc_layer->GetDeviceSelectedCompositionType();
+ if (device_composition == HWC2::Composition::Client) {
+ has_client_composition_ = true;
+ }
+
+ if (requested_composition == HWC2::Composition::Client) {
+ has_force_client_composition_ = true;
+ }
+
+ // Update the changes list only if the requested composition is different from SDM comp type
+ // TODO(user): Take Care of other comptypes(BLIT)
+ if (requested_composition != device_composition) {
+ layer_changes_[hwc_layer->GetId()] = device_composition;
+ }
+ hwc_layer->ResetValidation();
+ }
+
+ if ((has_client_composition_) && (!has_force_client_composition_)) {
+ DLOGI_IF(kTagDisplay, "HWC marked skip layer present");
+ }
+
+ client_target_->ResetValidation();
+ *out_num_types = UINT32(layer_changes_.size());
+ *out_num_requests = UINT32(layer_requests_.size());
+ validate_state_ = kNormalValidate;
+ validated_ = true;
+ layer_stack_invalid_ = false;
+
+ return ((*out_num_types > 0) ? HWC2::Error::HasChanges : HWC2::Error::None);
+}
+
+HWC2::Error HWCDisplay::AcceptDisplayChanges() {
+ if (layer_set_.empty()) {
+ return HWC2::Error::None;
+ }
+
+ if (!validated_) {
+ return HWC2::Error::NotValidated;
+ }
+
+ for (const auto& change : layer_changes_) {
+ auto hwc_layer = layer_map_[change.first];
+ auto composition = change.second;
+ if (hwc_layer != nullptr) {
+ hwc_layer->UpdateClientCompositionType(composition);
+ } else {
+ DLOGW("Invalid layer: %" PRIu64, change.first);
+ }
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetChangedCompositionTypes(uint32_t *out_num_elements,
+ hwc2_layer_t *out_layers, int32_t *out_types) {
+ if (layer_set_.empty()) {
+ return HWC2::Error::None;
+ }
+
+ if (!validated_) {
+ DLOGW("Display is not validated");
+ return HWC2::Error::NotValidated;
+ }
+
+ *out_num_elements = UINT32(layer_changes_.size());
+ if (out_layers != nullptr && out_types != nullptr) {
+ int i = 0;
+ for (auto change : layer_changes_) {
+ out_layers[i] = change.first;
+ out_types[i] = INT32(change.second);
+ i++;
+ }
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetReleaseFences(uint32_t *out_num_elements, hwc2_layer_t *out_layers,
+ int32_t *out_fences) {
+ if (out_num_elements == nullptr) {
+ return HWC2::Error::BadParameter;
+ }
+
+ if (out_layers != nullptr && out_fences != nullptr) {
+ *out_num_elements = std::min(*out_num_elements, UINT32(layer_set_.size()));
+ auto it = layer_set_.begin();
+ for (uint32_t i = 0; i < *out_num_elements; i++, it++) {
+ auto hwc_layer = *it;
+ out_layers[i] = hwc_layer->GetId();
+ out_fences[i] = hwc_layer->PopFrontReleaseFence();
+ }
+ } else {
+ *out_num_elements = UINT32(layer_set_.size());
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetDisplayRequests(int32_t *out_display_requests,
+ uint32_t *out_num_elements, hwc2_layer_t *out_layers,
+ int32_t *out_layer_requests) {
+ if (layer_set_.empty()) {
+ return HWC2::Error::None;
+ }
+
+ if (out_display_requests == nullptr || out_num_elements == nullptr) {
+ return HWC2::Error::BadParameter;
+ }
+
+ // No display requests for now
+ // Use for sharing blit buffers and
+ // writing wfd buffer directly to output if there is full GPU composition
+ // and no color conversion needed
+ if (!validated_) {
+ DLOGW("Display is not validated");
+ return HWC2::Error::NotValidated;
+ }
+
+ *out_display_requests = 0;
+ if (out_layers != nullptr && out_layer_requests != nullptr) {
+ *out_num_elements = std::min(*out_num_elements, UINT32(layer_requests_.size()));
+ auto it = layer_requests_.begin();
+ for (uint32_t i = 0; i < *out_num_elements; i++, it++) {
+ out_layers[i] = it->first;
+ out_layer_requests[i] = INT32(it->second);
+ }
+ } else {
+ *out_num_elements = UINT32(layer_requests_.size());
+ }
+
+ auto client_target_layer = client_target_->GetSDMLayer();
+ if (client_target_layer->request.flags.flip_buffer) {
+ *out_display_requests = INT32(HWC2::DisplayRequest::FlipClientTarget);
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::GetHdrCapabilities(uint32_t *out_num_types, int32_t *out_types,
+ float *out_max_luminance,
+ float *out_max_average_luminance,
+ float *out_min_luminance) {
+ if (out_num_types == nullptr || out_max_luminance == nullptr ||
+ out_max_average_luminance == nullptr || out_min_luminance == nullptr) {
+ return HWC2::Error::BadParameter;
+ }
+
+ DisplayConfigFixedInfo fixed_info = {};
+ display_intf_->GetConfig(&fixed_info);
+
+ if (!fixed_info.hdr_supported) {
+ *out_num_types = 0;
+ DLOGI("HDR is not supported");
+ return HWC2::Error::None;
+ }
+
+ if (out_types == nullptr) {
+ // We support HDR10, HLG and HDR10_PLUS.
+ *out_num_types = 3;
+ } else {
+ // HDR10, HLG and HDR10_PLUS are supported.
+ out_types[0] = HAL_HDR_HDR10;
+ out_types[1] = HAL_HDR_HLG;
+ out_types[2] = HAL_HDR_HDR10_PLUS;
+ *out_max_luminance = fixed_info.max_luminance;
+ *out_max_average_luminance = fixed_info.average_luminance;
+ *out_min_luminance = fixed_info.min_luminance;
+ }
+
+ return HWC2::Error::None;
+}
+
+
+HWC2::Error HWCDisplay::CommitLayerStack(void) {
+ if (flush_) {
+ return HWC2::Error::None;
+ }
+
+ DTRACE_SCOPED();
+
+ if (!validated_) {
+ DLOGV_IF(kTagClient, "Display %d is not validated", id_);
+ return HWC2::Error::NotValidated;
+ }
+
+ if (shutdown_pending_ || layer_set_.empty()) {
+ return HWC2::Error::None;
+ }
+
+ if (skip_commit_) {
+ DLOGV_IF(kTagClient, "Skipping Refresh on display %d", id_);
+ return HWC2::Error::None;
+ }
+
+ DumpInputBuffers();
+
+ DisplayError error = kErrorUndefined;
+ int status = 0;
+ if (tone_mapper_) {
+ if (NeedsToneMap(layer_stack_)) {
+ status = tone_mapper_->HandleToneMap(&layer_stack_);
+ if (status != 0) {
+ DLOGE("Error handling HDR in ToneMapper");
+ }
+ } else {
+ tone_mapper_->Terminate();
+ }
+ }
+ error = display_intf_->Commit(&layer_stack_);
+
+ if (error == kErrorNone) {
+ // A commit is successfully submitted, start flushing on failure now onwards.
+ flush_on_error_ = true;
+ first_cycle_ = false;
+ } else {
+ if (error == kErrorShutDown) {
+ shutdown_pending_ = true;
+ return HWC2::Error::Unsupported;
+ } else if (error == kErrorNotValidated) {
+ validated_ = false;
+ return HWC2::Error::NotValidated;
+ } else if (error != kErrorPermission) {
+ DLOGE("Commit failed. Error = %d", error);
+ // To prevent surfaceflinger infinite wait, flush the previous frame during Commit()
+ // so that previous buffer and fences are released, and override the error.
+ flush_ = true;
+ }
+ }
+
+ validate_state_ = kSkipValidate;
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplay::PostCommitLayerStack(int32_t *out_retire_fence) {
+ auto status = HWC2::Error::None;
+
+ // Do no call flush on errors, if a successful buffer is never submitted.
+ if (flush_ && flush_on_error_) {
+ display_intf_->Flush(&layer_stack_);
+ validated_ = false;
+ }
+
+ if (tone_mapper_ && tone_mapper_->IsActive()) {
+ tone_mapper_->PostCommit(&layer_stack_);
+ }
+
+ // TODO(user): No way to set the client target release fence on SF
+ int32_t &client_target_release_fence =
+ client_target_->GetSDMLayer()->input_buffer.release_fence_fd;
+ if (client_target_release_fence >= 0) {
+ // Close cached release fence.
+ close(fbt_release_fence_);
+ fbt_release_fence_ = dup(client_target_release_fence);
+ // Close fence returned by driver.
+ close(client_target_release_fence);
+ client_target_release_fence = -1;
+ }
+ client_target_->ResetGeometryChanges();
+
+ for (auto hwc_layer : layer_set_) {
+ hwc_layer->ResetGeometryChanges();
+ Layer *layer = hwc_layer->GetSDMLayer();
+ LayerBuffer *layer_buffer = &layer->input_buffer;
+
+ if (!flush_) {
+ // If swapinterval property is set to 0 or for single buffer layers, do not update f/w
+ // release fences and discard fences from driver
+ if (swap_interval_zero_ || layer->flags.single_buffer) {
+ close(layer_buffer->release_fence_fd);
+ } else {
+ // It may so happen that layer gets marked to GPU & app layer gets queued
+ // to MDP for composition. In those scenarios, release fence of buffer should
+ // have mdp and gpu sync points merged.
+ hwc_layer->PushBackReleaseFence(layer_buffer->release_fence_fd);
+ }
+ } else {
+ // In case of flush or display paused, we don't return an error to f/w, so it will
+ // get a release fence out of the hwc_layer's release fence queue
+ // We should push a -1 to preserve release fence circulation semantics.
+ hwc_layer->PushBackReleaseFence(-1);
+ }
+
+ layer_buffer->release_fence_fd = -1;
+ if (layer_buffer->acquire_fence_fd >= 0) {
+ close(layer_buffer->acquire_fence_fd);
+ layer_buffer->acquire_fence_fd = -1;
+ }
+
+ layer->request.flags = {};
+ }
+
+ client_target_->GetSDMLayer()->request.flags = {};
+ *out_retire_fence = -1;
+ // if swapinterval property is set to 0 then close and reset the list retire fence
+ if (swap_interval_zero_) {
+ close(layer_stack_.retire_fence_fd);
+ layer_stack_.retire_fence_fd = -1;
+ }
+ *out_retire_fence = layer_stack_.retire_fence_fd;
+ layer_stack_.retire_fence_fd = -1;
+
+ if (dump_frame_count_) {
+ dump_frame_count_--;
+ dump_frame_index_++;
+ }
+
+ layer_stack_.flags.geometry_changed = false;
+ geometry_changes_ = GeometryChanges::kNone;
+ flush_ = false;
+ skip_commit_ = false;
+
+ return status;
+}
+
+void HWCDisplay::SetIdleTimeoutMs(uint32_t timeout_ms) {
+ return;
+}
+
+DisplayError HWCDisplay::SetMaxMixerStages(uint32_t max_mixer_stages) {
+ DisplayError error = kErrorNone;
+
+ if (display_intf_) {
+ error = display_intf_->SetMaxMixerStages(max_mixer_stages);
+ validated_ = false;
+ }
+
+ return error;
+}
+
+void HWCDisplay::DumpInputBuffers() {
+ char dir_path[PATH_MAX];
+ int status;
+
+ if (!dump_frame_count_ || flush_ || !dump_input_layers_) {
+ return;
+ }
+
+ DLOGI("dump_frame_count %d dump_input_layers %d", dump_frame_count_, dump_input_layers_);
+ snprintf(dir_path, sizeof(dir_path), "%s/frame_dump_disp_id_%02u_%s", HWCDebugHandler::DumpDir(),
+ UINT32(id_), GetDisplayString());
+
+ status = mkdir(dir_path, 777);
+ if ((status != 0) && errno != EEXIST) {
+ DLOGW("Failed to create %s directory errno = %d, desc = %s", dir_path, errno, strerror(errno));
+ return;
+ }
+
+ // Even if directory exists already, need to explicitly change the permission.
+ if (chmod(dir_path, 0777) != 0) {
+ DLOGW("Failed to change permissions on %s directory", dir_path);
+ return;
+ }
+
+ for (uint32_t i = 0; i < layer_stack_.layers.size(); i++) {
+ auto layer = layer_stack_.layers.at(i);
+ const private_handle_t *pvt_handle =
+ reinterpret_cast<const private_handle_t *>(layer->input_buffer.buffer_id);
+ auto acquire_fence_fd = layer->input_buffer.acquire_fence_fd;
+
+ if (acquire_fence_fd >= 0) {
+ int error = sync_wait(acquire_fence_fd, 1000);
+ if (error < 0) {
+ DLOGW("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ continue;
+ }
+ }
+
+ DLOGI("Dump layer[%d] of %d pvt_handle %x pvt_handle->base %x", i, layer_stack_.layers.size(),
+ pvt_handle, pvt_handle? pvt_handle->base : 0);
+
+ if (!pvt_handle) {
+ DLOGE("Buffer handle is null");
+ continue;
+ }
+
+ if (!pvt_handle->base) {
+ DisplayError error = buffer_allocator_->MapBuffer(pvt_handle, -1);
+ if (error != kErrorNone) {
+ DLOGE("Failed to map buffer, error = %d", error);
+ continue;
+ }
+ }
+
+ char dump_file_name[PATH_MAX];
+ size_t result = 0;
+
+ snprintf(dump_file_name, sizeof(dump_file_name), "%s/input_layer%d_%dx%d_%s_frame%d.raw",
+ dir_path, i, pvt_handle->width, pvt_handle->height,
+ qdutils::GetHALPixelFormatString(pvt_handle->format), dump_frame_index_);
+
+ FILE *fp = fopen(dump_file_name, "w+");
+ if (fp) {
+ result = fwrite(reinterpret_cast<void *>(pvt_handle->base), pvt_handle->size, 1, fp);
+ fclose(fp);
+ }
+
+ int release_fence = -1;
+ DisplayError error = buffer_allocator_->UnmapBuffer(pvt_handle, &release_fence);
+ if (error != kErrorNone) {
+ DLOGE("Failed to unmap buffer, error = %d", error);
+ continue;
+ }
+
+ DLOGI("Frame Dump %s: is %s", dump_file_name, result ? "Successful" : "Failed");
+ }
+}
+
+void HWCDisplay::DumpOutputBuffer(const BufferInfo &buffer_info, void *base, int fence) {
+ char dir_path[PATH_MAX];
+ int status;
+
+ snprintf(dir_path, sizeof(dir_path), "%s/frame_dump_disp_id_%02u_%s", HWCDebugHandler::DumpDir(),
+ UINT32(id_), GetDisplayString());
+
+ status = mkdir(dir_path, 777);
+ if ((status != 0) && errno != EEXIST) {
+ DLOGW("Failed to create %s directory errno = %d, desc = %s", dir_path, errno, strerror(errno));
+ return;
+ }
+
+ // Even if directory exists already, need to explicitly change the permission.
+ if (chmod(dir_path, 0777) != 0) {
+ DLOGW("Failed to change permissions on %s directory", dir_path);
+ return;
+ }
+
+ if (base) {
+ char dump_file_name[PATH_MAX];
+ size_t result = 0;
+
+ if (fence >= 0) {
+ int error = sync_wait(fence, 1000);
+ if (error < 0) {
+ DLOGW("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ return;
+ }
+ }
+
+ snprintf(dump_file_name, sizeof(dump_file_name), "%s/output_layer_%dx%d_%s_frame%d.raw",
+ dir_path, buffer_info.alloc_buffer_info.aligned_width,
+ buffer_info.alloc_buffer_info.aligned_height,
+ GetFormatString(buffer_info.buffer_config.format), dump_frame_index_);
+
+ FILE *fp = fopen(dump_file_name, "w+");
+ if (fp) {
+ result = fwrite(base, buffer_info.alloc_buffer_info.size, 1, fp);
+ fclose(fp);
+ }
+
+ DLOGI("Frame Dump of %s is %s", dump_file_name, result ? "Successful" : "Failed");
+ }
+}
+
+const char *HWCDisplay::GetDisplayString() {
+ switch (type_) {
+ case kBuiltIn:
+ return "builtin";
+ case kPluggable:
+ return "pluggable";
+ case kVirtual:
+ return "virtual";
+ default:
+ return "invalid";
+ }
+}
+
+int HWCDisplay::SetFrameBufferResolution(uint32_t x_pixels, uint32_t y_pixels) {
+ if (x_pixels <= 0 || y_pixels <= 0) {
+ DLOGW("Unsupported config: x_pixels=%d, y_pixels=%d", x_pixels, y_pixels);
+ return -EINVAL;
+ }
+
+ DisplayConfigVariableInfo fb_config;
+ DisplayError error = display_intf_->GetFrameBufferConfig(&fb_config);
+ if (error != kErrorNone) {
+ DLOGV("Get frame buffer config failed. Error = %d", error);
+ return -EINVAL;
+ }
+
+ fb_config.x_pixels = x_pixels;
+ fb_config.y_pixels = y_pixels;
+
+ error = display_intf_->SetFrameBufferConfig(fb_config);
+ if (error != kErrorNone) {
+ DLOGV("Set frame buffer config failed. Error = %d", error);
+ return -EINVAL;
+ }
+
+ // Create rects to represent the new source and destination crops
+ LayerRect crop = LayerRect(0, 0, FLOAT(x_pixels), FLOAT(y_pixels));
+ hwc_rect_t scaled_display_frame = {0, 0, INT(x_pixels), INT(y_pixels)};
+ ApplyScanAdjustment(&scaled_display_frame);
+ client_target_->SetLayerDisplayFrame(scaled_display_frame);
+ client_target_->ResetPerFrameData();
+
+ auto client_target_layer = client_target_->GetSDMLayer();
+ client_target_layer->src_rect = crop;
+
+ int aligned_width;
+ int aligned_height;
+ uint32_t usage = GRALLOC_USAGE_HW_FB;
+ int format = HAL_PIXEL_FORMAT_RGBA_8888;
+ int ubwc_disabled = 0;
+ int flags = 0;
+
+ // By default UBWC is enabled and below property is global enable/disable for all
+ // buffers allocated through gralloc , including framebuffer targets.
+ HWCDebugHandler::Get()->GetProperty(DISABLE_UBWC_PROP, &ubwc_disabled);
+ if (!ubwc_disabled) {
+ usage |= GRALLOC_USAGE_PRIVATE_ALLOC_UBWC;
+ flags |= private_handle_t::PRIV_FLAGS_UBWC_ALIGNED;
+ }
+
+ buffer_allocator_->GetAlignedWidthAndHeight(INT(x_pixels), INT(y_pixels), format, usage,
+ &aligned_width, &aligned_height);
+
+ // TODO(user): How does the dirty region get set on the client target? File bug on Google
+ client_target_layer->composition = kCompositionGPUTarget;
+ client_target_layer->input_buffer.format = HWCLayer::GetSDMFormat(format, flags);
+ client_target_layer->input_buffer.width = UINT32(aligned_width);
+ client_target_layer->input_buffer.height = UINT32(aligned_height);
+ client_target_layer->input_buffer.unaligned_width = x_pixels;
+ client_target_layer->input_buffer.unaligned_height = y_pixels;
+ client_target_layer->plane_alpha = 255;
+
+ DLOGI("New framebuffer resolution (%dx%d)", fb_config.x_pixels, fb_config.y_pixels);
+
+ return 0;
+}
+
+void HWCDisplay::GetFrameBufferResolution(uint32_t *x_pixels, uint32_t *y_pixels) {
+ DisplayConfigVariableInfo fb_config;
+ display_intf_->GetFrameBufferConfig(&fb_config);
+
+ *x_pixels = fb_config.x_pixels;
+ *y_pixels = fb_config.y_pixels;
+}
+
+DisplayError HWCDisplay::GetMixerResolution(uint32_t *x_pixels, uint32_t *y_pixels) {
+ return display_intf_->GetMixerResolution(x_pixels, y_pixels);
+}
+
+void HWCDisplay::GetPanelResolution(uint32_t *x_pixels, uint32_t *y_pixels) {
+ DisplayConfigVariableInfo display_config;
+ uint32_t active_index = 0;
+
+ display_intf_->GetActiveConfig(&active_index);
+ display_intf_->GetConfig(active_index, &display_config);
+
+ *x_pixels = display_config.x_pixels;
+ *y_pixels = display_config.y_pixels;
+}
+
+int HWCDisplay::SetDisplayStatus(DisplayStatus display_status) {
+ int status = 0;
+
+ switch (display_status) {
+ case kDisplayStatusResume:
+ display_paused_ = false;
+ status = INT32(SetPowerMode(HWC2::PowerMode::On, false /* teardown */));
+ break;
+ case kDisplayStatusOnline:
+ status = INT32(SetPowerMode(HWC2::PowerMode::On, false /* teardown */));
+ break;
+ case kDisplayStatusPause:
+ display_paused_ = true;
+ status = INT32(SetPowerMode(HWC2::PowerMode::Off, false /* teardown */));
+ break;
+ case kDisplayStatusOffline:
+ status = INT32(SetPowerMode(HWC2::PowerMode::Off, false /* teardown */));
+ break;
+ default:
+ DLOGW("Invalid display status %d", display_status);
+ return -EINVAL;
+ }
+
+ return status;
+}
+
+HWC2::Error HWCDisplay::SetCursorPosition(hwc2_layer_t layer, int x, int y) {
+ if (shutdown_pending_) {
+ return HWC2::Error::None;
+ }
+
+ if (!layer_stack_.flags.cursor_present) {
+ DLOGW("Cursor layer not present");
+ return HWC2::Error::BadLayer;
+ }
+
+ HWCLayer *hwc_layer = GetHWCLayer(layer);
+ if (hwc_layer == nullptr) {
+ return HWC2::Error::BadLayer;
+ }
+ if (hwc_layer->GetDeviceSelectedCompositionType() != HWC2::Composition::Cursor) {
+ return HWC2::Error::None;
+ }
+ if ((validate_state_ != kSkipValidate) && validated_) {
+ // the device is currently in the middle of the validate/present sequence,
+ // cannot set the Position(as per HWC2 spec)
+ return HWC2::Error::NotValidated;
+ }
+
+ DisplayState state;
+ if (display_intf_->GetDisplayState(&state) == kErrorNone) {
+ if (state != kStateOn) {
+ return HWC2::Error::None;
+ }
+ }
+
+ // TODO(user): HWC1.5 was not letting SetCursorPosition before validateDisplay,
+ // but HWC2.0 doesn't let setting cursor position after validate before present.
+ // Need to revisit.
+
+ auto error = display_intf_->SetCursorPosition(x, y);
+ if (error != kErrorNone) {
+ if (error == kErrorShutDown) {
+ shutdown_pending_ = true;
+ return HWC2::Error::None;
+ }
+
+ DLOGE("Failed for x = %d y = %d, Error = %d", x, y, error);
+ return HWC2::Error::BadDisplay;
+ }
+
+ return HWC2::Error::None;
+}
+
+int HWCDisplay::OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level) {
+ DisplayError error = display_intf_->OnMinHdcpEncryptionLevelChange(min_enc_level);
+ if (error != kErrorNone) {
+ DLOGE("Failed. Error = %d", error);
+ return -1;
+ }
+
+ validated_ = false;
+ return 0;
+}
+
+void HWCDisplay::MarkLayersForGPUBypass() {
+ for (auto hwc_layer : layer_set_) {
+ auto layer = hwc_layer->GetSDMLayer();
+ layer->composition = kCompositionSDE;
+ }
+ validated_ = true;
+}
+
+void HWCDisplay::MarkLayersForClientComposition() {
+ // ClientComposition - GPU comp, to acheive this, set skip flag so that
+ // SDM does not handle this layer and hwc_layer composition will be
+ // set correctly at the end of Prepare.
+ DLOGV_IF(kTagClient, "HWC Layers marked for GPU comp");
+ for (auto hwc_layer : layer_set_) {
+ Layer *layer = hwc_layer->GetSDMLayer();
+ layer->flags.skip = true;
+ }
+ layer_stack_.flags.skip_present = true;
+}
+
+void HWCDisplay::ApplyScanAdjustment(hwc_rect_t *display_frame) {
+}
+
+int HWCDisplay::ToggleScreenUpdates(bool enable) {
+ display_paused_ = enable ? false : true;
+ callbacks_->Refresh(id_);
+ validated_ = false;
+ return 0;
+}
+
+int HWCDisplay::ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload,
+ PPDisplayAPIPayload *out_payload,
+ PPPendingParams *pending_action) {
+ int ret = 0;
+
+ if (display_intf_)
+ ret = display_intf_->ColorSVCRequestRoute(in_payload, out_payload, pending_action);
+ else
+ ret = -EINVAL;
+
+ return ret;
+}
+
+void HWCDisplay::SolidFillPrepare() {
+ if (solid_fill_enable_) {
+ if (solid_fill_layer_ == NULL) {
+ // Create a dummy layer here
+ solid_fill_layer_ = new Layer();
+ }
+ uint32_t primary_width = 0, primary_height = 0;
+ GetMixerResolution(&primary_width, &primary_height);
+
+ LayerBuffer *layer_buffer = &solid_fill_layer_->input_buffer;
+ layer_buffer->width = primary_width;
+ layer_buffer->height = primary_height;
+ layer_buffer->unaligned_width = primary_width;
+ layer_buffer->unaligned_height = primary_height;
+ layer_buffer->acquire_fence_fd = -1;
+ layer_buffer->release_fence_fd = -1;
+
+ solid_fill_layer_->composition = kCompositionGPU;
+ solid_fill_layer_->src_rect = solid_fill_rect_;
+ solid_fill_layer_->dst_rect = solid_fill_rect_;
+
+ solid_fill_layer_->blending = kBlendingPremultiplied;
+ solid_fill_layer_->solid_fill_color = 0;
+ solid_fill_layer_->solid_fill_info.bit_depth = solid_fill_color_.bit_depth;
+ solid_fill_layer_->solid_fill_info.red = solid_fill_color_.red;
+ solid_fill_layer_->solid_fill_info.blue = solid_fill_color_.blue;
+ solid_fill_layer_->solid_fill_info.green = solid_fill_color_.green;
+ solid_fill_layer_->solid_fill_info.alpha = solid_fill_color_.alpha;
+ solid_fill_layer_->frame_rate = 60;
+ solid_fill_layer_->visible_regions.push_back(solid_fill_layer_->dst_rect);
+ solid_fill_layer_->flags.updating = 1;
+ solid_fill_layer_->flags.solid_fill = true;
+ } else {
+ // delete the dummy layer
+ delete solid_fill_layer_;
+ solid_fill_layer_ = NULL;
+ }
+
+ if (solid_fill_enable_ && solid_fill_layer_) {
+ BuildSolidFillStack();
+ MarkLayersForGPUBypass();
+ }
+
+ return;
+}
+
+void HWCDisplay::SolidFillCommit() {
+ if (solid_fill_enable_ && solid_fill_layer_) {
+ LayerBuffer *layer_buffer = &solid_fill_layer_->input_buffer;
+ if (layer_buffer->release_fence_fd > 0) {
+ close(layer_buffer->release_fence_fd);
+ layer_buffer->release_fence_fd = -1;
+ }
+ if (layer_stack_.retire_fence_fd > 0) {
+ close(layer_stack_.retire_fence_fd);
+ layer_stack_.retire_fence_fd = -1;
+ }
+ }
+}
+
+int HWCDisplay::GetVisibleDisplayRect(hwc_rect_t *visible_rect) {
+ if (!IsValid(display_rect_)) {
+ return -EINVAL;
+ }
+
+ visible_rect->left = INT(display_rect_.left);
+ visible_rect->top = INT(display_rect_.top);
+ visible_rect->right = INT(display_rect_.right);
+ visible_rect->bottom = INT(display_rect_.bottom);
+ DLOGI("Dpy = %d Visible Display Rect(%d %d %d %d)", visible_rect->left, visible_rect->top,
+ visible_rect->right, visible_rect->bottom);
+
+ return 0;
+}
+
+int HWCDisplay::HandleSecureSession(const std::bitset<kSecureMax> &secure_sessions,
+ bool *power_on_pending) {
+ if (!power_on_pending) {
+ return -EINVAL;
+ }
+
+ if (active_secure_sessions_[kSecureDisplay] != secure_sessions[kSecureDisplay]) {
+ if (secure_sessions[kSecureDisplay]) {
+ HWC2::Error error = SetPowerMode(HWC2::PowerMode::Off, true /* teardown */);
+ if (error != HWC2::Error::None) {
+ DLOGE("SetPowerMode failed. Error = %d", error);
+ }
+ } else {
+ *power_on_pending = true;
+ }
+
+ DLOGI("SecureDisplay state changed from %d to %d for display %d",
+ active_secure_sessions_.test(kSecureDisplay), secure_sessions.test(kSecureDisplay),
+ type_);
+ }
+ active_secure_sessions_ = secure_sessions;
+ return 0;
+}
+
+int HWCDisplay::GetActiveSecureSession(std::bitset<kSecureMax> *secure_sessions) {
+ if (!secure_sessions) {
+ return -1;
+ }
+ secure_sessions->reset();
+ for (auto hwc_layer : layer_set_) {
+ Layer *layer = hwc_layer->GetSDMLayer();
+ if (layer->input_buffer.flags.secure_camera) {
+ secure_sessions->set(kSecureCamera);
+ }
+ if (layer->input_buffer.flags.secure_display) {
+ secure_sessions->set(kSecureDisplay);
+ }
+ }
+ return 0;
+}
+
+int HWCDisplay::SetActiveDisplayConfig(uint32_t config) {
+ uint32_t current_config = 0;
+ display_intf_->GetActiveConfig(¤t_config);
+ if (config == current_config) {
+ return 0;
+ }
+
+ validated_ = false;
+ display_intf_->SetActiveConfig(config);
+
+ return 0;
+}
+
+int HWCDisplay::GetActiveDisplayConfig(uint32_t *config) {
+ return display_intf_->GetActiveConfig(config) == kErrorNone ? 0 : -1;
+}
+
+int HWCDisplay::GetDisplayConfigCount(uint32_t *count) {
+ return display_intf_->GetNumVariableInfoConfigs(count) == kErrorNone ? 0 : -1;
+}
+
+int HWCDisplay::GetDisplayAttributesForConfig(int config,
+ DisplayConfigVariableInfo *display_attributes) {
+ return display_intf_->GetConfig(UINT32(config), display_attributes) == kErrorNone ? 0 : -1;
+}
+
+uint32_t HWCDisplay::GetUpdatingLayersCount(void) {
+ uint32_t updating_count = 0;
+
+ for (uint i = 0; i < layer_stack_.layers.size(); i++) {
+ auto layer = layer_stack_.layers.at(i);
+ if (layer->flags.updating) {
+ updating_count++;
+ }
+ }
+
+ return updating_count;
+}
+
+bool HWCDisplay::IsLayerUpdating(HWCLayer *hwc_layer) {
+ auto layer = hwc_layer->GetSDMLayer();
+ // Layer should be considered updating if
+ // a) layer is in single buffer mode, or
+ // b) valid dirty_regions(android specific hint for updating status), or
+ // c) layer stack geometry has changed (TODO(user): Remove when SDM accepts
+ // geometry_changed as bit fields).
+ return (layer->flags.single_buffer || hwc_layer->IsSurfaceUpdated() ||
+ geometry_changes_);
+}
+
+uint32_t HWCDisplay::SanitizeRefreshRate(uint32_t req_refresh_rate) {
+ uint32_t refresh_rate = req_refresh_rate;
+
+ if (refresh_rate < min_refresh_rate_) {
+ // Pick the next multiple of request which is within the range
+ refresh_rate =
+ (((min_refresh_rate_ / refresh_rate) + ((min_refresh_rate_ % refresh_rate) ? 1 : 0)) *
+ refresh_rate);
+ }
+
+ if (refresh_rate > max_refresh_rate_) {
+ refresh_rate = max_refresh_rate_;
+ }
+
+ return refresh_rate;
+}
+
+DisplayClass HWCDisplay::GetDisplayClass() {
+ return display_class_;
+}
+
+std::string HWCDisplay::Dump() {
+ std::ostringstream os;
+ os << "\n------------HWC----------------\n";
+ os << "HWC2 display_id: " << id_ << std::endl;
+ for (auto layer : layer_set_) {
+ auto sdm_layer = layer->GetSDMLayer();
+ auto transform = sdm_layer->transform;
+ os << "layer: " << std::setw(4) << layer->GetId();
+ os << " z: " << layer->GetZ();
+ os << " composition: " <<
+ to_string(layer->GetOrigClientRequestedCompositionType()).c_str();
+ os << "/" <<
+ to_string(layer->GetDeviceSelectedCompositionType()).c_str();
+ os << " alpha: " << std::to_string(sdm_layer->plane_alpha).c_str();
+ os << " format: " << std::setw(22) << GetFormatString(sdm_layer->input_buffer.format);
+ os << " dataspace:" << std::hex << "0x" << std::setw(8) << std::setfill('0')
+ << layer->GetLayerDataspace() << std::dec << std::setfill(' ');
+ os << " transform: " << transform.rotation << "/" << transform.flip_horizontal <<
+ "/"<< transform.flip_vertical;
+ os << " buffer_id: " << std::hex << "0x" << sdm_layer->input_buffer.buffer_id << std::dec
+ << std::endl;
+ }
+
+ if (has_client_composition_) {
+ os << "\n---------client target---------\n";
+ auto sdm_layer = client_target_->GetSDMLayer();
+ os << "format: " << std::setw(14) << GetFormatString(sdm_layer->input_buffer.format);
+ os << " dataspace:" << std::hex << "0x" << std::setw(8) << std::setfill('0')
+ << client_target_->GetLayerDataspace() << std::dec << std::setfill(' ');
+ os << " buffer_id: " << std::hex << "0x" << sdm_layer->input_buffer.buffer_id << std::dec
+ << std::endl;
+ }
+
+ if (layer_stack_invalid_) {
+ os << "\n Layers added or removed but not reflected to SDM's layer stack yet\n";
+ return os.str();
+ }
+
+ if (color_mode_) {
+ os << "\n----------Color Modes---------\n";
+ color_mode_->Dump(&os);
+ }
+
+ if (display_intf_) {
+ os << "\n------------SDM----------------\n";
+ os << display_intf_->Dump();
+ }
+
+ os << "\n";
+
+ return os.str();
+}
+
+bool HWCDisplay::CanSkipValidate() {
+ if (!validated_ || solid_fill_enable_) {
+ return false;
+ }
+
+ if ((tone_mapper_ && tone_mapper_->IsActive()) ||
+ layer_stack_.flags.single_buffered_layer_present) {
+ DLOGV_IF(kTagClient, "Tonemapping enabled or single buffer layer present = %d"
+ " Returning false.", layer_stack_.flags.single_buffered_layer_present);
+ return false;
+ }
+
+ if (client_target_->NeedsValidation()) {
+ DLOGV_IF(kTagClient, "Framebuffer target needs validation. Returning false.");
+ return false;
+ }
+
+ for (auto hwc_layer : layer_set_) {
+ Layer *layer = hwc_layer->GetSDMLayer();
+ if (hwc_layer->NeedsValidation()) {
+ DLOGV_IF(kTagClient, "hwc_layer[%d] needs validation. Returning false.",
+ hwc_layer->GetId());
+ return false;
+ }
+
+ // Do not allow Skip Validate, if any layer needs GPU Composition.
+ if (layer->composition == kCompositionGPU || layer->composition == kCompositionNone) {
+ DLOGV_IF(kTagClient, "hwc_layer[%d] is %s. Returning false.", hwc_layer->GetId(),
+ (layer->composition == kCompositionGPU) ? "GPU composed": "Dropped");
+ return false;
+ }
+ }
+
+ if (!layer_set_.empty() && !display_intf_->CanSkipValidate()) {
+ DLOGV_IF(kTagClient, "Display needs validation %d", id_);
+ return false;
+ }
+
+ return true;
+}
+
+HWC2::Error HWCDisplay::GetValidateDisplayOutput(uint32_t *out_num_types,
+ uint32_t *out_num_requests) {
+ *out_num_types = UINT32(layer_changes_.size());
+ *out_num_requests = UINT32(layer_requests_.size());
+
+ return ((*out_num_types > 0) ? HWC2::Error::HasChanges : HWC2::Error::None);
+}
+
+HWC2::Error HWCDisplay::GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data) {
+ DisplayError ret = display_intf_->GetDisplayIdentificationData(out_port, out_data_size, out_data);
+ if (ret != kErrorNone) {
+ DLOGE("Failed due to SDM/Driver (err = %d, disp id = %" PRIu64
+ " %d-%d", ret, id_, sdm_id_, type_);
+ }
+
+ return HWC2::Error::None;
+}
+
+bool HWCDisplay::IsDisplayCommandMode() {
+ return is_cmd_mode_;
+}
+
+// Skip SDM prepare if all the layers in the current draw cycle are marked as Skip and
+// previous draw cycle had GPU Composition, as the resources for GPU Target layer have
+// already been validated and configured to the driver.
+bool HWCDisplay::CanSkipSdmPrepare(uint32_t *num_types, uint32_t *num_requests) {
+ if (!validated_ || layer_set_.empty()) {
+ return false;
+ }
+
+ bool skip_prepare = true;
+ for (auto hwc_layer : layer_set_) {
+ if (!hwc_layer->GetSDMLayer()->flags.skip ||
+ (hwc_layer->GetDeviceSelectedCompositionType() != HWC2::Composition::Client)) {
+ skip_prepare = false;
+ layer_changes_.clear();
+ break;
+ }
+ if (hwc_layer->GetClientRequestedCompositionType() != HWC2::Composition::Client) {
+ layer_changes_[hwc_layer->GetId()] = HWC2::Composition::Client;
+ }
+ }
+
+ if (skip_prepare) {
+ *num_types = UINT32(layer_changes_.size());
+ *num_requests = 0;
+ layer_stack_invalid_ = false;
+ has_client_composition_ = true;
+ client_target_->ResetValidation();
+ validate_state_ = kNormalValidate;
+ }
+
+ return skip_prepare;
+}
+
+void HWCDisplay::UpdateRefreshRate() {
+ for (auto hwc_layer : layer_set_) {
+ if (hwc_layer->HasMetaDataRefreshRate()) {
+ continue;
+ }
+ auto layer = hwc_layer->GetSDMLayer();
+ layer->frame_rate = std::min(current_refresh_rate_, HWCDisplay::GetThrottlingRefreshRate());
+ }
+}
+
+int32_t HWCDisplay::SetClientTargetDataSpace(int32_t dataspace) {
+ if (client_target_->GetLayerDataspace() != dataspace) {
+ client_target_->SetLayerDataspace(dataspace);
+ Layer *sdm_layer = client_target_->GetSDMLayer();
+ // Data space would be validated at GetClientTargetSupport, so just use here.
+ sdm::GetSDMColorSpace(client_target_->GetLayerDataspace(),
+ &sdm_layer->input_buffer.color_metadata);
+ }
+
+ return 0;
+}
+
+void HWCDisplay::WaitOnPreviousFence() {
+ DisplayConfigFixedInfo display_config;
+ display_intf_->GetConfig(&display_config);
+ if (!display_config.is_cmdmode) {
+ return;
+ }
+
+ // Since prepare failed commit would follow the same.
+ // Wait for previous rel fence.
+ for (auto hwc_layer : layer_set_) {
+ auto fence = hwc_layer->PopBackReleaseFence();
+ if (fence >= 0) {
+ int error = sync_wait(fence, 1000);
+ if (error < 0) {
+ DLOGW("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ return;
+ }
+ }
+ hwc_layer->PushBackReleaseFence(fence);
+ }
+
+ if (fbt_release_fence_ >= 0) {
+ int error = sync_wait(fbt_release_fence_, 1000);
+ if (error < 0) {
+ DLOGW("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ return;
+ }
+ }
+}
+
+void HWCDisplay::GetLayerStack(HWCLayerStack *stack) {
+ stack->client_target = client_target_;
+ stack->layer_map = layer_map_;
+ stack->layer_set = layer_set_;
+}
+
+void HWCDisplay::SetLayerStack(HWCLayerStack *stack) {
+ client_target_ = stack->client_target;
+ layer_map_ = stack->layer_map;
+ layer_set_ = stack->layer_set;
+}
+void HWCDisplay::UpdateActiveConfig() {
+ if (!pending_config_) {
+ return;
+ }
+
+ DisplayError error = display_intf_->SetActiveConfig(pending_config_index_);
+ if (error != kErrorNone) {
+ DLOGI("Failed to set %d config", INT(pending_config_index_));
+ }
+
+ // Reset pending config.
+ pending_config_ = false;
+}
+
+int32_t HWCDisplay::GetDisplayConfigGroupId(const DisplayConfigGroupInfo &variable_config) {
+ for (auto &config : variable_config_map_) {
+ DisplayConfigGroupInfo const &group_info = config.second;
+ if (group_info == variable_config) {
+ return INT32(config.first);
+ }
+ }
+
+ return -1;
+}
+
+HWC2::Error HWCDisplay::GetDisplayVsyncPeriod(hwc2_vsync_period_t *vsync_period) {
+ if (GetTransientVsyncPeriod(vsync_period)) {
+ return HWC2::Error::None;
+ }
+
+ return GetVsyncPeriodByActiveConfig(vsync_period);
+}
+
+HWC2::Error HWCDisplay::SetActiveConfigWithConstraints(hwc2_config_t config,
+ hwc_vsync_period_change_constraints_t *vsync_period_change_constraints,
+ hwc_vsync_period_change_timeline_t *out_timeline) {
+ if (variable_config_map_.find(config) == variable_config_map_.end()) {
+ DLOGE("Invalid config: %d", config);
+ return HWC2::Error::BadConfig;
+ }
+
+ if (vsync_period_change_constraints->seamlessRequired && !AllowSeamless(config)) {
+ DLOGE("Seamless switch to the config: %d, is not allowed!", config);
+ return HWC2::Error::SeamlessNotAllowed;
+ }
+
+ hwc2_vsync_period_t vsync_period;
+ if (GetDisplayVsyncPeriod(&vsync_period) != HWC2::Error::None) {
+ return HWC2::Error::BadConfig;
+ }
+
+ std::tie(out_timeline->refreshTimeNanos, out_timeline->newVsyncAppliedTimeNanos) =
+ RequestActiveConfigChange(config, vsync_period,
+ vsync_period_change_constraints->desiredTimeNanos);
+
+ out_timeline->refreshRequired = true;
+ return HWC2::Error::None;
+}
+
+void HWCDisplay::ProcessActiveConfigChange() {
+ if (!IsActiveConfigReadyToSubmit(systemTime(SYSTEM_TIME_MONOTONIC))) {
+ return;
+ }
+
+ DTRACE_SCOPED();
+ hwc2_vsync_period_t vsync_period;
+ if (GetVsyncPeriodByActiveConfig(&vsync_period) == HWC2::Error::None) {
+ SubmitActiveConfigChange(vsync_period);
+ }
+}
+
+HWC2::Error HWCDisplay::GetVsyncPeriodByActiveConfig(hwc2_vsync_period_t *vsync_period) {
+ hwc2_config_t active_config;
+
+ auto error = GetActiveConfig(&active_config);
+ if (error != HWC2::Error::None) {
+ DLOGE("Failed to get active config!");
+ return error;
+ }
+
+ int32_t active_vsync_period;
+ error = GetDisplayAttribute(active_config, HWC2::Attribute::VsyncPeriod, &active_vsync_period);
+ if (error != HWC2::Error::None) {
+ DLOGE("Failed to get VsyncPeriod of config: %d", active_config);
+ return error;
+ }
+
+ *vsync_period = static_cast<hwc2_vsync_period_t>(active_vsync_period);
+ return HWC2::Error::None;
+}
+
+bool HWCDisplay::GetTransientVsyncPeriod(hwc2_vsync_period_t *vsync_period) {
+ std::lock_guard<std::mutex> lock(transient_refresh_rate_lock_);
+ auto now = systemTime(SYSTEM_TIME_MONOTONIC);
+
+ while (!transient_refresh_rate_info_.empty()) {
+ if (IsActiveConfigApplied(now, transient_refresh_rate_info_.front().vsync_applied_time)) {
+ transient_refresh_rate_info_.pop_front();
+ } else {
+ *vsync_period = transient_refresh_rate_info_.front().transient_vsync_period;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+std::tuple<int64_t, int64_t> HWCDisplay::RequestActiveConfigChange(
+ hwc2_config_t config, hwc2_vsync_period_t current_vsync_period, int64_t desired_time) {
+ int64_t refresh_time, applied_time;
+ std::tie(refresh_time, applied_time) =
+ EstimateVsyncPeriodChangeTimeline(current_vsync_period, desired_time);
+
+ pending_refresh_rate_config_ = config;
+ pending_refresh_rate_refresh_time_ = refresh_time;
+ pending_refresh_rate_applied_time_ = applied_time;
+
+ return std::make_tuple(refresh_time, applied_time);
+}
+
+std::tuple<int64_t, int64_t> HWCDisplay::EstimateVsyncPeriodChangeTimeline(
+ hwc2_vsync_period_t current_vsync_period, int64_t desired_time) {
+ const auto now = systemTime(SYSTEM_TIME_MONOTONIC);
+ const auto delta = desired_time - now;
+ const auto refresh_rate_activate_period = current_vsync_period * vsyncs_to_apply_rate_change_;
+ nsecs_t refresh_time;
+
+ if (delta < 0) {
+ refresh_time = now + (delta % current_vsync_period);
+ } else if (delta < refresh_rate_activate_period) {
+ refresh_time = now + (delta % current_vsync_period) - current_vsync_period;
+ } else {
+ refresh_time = desired_time - refresh_rate_activate_period;
+ }
+
+ const auto applied_time = refresh_time + refresh_rate_activate_period;
+ return std::make_tuple(refresh_time, applied_time);
+}
+
+void HWCDisplay::SubmitActiveConfigChange(hwc2_vsync_period_t current_vsync_period) {
+ HWC2::Error error = SubmitDisplayConfig(pending_refresh_rate_config_);
+ if (error != HWC2::Error::None) {
+ return;
+ }
+
+ std::lock_guard<std::mutex> lock(transient_refresh_rate_lock_);
+ hwc_vsync_period_change_timeline_t timeline;
+ std::tie(timeline.refreshTimeNanos, timeline.newVsyncAppliedTimeNanos) =
+ EstimateVsyncPeriodChangeTimeline(current_vsync_period, pending_refresh_rate_refresh_time_);
+
+ transient_refresh_rate_info_.push_back({current_vsync_period, timeline.newVsyncAppliedTimeNanos});
+ if (timeline.newVsyncAppliedTimeNanos != pending_refresh_rate_applied_time_) {
+ timeline.refreshRequired = false;
+ callbacks_->VsyncPeriodTimingChanged(id_, &timeline);
+ }
+
+ pending_refresh_rate_config_ = UINT_MAX;
+ pending_refresh_rate_refresh_time_ = INT64_MAX;
+ pending_refresh_rate_applied_time_ = INT64_MAX;
+}
+
+bool HWCDisplay::IsActiveConfigReadyToSubmit(int64_t time) {
+ return ((pending_refresh_rate_config_ != UINT_MAX) &&
+ IsTimeAfterOrEqualVsyncTime(time, pending_refresh_rate_refresh_time_));
+}
+
+bool HWCDisplay::IsActiveConfigApplied(int64_t time, int64_t vsync_applied_time) {
+ return IsTimeAfterOrEqualVsyncTime(time, vsync_applied_time);
+}
+
+bool HWCDisplay::IsSameGroup(hwc2_config_t config_id1, hwc2_config_t config_id2) {
+ const auto &variable_config1 = variable_config_map_.find(config_id1);
+ const auto &variable_config2 = variable_config_map_.find(config_id2);
+
+ if ((variable_config1 == variable_config_map_.end()) ||
+ (variable_config2 == variable_config_map_.end())) {
+ DLOGE("Invalid config: %u, %u", config_id1, config_id2);
+ return false;
+ }
+
+ const DisplayConfigGroupInfo &config_group1 = variable_config1->second;
+ const DisplayConfigGroupInfo &config_group2 = variable_config2->second;
+
+ return (config_group1 == config_group2);
+}
+
+bool HWCDisplay::AllowSeamless(hwc2_config_t config) {
+ hwc2_config_t active_config;
+ auto error = GetActiveConfig(&active_config);
+ if (error != HWC2::Error::None) {
+ DLOGE("Failed to get active config!");
+ return false;
+ }
+
+ return IsSameGroup(active_config, config);
+}
+
+HWC2::Error HWCDisplay::SubmitDisplayConfig(hwc2_config_t config) {
+ DTRACE_SCOPED();
+
+ hwc2_config_t current_config = 0;
+ GetActiveConfig(¤t_config);
+ if (current_config == config) {
+ return HWC2::Error::None;
+ }
+
+ DisplayError error = display_intf_->SetActiveConfig(config);
+ if (error != kErrorNone) {
+ DLOGE("Failed to set %d config! Error: %d", config, error);
+ return HWC2::Error::BadConfig;
+ }
+
+ validated_ = false;
+ DLOGI("Active configuration changed to: %d", config);
+
+ return HWC2::Error::None;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_display.h b/sdm/libs/hwc2/hwc_display.h
new file mode 100644
index 0000000..5c6bce9
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display.h
@@ -0,0 +1,508 @@
+/*
+ * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __HWC_DISPLAY_H__
+#define __HWC_DISPLAY_H__
+
+#include <QService.h>
+#include <android/hardware/graphics/common/1.1/types.h>
+#include <core/core_interface.h>
+#include <hardware/hwcomposer.h>
+#include <private/color_params.h>
+#include <qdMetaData.h>
+#include <sys/stat.h>
+#include <map>
+#include <queue>
+#include <set>
+#include <string>
+#include <utility>
+#include <vector>
+#include <bitset>
+#include <algorithm>
+#include "hwc_buffer_allocator.h"
+#include "hwc_callbacks.h"
+#include "hwc_layers.h"
+#include "display_null.h"
+#include "hwc_display_event_handler.h"
+
+using android::hardware::graphics::common::V1_1::ColorMode;
+using android::hardware::graphics::common::V1_1::Dataspace;
+using android::hardware::graphics::common::V1_1::RenderIntent;
+
+namespace sdm {
+
+class BlitEngine;
+class HWCToneMapper;
+
+// Subclasses set this to their type. This has to be different from DisplayType.
+// This is to avoid RTTI and dynamic_cast
+enum DisplayClass {
+ DISPLAY_CLASS_BUILTIN,
+ DISPLAY_CLASS_PLUGGABLE,
+ DISPLAY_CLASS_VIRTUAL,
+ DISPLAY_CLASS_NULL
+};
+
+enum SecureSessionType {
+ kSecureDisplay,
+ kSecureCamera,
+ kSecureMax,
+};
+
+struct TransientRefreshRateInfo {
+ uint32_t transient_vsync_period;
+ int64_t vsync_applied_time;
+};
+
+class HWCColorMode {
+ public:
+ explicit HWCColorMode(DisplayInterface *display_intf);
+ ~HWCColorMode() {}
+ HWC2::Error Init();
+ HWC2::Error DeInit();
+ void Dump(std::ostringstream* os);
+ uint32_t GetColorModeCount();
+ uint32_t GetRenderIntentCount(ColorMode mode);
+ HWC2::Error GetColorModes(uint32_t *out_num_modes, ColorMode *out_modes);
+ HWC2::Error GetRenderIntents(ColorMode mode, uint32_t *out_num_intents, RenderIntent *out_modes);
+ HWC2::Error SetColorModeWithRenderIntent(ColorMode mode, RenderIntent intent);
+ HWC2::Error SetColorModeById(int32_t color_mode_id);
+ HWC2::Error SetColorModeFromClientApi(std::string mode_string);
+ HWC2::Error SetColorTransform(const float *matrix, android_color_transform_t hint);
+ HWC2::Error RestoreColorTransform();
+ ColorMode GetCurrentColorMode() { return current_color_mode_; }
+ HWC2::Error ApplyCurrentColorModeWithRenderIntent(bool hdr_present);
+ HWC2::Error CacheColorModeWithRenderIntent(ColorMode mode, RenderIntent intent);
+ RenderIntent GetCurrentRenderIntent() { return current_render_intent_; }
+
+ private:
+ static const uint32_t kColorTransformMatrixCount = 16;
+ void PopulateColorModes();
+ template <class T>
+ void CopyColorTransformMatrix(const T *input_matrix, double *output_matrix) {
+ for (uint32_t i = 0; i < kColorTransformMatrixCount; i++) {
+ output_matrix[i] = static_cast<double>(input_matrix[i]);
+ }
+ }
+ HWC2::Error ValidateColorModeWithRenderIntent(ColorMode mode, RenderIntent intent);
+ HWC2::Error SetPreferredColorModeInternal(const std::string &mode_string, bool from_client,
+ ColorMode *color_mode, DynamicRangeType *dynamic_range);
+
+ DisplayInterface *display_intf_ = NULL;
+ bool apply_mode_ = false;
+ ColorMode current_color_mode_ = ColorMode::NATIVE;
+ RenderIntent current_render_intent_ = RenderIntent::COLORIMETRIC;
+ DynamicRangeType curr_dynamic_range_ = kSdrType;
+ typedef std::map<DynamicRangeType, std::string> DynamicRangeMap;
+ typedef std::map<RenderIntent, DynamicRangeMap> RenderIntentMap;
+ // Initialize supported mode/render intent/dynamic range combination
+ std::map<ColorMode, RenderIntentMap> color_mode_map_ = {};
+ double color_matrix_[kColorTransformMatrixCount] = { 1.0, 0.0, 0.0, 0.0, \
+ 0.0, 1.0, 0.0, 0.0, \
+ 0.0, 0.0, 1.0, 0.0, \
+ 0.0, 0.0, 0.0, 1.0 };
+ std::map<ColorMode, DynamicRangeMap> preferred_mode_ = {};
+};
+
+class HWCDisplay : public DisplayEventHandler {
+ public:
+ enum DisplayStatus {
+ kDisplayStatusInvalid = -1,
+ kDisplayStatusOffline,
+ kDisplayStatusOnline,
+ kDisplayStatusPause,
+ kDisplayStatusResume,
+ };
+
+ enum DisplayValidateState {
+ kNormalValidate,
+ kInternalValidate,
+ kSkipValidate,
+ };
+
+ struct HWCLayerStack {
+ HWCLayer *client_target = nullptr; // Also known as framebuffer target
+ std::map<hwc2_layer_t, HWCLayer *> layer_map; // Look up by Id - TODO
+ std::multiset<HWCLayer *, SortLayersByZ> layer_set; // Maintain a set sorted by Z
+ };
+
+ virtual ~HWCDisplay() {}
+ virtual int Init();
+ virtual int Deinit();
+
+ // Framebuffer configurations
+ virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
+ virtual HWC2::Error SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type,
+ int32_t format, bool post_processed);
+ virtual DisplayError SetMaxMixerStages(uint32_t max_mixer_stages);
+ virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending) {
+ return kErrorNotSupported;
+ }
+ virtual HWC2::PowerMode GetCurrentPowerMode();
+ virtual int SetFrameBufferResolution(uint32_t x_pixels, uint32_t y_pixels);
+ virtual void GetFrameBufferResolution(uint32_t *x_pixels, uint32_t *y_pixels);
+ virtual int SetDisplayStatus(DisplayStatus display_status);
+ virtual int OnMinHdcpEncryptionLevelChange(uint32_t min_enc_level);
+ virtual int Perform(uint32_t operation, ...);
+ virtual int HandleSecureSession(const std::bitset<kSecureMax> &secure_sessions,
+ bool *power_on_pending);
+ virtual int GetActiveSecureSession(std::bitset<kSecureMax> *secure_sessions);
+ virtual DisplayError SetMixerResolution(uint32_t width, uint32_t height);
+ virtual DisplayError GetMixerResolution(uint32_t *width, uint32_t *height);
+ virtual void GetPanelResolution(uint32_t *width, uint32_t *height);
+ virtual std::string Dump();
+ virtual DisplayError TeardownConcurrentWriteback(void) {
+ return kErrorNotSupported;
+ }
+
+ // Captures frame output in the buffer specified by output_buffer_info. The API is
+ // non-blocking and the client is expected to check operation status later on.
+ // Returns -1 if the input is invalid.
+ virtual int FrameCaptureAsync(const BufferInfo &output_buffer_info, bool post_processed) {
+ return -1;
+ }
+ // Returns the status of frame capture operation requested with FrameCaptureAsync().
+ // -EAGAIN : No status obtain yet, call API again after another frame.
+ // < 0 : Operation happened but failed.
+ // 0 : Success.
+ virtual int GetFrameCaptureStatus() { return -EAGAIN; }
+
+ virtual DisplayError SetDetailEnhancerConfig(const DisplayDetailEnhancerData &de_data) {
+ return kErrorNotSupported;
+ }
+ virtual HWC2::Error SetReadbackBuffer(const native_handle_t *buffer, int32_t acquire_fence,
+ bool post_processed_output) {
+ return HWC2::Error::Unsupported;
+ }
+ virtual HWC2::Error GetReadbackBufferFence(int32_t *release_fence) {
+ return HWC2::Error::Unsupported;
+ }
+
+ virtual HWC2::Error SetDisplayDppsAdROI(uint32_t h_start, uint32_t h_end,
+ uint32_t v_start, uint32_t v_end,
+ uint32_t factor_in, uint32_t factor_out) {
+ return HWC2::Error::Unsupported;
+ }
+
+ virtual bool IsSmartPanelConfig(uint32_t config_id) {
+ return false;
+ }
+
+ virtual bool HasSmartPanelConfig(void) {
+ return false;
+ }
+
+ // Display Configurations
+ static uint32_t GetThrottlingRefreshRate() { return HWCDisplay::throttling_refresh_rate_; }
+ static void SetThrottlingRefreshRate(uint32_t newRefreshRate)
+ { HWCDisplay::throttling_refresh_rate_ = newRefreshRate; }
+ virtual int SetActiveDisplayConfig(uint32_t config);
+ virtual int GetActiveDisplayConfig(uint32_t *config);
+ virtual int GetDisplayConfigCount(uint32_t *count);
+ virtual int GetDisplayAttributesForConfig(int config,
+ DisplayConfigVariableInfo *display_attributes);
+ virtual int SetState(bool connected) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError Flush() {
+ return kErrorNotSupported;
+ }
+
+ uint32_t GetMaxRefreshRate() { return max_refresh_rate_; }
+ int ToggleScreenUpdates(bool enable);
+ int ColorSVCRequestRoute(const PPDisplayAPIPayload &in_payload, PPDisplayAPIPayload *out_payload,
+ PPPendingParams *pending_action);
+ void SolidFillPrepare();
+ void SolidFillCommit();
+ DisplayClass GetDisplayClass();
+ int GetVisibleDisplayRect(hwc_rect_t *rect);
+ void BuildLayerStack(void);
+ void BuildSolidFillStack(void);
+ HWCLayer *GetHWCLayer(hwc2_layer_t layer_id);
+ void ResetValidation() { validated_ = false; }
+ uint32_t GetGeometryChanges() { return geometry_changes_; }
+ bool CanSkipValidate();
+ bool IsSkipValidateState() { return (validate_state_ == kSkipValidate); }
+ bool IsInternalValidateState() { return (validated_ && (validate_state_ == kInternalValidate)); }
+ void SetValidationState(DisplayValidateState state) { validate_state_ = state; }
+ ColorMode GetCurrentColorMode() {
+ return (color_mode_ ? color_mode_->GetCurrentColorMode() : ColorMode::SRGB);
+ }
+ RenderIntent GetCurrentRenderIntent() {
+ return (color_mode_ ? color_mode_->GetCurrentRenderIntent() : RenderIntent::COLORIMETRIC);
+ }
+ bool HasClientComposition() { return has_client_composition_; }
+ bool HasForceClientComposition() { return has_force_client_composition_; }
+ bool HWCClientNeedsValidate() {
+ return (has_client_composition_ || layer_stack_.flags.single_buffered_layer_present);
+ }
+ virtual void SetFastPathComposition(bool enable) { fast_path_composition_ = enable; }
+ virtual HWC2::Error SetColorModeFromClientApi(int32_t color_mode_id) {
+ return HWC2::Error::Unsupported;
+ }
+ bool IsFirstCommitDone() { return !first_cycle_; }
+ virtual void ProcessActiveConfigChange();
+
+ // HWC2 APIs
+ virtual HWC2::Error AcceptDisplayChanges(void);
+ virtual HWC2::Error GetActiveConfig(hwc2_config_t *out_config);
+ virtual HWC2::Error SetActiveConfig(hwc2_config_t config);
+ virtual HWC2::Error SetPanelLuminanceAttributes(float min_lum, float max_lum) {
+ return HWC2::Error::Unsupported;
+ }
+ virtual HWC2::Error SetClientTarget(buffer_handle_t target, int32_t acquire_fence,
+ int32_t dataspace, hwc_region_t damage);
+ virtual HWC2::Error SetColorMode(ColorMode mode) { return HWC2::Error::Unsupported; }
+ virtual HWC2::Error SetColorModeWithRenderIntent(ColorMode mode, RenderIntent intent) {
+ return HWC2::Error::Unsupported;
+ }
+ virtual HWC2::Error SetColorModeById(int32_t color_mode_id) {
+ return HWC2::Error::Unsupported;
+ }
+ virtual HWC2::Error RestoreColorTransform() {
+ return HWC2::Error::Unsupported;
+ }
+ virtual HWC2::Error SetColorTransform(const float *matrix, android_color_transform_t hint) {
+ return HWC2::Error::Unsupported;
+ }
+ virtual HWC2::Error HandleColorModeTransform(android_color_mode_t mode,
+ android_color_transform_t hint,
+ const double *matrix) {
+ return HWC2::Error::Unsupported;
+ }
+ virtual DisplayError SetDynamicDSIClock(uint64_t bitclk) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError GetDynamicDSIClock(uint64_t *bitclk) {
+ return kErrorNotSupported;
+ }
+ virtual DisplayError GetSupportedDSIClock(std::vector<uint64_t> *bitclk) {
+ return kErrorNotSupported;
+ }
+ virtual HWC2::Error UpdateDisplayId(hwc2_display_t id) {
+ return HWC2::Error::Unsupported;
+ }
+ virtual HWC2::Error SetPendingRefresh() {
+ return HWC2::Error::Unsupported;
+ }
+ virtual HWC2::Error SetPanelBrightness(float brightness) {
+ return HWC2::Error::Unsupported;
+ }
+ virtual HWC2::Error GetPanelBrightness(float *brightness) {
+ return HWC2::Error::Unsupported;
+ }
+ virtual HWC2::Error GetDisplayConfigs(uint32_t *out_num_configs, hwc2_config_t *out_configs);
+ virtual HWC2::Error GetDisplayAttribute(hwc2_config_t config, HWC2::Attribute attribute,
+ int32_t *out_value);
+ virtual HWC2::Error GetClientTargetSupport(uint32_t width, uint32_t height, int32_t format,
+ int32_t dataspace);
+ virtual HWC2::Error GetColorModes(uint32_t *outNumModes, ColorMode *outModes);
+ virtual HWC2::Error GetRenderIntents(ColorMode mode, uint32_t *out_num_intents,
+ RenderIntent *out_intents);
+ virtual HWC2::Error GetChangedCompositionTypes(uint32_t *out_num_elements,
+ hwc2_layer_t *out_layers, int32_t *out_types);
+ virtual HWC2::Error GetDisplayRequests(int32_t *out_display_requests, uint32_t *out_num_elements,
+ hwc2_layer_t *out_layers, int32_t *out_layer_requests);
+ virtual HWC2::Error GetDisplayName(uint32_t *out_size, char *out_name);
+ virtual HWC2::Error GetDisplayType(int32_t *out_type);
+ virtual HWC2::Error SetCursorPosition(hwc2_layer_t layer, int x, int y);
+ virtual HWC2::Error SetVsyncEnabled(HWC2::Vsync enabled);
+ virtual HWC2::Error SetPowerMode(HWC2::PowerMode mode, bool teardown);
+ virtual HWC2::Error UpdatePowerMode(HWC2::PowerMode mode) {
+ return HWC2::Error::None;
+ }
+ virtual HWC2::Error CreateLayer(hwc2_layer_t *out_layer_id);
+ virtual HWC2::Error DestroyLayer(hwc2_layer_t layer_id);
+ virtual HWC2::Error SetLayerZOrder(hwc2_layer_t layer_id, uint32_t z);
+ virtual HWC2::Error Validate(uint32_t *out_num_types, uint32_t *out_num_requests) = 0;
+ virtual HWC2::Error GetReleaseFences(uint32_t *out_num_elements, hwc2_layer_t *out_layers,
+ int32_t *out_fences);
+ virtual HWC2::Error Present(int32_t *out_retire_fence) = 0;
+ virtual HWC2::Error GetHdrCapabilities(uint32_t *out_num_types, int32_t* out_types,
+ float* out_max_luminance,
+ float* out_max_average_luminance,
+ float* out_min_luminance);
+ virtual HWC2::Error GetPerFrameMetadataKeys(uint32_t *out_num_keys,
+ PerFrameMetadataKey *out_keys);
+ virtual HWC2::Error SetDisplayAnimating(bool animating) {
+ animating_ = animating;
+ validated_ = false;
+ return HWC2::Error::None;
+ }
+ virtual HWC2::Error GetValidateDisplayOutput(uint32_t *out_num_types, uint32_t *out_num_requests);
+ virtual bool IsDisplayCommandMode();
+ virtual HWC2::Error SetQSyncMode(QSyncMode qsync_mode) {
+ return HWC2::Error::Unsupported;
+ }
+ virtual DisplayError ControlIdlePowerCollapse(bool enable, bool synchronous) {
+ return kErrorNone;
+ }
+ virtual HWC2::Error GetDisplayIdentificationData(uint8_t *out_port, uint32_t *out_data_size,
+ uint8_t *out_data);
+ virtual void GetLayerStack(HWCLayerStack *stack);
+ virtual void SetLayerStack(HWCLayerStack *stack);
+ virtual void PostPowerMode();
+ virtual void NotifyClientStatus(bool connected) { client_connected_ = connected; }
+ virtual HWC2::Error GetDisplayVsyncPeriod(hwc2_vsync_period_t *vsync_period);
+ virtual HWC2::Error SetActiveConfigWithConstraints(hwc2_config_t config,
+ hwc_vsync_period_change_constraints_t *vsync_period_change_constraints,
+ hwc_vsync_period_change_timeline_t *out_timeline);
+
+ protected:
+ static uint32_t throttling_refresh_rate_;
+ // Maximum number of layers supported by display manager.
+ static const uint32_t kMaxLayerCount = 32;
+ HWCDisplay(CoreInterface *core_intf, BufferAllocator *buffer_allocator, HWCCallbacks *callbacks,
+ HWCDisplayEventHandler *event_handler, qService::QService *qservice, DisplayType type,
+ hwc2_display_t id, int32_t sdm_id, bool needs_blit, DisplayClass display_class);
+
+ // DisplayEventHandler methods
+ virtual DisplayError VSync(const DisplayEventVSync &vsync);
+ virtual DisplayError Refresh();
+ virtual DisplayError CECMessage(char *message);
+ virtual DisplayError HandleEvent(DisplayEvent event);
+ virtual void DumpOutputBuffer(const BufferInfo &buffer_info, void *base, int fence);
+ virtual HWC2::Error PrepareLayerStack(uint32_t *out_num_types, uint32_t *out_num_requests);
+ virtual HWC2::Error CommitLayerStack(void);
+ virtual HWC2::Error PostCommitLayerStack(int32_t *out_retire_fence);
+ virtual DisplayError DisablePartialUpdateOneFrame() {
+ return kErrorNotSupported;
+ }
+ const char *GetDisplayString();
+ void MarkLayersForGPUBypass(void);
+ void MarkLayersForClientComposition(void);
+ void UpdateConfigs();
+ virtual void ApplyScanAdjustment(hwc_rect_t *display_frame);
+ uint32_t GetUpdatingLayersCount(void);
+ bool IsLayerUpdating(HWCLayer *layer);
+ uint32_t SanitizeRefreshRate(uint32_t req_refresh_rate);
+ virtual void GetUnderScanConfig() { }
+ int32_t SetClientTargetDataSpace(int32_t dataspace);
+ int32_t GetDisplayConfigGroupId(const DisplayConfigGroupInfo &variable_config);
+ HWC2::Error GetVsyncPeriodByActiveConfig(hwc2_vsync_period_t *vsync_period);
+ bool GetTransientVsyncPeriod(hwc2_vsync_period_t *vsync_period);
+ std::tuple<int64_t, int64_t> RequestActiveConfigChange(hwc2_config_t config,
+ hwc2_vsync_period_t current_vsync_period,
+ int64_t desired_time);
+ std::tuple<int64_t, int64_t> EstimateVsyncPeriodChangeTimeline(
+ hwc2_vsync_period_t current_vsync_period, int64_t desired_time);
+ void SubmitActiveConfigChange(hwc2_vsync_period_t current_vsync_period);
+ bool IsActiveConfigReadyToSubmit(int64_t time);
+ bool IsActiveConfigApplied(int64_t time, int64_t vsync_applied_time);
+ bool IsSameGroup(hwc2_config_t config_id1, hwc2_config_t config_id2);
+ bool AllowSeamless(hwc2_config_t request_config);
+ void SetVsyncsApplyRateChange(uint32_t vsyncs) { vsyncs_to_apply_rate_change_ = vsyncs; }
+ HWC2::Error SubmitDisplayConfig(hwc2_config_t config);
+
+ enum {
+ INPUT_LAYER_DUMP,
+ OUTPUT_LAYER_DUMP,
+ };
+
+ bool validated_ = false;
+ bool layer_stack_invalid_ = true;
+ CoreInterface *core_intf_ = nullptr;
+ HWCBufferAllocator *buffer_allocator_ = NULL;
+ HWCCallbacks *callbacks_ = nullptr;
+ HWCDisplayEventHandler *event_handler_ = nullptr;
+ DisplayType type_ = kDisplayTypeMax;
+ hwc2_display_t id_ = UINT64_MAX;
+ int32_t sdm_id_ = -1;
+ bool needs_blit_ = false;
+ DisplayInterface *display_intf_ = NULL;
+ LayerStack layer_stack_;
+ HWCLayer *client_target_ = nullptr; // Also known as framebuffer target
+ std::map<hwc2_layer_t, HWCLayer *> layer_map_; // Look up by Id - TODO
+ std::multiset<HWCLayer *, SortLayersByZ> layer_set_; // Maintain a set sorted by Z
+ std::map<hwc2_layer_t, HWC2::Composition> layer_changes_;
+ std::map<hwc2_layer_t, HWC2::LayerRequest> layer_requests_;
+ bool flush_on_error_ = false;
+ bool flush_ = false;
+ uint32_t dump_frame_count_ = 0;
+ uint32_t dump_frame_index_ = 0;
+ bool dump_input_layers_ = false;
+ HWC2::PowerMode current_power_mode_ = HWC2::PowerMode::Off;
+ bool swap_interval_zero_ = false;
+ bool display_paused_ = false;
+ uint32_t min_refresh_rate_ = 0;
+ uint32_t max_refresh_rate_ = 0;
+ uint32_t current_refresh_rate_ = 0;
+ bool use_metadata_refresh_rate_ = false;
+ uint32_t metadata_refresh_rate_ = 0;
+ uint32_t force_refresh_rate_ = 0;
+ bool boot_animation_completed_ = false;
+ bool shutdown_pending_ = false;
+ bool use_blit_comp_ = false;
+ std::bitset<kSecureMax> active_secure_sessions_ = 0;
+ bool solid_fill_enable_ = false;
+ Layer *solid_fill_layer_ = NULL;
+ LayerRect solid_fill_rect_ = {};
+ LayerSolidFill solid_fill_color_ = {};
+ LayerRect display_rect_;
+ bool color_tranform_failed_ = false;
+ HWCColorMode *color_mode_ = NULL;
+ HWCToneMapper *tone_mapper_ = nullptr;
+ uint32_t num_configs_ = 0;
+ int disable_hdr_handling_ = 0; // disables HDR handling.
+ bool pending_commit_ = false;
+ bool is_cmd_mode_ = false;
+ bool partial_update_enabled_ = false;
+ bool skip_commit_ = false;
+ std::map<uint32_t, DisplayConfigVariableInfo> variable_config_map_;
+ std::vector<uint32_t> hwc_config_map_;
+ bool fast_path_composition_ = false;
+ bool client_connected_ = true;
+ bool pending_config_ = false;
+ uint32_t vsyncs_to_apply_rate_change_ = 1;
+ hwc2_config_t pending_refresh_rate_config_ = UINT_MAX;
+ int64_t pending_refresh_rate_refresh_time_ = INT64_MAX;
+ int64_t pending_refresh_rate_applied_time_ = INT64_MAX;
+ std::deque<TransientRefreshRateInfo> transient_refresh_rate_info_;
+ std::mutex transient_refresh_rate_lock_;
+
+ private:
+ void DumpInputBuffers(void);
+ bool CanSkipSdmPrepare(uint32_t *num_types, uint32_t *num_requests);
+ void UpdateRefreshRate();
+ void WaitOnPreviousFence();
+ void UpdateActiveConfig();
+ qService::QService *qservice_ = NULL;
+ DisplayClass display_class_;
+ uint32_t geometry_changes_ = GeometryChanges::kNone;
+ uint32_t geometry_changes_on_doze_suspend_ = GeometryChanges::kNone;
+ bool animating_ = false;
+ int null_display_mode_ = 0;
+ bool has_client_composition_ = false;
+ bool has_force_client_composition_ = false;
+ DisplayValidateState validate_state_ = kNormalValidate;
+ bool fast_path_enabled_ = true;
+ bool first_cycle_ = true; // false if a display commit has succeeded on the device.
+ int fbt_release_fence_ = -1;
+ int release_fence_ = -1;
+ hwc2_config_t pending_config_index_ = 0;
+ int async_power_mode_ = 0;
+};
+
+inline int HWCDisplay::Perform(uint32_t operation, ...) {
+ return 0;
+}
+
+} // namespace sdm
+
+#endif // __HWC_DISPLAY_H__
diff --git a/sdm/libs/hwc2/hwc_display_builtin.cpp b/sdm/libs/hwc2/hwc_display_builtin.cpp
new file mode 100644
index 0000000..bbec3f7
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_builtin.cpp
@@ -0,0 +1,1076 @@
+/*
+* Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <cutils/properties.h>
+#include <sync/sync.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/utils.h>
+#include <stdarg.h>
+#include <sys/mman.h>
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "hwc_display_builtin.h"
+#include "hwc_debugger.h"
+#include "hwc_session.h"
+
+#define __CLASS__ "HWCDisplayBuiltIn"
+
+namespace sdm {
+
+DisplayError HWCDisplayBuiltIn::PMICInterface::Init() {
+ std::string str_lcd_bias("/sys/class/lcd_bias/secure_mode");
+ fd_lcd_bias_ = ::open(str_lcd_bias.c_str(), O_WRONLY);
+ if (fd_lcd_bias_ < 0) {
+ DLOGW("File '%s' could not be opened. errno = %d, desc = %s", str_lcd_bias.c_str(), errno,
+ strerror(errno));
+ return kErrorHardware;
+ }
+
+ std::string str_leds_wled("/sys/class/leds/wled/secure_mode");
+ fd_wled_ = ::open(str_leds_wled.c_str(), O_WRONLY);
+ if (fd_wled_ < 0) {
+ DLOGW("File '%s' could not be opened. errno = %d, desc = %s", str_leds_wled.c_str(), errno,
+ strerror(errno));
+ return kErrorHardware;
+ }
+
+ return kErrorNone;
+}
+
+void HWCDisplayBuiltIn::PMICInterface::Deinit() {
+ ::close(fd_lcd_bias_);
+ ::close(fd_wled_);
+}
+
+DisplayError HWCDisplayBuiltIn::PMICInterface::Notify(SecureEvent event) {
+ std::string str_event = (event == kSecureDisplayStart) ? std::to_string(1) : std::to_string(0);
+ ssize_t err = ::pwrite(fd_lcd_bias_, str_event.c_str(), str_event.length(), 0);
+ if (err <= 0) {
+ DLOGW("Write failed for lcd_bias, Error = %s", strerror(errno));
+ return kErrorHardware;
+ }
+
+ err = ::pwrite(fd_wled_, str_event.c_str(), str_event.length(), 0);
+ if (err <= 0) {
+ DLOGW("Write failed for wled, Error = %s", strerror(errno));
+ return kErrorHardware;
+ }
+
+ DLOGI("Successfully notifed about secure display %s to PMIC driver",
+ (event == kSecureDisplayStart) ? "start": "end");
+ return kErrorNone;
+}
+
+int HWCDisplayBuiltIn::Create(CoreInterface *core_intf, BufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id, int32_t sdm_id,
+ HWCDisplay **hwc_display) {
+ int status = 0;
+ uint32_t builtin_width = 0;
+ uint32_t builtin_height = 0;
+
+ HWCDisplay *hwc_display_builtin =
+ new HWCDisplayBuiltIn(core_intf, buffer_allocator, callbacks, event_handler, qservice, id,
+ sdm_id);
+ status = hwc_display_builtin->Init();
+ if (status) {
+ delete hwc_display_builtin;
+ return status;
+ }
+
+ hwc_display_builtin->GetMixerResolution(&builtin_width, &builtin_height);
+ int width = 0, height = 0;
+ HWCDebugHandler::Get()->GetProperty(FB_WIDTH_PROP, &width);
+ HWCDebugHandler::Get()->GetProperty(FB_HEIGHT_PROP, &height);
+ if (width > 0 && height > 0) {
+ builtin_width = UINT32(width);
+ builtin_height = UINT32(height);
+ }
+
+ status = hwc_display_builtin->SetFrameBufferResolution(builtin_width, builtin_height);
+ if (status) {
+ Destroy(hwc_display_builtin);
+ return status;
+ }
+
+ *hwc_display = hwc_display_builtin;
+
+ return status;
+}
+
+void HWCDisplayBuiltIn::Destroy(HWCDisplay *hwc_display) {
+ hwc_display->Deinit();
+ delete hwc_display;
+}
+
+HWCDisplayBuiltIn::HWCDisplayBuiltIn(CoreInterface *core_intf, BufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id,
+ int32_t sdm_id)
+ : HWCDisplay(core_intf, buffer_allocator, callbacks, event_handler, qservice, kBuiltIn, id,
+ sdm_id, true, DISPLAY_CLASS_BUILTIN),
+ buffer_allocator_(buffer_allocator),
+ cpu_hint_(NULL) {
+}
+
+int HWCDisplayBuiltIn::Init() {
+ cpu_hint_ = new CPUHint();
+ if (cpu_hint_->Init(static_cast<HWCDebugHandler *>(HWCDebugHandler::Get())) != kErrorNone) {
+ delete cpu_hint_;
+ cpu_hint_ = NULL;
+ }
+
+ use_metadata_refresh_rate_ = true;
+ int disable_metadata_dynfps = 0;
+ HWCDebugHandler::Get()->GetProperty(DISABLE_METADATA_DYNAMIC_FPS_PROP, &disable_metadata_dynfps);
+ if (disable_metadata_dynfps) {
+ use_metadata_refresh_rate_ = false;
+ }
+
+ int status = HWCDisplay::Init();
+ if (status) {
+ return status;
+ }
+ color_mode_ = new HWCColorMode(display_intf_);
+ color_mode_->Init();
+ HWCDebugHandler::Get()->GetProperty(ENABLE_DEFAULT_COLOR_MODE,
+ &default_mode_status_);
+
+ int value = 0;
+ HWCDebugHandler::Get()->GetProperty(ENABLE_OPTIMIZE_REFRESH, &value);
+ enable_optimize_refresh_ = (value == 1);
+ if (enable_optimize_refresh_) {
+ DLOGI("Drop redundant drawcycles %d", id_);
+ }
+
+ value = 0;
+ HWCDebugHandler::Get()->GetProperty(ENABLE_POMS_DURING_DOZE, &value);
+ enable_poms_during_doze_ = (value == 1);
+ if (enable_poms_during_doze_) {
+ DLOGI("Enable POMS during Doze mode %" PRIu64 , id_);
+ }
+
+ int vsyncs = 0;
+ HWCDebugHandler::Get()->GetProperty(DEFER_FPS_FRAME_COUNT, &vsyncs);
+ if (vsyncs > 0) {
+ SetVsyncsApplyRateChange(UINT32(vsyncs));
+ }
+
+ pmic_intf_ = new PMICInterface();
+ pmic_intf_->Init();
+
+ return status;
+}
+
+int HWCDisplayBuiltIn::Deinit() {
+ int status = HWCDisplay::Deinit();
+ if (status) {
+ return status;
+ }
+ pmic_intf_->Deinit();
+ delete pmic_intf_;
+
+ return 0;
+}
+
+HWC2::Error HWCDisplayBuiltIn::Validate(uint32_t *out_num_types, uint32_t *out_num_requests) {
+ auto status = HWC2::Error::None;
+ DisplayError error = kErrorNone;
+
+ DTRACE_SCOPED();
+ if (display_paused_) {
+ MarkLayersForGPUBypass();
+ return status;
+ }
+
+ if (color_tranform_failed_) {
+ // Must fall back to client composition
+ MarkLayersForClientComposition();
+ }
+
+ // Fill in the remaining blanks in the layers and add them to the SDM layerstack
+ BuildLayerStack();
+ // Checks and replaces layer stack for solid fill
+ SolidFillPrepare();
+
+ // Apply current Color Mode and Render Intent.
+ if (color_mode_->ApplyCurrentColorModeWithRenderIntent(
+ static_cast<bool>(layer_stack_.flags.hdr_present)) != HWC2::Error::None) {
+ // Fallback to GPU Composition, if Color Mode can't be applied.
+ MarkLayersForClientComposition();
+ }
+
+ bool pending_output_dump = dump_frame_count_ && dump_output_to_file_;
+
+ if (readback_buffer_queued_ || pending_output_dump) {
+ CloseFd(&output_buffer_.release_fence_fd);
+ // RHS values were set in FrameCaptureAsync() called from a binder thread. They are picked up
+ // here in a subsequent draw round. Readback is not allowed for any secure use case.
+ readback_configured_ = !layer_stack_.flags.secure_present;
+ if (readback_configured_) {
+ DisablePartialUpdateOneFrame();
+ layer_stack_.output_buffer = &output_buffer_;
+ layer_stack_.flags.post_processed_output = post_processed_output_;
+ }
+ }
+ // Todo: relook this case
+ if (layer_stack_.flags.hdr_present != hdr_present_) {
+ error = display_intf_->ControlIdlePowerCollapse(!layer_stack_.flags.hdr_present, true);
+ hdr_present_ = layer_stack_.flags.hdr_present;
+ }
+
+ uint32_t num_updating_layers = GetUpdatingLayersCount();
+ bool one_updating_layer = (num_updating_layers == 1);
+ if (num_updating_layers != 0) {
+ ToggleCPUHint(one_updating_layer);
+ }
+
+ uint32_t refresh_rate = GetOptimalRefreshRate(one_updating_layer);
+ error = display_intf_->SetRefreshRate(refresh_rate, force_refresh_rate_);
+
+ // Get the refresh rate set.
+ display_intf_->GetRefreshRate(&refresh_rate);
+ bool vsync_source = (callbacks_->GetVsyncSource() == id_);
+
+ if (error == kErrorNone) {
+ if (vsync_source && (current_refresh_rate_ < refresh_rate)) {
+ DTRACE_BEGIN("HWC2::Vsync::Enable");
+ // Display is ramping up from idle.
+ // Client realizes need for resync upon change in config.
+ // Since we know config has changed, triggering vsync proactively
+ // can help in reducing pipeline delays to enable events.
+ SetVsyncEnabled(HWC2::Vsync::Enable);
+ DTRACE_END();
+ }
+ // On success, set current refresh rate to new refresh rate.
+ current_refresh_rate_ = refresh_rate;
+ }
+
+ if (layer_set_.empty()) {
+ // Avoid flush for Command mode panel.
+ flush_ = !client_connected_;
+ validated_ = true;
+ return status;
+ }
+
+ status = PrepareLayerStack(out_num_types, out_num_requests);
+ pending_commit_ = true;
+ return status;
+}
+
+HWC2::Error HWCDisplayBuiltIn::CommitLayerStack() {
+ skip_commit_ = CanSkipCommit();
+ return HWCDisplay::CommitLayerStack();
+}
+
+bool HWCDisplayBuiltIn::CanSkipCommit() {
+ if (layer_stack_invalid_) {
+ return false;
+ }
+
+ // Reject repeated drawcycle requests if it satisfies all conditions.
+ // 1. None of the layerstack attributes changed.
+ // 2. No new buffer latched.
+ // 3. No refresh request triggered by HWC.
+ // 4. This display is not source of vsync.
+ bool buffers_latched = false;
+ for (auto &hwc_layer : layer_set_) {
+ buffers_latched |= hwc_layer->BufferLatched();
+ hwc_layer->ResetBufferFlip();
+ }
+
+ bool vsync_source = (callbacks_->GetVsyncSource() == id_);
+ bool skip_commit = enable_optimize_refresh_ && !pending_commit_ && !buffers_latched &&
+ !pending_refresh_ && !vsync_source;
+ pending_refresh_ = false;
+
+ return skip_commit;
+}
+
+void HWCDisplayBuiltIn::SetPartialUpdate(DisplayConfigFixedInfo fixed_info) {
+ partial_update_enabled_ = fixed_info.partial_update || (!fixed_info.is_cmdmode);
+ for (auto hwc_layer : layer_set_) {
+ hwc_layer->SetPartialUpdate(partial_update_enabled_);
+ }
+ client_target_->SetPartialUpdate(partial_update_enabled_);
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetPowerMode(HWC2::PowerMode mode, bool teardown) {
+ DisplayConfigFixedInfo fixed_info = {};
+ display_intf_->GetConfig(&fixed_info);
+ bool command_mode = fixed_info.is_cmdmode;
+
+ auto status = HWCDisplay::SetPowerMode(mode, teardown);
+ if (status != HWC2::Error::None) {
+ return status;
+ }
+
+ display_intf_->GetConfig(&fixed_info);
+ is_cmd_mode_ = fixed_info.is_cmdmode;
+ if (is_cmd_mode_ != command_mode) {
+ SetPartialUpdate(fixed_info);
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayBuiltIn::Present(int32_t *out_retire_fence) {
+ auto status = HWC2::Error::None;
+
+ DTRACE_SCOPED();
+ ATRACE_INT("PartialUpdate", partial_update_enabled_);
+ ATRACE_INT("FastPath", layer_stack_.flags.fast_path);
+ ATRACE_INT("GeometryChanged", layer_stack_.flags.geometry_changed);
+ ATRACE_INT("NumLayers", static_cast <int32_t> (layer_stack_.layers.size()));
+ ATRACE_INT("SF_MarkedSkipLayer", HasForceClientComposition());
+ ATRACE_INT("HWC_MarkedSkipLayer", (HasClientComposition() &&
+ !HasForceClientComposition()));
+
+ if (display_paused_) {
+ DisplayError error = display_intf_->Flush(&layer_stack_);
+ validated_ = false;
+ if (error != kErrorNone) {
+ DLOGE("Flush failed. Error = %d", error);
+ }
+ } else {
+ DisplayConfigFixedInfo fixed_info = {};
+ display_intf_->GetConfig(&fixed_info);
+ bool command_mode = fixed_info.is_cmdmode;
+
+ status = CommitLayerStack();
+ if (status == HWC2::Error::None) {
+ HandleFrameOutput();
+ SolidFillCommit();
+ status = PostCommitLayerStack(out_retire_fence);
+ }
+
+ if (status == HWC2::Error::None) {
+ display_intf_->GetConfig(&fixed_info);
+ is_cmd_mode_ = fixed_info.is_cmdmode;
+ if (is_cmd_mode_ != command_mode) {
+ SetPartialUpdate(fixed_info);
+ }
+ }
+ }
+
+ CloseFd(&output_buffer_.acquire_fence_fd);
+ pending_commit_ = false;
+ return status;
+}
+
+HWC2::Error HWCDisplayBuiltIn::GetColorModes(uint32_t *out_num_modes, ColorMode *out_modes) {
+ if (out_modes == nullptr) {
+ *out_num_modes = color_mode_->GetColorModeCount();
+ } else {
+ color_mode_->GetColorModes(out_num_modes, out_modes);
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayBuiltIn::GetRenderIntents(ColorMode mode, uint32_t *out_num_intents,
+ RenderIntent *out_intents) {
+ if (out_intents == nullptr) {
+ *out_num_intents = color_mode_->GetRenderIntentCount(mode);
+ } else {
+ color_mode_->GetRenderIntents(mode, out_num_intents, out_intents);
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetColorMode(ColorMode mode) {
+ return SetColorModeWithRenderIntent(mode, RenderIntent::COLORIMETRIC);
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetColorModeWithRenderIntent(ColorMode mode, RenderIntent intent) {
+ auto status = color_mode_->CacheColorModeWithRenderIntent(mode, intent);
+ if (status != HWC2::Error::None) {
+ DLOGE("failed for mode = %d intent = %d", mode, intent);
+ return status;
+ }
+ callbacks_->Refresh(id_);
+ validated_ = false;
+ return status;
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetColorModeById(int32_t color_mode_id) {
+ auto status = color_mode_->SetColorModeById(color_mode_id);
+ if (status != HWC2::Error::None) {
+ DLOGE("failed for mode = %d", color_mode_id);
+ return status;
+ }
+
+ callbacks_->Refresh(id_);
+ validated_ = false;
+
+ return status;
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetColorModeFromClientApi(int32_t color_mode_id) {
+ DisplayError error = kErrorNone;
+ std::string mode_string;
+
+ error = display_intf_->GetColorModeName(color_mode_id, &mode_string);
+ if (error) {
+ DLOGE("Failed to get mode name for mode %d", color_mode_id);
+ return HWC2::Error::BadParameter;
+ }
+
+ auto status = color_mode_->SetColorModeFromClientApi(mode_string);
+ if (status != HWC2::Error::None) {
+ DLOGE("Failed to set mode = %d", color_mode_id);
+ return status;
+ }
+
+ return status;
+}
+
+HWC2::Error HWCDisplayBuiltIn::RestoreColorTransform() {
+ auto status = color_mode_->RestoreColorTransform();
+ if (status != HWC2::Error::None) {
+ DLOGE("failed to RestoreColorTransform");
+ return status;
+ }
+
+ callbacks_->Refresh(id_);
+
+ return status;
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetColorTransform(const float *matrix,
+ android_color_transform_t hint) {
+ if (!matrix) {
+ return HWC2::Error::BadParameter;
+ }
+
+ auto status = color_mode_->SetColorTransform(matrix, hint);
+ if (status != HWC2::Error::None) {
+ DLOGE("failed for hint = %d", hint);
+ color_tranform_failed_ = true;
+ return status;
+ }
+
+ callbacks_->Refresh(id_);
+ color_tranform_failed_ = false;
+ validated_ = false;
+
+ return status;
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetReadbackBuffer(const native_handle_t *buffer,
+ int32_t acquire_fence,
+ bool post_processed_output) {
+ const private_handle_t *handle = reinterpret_cast<const private_handle_t *>(buffer);
+ if (!handle || (handle->fd < 0)) {
+ return HWC2::Error::BadParameter;
+ }
+
+ // Configure the output buffer as Readback buffer
+ output_buffer_.width = UINT32(handle->width);
+ output_buffer_.height = UINT32(handle->height);
+ output_buffer_.unaligned_width = UINT32(handle->unaligned_width);
+ output_buffer_.unaligned_height = UINT32(handle->unaligned_height);
+ output_buffer_.format = HWCLayer::GetSDMFormat(handle->format, handle->flags);
+ output_buffer_.planes[0].fd = handle->fd;
+ output_buffer_.planes[0].stride = UINT32(handle->width);
+ output_buffer_.acquire_fence_fd = dup(acquire_fence);
+ output_buffer_.release_fence_fd = -1;
+ output_buffer_.handle_id = handle->id;
+
+ post_processed_output_ = post_processed_output;
+ readback_buffer_queued_ = true;
+ readback_configured_ = false;
+ validated_ = false;
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayBuiltIn::GetReadbackBufferFence(int32_t *release_fence) {
+ auto status = HWC2::Error::None;
+
+ if (readback_configured_ && (output_buffer_.release_fence_fd >= 0)) {
+ *release_fence = output_buffer_.release_fence_fd;
+ } else {
+ status = HWC2::Error::Unsupported;
+ *release_fence = -1;
+ }
+
+ post_processed_output_ = false;
+ readback_buffer_queued_ = false;
+ readback_configured_ = false;
+ output_buffer_ = {};
+
+ return status;
+}
+
+DisplayError HWCDisplayBuiltIn::TeardownConcurrentWriteback(void) {
+ DisplayError error = kErrorNotSupported;
+
+ if (output_buffer_.release_fence_fd >= 0) {
+ int32_t release_fence_fd = dup(output_buffer_.release_fence_fd);
+ int ret = sync_wait(output_buffer_.release_fence_fd, 1000);
+ if (ret < 0) {
+ DLOGE("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ }
+
+ ::close(release_fence_fd);
+ if (ret)
+ return kErrorResources;
+ }
+
+ if (display_intf_) {
+ error = display_intf_->TeardownConcurrentWriteback();
+ }
+
+ return error;
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetDisplayDppsAdROI(uint32_t h_start, uint32_t h_end,
+ uint32_t v_start, uint32_t v_end,
+ uint32_t factor_in, uint32_t factor_out) {
+ DisplayError error = kErrorNone;
+ DisplayDppsAd4RoiCfg dpps_ad4_roi_cfg = {};
+ uint32_t panel_width = 0, panel_height = 0;
+ constexpr uint16_t kMaxFactorVal = 0xffff;
+
+ if (h_start >= h_end || v_start >= v_end || factor_in > kMaxFactorVal ||
+ factor_out > kMaxFactorVal) {
+ DLOGE("Invalid roi region = [%u, %u, %u, %u, %u, %u]",
+ h_start, h_end, v_start, v_end, factor_in, factor_out);
+ return HWC2::Error::BadParameter;
+ }
+
+ GetPanelResolution(&panel_width, &panel_height);
+
+ if (h_start >= panel_width || h_end > panel_width ||
+ v_start >= panel_height || v_end > panel_height) {
+ DLOGE("Invalid roi region = [%u, %u, %u, %u], panel resolution = [%u, %u]",
+ h_start, h_end, v_start, v_end, panel_width, panel_height);
+ return HWC2::Error::BadParameter;
+ }
+
+ dpps_ad4_roi_cfg.h_start = h_start;
+ dpps_ad4_roi_cfg.h_end = h_end;
+ dpps_ad4_roi_cfg.v_start = v_start;
+ dpps_ad4_roi_cfg.v_end = v_end;
+ dpps_ad4_roi_cfg.factor_in = factor_in;
+ dpps_ad4_roi_cfg.factor_out = factor_out;
+
+ error = display_intf_->SetDisplayDppsAdROI(&dpps_ad4_roi_cfg);
+ if (error)
+ return HWC2::Error::BadConfig;
+
+ callbacks_->Refresh(id_);
+
+ return HWC2::Error::None;
+}
+
+int HWCDisplayBuiltIn::Perform(uint32_t operation, ...) {
+ va_list args;
+ va_start(args, operation);
+ int val = 0;
+ LayerSolidFill *solid_fill_color;
+ LayerRect *rect = NULL;
+
+ switch (operation) {
+ case SET_METADATA_DYN_REFRESH_RATE:
+ val = va_arg(args, int32_t);
+ SetMetaDataRefreshRateFlag(val);
+ break;
+ case SET_BINDER_DYN_REFRESH_RATE:
+ val = va_arg(args, int32_t);
+ ForceRefreshRate(UINT32(val));
+ break;
+ case SET_DISPLAY_MODE:
+ val = va_arg(args, int32_t);
+ SetDisplayMode(UINT32(val));
+ break;
+ case SET_QDCM_SOLID_FILL_INFO:
+ solid_fill_color = va_arg(args, LayerSolidFill*);
+ SetQDCMSolidFillInfo(true, *solid_fill_color);
+ break;
+ case UNSET_QDCM_SOLID_FILL_INFO:
+ solid_fill_color = va_arg(args, LayerSolidFill*);
+ SetQDCMSolidFillInfo(false, *solid_fill_color);
+ break;
+ case SET_QDCM_SOLID_FILL_RECT:
+ rect = va_arg(args, LayerRect*);
+ solid_fill_rect_ = *rect;
+ break;
+ default:
+ DLOGW("Invalid operation %d", operation);
+ va_end(args);
+ return -EINVAL;
+ }
+ va_end(args);
+ validated_ = false;
+
+ return 0;
+}
+
+DisplayError HWCDisplayBuiltIn::SetDisplayMode(uint32_t mode) {
+ DisplayError error = kErrorNone;
+
+ if (display_intf_) {
+ error = display_intf_->SetDisplayMode(mode);
+ if (error == kErrorNone) {
+ DisplayConfigFixedInfo fixed_info = {};
+ display_intf_->GetConfig(&fixed_info);
+ is_cmd_mode_ = fixed_info.is_cmdmode;
+ partial_update_enabled_ = fixed_info.partial_update;
+ for (auto hwc_layer : layer_set_) {
+ hwc_layer->SetPartialUpdate(partial_update_enabled_);
+ }
+ client_target_->SetPartialUpdate(partial_update_enabled_);
+ }
+ }
+
+ return error;
+}
+
+void HWCDisplayBuiltIn::SetMetaDataRefreshRateFlag(bool enable) {
+ int disable_metadata_dynfps = 0;
+
+ HWCDebugHandler::Get()->GetProperty(DISABLE_METADATA_DYNAMIC_FPS_PROP, &disable_metadata_dynfps);
+ if (disable_metadata_dynfps) {
+ return;
+ }
+ use_metadata_refresh_rate_ = enable;
+}
+
+void HWCDisplayBuiltIn::SetQDCMSolidFillInfo(bool enable, const LayerSolidFill &color) {
+ solid_fill_enable_ = enable;
+ solid_fill_color_ = color;
+}
+
+void HWCDisplayBuiltIn::ToggleCPUHint(bool set) {
+ if (!cpu_hint_) {
+ return;
+ }
+
+ if (set) {
+ cpu_hint_->Set();
+ } else {
+ cpu_hint_->Reset();
+ }
+}
+
+int HWCDisplayBuiltIn::HandleSecureSession(const std::bitset<kSecureMax> &secure_sessions,
+ bool *power_on_pending) {
+ if (!power_on_pending) {
+ return -EINVAL;
+ }
+
+ if (current_power_mode_ != HWC2::PowerMode::On) {
+ return 0;
+ }
+
+ if (active_secure_sessions_[kSecureDisplay] != secure_sessions[kSecureDisplay]) {
+ SecureEvent secure_event =
+ secure_sessions.test(kSecureDisplay) ? kSecureDisplayStart : kSecureDisplayEnd;
+ DisplayError err = display_intf_->HandleSecureEvent(secure_event, &layer_stack_);
+ if (err != kErrorNone) {
+ DLOGE("Set secure event failed");
+ return err;
+ }
+ if (secure_event == kSecureDisplayStart) {
+ pmic_intf_->Notify(kSecureDisplayStart);
+ } else {
+ pmic_notification_pending_ = true;
+ }
+
+ DLOGI("SecureDisplay state changed from %d to %d for display %d",
+ active_secure_sessions_.test(kSecureDisplay), secure_sessions.test(kSecureDisplay),
+ type_);
+ }
+ active_secure_sessions_ = secure_sessions;
+ *power_on_pending = false;
+ return 0;
+}
+
+void HWCDisplayBuiltIn::ForceRefreshRate(uint32_t refresh_rate) {
+ if ((refresh_rate && (refresh_rate < min_refresh_rate_ || refresh_rate > max_refresh_rate_)) ||
+ force_refresh_rate_ == refresh_rate) {
+ // Cannot honor force refresh rate, as its beyond the range or new request is same
+ return;
+ }
+
+ force_refresh_rate_ = refresh_rate;
+
+ callbacks_->Refresh(id_);
+
+ return;
+}
+
+uint32_t HWCDisplayBuiltIn::GetOptimalRefreshRate(bool one_updating_layer) {
+ if (force_refresh_rate_) {
+ return force_refresh_rate_;
+ } else if (use_metadata_refresh_rate_ && one_updating_layer && metadata_refresh_rate_) {
+ return metadata_refresh_rate_;
+ }
+
+ return max_refresh_rate_;
+}
+
+DisplayError HWCDisplayBuiltIn::Refresh() {
+ DisplayError error = kErrorNone;
+
+ callbacks_->Refresh(id_);
+
+ return error;
+}
+
+void HWCDisplayBuiltIn::SetIdleTimeoutMs(uint32_t timeout_ms) {
+ display_intf_->SetIdleTimeoutMs(timeout_ms);
+ validated_ = false;
+}
+
+void HWCDisplayBuiltIn::HandleFrameOutput() {
+ if (readback_buffer_queued_) {
+ validated_ = false;
+ }
+
+ if (frame_capture_buffer_queued_) {
+ HandleFrameCapture();
+ } else if (dump_output_to_file_) {
+ HandleFrameDump();
+ }
+}
+
+void HWCDisplayBuiltIn::HandleFrameCapture() {
+ if (readback_configured_ && (output_buffer_.release_fence_fd >= 0)) {
+ frame_capture_status_ = sync_wait(output_buffer_.release_fence_fd, 1000);
+ ::close(output_buffer_.release_fence_fd);
+ output_buffer_.release_fence_fd = -1;
+ }
+
+ frame_capture_buffer_queued_ = false;
+ readback_buffer_queued_ = false;
+ post_processed_output_ = false;
+ readback_configured_ = false;
+ output_buffer_ = {};
+}
+
+void HWCDisplayBuiltIn::HandleFrameDump() {
+ if (!readback_configured_) {
+ dump_frame_count_ = 0;
+ }
+
+ if (dump_frame_count_ && output_buffer_.release_fence_fd >= 0) {
+ int ret = sync_wait(output_buffer_.release_fence_fd, 1000);
+ ::close(output_buffer_.release_fence_fd);
+ output_buffer_.release_fence_fd = -1;
+ if (ret < 0) {
+ DLOGE("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ } else {
+ DumpOutputBuffer(output_buffer_info_, output_buffer_base_, layer_stack_.retire_fence_fd);
+ readback_buffer_queued_ = false;
+ validated_ = false;
+ }
+ }
+
+ if (0 == dump_frame_count_) {
+ dump_output_to_file_ = false;
+ // Unmap and Free buffer
+ if (munmap(output_buffer_base_, output_buffer_info_.alloc_buffer_info.size) != 0) {
+ DLOGE("unmap failed with err %d", errno);
+ }
+ if (buffer_allocator_->FreeBuffer(&output_buffer_info_) != 0) {
+ DLOGE("FreeBuffer failed");
+ }
+
+ readback_buffer_queued_ = false;
+ post_processed_output_ = false;
+ readback_configured_ = false;
+
+ output_buffer_ = {};
+ output_buffer_info_ = {};
+ output_buffer_base_ = nullptr;
+ }
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type,
+ int32_t format, bool post_processed) {
+ HWCDisplay::SetFrameDumpConfig(count, bit_mask_layer_type, format, post_processed);
+ dump_output_to_file_ = bit_mask_layer_type & (1 << OUTPUT_LAYER_DUMP);
+ DLOGI("output_layer_dump_enable %d", dump_output_to_file_);
+
+ if (!count || !dump_output_to_file_ || (output_buffer_info_.alloc_buffer_info.fd >= 0)) {
+ return HWC2::Error::None;
+ }
+
+ // Allocate and map output buffer
+ if (post_processed) {
+ // To dump post-processed (DSPP) output, use Panel resolution.
+ GetPanelResolution(&output_buffer_info_.buffer_config.width,
+ &output_buffer_info_.buffer_config.height);
+ } else {
+ // To dump Layer Mixer output, use FrameBuffer resolution.
+ GetFrameBufferResolution(&output_buffer_info_.buffer_config.width,
+ &output_buffer_info_.buffer_config.height);
+ }
+
+ output_buffer_info_.buffer_config.format = HWCLayer::GetSDMFormat(format, 0);
+ output_buffer_info_.buffer_config.buffer_count = 1;
+ if (buffer_allocator_->AllocateBuffer(&output_buffer_info_) != 0) {
+ DLOGE("Buffer allocation failed");
+ output_buffer_info_ = {};
+ return HWC2::Error::NoResources;
+ }
+
+ void *buffer = mmap(NULL, output_buffer_info_.alloc_buffer_info.size, PROT_READ | PROT_WRITE,
+ MAP_SHARED, output_buffer_info_.alloc_buffer_info.fd, 0);
+
+ if (buffer == MAP_FAILED) {
+ DLOGE("mmap failed with err %d", errno);
+ buffer_allocator_->FreeBuffer(&output_buffer_info_);
+ output_buffer_info_ = {};
+ return HWC2::Error::NoResources;
+ }
+
+ output_buffer_base_ = buffer;
+ const native_handle_t *handle = static_cast<native_handle_t *>(output_buffer_info_.private_data);
+ SetReadbackBuffer(handle, -1, post_processed);
+
+ return HWC2::Error::None;
+}
+
+int HWCDisplayBuiltIn::FrameCaptureAsync(const BufferInfo &output_buffer_info,
+ bool post_processed_output) {
+ // Note: This function is called in context of a binder thread and a lock is already held
+ if (output_buffer_info.alloc_buffer_info.fd < 0) {
+ DLOGE("Invalid fd %d", output_buffer_info.alloc_buffer_info.fd);
+ return -1;
+ }
+
+ auto panel_width = 0u;
+ auto panel_height = 0u;
+ auto fb_width = 0u;
+ auto fb_height = 0u;
+
+ GetPanelResolution(&panel_width, &panel_height);
+ GetFrameBufferResolution(&fb_width, &fb_height);
+
+ if (post_processed_output && (output_buffer_info.buffer_config.width < panel_width ||
+ output_buffer_info.buffer_config.height < panel_height)) {
+ DLOGE("Buffer dimensions should not be less than panel resolution");
+ return -1;
+ } else if (!post_processed_output && (output_buffer_info.buffer_config.width < fb_width ||
+ output_buffer_info.buffer_config.height < fb_height)) {
+ DLOGE("Buffer dimensions should not be less than FB resolution");
+ return -1;
+ }
+
+ const native_handle_t *buffer = static_cast<native_handle_t *>(output_buffer_info.private_data);
+ SetReadbackBuffer(buffer, -1, post_processed_output);
+ frame_capture_buffer_queued_ = true;
+ frame_capture_status_ = -EAGAIN;
+
+ return 0;
+}
+
+DisplayError HWCDisplayBuiltIn::SetDetailEnhancerConfig
+ (const DisplayDetailEnhancerData &de_data) {
+ DisplayError error = kErrorNotSupported;
+
+ if (display_intf_) {
+ error = display_intf_->SetDetailEnhancerData(de_data);
+ validated_ = false;
+ }
+ return error;
+}
+
+DisplayError HWCDisplayBuiltIn::ControlPartialUpdate(bool enable, uint32_t *pending) {
+ DisplayError error = kErrorNone;
+
+ if (display_intf_) {
+ error = display_intf_->ControlPartialUpdate(enable, pending);
+ validated_ = false;
+ }
+
+ return error;
+}
+
+DisplayError HWCDisplayBuiltIn::DisablePartialUpdateOneFrame() {
+ DisplayError error = kErrorNone;
+
+ if (display_intf_) {
+ error = display_intf_->DisablePartialUpdateOneFrame();
+ validated_ = false;
+ }
+
+ return error;
+}
+
+
+DisplayError HWCDisplayBuiltIn::SetMixerResolution(uint32_t width, uint32_t height) {
+ DisplayError error = display_intf_->SetMixerResolution(width, height);
+ validated_ = false;
+ return error;
+}
+
+DisplayError HWCDisplayBuiltIn::GetMixerResolution(uint32_t *width, uint32_t *height) {
+ return display_intf_->GetMixerResolution(width, height);
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetQSyncMode(QSyncMode qsync_mode) {
+ // Client needs to ensure that config change and qsync mode change
+ // are not triggered in the same drawcycle.
+ if (pending_config_) {
+ DLOGE("Failed to set qsync mode. Pending active config transition");
+ return HWC2::Error::Unsupported;
+ }
+
+ auto err = display_intf_->SetQSyncMode(qsync_mode);
+ if (err != kErrorNone) {
+ return HWC2::Error::Unsupported;
+ }
+
+ validated_ = false;
+ return HWC2::Error::None;
+}
+
+DisplayError HWCDisplayBuiltIn::ControlIdlePowerCollapse(bool enable, bool synchronous) {
+ DisplayError error = kErrorNone;
+
+ if (display_intf_) {
+ error = display_intf_->ControlIdlePowerCollapse(enable, synchronous);
+ validated_ = false;
+ }
+ return error;
+}
+
+DisplayError HWCDisplayBuiltIn::SetDynamicDSIClock(uint64_t bitclk) {
+ DisplayError error = display_intf_->SetDynamicDSIClock(bitclk);
+ if (error != kErrorNone) {
+ DLOGE(" failed: Clk: %llu Error: %d", bitclk, error);
+ return error;
+ }
+
+ callbacks_->Refresh(id_);
+ validated_ = false;
+
+ return kErrorNone;
+}
+
+DisplayError HWCDisplayBuiltIn::GetDynamicDSIClock(uint64_t *bitclk) {
+ if (display_intf_) {
+ return display_intf_->GetDynamicDSIClock(bitclk);
+ }
+
+ return kErrorNotSupported;
+}
+
+DisplayError HWCDisplayBuiltIn::GetSupportedDSIClock(std::vector<uint64_t> *bitclk_rates) {
+ if (display_intf_) {
+ return display_intf_->GetSupportedDSIClock(bitclk_rates);
+ }
+
+ return kErrorNotSupported;
+}
+
+HWC2::Error HWCDisplayBuiltIn::UpdateDisplayId(hwc2_display_t id) {
+ id_ = id;
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetPendingRefresh() {
+ pending_refresh_ = true;
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayBuiltIn::UpdatePowerMode(HWC2::PowerMode mode) {
+ current_power_mode_ = mode;
+ validated_ = false;
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayBuiltIn::PostCommitLayerStack(int32_t *out_retire_fence) {
+ if (pmic_notification_pending_) {
+ // Wait for current commit to complete
+ if (*out_retire_fence >= 0) {
+ int ret = sync_wait(*out_retire_fence, 1000);
+ if (ret < 0) {
+ DLOGE("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ }
+ }
+ pmic_intf_->Notify(kSecureDisplayEnd);
+ pmic_notification_pending_ = false;
+ }
+ return HWCDisplay::PostCommitLayerStack(out_retire_fence);
+}
+
+HWC2::Error HWCDisplayBuiltIn::SetPanelBrightness(float brightness) {
+ DisplayError ret = display_intf_->SetPanelBrightness(brightness);
+ if (ret != kErrorNone) {
+ return HWC2::Error::NoResources;
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayBuiltIn::GetPanelBrightness(float *brightness) {
+ DisplayError ret = display_intf_->GetPanelBrightness(brightness);
+ if (ret != kErrorNone) {
+ return HWC2::Error::NoResources;
+ }
+
+ return HWC2::Error::None;
+}
+
+bool HWCDisplayBuiltIn::IsSmartPanelConfig(uint32_t config_id) {
+ if (config_id < hwc_config_map_.size()) {
+ uint32_t index = hwc_config_map_.at(config_id);
+ return variable_config_map_.at(index).smart_panel;
+ }
+
+ return false;
+}
+
+bool HWCDisplayBuiltIn::HasSmartPanelConfig(void) {
+ if (!enable_poms_during_doze_) {
+ uint32_t config = 0;
+ GetActiveDisplayConfig(&config);
+ return IsSmartPanelConfig(config);
+ }
+
+ for (auto &config : variable_config_map_) {
+ if (config.second.smart_panel) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_display_builtin.h b/sdm/libs/hwc2/hwc_display_builtin.h
new file mode 100644
index 0000000..232c31a
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_builtin.h
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __HWC_DISPLAY_BUILTIN_H__
+#define __HWC_DISPLAY_BUILTIN_H__
+
+#include <string>
+#include <vector>
+
+#include "cpuhint.h"
+#include "hwc_display.h"
+
+namespace sdm {
+
+class HWCDisplayBuiltIn : public HWCDisplay {
+ public:
+ enum {
+ SET_METADATA_DYN_REFRESH_RATE,
+ SET_BINDER_DYN_REFRESH_RATE,
+ SET_DISPLAY_MODE,
+ SET_QDCM_SOLID_FILL_INFO,
+ UNSET_QDCM_SOLID_FILL_INFO,
+ SET_QDCM_SOLID_FILL_RECT,
+ };
+
+ static int Create(CoreInterface *core_intf, BufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id, int32_t sdm_id,
+ HWCDisplay **hwc_display);
+ static void Destroy(HWCDisplay *hwc_display);
+ virtual int Init();
+ virtual int Deinit();
+ virtual HWC2::Error Validate(uint32_t *out_num_types, uint32_t *out_num_requests);
+ virtual HWC2::Error Present(int32_t *out_retire_fence);
+ virtual HWC2::Error CommitLayerStack();
+ virtual HWC2::Error GetColorModes(uint32_t *out_num_modes, ColorMode *out_modes);
+ virtual HWC2::Error SetColorMode(ColorMode mode);
+ virtual HWC2::Error GetRenderIntents(ColorMode mode, uint32_t *out_num_intents,
+ RenderIntent *out_intents);
+ virtual HWC2::Error SetColorModeWithRenderIntent(ColorMode mode, RenderIntent intent);
+ virtual HWC2::Error SetColorModeById(int32_t color_mode_id);
+ virtual HWC2::Error SetColorModeFromClientApi(int32_t color_mode_id);
+ virtual HWC2::Error SetColorTransform(const float *matrix, android_color_transform_t hint);
+ virtual HWC2::Error RestoreColorTransform();
+ virtual int Perform(uint32_t operation, ...);
+ virtual int HandleSecureSession(const std::bitset<kSecureMax> &secure_session,
+ bool *power_on_pending);
+ virtual DisplayError Refresh();
+ virtual void SetIdleTimeoutMs(uint32_t timeout_ms);
+ virtual HWC2::Error SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type,
+ int32_t format, bool post_processed);
+ virtual int FrameCaptureAsync(const BufferInfo &output_buffer_info, bool post_processed);
+ virtual int GetFrameCaptureStatus() { return frame_capture_status_; }
+ virtual DisplayError SetDetailEnhancerConfig(const DisplayDetailEnhancerData &de_data);
+ virtual DisplayError ControlPartialUpdate(bool enable, uint32_t *pending);
+ virtual HWC2::Error SetReadbackBuffer(const native_handle_t *buffer, int32_t acquire_fence,
+ bool post_processed_output);
+ virtual HWC2::Error GetReadbackBufferFence(int32_t *release_fence);
+ virtual HWC2::Error SetQSyncMode(QSyncMode qsync_mode);
+ virtual DisplayError ControlIdlePowerCollapse(bool enable, bool synchronous);
+ virtual HWC2::Error SetDisplayDppsAdROI(uint32_t h_start, uint32_t h_end, uint32_t v_start,
+ uint32_t v_end, uint32_t factor_in, uint32_t factor_out);
+ virtual DisplayError SetDynamicDSIClock(uint64_t bitclk);
+ virtual DisplayError GetDynamicDSIClock(uint64_t *bitclk);
+ virtual DisplayError GetSupportedDSIClock(std::vector<uint64_t> *bitclk_rates);
+ virtual HWC2::Error UpdateDisplayId(hwc2_display_t id);
+ virtual HWC2::Error SetPendingRefresh();
+ virtual HWC2::Error SetPanelBrightness(float brightness);
+ virtual HWC2::Error GetPanelBrightness(float *brightness);
+ virtual DisplayError TeardownConcurrentWriteback(void);
+ virtual void SetFastPathComposition(bool enable) {
+ fast_path_composition_ = enable && !readback_buffer_queued_;
+ }
+ virtual HWC2::Error UpdatePowerMode(HWC2::PowerMode mode);
+ virtual HWC2::Error PostCommitLayerStack(int32_t *out_retire_fence);
+ virtual bool IsSmartPanelConfig(uint32_t config_id);
+ virtual bool HasSmartPanelConfig(void);
+ virtual HWC2::Error SetPowerMode(HWC2::PowerMode mode, bool teardown);
+
+ private:
+ HWCDisplayBuiltIn(CoreInterface *core_intf, BufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id, int32_t sdm_id);
+ void SetMetaDataRefreshRateFlag(bool enable);
+ virtual DisplayError SetDisplayMode(uint32_t mode);
+ virtual DisplayError DisablePartialUpdateOneFrame();
+ void SetQDCMSolidFillInfo(bool enable, const LayerSolidFill &color);
+ void ToggleCPUHint(bool set);
+ void ForceRefreshRate(uint32_t refresh_rate);
+ uint32_t GetOptimalRefreshRate(bool one_updating_layer);
+ void HandleFrameOutput();
+ void HandleFrameDump();
+ void HandleFrameCapture();
+ bool CanSkipCommit();
+ DisplayError SetMixerResolution(uint32_t width, uint32_t height);
+ DisplayError GetMixerResolution(uint32_t *width, uint32_t *height);
+ void SetPartialUpdate(DisplayConfigFixedInfo fixed_info);
+ class PMICInterface {
+ public:
+ PMICInterface() { }
+ ~PMICInterface() { }
+ DisplayError Init();
+ void Deinit();
+ DisplayError Notify(SecureEvent event);
+
+ private:
+ int fd_lcd_bias_ = -1;
+ int fd_wled_ = -1;
+ };
+
+ BufferAllocator *buffer_allocator_ = nullptr;
+ CPUHint *cpu_hint_ = nullptr;
+
+ // Builtin readback buffer configuration
+ LayerBuffer output_buffer_ = {};
+ bool post_processed_output_ = false;
+ bool readback_buffer_queued_ = false;
+ bool readback_configured_ = false;
+
+ // Members for N frame output dump to file
+ bool dump_output_to_file_ = false;
+ BufferInfo output_buffer_info_ = {};
+ void *output_buffer_base_ = nullptr;
+ int default_mode_status_ = 0;
+ bool pending_refresh_ = true;
+ bool enable_optimize_refresh_ = false;
+ bool hdr_present_ = false;
+ bool enable_poms_during_doze_ = false;
+
+ // Members for 1 frame capture in a client provided buffer
+ bool frame_capture_buffer_queued_ = false;
+ int frame_capture_status_ = -EAGAIN;
+ // PMIC interface to notify secure display start/end
+ PMICInterface *pmic_intf_ = nullptr;
+ bool pmic_notification_pending_ = false;
+};
+
+} // namespace sdm
+
+#endif // __HWC_DISPLAY_BUILTIN_H__
diff --git a/sdm/libs/hwc2/hwc_display_dummy.cpp b/sdm/libs/hwc2/hwc_display_dummy.cpp
new file mode 100644
index 0000000..358eefd
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_dummy.cpp
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include "hwc_display_dummy.h"
+#include "utils/debug.h"
+
+#define __CLASS__ "HWCDisplayDummy"
+
+namespace sdm {
+
+int HWCDisplayDummy::Create(CoreInterface *core_intf, BufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id, int32_t sdm_id,
+ HWCDisplay **hwc_display) {
+ HWCDisplay *hwc_display_dummy = new HWCDisplayDummy(core_intf, buffer_allocator, callbacks,
+ event_handler, qservice, id, sdm_id);
+ *hwc_display = hwc_display_dummy;
+ return kErrorNone;
+}
+
+void HWCDisplayDummy::Destroy(HWCDisplay *hwc_display) {
+ delete hwc_display;
+}
+
+HWC2::Error HWCDisplayDummy::Validate(uint32_t *out_num_types, uint32_t *out_num_requests) {
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayDummy::Present(int32_t *out_retire_fence) {
+ for (auto hwc_layer : layer_set_) {
+ hwc_layer->PushBackReleaseFence(-1);
+ }
+ return HWC2::Error::None;
+}
+
+HWCDisplayDummy::HWCDisplayDummy(CoreInterface *core_intf, BufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id,
+ int32_t sdm_id) :HWCDisplay(core_intf, buffer_allocator,
+ callbacks, event_handler, qservice, kBuiltIn, id, sdm_id, true,
+ DISPLAY_CLASS_BUILTIN) {
+ DisplayConfigVariableInfo config;
+ config.x_pixels = 720;
+ config.y_pixels = 1280;
+ config.x_dpi = 200.0f;
+ config.y_dpi = 200.0f;
+ config.fps = 60;
+ config.vsync_period_ns = 16600000;
+ display_null_.SetFrameBufferConfig(config);
+ num_configs_ = 1;
+ display_intf_ = &display_null_;
+}
+
+HWC2::Error HWCDisplayDummy::GetActiveConfig(hwc2_config_t *out_config) {
+ *out_config = 0;
+ return HWC2::Error::None;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_display_dummy.h b/sdm/libs/hwc2/hwc_display_dummy.h
new file mode 100644
index 0000000..29e04f4
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_dummy.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __HWC_DISPLAY_DUMMY_H__
+#define __HWC_DISPLAY_DUMMY_H__
+
+#include "hwc_display.h"
+#include "display_null.h"
+
+namespace sdm {
+
+class HWCDisplayDummy : public HWCDisplay {
+ public:
+ static int Create(CoreInterface *core_intf, BufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id, int32_t sdm_id,
+ HWCDisplay **hwc_display);
+ static void Destroy(HWCDisplay *hwc_display);
+ virtual HWC2::Error Validate(uint32_t *out_num_types, uint32_t *out_num_requests);
+ virtual HWC2::Error Present(int32_t *out_retire_fence);
+ virtual HWC2::Error GetActiveConfig(hwc2_config_t *out_config);
+
+ private:
+ HWCDisplayDummy(CoreInterface *core_intf, BufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id, int32_t sdm_id);
+ DisplayNull display_null_;
+};
+
+} // namespace sdm
+
+#endif // __HWC_DISPLAY_DUMMY_H__
diff --git a/sdm/libs/hwc2/hwc_display_event_handler.h b/sdm/libs/hwc2/hwc_display_event_handler.h
new file mode 100644
index 0000000..1352049
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_event_handler.h
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __HWC_DISPLAY_EVENT_HANDLER_H__
+#define __HWC_DISPLAY_EVENT_HANDLER_H__
+
+namespace sdm {
+
+class HWCDisplayEventHandler {
+ public:
+ virtual void DisplayPowerReset() = 0;
+
+ protected:
+ virtual ~HWCDisplayEventHandler() {}
+};
+} // namespace sdm
+
+#endif // __HWC_DISPLAY_EVENT_HANDLER_H__
diff --git a/sdm/libs/hwc2/hwc_display_pluggable.cpp b/sdm/libs/hwc2/hwc_display_pluggable.cpp
new file mode 100644
index 0000000..7590d0e
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_pluggable.cpp
@@ -0,0 +1,337 @@
+/*
+* Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <cutils/properties.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <algorithm>
+
+#include "hwc_display_pluggable.h"
+#include "hwc_debugger.h"
+
+#define __CLASS__ "HWCDisplayPluggable"
+
+namespace sdm {
+
+int HWCDisplayPluggable::Create(CoreInterface *core_intf, HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id, int32_t sdm_id,
+ uint32_t primary_width, uint32_t primary_height,
+ bool use_primary_res, HWCDisplay **hwc_display) {
+ uint32_t pluggable_width = 0;
+ uint32_t pluggable_height = 0;
+ DisplayError error = kErrorNone;
+
+ HWCDisplay *hwc_display_pluggable = new HWCDisplayPluggable(core_intf, buffer_allocator,
+ callbacks, event_handler, qservice, id, sdm_id);
+ int status = hwc_display_pluggable->Init();
+ if (status) {
+ delete hwc_display_pluggable;
+ return status;
+ }
+
+ error = hwc_display_pluggable->GetMixerResolution(&pluggable_width, &pluggable_height);
+ if (error != kErrorNone) {
+ Destroy(hwc_display_pluggable);
+ return -EINVAL;
+ }
+
+ if (primary_width && primary_height) {
+ // use_primary_res means HWCDisplayPluggable should directly set framebuffer resolution to the
+ // provided primary_width and primary_height
+ if (use_primary_res) {
+ pluggable_width = primary_width;
+ pluggable_height = primary_height;
+ } else {
+ int downscale_enabled = 0;
+ HWCDebugHandler::Get()->GetProperty(ENABLE_EXTERNAL_DOWNSCALE_PROP, &downscale_enabled);
+ if (downscale_enabled) {
+ GetDownscaleResolution(primary_width, primary_height, &pluggable_width, &pluggable_height);
+ }
+ }
+ }
+
+ status = hwc_display_pluggable->SetFrameBufferResolution(pluggable_width, pluggable_height);
+ if (status) {
+ Destroy(hwc_display_pluggable);
+ return status;
+ }
+
+ *hwc_display = hwc_display_pluggable;
+
+ return status;
+}
+
+int HWCDisplayPluggable::Init() {
+ int status = HWCDisplay::Init();
+ if (status) {
+ return status;
+ }
+ color_mode_ = new HWCColorMode(display_intf_);
+ color_mode_->Init();
+
+ return status;
+}
+
+void HWCDisplayPluggable::Destroy(HWCDisplay *hwc_display) {
+ // Flush the display to have outstanding fences signaled.
+ hwc_display->Flush();
+ hwc_display->Deinit();
+ delete hwc_display;
+}
+
+HWCDisplayPluggable::HWCDisplayPluggable(CoreInterface *core_intf,
+ HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks,
+ HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice,
+ hwc2_display_t id,
+ int32_t sdm_id)
+ : HWCDisplay(core_intf, buffer_allocator, callbacks, event_handler, qservice, kPluggable, id,
+ sdm_id, false, DISPLAY_CLASS_PLUGGABLE) {
+}
+
+HWC2::Error HWCDisplayPluggable::Validate(uint32_t *out_num_types, uint32_t *out_num_requests) {
+ auto status = HWC2::Error::None;
+
+ if (active_secure_sessions_[kSecureDisplay]) {
+ MarkLayersForGPUBypass();
+ return status;
+ }
+
+ BuildLayerStack();
+
+ if (layer_set_.empty()) {
+ flush_ = !client_connected_;
+ validated_ = true;
+ return status;
+ }
+
+ // Apply current Color Mode and Render Intent.
+ if (color_mode_->ApplyCurrentColorModeWithRenderIntent(
+ static_cast<bool>(layer_stack_.flags.hdr_present)) != HWC2::Error::None) {
+ // Fallback to GPU Composition, if Color Mode can't be applied.
+ MarkLayersForClientComposition();
+ }
+
+ // TODO(user): SetRefreshRate need to follow new interface when added.
+
+ status = PrepareLayerStack(out_num_types, out_num_requests);
+ return status;
+}
+
+HWC2::Error HWCDisplayPluggable::Present(int32_t *out_retire_fence) {
+ auto status = HWC2::Error::None;
+
+ if (!active_secure_sessions_[kSecureDisplay]) {
+ status = HWCDisplay::CommitLayerStack();
+ if (status == HWC2::Error::None) {
+ status = HWCDisplay::PostCommitLayerStack(out_retire_fence);
+ }
+ }
+ return status;
+}
+
+void HWCDisplayPluggable::ApplyScanAdjustment(hwc_rect_t *display_frame) {
+ if ((underscan_width_ <= 0) || (underscan_height_ <= 0)) {
+ return;
+ }
+
+ float width_ratio = FLOAT(underscan_width_) / 100.0f;
+ float height_ratio = FLOAT(underscan_height_) / 100.0f;
+
+ uint32_t mixer_width = 0;
+ uint32_t mixer_height = 0;
+ GetMixerResolution(&mixer_width, &mixer_height);
+
+ if (mixer_width == 0 || mixer_height == 0) {
+ DLOGV("Invalid mixer dimensions (%d, %d)", mixer_width, mixer_height);
+ return;
+ }
+
+ uint32_t new_mixer_width = UINT32(mixer_width * FLOAT(1.0f - width_ratio));
+ uint32_t new_mixer_height = UINT32(mixer_height * FLOAT(1.0f - height_ratio));
+
+ int x_offset = INT((FLOAT(mixer_width) * width_ratio) / 2.0f);
+ int y_offset = INT((FLOAT(mixer_height) * height_ratio) / 2.0f);
+
+ display_frame->left = (display_frame->left * INT32(new_mixer_width) / INT32(mixer_width))
+ + x_offset;
+ display_frame->top = (display_frame->top * INT32(new_mixer_height) / INT32(mixer_height)) +
+ y_offset;
+ display_frame->right = ((display_frame->right * INT32(new_mixer_width)) / INT32(mixer_width)) +
+ x_offset;
+ display_frame->bottom = ((display_frame->bottom * INT32(new_mixer_height)) / INT32(mixer_height))
+ + y_offset;
+}
+
+static void AdjustSourceResolution(uint32_t dst_width, uint32_t dst_height, uint32_t *src_width,
+ uint32_t *src_height) {
+ *src_height = (dst_width * (*src_height)) / (*src_width);
+ *src_width = dst_width;
+}
+
+void HWCDisplayPluggable::GetDownscaleResolution(uint32_t primary_width, uint32_t primary_height,
+ uint32_t *non_primary_width,
+ uint32_t *non_primary_height) {
+ uint32_t primary_area = primary_width * primary_height;
+ uint32_t non_primary_area = (*non_primary_width) * (*non_primary_height);
+
+ if (primary_area > non_primary_area) {
+ if (primary_height > primary_width) {
+ std::swap(primary_height, primary_width);
+ }
+ AdjustSourceResolution(primary_width, primary_height, non_primary_width, non_primary_height);
+ }
+}
+
+int HWCDisplayPluggable::SetState(bool connected) {
+ DisplayError error = kErrorNone;
+ DisplayState state = kStateOff;
+ DisplayConfigVariableInfo fb_config = {};
+
+ if (connected) {
+ if (display_null_.IsActive()) {
+ error = core_intf_->CreateDisplay(type_, this, &display_intf_);
+ if (error != kErrorNone) {
+ DLOGE("Display create failed. Error = %d display_type %d event_handler %p disp_intf %p",
+ error, type_, this, &display_intf_);
+ return -EINVAL;
+ }
+
+ // Restore HDMI attributes when display is reconnected.
+ // This is to ensure that surfaceflinger & sdm are in sync.
+ display_null_.GetFrameBufferConfig(&fb_config);
+ int status = SetFrameBufferResolution(fb_config.x_pixels, fb_config.y_pixels);
+ if (status) {
+ DLOGW("Set frame buffer config failed. Error = %d", error);
+ return -1;
+ }
+ int release_fence = -1;
+ display_null_.GetDisplayState(&state);
+ display_intf_->SetDisplayState(state, false /* teardown */, &release_fence);
+ if (release_fence >= 0) {
+ ::close(release_fence);
+ }
+ validated_ = false;
+
+ SetVsyncEnabled(HWC2::Vsync::Enable);
+
+ display_null_.SetActive(false);
+ DLOGI("Display is connected successfully.");
+ } else {
+ DLOGI("Display is already connected.");
+ }
+ } else {
+ if (!display_null_.IsActive()) {
+ int release_fence = -1;
+ // Preserve required attributes of HDMI display that surfaceflinger sees.
+ // Restore HDMI attributes when display is reconnected.
+ display_intf_->GetDisplayState(&state);
+ display_null_.SetDisplayState(state, false /* teardown */, &release_fence);
+ if (release_fence >= 0) {
+ ::close(release_fence);
+ }
+
+ error = display_intf_->GetFrameBufferConfig(&fb_config);
+ if (error != kErrorNone) {
+ DLOGW("Get frame buffer config failed. Error = %d", error);
+ return -1;
+ }
+ display_null_.SetFrameBufferConfig(fb_config);
+
+ SetVsyncEnabled(HWC2::Vsync::Disable);
+ core_intf_->DestroyDisplay(display_intf_);
+ display_intf_ = &display_null_;
+
+ display_null_.SetActive(true);
+ DLOGI("Display is disconnected successfully.");
+ } else {
+ DLOGI("Display is already disconnected.");
+ }
+ }
+
+ return 0;
+}
+
+void HWCDisplayPluggable::GetUnderScanConfig() {
+ if (!display_intf_->IsUnderscanSupported()) {
+ // Read user defined underscan width and height
+ HWCDebugHandler::Get()->GetProperty(EXTERNAL_ACTION_SAFE_WIDTH_PROP, &underscan_width_);
+ HWCDebugHandler::Get()->GetProperty(EXTERNAL_ACTION_SAFE_HEIGHT_PROP, &underscan_height_);
+ }
+}
+
+DisplayError HWCDisplayPluggable::Flush() {
+ return display_intf_->Flush(&layer_stack_);
+}
+
+HWC2::Error HWCDisplayPluggable::GetColorModes(uint32_t *out_num_modes, ColorMode *out_modes) {
+ if (out_modes == nullptr) {
+ *out_num_modes = color_mode_->GetColorModeCount();
+ } else {
+ color_mode_->GetColorModes(out_num_modes, out_modes);
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayPluggable::GetRenderIntents(ColorMode mode, uint32_t *out_num_intents,
+ RenderIntent *out_intents) {
+ if (out_intents == nullptr) {
+ *out_num_intents = color_mode_->GetRenderIntentCount(mode);
+ } else {
+ color_mode_->GetRenderIntents(mode, out_num_intents, out_intents);
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayPluggable::SetColorMode(ColorMode mode) {
+ return SetColorModeWithRenderIntent(mode, RenderIntent::COLORIMETRIC);
+}
+
+HWC2::Error HWCDisplayPluggable::SetColorModeWithRenderIntent(ColorMode mode, RenderIntent intent) {
+ auto status = color_mode_->CacheColorModeWithRenderIntent(mode, intent);
+ if (status != HWC2::Error::None) {
+ DLOGE("failed for mode = %d intent = %d", mode, intent);
+ return status;
+ }
+
+ callbacks_->Refresh(id_);
+ validated_ = false;
+
+ return status;
+}
+
+HWC2::Error HWCDisplayPluggable::UpdatePowerMode(HWC2::PowerMode mode) {
+ current_power_mode_ = mode;
+ validated_ = false;
+ return HWC2::Error::None;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_display_pluggable.h b/sdm/libs/hwc2/hwc_display_pluggable.h
new file mode 100644
index 0000000..7c24c1d
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_pluggable.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __HWC_DISPLAY_PLUGGABLE_H__
+#define __HWC_DISPLAY_PLUGGABLE_H__
+
+#include "hwc_display.h"
+#include "display_null.h"
+#include "hwc_display_event_handler.h"
+
+namespace sdm {
+
+class HWCDisplayPluggable : public HWCDisplay {
+ public:
+ static int Create(CoreInterface *core_intf, HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id,
+ int32_t sdm_id, uint32_t primary_width, uint32_t primary_height,
+ bool use_primary_res, HWCDisplay **hwc_display);
+ static void Destroy(HWCDisplay *hwc_display);
+ virtual int Init();
+ virtual HWC2::Error Validate(uint32_t *out_num_types, uint32_t *out_num_requests);
+ virtual HWC2::Error Present(int32_t *out_retire_fence);
+ virtual int SetState(bool connected);
+ virtual DisplayError Flush();
+ virtual HWC2::Error GetColorModes(uint32_t *out_num_modes, ColorMode *out_modes);
+ virtual HWC2::Error GetRenderIntents(ColorMode mode, uint32_t *out_num_intents,
+ RenderIntent *out_intents);
+ virtual HWC2::Error SetColorMode(ColorMode mode);
+ virtual HWC2::Error SetColorModeWithRenderIntent(ColorMode mode, RenderIntent intent);
+ virtual HWC2::Error UpdatePowerMode(HWC2::PowerMode mode);
+
+ private:
+ HWCDisplayPluggable(CoreInterface *core_intf, HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id, int32_t sdm_id);
+ void ApplyScanAdjustment(hwc_rect_t *display_frame);
+ void GetUnderScanConfig();
+ static void GetDownscaleResolution(uint32_t primary_width, uint32_t primary_height,
+ uint32_t *virtual_width, uint32_t *virtual_height);
+
+ DisplayNullExternal display_null_;
+ int underscan_width_ = 0;
+ int underscan_height_ = 0;
+};
+
+} // namespace sdm
+
+#endif // __HWC_DISPLAY_PLUGGABLE_H__
diff --git a/sdm/libs/hwc2/hwc_display_pluggable_test.cpp b/sdm/libs/hwc2/hwc_display_pluggable_test.cpp
new file mode 100644
index 0000000..015ed67
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_pluggable_test.cpp
@@ -0,0 +1,749 @@
+/*
+* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <cutils/properties.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/formats.h>
+#include <algorithm>
+#include <array>
+#include <sstream>
+#include <string>
+#include <fstream>
+
+#include "hwc_display_pluggable_test.h"
+#include "hwc_debugger.h"
+
+#define __CLASS__ "HWCDisplayPluggableTest"
+
+namespace sdm {
+
+using std::array;
+
+int HWCDisplayPluggableTest::Create(CoreInterface *core_intf, HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id,
+ int32_t sdm_id, uint32_t panel_bpp, uint32_t pattern_type,
+ HWCDisplay **hwc_display) {
+ HWCDisplay *hwc_pluggable_test = new HWCDisplayPluggableTest(core_intf, buffer_allocator,
+ callbacks, event_handler, qservice,
+ id, sdm_id, panel_bpp, pattern_type);
+
+ int status = hwc_pluggable_test->Init();
+ if (status) {
+ delete hwc_pluggable_test;
+ return status;
+ }
+
+ *hwc_display = hwc_pluggable_test;
+
+ DLOGD("Pluggable panel_bpp %d, pattern_type %d", panel_bpp, pattern_type);
+
+ return status;
+}
+
+void HWCDisplayPluggableTest::Destroy(HWCDisplay *hwc_display) {
+ // Flush the display to have outstanding fences signaled.
+ hwc_display->Flush();
+ hwc_display->Deinit();
+
+ delete hwc_display;
+}
+
+HWCDisplayPluggableTest::HWCDisplayPluggableTest(CoreInterface *core_intf,
+ HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks,
+ HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id,
+ int32_t sdm_id, uint32_t panel_bpp,
+ uint32_t pattern_type)
+ : HWCDisplay(core_intf, buffer_allocator, callbacks, event_handler, qservice, kPluggable, id,
+ sdm_id, false, DISPLAY_CLASS_PLUGGABLE),
+ panel_bpp_(panel_bpp), pattern_type_(pattern_type) {
+}
+
+int HWCDisplayPluggableTest::Init() {
+ uint32_t pluggable_width = 0;
+ uint32_t pluggable_height = 0;
+
+ int status = HWCDisplay::Init();
+ if (status) {
+ DLOGE("HWCDisplayPluggableTest::Init status = %d ", status);
+ return status;
+ }
+
+ status = CreateLayerStack();
+ if (status) {
+ Deinit();
+ return status;
+ }
+
+ DisplayError error = HWCDisplay::GetMixerResolution(&pluggable_width, &pluggable_height);
+ if (error != kErrorNone) {
+ Deinit();
+ return -EINVAL;
+ }
+
+ status = HWCDisplay::SetFrameBufferResolution(pluggable_width, pluggable_height);
+ if (status) {
+ Deinit();
+ DLOGE("HWCDisplayPluggableTest:: set fb resolution status = %d ", status);
+ return status;
+ }
+
+ return status;
+}
+
+int HWCDisplayPluggableTest::Deinit() {
+ DestroyLayerStack();
+ return HWCDisplay::Deinit();
+}
+
+
+HWC2::Error HWCDisplayPluggableTest::Validate(uint32_t *out_num_types, uint32_t *out_num_requests) {
+ auto status = HWC2::Error::None;
+ if (active_secure_sessions_[kSecureDisplay] || display_paused_) {
+ MarkLayersForGPUBypass();
+ return status;
+ }
+
+ if (layer_set_.empty()) {
+ flush_ = true;
+ return status;
+ }
+
+ if (shutdown_pending_) {
+ return status;
+ }
+ DisplayError error = display_intf_->Prepare(&layer_stack_);
+ if (error != kErrorNone) {
+ if (error == kErrorShutDown) {
+ shutdown_pending_ = true;
+ } else if (error != kErrorPermission) {
+ DLOGE("Prepare failed. Error = %d", error);
+ // To prevent surfaceflinger infinite wait, flush the previous frame during Commit()
+ // so that previous buffer and fences are released, and override the error.
+ flush_ = true;
+ }
+ }
+
+ MarkLayersForGPUBypass();
+
+ return status;
+}
+
+HWC2::Error HWCDisplayPluggableTest::Present(int32_t *out_retire_fence) {
+ auto status = HWC2::Error::None;
+
+ if (active_secure_sessions_[kSecureDisplay]) {
+ return status;
+ }
+
+ if (display_paused_) {
+ DisplayError error = display_intf_->Flush(&layer_stack_);
+ validated_ = false;
+ if (error != kErrorNone) {
+ DLOGE("Flush failed. Error = %d", error);
+ }
+ }
+
+ if (shutdown_pending_) {
+ return status;
+ }
+
+ DumpInputBuffer();
+
+ if (!flush_) {
+ DisplayError error = kErrorUndefined;
+ error = display_intf_->Commit(&layer_stack_);
+ if (error == kErrorNone) {
+ // A commit is successfully submitted, start flushing on failure now onwards.
+ flush_on_error_ = true;
+ } else if (error == kErrorShutDown) {
+ shutdown_pending_ = true;
+ status = HWC2::Error::Unsupported;
+ } else if (error == kErrorNotValidated) {
+ status = HWC2::Error::NotValidated;
+ } else if (error != kErrorPermission) {
+ DLOGE("Commit failed. Error = %d", error);
+ // To prevent surfaceflinger infinite wait, flush the previous frame during Commit()
+ // so that previous buffer and fences are released, and override the error.
+ flush_ = true;
+ }
+ }
+ PostCommit(out_retire_fence);
+ return status;
+}
+
+int HWCDisplayPluggableTest::Perform(uint32_t operation, ...) {
+ return 0;
+}
+
+void HWCDisplayPluggableTest::DumpInputBuffer() {
+ if (!dump_frame_count_ || flush_ || !dump_input_layers_) {
+ return;
+ }
+
+ const char *dir_path = "/data/vendor/display/frame_dump_external";
+ uint32_t width = buffer_info_.alloc_buffer_info.aligned_width;
+ uint32_t height = buffer_info_.alloc_buffer_info.aligned_height;
+ string format_str = GetFormatString(buffer_info_.buffer_config.format);
+
+ char *buffer = reinterpret_cast<char *>(mmap(NULL, buffer_info_.alloc_buffer_info.size,
+ PROT_READ|PROT_WRITE, MAP_SHARED,
+ buffer_info_.alloc_buffer_info.fd, 0));
+ if (buffer == MAP_FAILED) {
+ DLOGW("mmap failed. err = %d", errno);
+ return;
+ }
+
+ if (mkdir(dir_path, 0777) != 0 && errno != EEXIST) {
+ DLOGW("Failed to create %s directory errno = %d, desc = %s", dir_path, errno, strerror(errno));
+ return;
+ }
+
+ // if directory exists already, need to explicitly change the permission.
+ if (errno == EEXIST && chmod(dir_path, 0777) != 0) {
+ DLOGW("Failed to change permissions on %s directory", dir_path);
+ return;
+ }
+
+ if (buffer) {
+ std::stringstream dump_file_name;
+ dump_file_name << dir_path;
+ dump_file_name << "/input_layer_" << width << "x" << height << "_" << format_str << ".raw";
+
+ std::fstream fs;
+ fs.open(dump_file_name.str().c_str(), std::fstream::in | std::fstream::out | std::fstream::app);
+ if (!fs.is_open()) {
+ DLOGI("File open failed %s", dump_file_name.str().c_str());
+ return;
+ }
+
+ fs.write(buffer, (std::streamsize)buffer_info_.alloc_buffer_info.size);
+ fs.close();
+
+ DLOGI("Frame Dump %s: is successful", dump_file_name.str().c_str());
+ }
+
+ // Dump only once as the content is going to be same for all draw cycles
+ if (dump_frame_count_) {
+ dump_frame_count_ = 0;
+ }
+
+ if (munmap(buffer, buffer_info_.alloc_buffer_info.size) != 0) {
+ DLOGW("munmap failed. err = %d", errno);
+ return;
+ }
+}
+
+void HWCDisplayPluggableTest::CalcCRC(uint32_t color_val, std::bitset<16> *crc_data) {
+ std::bitset<16> color = {};
+ std::bitset<16> temp_crc = {};
+
+ switch (panel_bpp_) {
+ case kDisplayBpp18:
+ color = (color_val & 0xFC) << 8;
+ break;
+ case kDisplayBpp24:
+ color = color_val << 8;
+ break;
+ case kDisplayBpp30:
+ color = color_val << 6;
+ break;
+ default:
+ return;
+ }
+
+ temp_crc[15] = (*crc_data)[0] ^ (*crc_data)[1] ^ (*crc_data)[2] ^ (*crc_data)[3] ^
+ (*crc_data)[4] ^ (*crc_data)[5] ^ (*crc_data)[6] ^ (*crc_data)[7] ^
+ (*crc_data)[8] ^ (*crc_data)[9] ^ (*crc_data)[10] ^ (*crc_data)[11] ^
+ (*crc_data)[12] ^ (*crc_data)[14] ^ (*crc_data)[15] ^ color[0] ^ color[1] ^
+ color[2] ^ color[3] ^ color[4] ^ color[5] ^ color[6] ^ color[7] ^ color[8] ^
+ color[9] ^ color[10] ^ color[11] ^ color[12] ^ color[14] ^ color[15];
+
+ temp_crc[14] = (*crc_data)[12] ^ (*crc_data)[13] ^ color[12] ^ color[13];
+ temp_crc[13] = (*crc_data)[11] ^ (*crc_data)[12] ^ color[11] ^ color[12];
+ temp_crc[12] = (*crc_data)[10] ^ (*crc_data)[11] ^ color[10] ^ color[11];
+ temp_crc[11] = (*crc_data)[9] ^ (*crc_data)[10] ^ color[9] ^ color[10];
+ temp_crc[10] = (*crc_data)[8] ^ (*crc_data)[9] ^ color[8] ^ color[9];
+ temp_crc[9] = (*crc_data)[7] ^ (*crc_data)[8] ^ color[7] ^ color[8];
+ temp_crc[8] = (*crc_data)[6] ^ (*crc_data)[7] ^ color[6] ^ color[7];
+ temp_crc[7] = (*crc_data)[5] ^ (*crc_data)[6] ^ color[5] ^ color[6];
+ temp_crc[6] = (*crc_data)[4] ^ (*crc_data)[5] ^ color[4] ^ color[5];
+ temp_crc[5] = (*crc_data)[3] ^ (*crc_data)[4] ^ color[3] ^ color[4];
+ temp_crc[4] = (*crc_data)[2] ^ (*crc_data)[3] ^ color[2] ^ color[3];
+ temp_crc[3] = (*crc_data)[1] ^ (*crc_data)[2] ^ (*crc_data)[15] ^ color[1] ^ color[2] ^ color[15];
+ temp_crc[2] = (*crc_data)[0] ^ (*crc_data)[1] ^ (*crc_data)[14] ^ color[0] ^ color[1] ^ color[14];
+
+ temp_crc[1] = (*crc_data)[1] ^ (*crc_data)[2] ^ (*crc_data)[3] ^ (*crc_data)[4] ^ (*crc_data)[5] ^
+ (*crc_data)[6] ^ (*crc_data)[7] ^ (*crc_data)[8] ^ (*crc_data)[9] ^
+ (*crc_data)[10] ^ (*crc_data)[11] ^ (*crc_data)[12] ^ (*crc_data)[13] ^
+ (*crc_data)[14] ^ color[1] ^ color[2] ^ color[3] ^ color[4] ^ color[5] ^ color[6] ^
+ color[7] ^ color[8] ^ color[9] ^ color[10] ^ color[11] ^ color[12] ^ color[13] ^
+ color[14];
+
+ temp_crc[0] = (*crc_data)[0] ^ (*crc_data)[1] ^ (*crc_data)[2] ^ (*crc_data)[3] ^ (*crc_data)[4] ^
+ (*crc_data)[5] ^ (*crc_data)[6] ^ (*crc_data)[7] ^ (*crc_data)[8] ^ (*crc_data)[9] ^
+ (*crc_data)[10] ^ (*crc_data)[11] ^ (*crc_data)[12] ^ (*crc_data)[13] ^
+ (*crc_data)[15] ^ color[0] ^ color[1] ^ color[2] ^ color[3] ^ color[4] ^ color[5] ^
+ color[6] ^ color[7] ^ color[8] ^ color[9] ^ color[10] ^ color[11] ^ color[12] ^
+ color[13] ^ color[15];
+
+ (*crc_data) = temp_crc;
+}
+
+int HWCDisplayPluggableTest::FillBuffer() {
+ uint8_t *buffer = reinterpret_cast<uint8_t *>(mmap(NULL, buffer_info_.alloc_buffer_info.size,
+ PROT_READ|PROT_WRITE, MAP_SHARED,
+ buffer_info_.alloc_buffer_info.fd, 0));
+ if (buffer == MAP_FAILED) {
+ DLOGE("mmap failed. err = %d", errno);
+ return -EFAULT;
+ }
+
+ switch (pattern_type_) {
+ case kPatternColorRamp:
+ GenerateColorRamp(buffer);
+ break;
+ case kPatternBWVertical:
+ GenerateBWVertical(buffer);
+ break;
+ case kPatternColorSquare:
+ GenerateColorSquare(buffer);
+ break;
+ default:
+ DLOGW("Invalid Pattern type %d", pattern_type_);
+ return -EINVAL;
+ }
+
+ if (munmap(buffer, buffer_info_.alloc_buffer_info.size) != 0) {
+ DLOGE("munmap failed. err = %d", errno);
+ return -EFAULT;
+ }
+
+ return 0;
+}
+
+int HWCDisplayPluggableTest::GetStride(LayerBufferFormat format, uint32_t width, uint32_t *stride) {
+ switch (format) {
+ case kFormatRGBA8888:
+ case kFormatRGBA1010102:
+ *stride = width * 4;
+ break;
+ case kFormatRGB888:
+ *stride = width * 3;
+ break;
+ default:
+ DLOGE("Unsupported format type %d", format);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+void HWCDisplayPluggableTest::PixelCopy(uint32_t red, uint32_t green, uint32_t blue, uint32_t alpha,
+ uint8_t **buffer) {
+ LayerBufferFormat format = buffer_info_.buffer_config.format;
+
+ switch (format) {
+ case kFormatRGBA8888:
+ *(*buffer)++ = UINT8(red & 0xFF);
+ *(*buffer)++ = UINT8(green & 0xFF);
+ *(*buffer)++ = UINT8(blue & 0xFF);
+ *(*buffer)++ = UINT8(alpha & 0xFF);
+ break;
+ case kFormatRGB888:
+ *(*buffer)++ = UINT8(red & 0xFF);
+ *(*buffer)++ = UINT8(green & 0xFF);
+ *(*buffer)++ = UINT8(blue & 0xFF);
+ break;
+ case kFormatRGBA1010102:
+ // Lower 8 bits of red
+ *(*buffer)++ = UINT8(red & 0xFF);
+
+ // Upper 2 bits of Red + Lower 6 bits of green
+ *(*buffer)++ = UINT8(((green & 0x3F) << 2) | ((red >> 0x8) & 0x3));
+
+ // Upper 4 bits of green + Lower 4 bits of blue
+ *(*buffer)++ = UINT8(((blue & 0xF) << 4) | ((green >> 6) & 0xF));
+
+ // Upper 6 bits of blue + Lower 2 bits of alpha
+ *(*buffer)++ = UINT8(((alpha & 0x3) << 6) | ((blue >> 4) & 0x3F));
+ break;
+ default:
+ DLOGW("format not supported format = %d", format);
+ break;
+ }
+}
+
+void HWCDisplayPluggableTest::GenerateColorRamp(uint8_t *buffer) {
+ uint32_t width = buffer_info_.buffer_config.width;
+ uint32_t height = buffer_info_.buffer_config.height;
+ LayerBufferFormat format = buffer_info_.buffer_config.format;
+ uint32_t aligned_width = buffer_info_.alloc_buffer_info.aligned_width;
+ uint32_t buffer_stride = 0;
+
+ uint32_t color_ramp = 0;
+ uint32_t start_color_val = 0;
+ uint32_t step_size = 1;
+ uint32_t ramp_width = 0;
+ uint32_t ramp_height = 0;
+ uint32_t shift_by = 0;
+
+ std::bitset<16> crc_red = {};
+ std::bitset<16> crc_green = {};
+ std::bitset<16> crc_blue = {};
+
+ switch (panel_bpp_) {
+ case kDisplayBpp18:
+ ramp_height = 64;
+ ramp_width = 64;
+ shift_by = 2;
+ break;
+ case kDisplayBpp24:
+ ramp_height = 64;
+ ramp_width = 256;
+ break;
+ case kDisplayBpp30:
+ ramp_height = 32;
+ ramp_width = 256;
+ start_color_val = 0x180;
+ break;
+ default:
+ return;
+ }
+
+ GetStride(format, aligned_width, &buffer_stride);
+
+ for (uint32_t loop_height = 0; loop_height < height; loop_height++) {
+ uint32_t color_value = start_color_val;
+ uint8_t *temp = buffer + (loop_height * buffer_stride);
+
+ for (uint32_t loop_width = 0; loop_width < width; loop_width++) {
+ if (color_ramp == kColorRedRamp) {
+ PixelCopy(color_value, 0, 0, 0, &temp);
+ CalcCRC(color_value, &crc_red);
+ CalcCRC(0, &crc_green);
+ CalcCRC(0, &crc_blue);
+ }
+ if (color_ramp == kColorGreenRamp) {
+ PixelCopy(0, color_value, 0, 0, &temp);
+ CalcCRC(0, &crc_red);
+ CalcCRC(color_value, &crc_green);
+ CalcCRC(0, &crc_blue);
+ }
+ if (color_ramp == kColorBlueRamp) {
+ PixelCopy(0, 0, color_value, 0, &temp);
+ CalcCRC(0, &crc_red);
+ CalcCRC(0, &crc_green);
+ CalcCRC(color_value, &crc_blue);
+ }
+ if (color_ramp == kColorWhiteRamp) {
+ PixelCopy(color_value, color_value, color_value, 0, &temp);
+ CalcCRC(color_value, &crc_red);
+ CalcCRC(color_value, &crc_green);
+ CalcCRC(color_value, &crc_blue);
+ }
+
+ color_value = (start_color_val + (((loop_width + 1) % ramp_width) * step_size)) << shift_by;
+ }
+
+ if (panel_bpp_ == kDisplayBpp30 && ((loop_height + 1) % ramp_height) == 0) {
+ if (start_color_val == 0x180) {
+ start_color_val = 0;
+ step_size = 4;
+ } else {
+ start_color_val = 0x180;
+ step_size = 1;
+ color_ramp = (color_ramp + 1) % 4;
+ }
+ continue;
+ }
+
+ if (((loop_height + 1) % ramp_height) == 0) {
+ color_ramp = (color_ramp + 1) % 4;
+ }
+ }
+
+ DLOGI("CRC red %x", crc_red.to_ulong());
+ DLOGI("CRC green %x", crc_green.to_ulong());
+ DLOGI("CRC blue %x", crc_blue.to_ulong());
+}
+
+void HWCDisplayPluggableTest::GenerateBWVertical(uint8_t *buffer) {
+ uint32_t width = buffer_info_.buffer_config.width;
+ uint32_t height = buffer_info_.buffer_config.height;
+ LayerBufferFormat format = buffer_info_.buffer_config.format;
+ uint32_t aligned_width = buffer_info_.alloc_buffer_info.aligned_width;
+ uint32_t buffer_stride = 0;
+ uint32_t bits_per_component = panel_bpp_ / 3;
+ uint32_t max_color_val = (1 << bits_per_component) - 1;
+
+ std::bitset<16> crc_red = {};
+ std::bitset<16> crc_green = {};
+ std::bitset<16> crc_blue = {};
+
+ if (panel_bpp_ == kDisplayBpp18) {
+ max_color_val <<= 2;
+ }
+
+ GetStride(format, aligned_width, &buffer_stride);
+
+ for (uint32_t loop_height = 0; loop_height < height; loop_height++) {
+ uint32_t color = 0;
+ uint8_t *temp = buffer + (loop_height * buffer_stride);
+
+ for (uint32_t loop_width = 0; loop_width < width; loop_width++) {
+ if (color == kColorBlack) {
+ PixelCopy(0, 0, 0, 0, &temp);
+ CalcCRC(0, &crc_red);
+ CalcCRC(0, &crc_green);
+ CalcCRC(0, &crc_blue);
+ }
+ if (color == kColorWhite) {
+ PixelCopy(max_color_val, max_color_val, max_color_val, 0, &temp);
+ CalcCRC(max_color_val, &crc_red);
+ CalcCRC(max_color_val, &crc_green);
+ CalcCRC(max_color_val, &crc_blue);
+ }
+
+ color = (color + 1) % 2;
+ }
+ }
+
+ DLOGI("CRC red %x", crc_red.to_ulong());
+ DLOGI("CRC green %x", crc_green.to_ulong());
+ DLOGI("CRC blue %x", crc_blue.to_ulong());
+}
+
+void HWCDisplayPluggableTest::GenerateColorSquare(uint8_t *buffer) {
+ uint32_t width = buffer_info_.buffer_config.width;
+ uint32_t height = buffer_info_.buffer_config.height;
+ LayerBufferFormat format = buffer_info_.buffer_config.format;
+ uint32_t aligned_width = buffer_info_.alloc_buffer_info.aligned_width;
+ uint32_t buffer_stride = 0;
+ uint32_t max_color_val = 0;
+ uint32_t min_color_val = 0;
+
+ std::bitset<16> crc_red = {};
+ std::bitset<16> crc_green = {};
+ std::bitset<16> crc_blue = {};
+
+ switch (panel_bpp_) {
+ case kDisplayBpp18:
+ max_color_val = 63 << 2; // CEA Dynamic range for 18bpp 0 - 63
+ min_color_val = 0;
+ break;
+ case kDisplayBpp24:
+ max_color_val = 235; // CEA Dynamic range for 24bpp 16 - 235
+ min_color_val = 16;
+ break;
+ case kDisplayBpp30:
+ max_color_val = 940; // CEA Dynamic range for 30bpp 64 - 940
+ min_color_val = 64;
+ break;
+ default:
+ return;
+ }
+
+ array<array<uint32_t, 3>, 8> colors = {{
+ {{max_color_val, max_color_val, max_color_val}}, // White Color
+ {{max_color_val, max_color_val, min_color_val}}, // Yellow Color
+ {{min_color_val, max_color_val, max_color_val}}, // Cyan Color
+ {{min_color_val, max_color_val, min_color_val}}, // Green Color
+ {{max_color_val, min_color_val, max_color_val}}, // Megenta Color
+ {{max_color_val, min_color_val, min_color_val}}, // Red Color
+ {{min_color_val, min_color_val, max_color_val}}, // Blue Color
+ {{min_color_val, min_color_val, min_color_val}}, // Black Color
+ }};
+
+ GetStride(format, aligned_width, &buffer_stride);
+
+ for (uint32_t loop_height = 0; loop_height < height; loop_height++) {
+ uint32_t color = 0;
+ uint8_t *temp = buffer + (loop_height * buffer_stride);
+
+ for (uint32_t loop_width = 0; loop_width < width; loop_width++) {
+ PixelCopy(colors[color][0], colors[color][1], colors[color][2], 0, &temp);
+ CalcCRC(colors[color][0], &crc_red);
+ CalcCRC(colors[color][1], &crc_green);
+ CalcCRC(colors[color][2], &crc_blue);
+
+ if (((loop_width + 1) % 64) == 0) {
+ color = (color + 1) % colors.size();
+ }
+ }
+
+ if (((loop_height + 1) % 64) == 0) {
+ std::reverse(colors.begin(), (colors.end() - 1));
+ }
+ }
+
+ DLOGI("CRC red %x", crc_red.to_ulong());
+ DLOGI("CRC green %x", crc_green.to_ulong());
+ DLOGI("CRC blue %x", crc_blue.to_ulong());
+}
+
+int HWCDisplayPluggableTest::InitLayer(Layer *layer) {
+ uint32_t active_config = 0;
+ DisplayConfigVariableInfo var_info = {};
+
+ GetActiveDisplayConfig(&active_config);
+
+ GetDisplayAttributesForConfig(INT32(active_config), &var_info);
+
+ layer->flags.updating = 1;
+ layer->src_rect = LayerRect(0, 0, var_info.x_pixels, var_info.y_pixels);
+ layer->dst_rect = layer->src_rect;
+ layer->frame_rate = var_info.fps;
+ layer->blending = kBlendingPremultiplied;
+
+ layer->input_buffer.unaligned_width = var_info.x_pixels;
+ layer->input_buffer.unaligned_height = var_info.y_pixels;
+ buffer_info_.buffer_config.format = kFormatRGBA8888;
+
+ if (layer->composition != kCompositionGPUTarget) {
+ buffer_info_.buffer_config.width = var_info.x_pixels;
+ buffer_info_.buffer_config.height = var_info.y_pixels;
+ switch (panel_bpp_) {
+ case kDisplayBpp18:
+ case kDisplayBpp24:
+ buffer_info_.buffer_config.format = kFormatRGB888;
+ break;
+ case kDisplayBpp30:
+ buffer_info_.buffer_config.format = kFormatRGBA1010102;
+ break;
+ default:
+ DLOGW("panel bpp not supported %d", panel_bpp_);
+ return -EINVAL;
+ }
+ buffer_info_.buffer_config.buffer_count = 1;
+
+ int ret = buffer_allocator_->AllocateBuffer(&buffer_info_);
+ if (ret != 0) {
+ DLOGE("Buffer allocation failed. ret: %d", ret);
+ return -ENOMEM;
+ }
+
+ ret = FillBuffer();
+ if (ret != 0) {
+ buffer_allocator_->FreeBuffer(&buffer_info_);
+ return ret;
+ }
+
+ layer->input_buffer.width = buffer_info_.alloc_buffer_info.aligned_width;
+ layer->input_buffer.height = buffer_info_.alloc_buffer_info.aligned_height;
+ layer->input_buffer.size = buffer_info_.alloc_buffer_info.size;
+ layer->input_buffer.planes[0].fd = buffer_info_.alloc_buffer_info.fd;
+ layer->input_buffer.planes[0].stride = buffer_info_.alloc_buffer_info.stride;
+ layer->input_buffer.format = buffer_info_.buffer_config.format;
+
+ DLOGI("Input buffer WxH %dx%d format %s size %d fd %d stride %d", layer->input_buffer.width,
+ layer->input_buffer.height, GetFormatString(layer->input_buffer.format),
+ layer->input_buffer.size, layer->input_buffer.planes[0].fd,
+ layer->input_buffer.planes[0].stride);
+ }
+
+ return 0;
+}
+
+int HWCDisplayPluggableTest::DeinitLayer(Layer *layer) {
+ if (layer->composition != kCompositionGPUTarget) {
+ int ret = buffer_allocator_->FreeBuffer(&buffer_info_);
+ if (ret != 0) {
+ DLOGE("Buffer deallocation failed. ret: %d", ret);
+ return -ENOMEM;
+ }
+ }
+
+ return 0;
+}
+
+int HWCDisplayPluggableTest::CreateLayerStack() {
+ for (uint32_t i = 0; i < (kTestLayerCnt + 1 /* one dummy gpu_target layer */); i++) {
+ Layer *layer = new Layer();
+
+ if (i == kTestLayerCnt) {
+ layer->composition = kCompositionGPUTarget;
+ }
+ DLOGD("External :: CreateLayerStack %d", i);
+ int ret = InitLayer(layer);
+ if (ret != 0) {
+ delete layer;
+ return ret;
+ }
+ layer_stack_.layers.push_back(layer);
+ }
+
+ return 0;
+}
+
+int HWCDisplayPluggableTest::DestroyLayerStack() {
+ for (uint32_t i = 0; i < UINT32(layer_stack_.layers.size()); i++) {
+ Layer *layer = layer_stack_.layers.at(i);
+ int ret = DeinitLayer(layer);
+ if (ret != 0) {
+ return ret;
+ }
+ delete layer;
+ }
+ layer_stack_.layers = {};
+
+ return 0;
+}
+
+HWC2::Error HWCDisplayPluggableTest::PostCommit(int32_t *out_retire_fence) {
+ auto status = HWC2::Error::None;
+ // Do no call flush on errors, if a successful buffer is never submitted.
+ if (flush_ && flush_on_error_) {
+ display_intf_->Flush(&layer_stack_);
+ }
+ if (!flush_) {
+ for (size_t i = 0; i < layer_stack_.layers.size(); i++) {
+ Layer *layer = layer_stack_.layers.at(i);
+ LayerBuffer &layer_buffer = layer->input_buffer;
+
+ close(layer_buffer.release_fence_fd);
+ layer_buffer.release_fence_fd = -1;
+ }
+ close(layer_stack_.retire_fence_fd);
+ layer_stack_.retire_fence_fd = -1;
+ *out_retire_fence = -1;
+ }
+ flush_ = false;
+
+ return status;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/hwc2/hwc_display_pluggable_test.h b/sdm/libs/hwc2/hwc_display_pluggable_test.h
new file mode 100644
index 0000000..920003e
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_pluggable_test.h
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __HWC_DISPLAY_PLUGGABLE_TEST_H__
+#define __HWC_DISPLAY_PLUGGABLE_TEST_H__
+
+#include <bitset>
+
+#include "hwc_display.h"
+#include "hwc_buffer_allocator.h"
+
+namespace sdm {
+
+class HWCDisplayPluggableTest : public HWCDisplay {
+ public:
+ static int Create(CoreInterface *core_intf, HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id, int32_t sdm_id,
+ uint32_t panel_bpp, uint32_t pattern_type, HWCDisplay **hwc_display);
+ static void Destroy(HWCDisplay *hwc_display);
+ virtual HWC2::Error Validate(uint32_t *out_num_types, uint32_t *out_num_requests);
+ virtual HWC2::Error Present(int32_t *out_retire_fence);
+ virtual int Perform(uint32_t operation, ...);
+
+ protected:
+ BufferInfo buffer_info_ = {};
+ uint32_t panel_bpp_ = 0;
+ uint32_t pattern_type_ = 0;
+
+ enum ColorPatternType {
+ kPatternNone = 0,
+ kPatternColorRamp,
+ kPatternBWVertical,
+ kPatternColorSquare,
+ };
+
+ enum DisplayBpp {
+ kDisplayBpp18 = 18,
+ kDisplayBpp24 = 24,
+ kDisplayBpp30 = 30,
+ };
+
+ enum ColorRamp {
+ kColorRedRamp = 0,
+ kColorGreenRamp = 1,
+ kColorBlueRamp = 2,
+ kColorWhiteRamp = 3,
+ };
+
+ enum Colors {
+ kColorBlack = 0,
+ kColorWhite = 1,
+ };
+
+ private:
+ HWCDisplayPluggableTest(CoreInterface *core_intf, HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, HWCDisplayEventHandler *event_handler,
+ qService::QService *qservice, hwc2_display_t id,
+ int32_t sdm_id, uint32_t panel_bpp, uint32_t pattern_type);
+ int Init();
+ int Deinit();
+ void DumpInputBuffer();
+ void CalcCRC(uint32_t color_value, std::bitset<16> *crc_data);
+ int FillBuffer();
+ int GetStride(LayerBufferFormat format, uint32_t width, uint32_t *stride);
+ void PixelCopy(uint32_t red, uint32_t green, uint32_t blue, uint32_t alpha, uint8_t **buffer);
+ void GenerateColorRamp(uint8_t *buffer);
+ void GenerateBWVertical(uint8_t *buffer);
+ void GenerateColorSquare(uint8_t *buffer);
+ int InitLayer(Layer *layer);
+ int DeinitLayer(Layer *layer);
+ int CreateLayerStack();
+ int DestroyLayerStack();
+ HWC2::Error PostCommit(int32_t *out_retire_fence);
+
+ static const uint32_t kTestLayerCnt = 1;
+};
+
+} // namespace sdm
+
+#endif // __HWC_DISPLAY_PLUGGABLE_TEST_H__
+
diff --git a/sdm/libs/hwc2/hwc_display_virtual.cpp b/sdm/libs/hwc2/hwc_display_virtual.cpp
new file mode 100644
index 0000000..6930399
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_virtual.cpp
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <sync/sync.h>
+#include <stdarg.h>
+
+#include "hwc_display_virtual.h"
+#include "hwc_debugger.h"
+
+#define __CLASS__ "HWCDisplayVirtual"
+
+namespace sdm {
+
+int HWCDisplayVirtual::Create(CoreInterface *core_intf, HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, hwc2_display_t id, int32_t sdm_id,
+ uint32_t width, uint32_t height, int32_t *format,
+ HWCDisplay **hwc_display, float min_lum, float max_lum) {
+ int status = 0;
+ HWCDisplayVirtual *hwc_display_virtual = new HWCDisplayVirtual(core_intf, buffer_allocator,
+ callbacks, id, sdm_id);
+
+ // TODO(user): Populate format correctly
+ DLOGI("Creating virtual display: w: %d h:%d format:0x%x", width, height, *format);
+
+ status = hwc_display_virtual->Init();
+ if (status) {
+ DLOGW("Failed to initialize virtual display");
+ delete hwc_display_virtual;
+ return status;
+ }
+
+ if (max_lum != -1.0 || min_lum != -1.0) {
+ hwc_display_virtual->SetPanelLuminanceAttributes(min_lum, max_lum);
+ }
+
+ status = hwc_display_virtual->SetConfig(width, height);
+ if (status) {
+ Destroy(hwc_display_virtual);
+ return status;
+ }
+
+ status = INT32(hwc_display_virtual->SetPowerMode(HWC2::PowerMode::On, false /* teardown */));
+ if (status) {
+ DLOGW("Failed to set power mode on virtual display");
+ Destroy(hwc_display_virtual);
+ return status;
+ }
+
+ // TODO(user): Validate that we support this width/height
+ status = hwc_display_virtual->SetFrameBufferResolution(width, height);
+
+ if (status) {
+ DLOGW("Failed to set virtual display FB resolution");
+ Destroy(hwc_display_virtual);
+ return status;
+ }
+
+ *hwc_display = static_cast<HWCDisplay *>(hwc_display_virtual);
+
+ return 0;
+}
+
+void HWCDisplayVirtual::Destroy(HWCDisplay *hwc_display) {
+ hwc_display->Deinit();
+ delete hwc_display;
+}
+
+HWCDisplayVirtual::HWCDisplayVirtual(CoreInterface *core_intf, HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, hwc2_display_t id, int32_t sdm_id) :
+ HWCDisplay(core_intf, buffer_allocator, callbacks, nullptr, nullptr, kVirtual, id, sdm_id,
+ false, DISPLAY_CLASS_VIRTUAL) {
+}
+
+int HWCDisplayVirtual::Init() {
+ output_buffer_ = new LayerBuffer();
+ flush_on_error_ = true;
+ return HWCDisplay::Init();
+}
+
+int HWCDisplayVirtual::Deinit() {
+ int status = 0;
+ if (output_buffer_) {
+ if (output_buffer_->acquire_fence_fd >= 0) {
+ close(output_buffer_->acquire_fence_fd);
+ }
+ delete output_buffer_;
+ output_buffer_ = nullptr;
+ }
+ status = HWCDisplay::Deinit();
+
+ return status;
+}
+
+HWC2::Error HWCDisplayVirtual::Validate(uint32_t *out_num_types, uint32_t *out_num_requests) {
+ auto status = HWC2::Error::None;
+
+ if (display_paused_ || active_secure_sessions_.any()) {
+ MarkLayersForGPUBypass();
+ return status;
+ }
+
+ BuildLayerStack();
+ layer_stack_.output_buffer = output_buffer_;
+ // If Output buffer of Virtual Display is not secure, set SKIP flag on the secure layers.
+ if (output_buffer_ && !output_buffer_->flags.secure && layer_stack_.flags.secure_present) {
+ for (auto hwc_layer : layer_set_) {
+ Layer *layer = hwc_layer->GetSDMLayer();
+ if (layer->input_buffer.flags.secure) {
+ layer_stack_.flags.skip_present = true;
+ layer->flags.skip = true;
+ }
+ }
+ }
+
+ if (layer_set_.empty()) {
+ DLOGI("Skipping Validate and Commit");
+ return status;
+ }
+ status = PrepareLayerStack(out_num_types, out_num_requests);
+ return status;
+}
+
+HWC2::Error HWCDisplayVirtual::Present(int32_t *out_retire_fence) {
+ auto status = HWC2::Error::None;
+
+ if (!output_buffer_->buffer_id) {
+ return HWC2::Error::NoResources;
+ }
+
+ if (active_secure_sessions_.any()) {
+ return status;
+ }
+
+ layer_stack_.output_buffer = output_buffer_;
+ if (display_paused_) {
+ validated_ = false;
+ flush_ = true;
+ }
+
+ status = HWCDisplay::CommitLayerStack();
+ if (status != HWC2::Error::None) {
+ return status;
+ }
+
+ if (dump_frame_count_ && !flush_ && dump_output_layer_) {
+ if (output_handle_) {
+ BufferInfo buffer_info;
+ const private_handle_t *output_handle =
+ reinterpret_cast<const private_handle_t *>(output_buffer_->buffer_id);
+ DisplayError error = kErrorNone;
+ if (!output_handle->base) {
+ error = buffer_allocator_->MapBuffer(output_handle, -1);
+ if (error != kErrorNone) {
+ DLOGE("Failed to map output buffer, error = %d", error);
+ return HWC2::Error::BadParameter;
+ }
+ }
+ buffer_info.buffer_config.width = static_cast<uint32_t>(output_handle->width);
+ buffer_info.buffer_config.height = static_cast<uint32_t>(output_handle->height);
+ buffer_info.buffer_config.format =
+ HWCLayer::GetSDMFormat(output_handle->format, output_handle->flags);
+ buffer_info.alloc_buffer_info.size = static_cast<uint32_t>(output_handle->size);
+ DumpOutputBuffer(buffer_info, reinterpret_cast<void *>(output_handle->base),
+ layer_stack_.retire_fence_fd);
+
+ int release_fence = -1;
+ error = buffer_allocator_->UnmapBuffer(output_handle, &release_fence);
+ if (error != kErrorNone) {
+ DLOGE("Failed to unmap buffer, error = %d", error);
+ return HWC2::Error::BadParameter;
+ }
+ }
+ }
+
+ status = HWCDisplay::PostCommitLayerStack(out_retire_fence);
+
+ return status;
+}
+
+int HWCDisplayVirtual::SetConfig(uint32_t width, uint32_t height) {
+ DisplayConfigVariableInfo variable_info;
+ variable_info.x_pixels = width;
+ variable_info.y_pixels = height;
+ // TODO(user): Need to get the framerate of primary display and update it.
+ variable_info.fps = 60;
+ DisplayError err = display_intf_->SetActiveConfig(&variable_info);
+ if (err != kErrorNone) {
+ return -EINVAL;
+ }
+ return 0;
+}
+
+
+HWC2::Error HWCDisplayVirtual::SetPanelLuminanceAttributes(float min_lum, float max_lum) {
+ DisplayError err = display_intf_->SetPanelLuminanceAttributes(min_lum, max_lum);
+ if (err != kErrorNone) {
+ return HWC2::Error::BadParameter;
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayVirtual::SetOutputBuffer(buffer_handle_t buf, int32_t release_fence) {
+ if (buf == nullptr || release_fence == 0) {
+ return HWC2::Error::BadParameter;
+ }
+ const private_handle_t *output_handle = static_cast<const private_handle_t *>(buf);
+
+ // Close the previous acquire fence and update with the latest release fence to avoid fence leak
+ // in case if this function gets invoked multiple times from the client.
+ if (output_buffer_->acquire_fence_fd >= 0) {
+ close(output_buffer_->acquire_fence_fd);
+ }
+ // Fill output buffer parameters (width, height, format, plane information, fence)
+ output_buffer_->acquire_fence_fd = dup(release_fence);
+
+ if (output_handle) {
+ int output_handle_format = output_handle->format;
+ int active_aligned_w, active_aligned_h;
+ int new_width, new_height;
+ int new_aligned_w, new_aligned_h;
+ uint32_t active_width, active_height;
+ ColorMetaData color_metadata = {};
+
+ if (output_handle_format == HAL_PIXEL_FORMAT_RGBA_8888) {
+ output_handle_format = HAL_PIXEL_FORMAT_RGBX_8888;
+ }
+
+ LayerBufferFormat new_sdm_format =
+ HWCLayer::GetSDMFormat(output_handle_format, output_handle->flags);
+ if (new_sdm_format == kFormatInvalid) {
+ return HWC2::Error::BadParameter;
+ }
+
+ if (sdm::SetCSC(output_handle, &color_metadata) != kErrorNone) {
+ return HWC2::Error::BadParameter;
+ }
+
+ GetMixerResolution(&active_width, &active_height);
+ buffer_allocator_->GetCustomWidthAndHeight(output_handle, &new_width, &new_height);
+ buffer_allocator_->GetAlignedWidthAndHeight(INT(new_width), INT(new_height),
+ output_handle_format, 0, &new_aligned_w,
+ &new_aligned_h);
+ buffer_allocator_->GetAlignedWidthAndHeight(INT(active_width), INT(active_height),
+ output_handle_format, 0, &active_aligned_w,
+ &active_aligned_h);
+ if (new_aligned_w != active_aligned_w || new_aligned_h != active_aligned_h) {
+ int status = SetConfig(UINT32(new_width), UINT32(new_height));
+ if (status) {
+ DLOGE("SetConfig failed custom WxH %dx%d", new_width, new_height);
+ return HWC2::Error::BadParameter;
+ }
+ validated_ = false;
+ }
+
+ output_buffer_->width = UINT32(new_aligned_w);
+ output_buffer_->height = UINT32(new_aligned_h);
+ output_buffer_->unaligned_width = UINT32(new_width);
+ output_buffer_->unaligned_height = UINT32(new_height);
+ output_buffer_->flags.secure = 0;
+ output_buffer_->flags.video = 0;
+ output_buffer_->buffer_id = reinterpret_cast<uint64_t>(output_handle);
+ output_buffer_->format = new_sdm_format;
+ output_buffer_->color_metadata = color_metadata;
+ output_handle_ = output_handle;
+
+ // TZ Protected Buffer - L1
+ if (output_handle->flags & private_handle_t::PRIV_FLAGS_SECURE_BUFFER) {
+ output_buffer_->flags.secure = 1;
+ }
+
+ // ToDo: Need to extend for non-RGB formats
+ output_buffer_->planes[0].fd = output_handle->fd;
+ output_buffer_->planes[0].offset = output_handle->offset;
+ output_buffer_->planes[0].stride = UINT32(output_handle->width);
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayVirtual::SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type,
+ int32_t format, bool post_processed) {
+ HWCDisplay::SetFrameDumpConfig(count, bit_mask_layer_type, format, post_processed);
+ dump_output_layer_ = ((bit_mask_layer_type & (1 << OUTPUT_LAYER_DUMP)) != 0);
+
+ DLOGI("output_layer_dump_enable %d", dump_output_layer_);
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayVirtual::GetDisplayType(int32_t *out_type) {
+ if (out_type == nullptr) {
+ return HWC2::Error::BadParameter;
+ }
+
+ *out_type = HWC2_DISPLAY_TYPE_VIRTUAL;
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCDisplayVirtual::SetColorMode(ColorMode mode) {
+ return HWC2::Error::None;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_display_virtual.h b/sdm/libs/hwc2/hwc_display_virtual.h
new file mode 100644
index 0000000..4de0d34
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_display_virtual.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
+ *
+ * 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.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * 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.
+ */
+
+#ifndef __HWC_DISPLAY_VIRTUAL_H__
+#define __HWC_DISPLAY_VIRTUAL_H__
+
+#include <qdMetaData.h>
+#include <gralloc_priv.h>
+#include "hwc_display.h"
+#include "hwc_display_event_handler.h"
+
+namespace sdm {
+
+class HWCDisplayVirtual : public HWCDisplay {
+ public:
+ static int Create(CoreInterface *core_intf, HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, hwc2_display_t id, int32_t sdm_id, uint32_t width,
+ uint32_t height, int32_t *format, HWCDisplay **hwc_display, float min_lum,
+ float max_lum);
+ static void Destroy(HWCDisplay *hwc_display);
+ virtual int Init();
+ virtual int Deinit();
+ virtual HWC2::Error Validate(uint32_t *out_num_types, uint32_t *out_num_requests);
+ virtual HWC2::Error Present(int32_t *out_retire_fence);
+ virtual HWC2::Error SetFrameDumpConfig(uint32_t count, uint32_t bit_mask_layer_type,
+ int32_t format, bool post_processed);
+ virtual HWC2::Error GetDisplayType(int32_t *out_type);
+ virtual HWC2::Error SetColorMode(ColorMode mode);
+ virtual HWC2::Error SetColorModeWithRenderIntent(ColorMode mode, RenderIntent intent) {
+ return HWC2::Error::None;
+ }
+ virtual HWC2::Error SetPanelLuminanceAttributes(float min_lum, float max_lum);
+ HWC2::Error SetOutputBuffer(buffer_handle_t buf, int32_t release_fence);
+
+ private:
+ HWCDisplayVirtual(CoreInterface *core_intf, HWCBufferAllocator *buffer_allocator,
+ HWCCallbacks *callbacks, hwc2_display_t id, int32_t sdm_id);
+ int SetConfig(uint32_t width, uint32_t height);
+
+ bool dump_output_layer_ = false;
+ LayerBuffer *output_buffer_ = NULL;
+ const private_handle_t *output_handle_ = nullptr;
+};
+
+} // namespace sdm
+
+#endif // __HWC_DISPLAY_VIRTUAL_H__
diff --git a/sdm/libs/hwc2/hwc_layers.cpp b/sdm/libs/hwc2/hwc_layers.cpp
new file mode 100644
index 0000000..ecc1802
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_layers.cpp
@@ -0,0 +1,1117 @@
+/*
+ * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "hwc_layers.h"
+#include <utils/debug.h>
+#include <stdint.h>
+#include <utility>
+#include <cmath>
+#include <qdMetaData.h>
+
+#define __CLASS__ "HWCLayer"
+
+namespace sdm {
+
+std::atomic<hwc2_layer_t> HWCLayer::next_id_(1);
+
+DisplayError SetCSC(const private_handle_t *pvt_handle, ColorMetaData *color_metadata) {
+ if (getMetaData(const_cast<private_handle_t *>(pvt_handle), GET_COLOR_METADATA,
+ color_metadata) != 0) {
+ ColorSpace_t csc = ITU_R_601;
+ if (getMetaData(const_cast<private_handle_t *>(pvt_handle), GET_COLOR_SPACE,
+ &csc) == 0) {
+ if (csc == ITU_R_601_FR || csc == ITU_R_2020_FR) {
+ color_metadata->range = Range_Full;
+ }
+ color_metadata->transfer = Transfer_sRGB;
+
+ switch (csc) {
+ case ITU_R_601:
+ case ITU_R_601_FR:
+ // video and display driver uses 601_525
+ color_metadata->colorPrimaries = ColorPrimaries_BT601_6_525;
+ break;
+ case ITU_R_709:
+ color_metadata->colorPrimaries = ColorPrimaries_BT709_5;
+ break;
+ case ITU_R_2020:
+ case ITU_R_2020_FR:
+ color_metadata->colorPrimaries = ColorPrimaries_BT2020;
+ break;
+ default:
+ DLOGE("Unsupported CSC: %d", csc);
+ return kErrorNotSupported;
+ }
+ }
+ }
+
+ return kErrorNone;
+}
+
+// Returns true when color primary is supported
+bool GetColorPrimary(const int32_t &dataspace, ColorPrimaries *color_primary) {
+ auto standard = dataspace & HAL_DATASPACE_STANDARD_MASK;
+ bool supported_csc = true;
+ switch (standard) {
+ case HAL_DATASPACE_STANDARD_BT709:
+ *color_primary = ColorPrimaries_BT709_5;
+ break;
+ case HAL_DATASPACE_STANDARD_BT601_525:
+ case HAL_DATASPACE_STANDARD_BT601_525_UNADJUSTED:
+ *color_primary = ColorPrimaries_BT601_6_525;
+ break;
+ case HAL_DATASPACE_STANDARD_BT601_625:
+ case HAL_DATASPACE_STANDARD_BT601_625_UNADJUSTED:
+ *color_primary = ColorPrimaries_BT601_6_625;
+ break;
+ case HAL_DATASPACE_STANDARD_DCI_P3:
+ *color_primary = ColorPrimaries_DCIP3;
+ break;
+ case HAL_DATASPACE_STANDARD_BT2020:
+ *color_primary = ColorPrimaries_BT2020;
+ break;
+ default:
+ DLOGW_IF(kTagClient, "Unsupported Standard Request = %d", standard);
+ supported_csc = false;
+ }
+ return supported_csc;
+}
+
+bool GetTransfer(const int32_t &dataspace, GammaTransfer *gamma_transfer) {
+ auto transfer = dataspace & HAL_DATASPACE_TRANSFER_MASK;
+ bool supported_transfer = true;
+ switch (transfer) {
+ case HAL_DATASPACE_TRANSFER_SRGB:
+ *gamma_transfer = Transfer_sRGB;
+ break;
+ case HAL_DATASPACE_TRANSFER_SMPTE_170M:
+ *gamma_transfer = Transfer_SMPTE_170M;
+ break;
+ case HAL_DATASPACE_TRANSFER_ST2084:
+ *gamma_transfer = Transfer_SMPTE_ST2084;
+ break;
+ case HAL_DATASPACE_TRANSFER_HLG:
+ *gamma_transfer = Transfer_HLG;
+ break;
+ case HAL_DATASPACE_TRANSFER_LINEAR:
+ *gamma_transfer = Transfer_Linear;
+ break;
+ case HAL_DATASPACE_TRANSFER_GAMMA2_2:
+ *gamma_transfer = Transfer_Gamma2_2;
+ break;
+ case HAL_DATASPACE_TRANSFER_GAMMA2_8:
+ *gamma_transfer = Transfer_Gamma2_8;
+ break;
+ default:
+ DLOGW_IF(kTagClient, "Unsupported Transfer Request = %d", transfer);
+ supported_transfer = false;
+ }
+ return supported_transfer;
+}
+
+bool GetRange(const int32_t &dataspace, ColorRange *color_range) {
+ auto range = dataspace & HAL_DATASPACE_RANGE_MASK;
+ switch (range) {
+ case HAL_DATASPACE_RANGE_FULL:
+ *color_range = Range_Full;
+ break;
+ case HAL_DATASPACE_RANGE_LIMITED:
+ *color_range = Range_Limited;
+ break;
+ case HAL_DATASPACE_RANGE_EXTENDED:
+ *color_range = Range_Extended;
+ return false;
+ default:
+ DLOGW_IF(kTagClient, "Unsupported Range Request = %d", range);
+ return false;
+ }
+ return true;
+}
+
+bool IsBT2020(const ColorPrimaries &color_primary) {
+ switch (color_primary) {
+ case ColorPrimaries_BT2020:
+ return true;
+ break;
+ default:
+ return false;
+ }
+}
+
+int32_t TranslateFromLegacyDataspace(const int32_t &legacy_ds) {
+ int32_t dataspace = legacy_ds;
+
+ if (dataspace & 0xffff) {
+ switch (dataspace & 0xffff) {
+ case HAL_DATASPACE_SRGB:
+ dataspace = HAL_DATASPACE_V0_SRGB;
+ break;
+ case HAL_DATASPACE_JFIF:
+ dataspace = HAL_DATASPACE_V0_JFIF;
+ break;
+ case HAL_DATASPACE_SRGB_LINEAR:
+ dataspace = HAL_DATASPACE_V0_SRGB_LINEAR;
+ break;
+ case HAL_DATASPACE_BT601_625:
+ dataspace = HAL_DATASPACE_V0_BT601_625;
+ break;
+ case HAL_DATASPACE_BT601_525:
+ dataspace = HAL_DATASPACE_V0_BT601_525;
+ break;
+ case HAL_DATASPACE_BT709:
+ dataspace = HAL_DATASPACE_V0_BT709;
+ break;
+ default:
+ // unknown legacy dataspace
+ DLOGW_IF(kTagClient, "Unsupported dataspace type %d", dataspace);
+ }
+ }
+
+ if (dataspace == HAL_DATASPACE_UNKNOWN) {
+ dataspace = HAL_DATASPACE_V0_SRGB;
+ }
+
+ return dataspace;
+}
+
+// Retrieve ColorMetaData from android_data_space_t (STANDARD|TRANSFER|RANGE)
+bool GetSDMColorSpace(const int32_t &dataspace, ColorMetaData *color_metadata) {
+ bool valid = false;
+ valid = GetColorPrimary(dataspace, &(color_metadata->colorPrimaries));
+ if (valid) {
+ valid = GetTransfer(dataspace, &(color_metadata->transfer));
+ }
+ if (valid) {
+ valid = GetRange(dataspace, &(color_metadata->range));
+ }
+
+ return valid;
+}
+
+// Layer operations
+HWCLayer::HWCLayer(hwc2_display_t display_id, HWCBufferAllocator *buf_allocator)
+ : id_(next_id_++), display_id_(display_id), buffer_allocator_(buf_allocator) {
+ layer_ = new Layer();
+ // Fences are deferred, so the first time this layer is presented, return -1
+ // TODO(user): Verify that fences are properly obtained on suspend/resume
+ release_fences_.push_back(-1);
+}
+
+HWCLayer::~HWCLayer() {
+ // Close any fences left for this layer
+ while (!release_fences_.empty()) {
+ ::close(release_fences_.front());
+ release_fences_.pop_front();
+ }
+ if (layer_) {
+ if (layer_->input_buffer.acquire_fence_fd >= 0) {
+ ::close(layer_->input_buffer.acquire_fence_fd);
+ }
+ if (buffer_fd_ >= 0) {
+ ::close(buffer_fd_);
+ }
+ delete layer_;
+ }
+}
+
+HWC2::Error HWCLayer::SetLayerBuffer(buffer_handle_t buffer, int32_t acquire_fence) {
+ if (!buffer) {
+ if (client_requested_ == HWC2::Composition::Device ||
+ client_requested_ == HWC2::Composition::Cursor) {
+ DLOGE("Invalid buffer handle: %p on layer: %d client requested comp type %d", buffer, id_,
+ client_requested_);
+ ::close(acquire_fence);
+ return HWC2::Error::BadParameter;
+ } else {
+ return HWC2::Error::None;
+ }
+ }
+
+ if (acquire_fence == 0) {
+ DLOGW("acquire_fence is zero");
+ return HWC2::Error::BadParameter;
+ }
+
+ const private_handle_t *handle = static_cast<const private_handle_t *>(buffer);
+
+ if (handle->fd < 0) {
+ return HWC2::Error::BadParameter;
+ }
+
+ LayerBuffer *layer_buffer = &layer_->input_buffer;
+ int aligned_width, aligned_height;
+ buffer_allocator_->GetCustomWidthAndHeight(handle, &aligned_width, &aligned_height);
+
+ LayerBufferFormat format = GetSDMFormat(handle->format, handle->flags);
+ if ((format != layer_buffer->format) || (UINT32(aligned_width) != layer_buffer->width) ||
+ (UINT32(aligned_height) != layer_buffer->height)) {
+ // Layer buffer geometry has changed.
+ geometry_changes_ |= kBufferGeometry;
+ }
+
+ layer_buffer->format = format;
+ layer_buffer->width = UINT32(aligned_width);
+ layer_buffer->height = UINT32(aligned_height);
+ layer_buffer->unaligned_width = UINT32(handle->unaligned_width);
+ layer_buffer->unaligned_height = UINT32(handle->unaligned_height);
+
+ layer_buffer->flags.video = (handle->buffer_type == BUFFER_TYPE_VIDEO) ? true : false;
+ if (SetMetaData(const_cast<private_handle_t *>(handle), layer_) != kErrorNone) {
+ return HWC2::Error::BadLayer;
+ }
+
+ // TZ Protected Buffer - L1
+ bool secure = (handle->flags & private_handle_t::PRIV_FLAGS_SECURE_BUFFER);
+ bool secure_camera = secure && (handle->flags & private_handle_t::PRIV_FLAGS_CAMERA_WRITE);
+ bool secure_display = (handle->flags & private_handle_t::PRIV_FLAGS_SECURE_DISPLAY);
+ if (secure != layer_buffer->flags.secure || secure_camera != layer_buffer->flags.secure_camera ||
+ secure_display != layer_buffer->flags.secure_display) {
+ // Secure attribute of layer buffer has changed.
+ layer_->update_mask.set(kSecurity);
+ }
+
+ layer_buffer->flags.secure = secure;
+ layer_buffer->flags.secure_camera = secure_camera;
+ layer_buffer->flags.secure_display = secure_display;
+
+ if (layer_buffer->acquire_fence_fd >= 0) {
+ ::close(layer_buffer->acquire_fence_fd);
+ }
+ layer_buffer->acquire_fence_fd = acquire_fence;
+ if (buffer_fd_ >= 0) {
+ ::close(buffer_fd_);
+ }
+ buffer_fd_ = ::dup(handle->fd);
+ layer_buffer->planes[0].fd = buffer_fd_;
+ layer_buffer->planes[0].offset = handle->offset;
+ layer_buffer->planes[0].stride = UINT32(handle->width);
+ layer_buffer->size = handle->size;
+ buffer_flipped_ = reinterpret_cast<uint64_t>(handle) != layer_buffer->buffer_id;
+ layer_buffer->buffer_id = reinterpret_cast<uint64_t>(handle);
+ layer_buffer->handle_id = handle->id;
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerSurfaceDamage(hwc_region_t damage) {
+ surface_updated_ = true;
+ if ((damage.numRects == 1) && (damage.rects[0].bottom == 0) && (damage.rects[0].right == 0)) {
+ surface_updated_ = false;
+ }
+
+ if (!layer_->flags.updating && surface_updated_) {
+ layer_->update_mask.set(kSurfaceInvalidate);
+ }
+
+ if (!partial_update_enabled_) {
+ SetDirtyRegions(damage);
+ return HWC2::Error::None;
+ }
+
+ // Check if there is an update in SurfaceDamage rects.
+ if (layer_->dirty_regions.size() != damage.numRects) {
+ layer_->update_mask.set(kSurfaceInvalidate);
+ } else {
+ for (uint32_t j = 0; j < damage.numRects; j++) {
+ LayerRect damage_rect;
+ SetRect(damage.rects[j], &damage_rect);
+ if (damage_rect != layer_->dirty_regions.at(j)) {
+ layer_->update_mask.set(kSurfaceDamage);
+ break;
+ }
+ }
+ }
+
+ SetDirtyRegions(damage);
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerBlendMode(HWC2::BlendMode mode) {
+ LayerBlending blending = kBlendingPremultiplied;
+ switch (mode) {
+ case HWC2::BlendMode::Coverage:
+ blending = kBlendingCoverage;
+ break;
+ case HWC2::BlendMode::Premultiplied:
+ blending = kBlendingPremultiplied;
+ break;
+ case HWC2::BlendMode::None:
+ blending = kBlendingOpaque;
+ break;
+ default:
+ return HWC2::Error::BadParameter;
+ }
+
+ if (layer_->blending != blending) {
+ geometry_changes_ |= kBlendMode;
+ layer_->blending = blending;
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerColor(hwc_color_t color) {
+ if (client_requested_ != HWC2::Composition::SolidColor) {
+ return HWC2::Error::None;
+ }
+ if (layer_->solid_fill_color != GetUint32Color(color)) {
+ layer_->solid_fill_color = GetUint32Color(color);
+ layer_->update_mask.set(kSurfaceInvalidate);
+ surface_updated_ = true;
+ } else {
+ surface_updated_ = false;
+ }
+
+ layer_->input_buffer.format = kFormatARGB8888;
+ DLOGV_IF(kTagClient, "[%" PRIu64 "][%" PRIu64 "] Layer color set to %x", display_id_, id_,
+ layer_->solid_fill_color);
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerCompositionType(HWC2::Composition type) {
+ // Validation is required when the client changes the composition type
+ if (client_requested_ != type) {
+ layer_->update_mask.set(kClientCompRequest);
+ }
+ client_requested_ = type;
+ client_requested_orig_ = type;
+ switch (type) {
+ case HWC2::Composition::Client:
+ break;
+ case HWC2::Composition::Device:
+ // We try and default to this in SDM
+ break;
+ case HWC2::Composition::SolidColor:
+ break;
+ case HWC2::Composition::Cursor:
+ break;
+ case HWC2::Composition::Invalid:
+ return HWC2::Error::BadParameter;
+ default:
+ return HWC2::Error::Unsupported;
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerDataspace(int32_t dataspace) {
+ // Map deprecated dataspace values to appropriate new enums
+ dataspace = TranslateFromLegacyDataspace(dataspace);
+
+ // cache the dataspace, to be used later to update SDM ColorMetaData
+ if (dataspace_ != dataspace) {
+ geometry_changes_ |= kDataspace;
+ dataspace_ = dataspace;
+ if (layer_->input_buffer.buffer_id) {
+ ValidateAndSetCSC(reinterpret_cast<private_handle_t *>(layer_->input_buffer.buffer_id));
+ }
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerDisplayFrame(hwc_rect_t frame) {
+ LayerRect dst_rect = {};
+
+ SetRect(frame, &dst_rect);
+ if (dst_rect_ != dst_rect) {
+ geometry_changes_ |= kDisplayFrame;
+ dst_rect_ = dst_rect;
+ }
+
+ return HWC2::Error::None;
+}
+
+void HWCLayer::ResetPerFrameData() {
+ layer_->dst_rect = dst_rect_;
+ layer_->transform = layer_transform_;
+}
+
+HWC2::Error HWCLayer::SetCursorPosition(int32_t x, int32_t y) {
+ hwc_rect_t frame = {};
+ frame.left = x;
+ frame.top = y;
+ frame.right = x + INT(layer_->dst_rect.right - layer_->dst_rect.left);
+ frame.bottom = y + INT(layer_->dst_rect.bottom - layer_->dst_rect.top);
+ SetLayerDisplayFrame(frame);
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerPlaneAlpha(float alpha) {
+ if (alpha < 0.0f || alpha > 1.0f) {
+ return HWC2::Error::BadParameter;
+ }
+
+ // Conversion of float alpha in range 0.0 to 1.0 similar to the HWC Adapter
+ uint8_t plane_alpha = static_cast<uint8_t>(std::round(255.0f * alpha));
+
+ if (layer_->plane_alpha != plane_alpha) {
+ geometry_changes_ |= kPlaneAlpha;
+ layer_->plane_alpha = plane_alpha;
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerSourceCrop(hwc_frect_t crop) {
+ LayerRect src_rect = {};
+ SetRect(crop, &src_rect);
+ non_integral_source_crop_ = ((crop.left != roundf(crop.left)) ||
+ (crop.top != roundf(crop.top)) ||
+ (crop.right != roundf(crop.right)) ||
+ (crop.bottom != roundf(crop.bottom)));
+ if (non_integral_source_crop_) {
+ DLOGV_IF(kTagClient, "Crop: LTRB %f %f %f %f", crop.left, crop.top, crop.right, crop.bottom);
+ }
+ if (layer_->src_rect != src_rect) {
+ geometry_changes_ |= kSourceCrop;
+ layer_->src_rect = src_rect;
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerTransform(HWC2::Transform transform) {
+ LayerTransform layer_transform = {};
+ switch (transform) {
+ case HWC2::Transform::FlipH:
+ layer_transform.flip_horizontal = true;
+ break;
+ case HWC2::Transform::FlipV:
+ layer_transform.flip_vertical = true;
+ break;
+ case HWC2::Transform::Rotate90:
+ layer_transform.rotation = 90.0f;
+ break;
+ case HWC2::Transform::Rotate180:
+ layer_transform.flip_horizontal = true;
+ layer_transform.flip_vertical = true;
+ break;
+ case HWC2::Transform::Rotate270:
+ layer_transform.rotation = 90.0f;
+ layer_transform.flip_horizontal = true;
+ layer_transform.flip_vertical = true;
+ break;
+ case HWC2::Transform::FlipHRotate90:
+ layer_transform.rotation = 90.0f;
+ layer_transform.flip_horizontal = true;
+ break;
+ case HWC2::Transform::FlipVRotate90:
+ layer_transform.rotation = 90.0f;
+ layer_transform.flip_vertical = true;
+ break;
+ case HWC2::Transform::None:
+ break;
+ default:
+ // bad transform
+ return HWC2::Error::BadParameter;
+ }
+
+ if (layer_transform_ != layer_transform) {
+ geometry_changes_ |= kTransform;
+ layer_transform_ = layer_transform;
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerVisibleRegion(hwc_region_t visible) {
+ layer_->visible_regions.clear();
+ for (uint32_t i = 0; i < visible.numRects; i++) {
+ LayerRect rect;
+ SetRect(visible.rects[i], &rect);
+ layer_->visible_regions.push_back(rect);
+ }
+
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerZOrder(uint32_t z) {
+ if (z_ != z) {
+ geometry_changes_ |= kZOrder;
+ z_ = z;
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerPerFrameMetadata(uint32_t num_elements,
+ const PerFrameMetadataKey *keys,
+ const float *metadata) {
+ auto old_mastering_display = layer_->input_buffer.color_metadata.masteringDisplayInfo;
+ auto old_content_light = layer_->input_buffer.color_metadata.contentLightLevel;
+ auto &mastering_display = layer_->input_buffer.color_metadata.masteringDisplayInfo;
+ auto &content_light = layer_->input_buffer.color_metadata.contentLightLevel;
+ for (uint32_t i = 0; i < num_elements; i++) {
+ switch (keys[i]) {
+ case PerFrameMetadataKey::DISPLAY_RED_PRIMARY_X:
+ mastering_display.colorVolumeSEIEnabled = true;
+ mastering_display.primaries.rgbPrimaries[0][0] = UINT32(metadata[i] * 50000);
+ break;
+ case PerFrameMetadataKey::DISPLAY_RED_PRIMARY_Y:
+ mastering_display.primaries.rgbPrimaries[0][1] = UINT32(metadata[i] * 50000);
+ break;
+ case PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_X:
+ mastering_display.primaries.rgbPrimaries[1][0] = UINT32(metadata[i] * 50000);
+ break;
+ case PerFrameMetadataKey::DISPLAY_GREEN_PRIMARY_Y:
+ mastering_display.primaries.rgbPrimaries[1][1] = UINT32(metadata[i] * 50000);
+ break;
+ case PerFrameMetadataKey::DISPLAY_BLUE_PRIMARY_X:
+ mastering_display.primaries.rgbPrimaries[2][0] = UINT32(metadata[i] * 50000);
+ break;
+ case PerFrameMetadataKey::DISPLAY_BLUE_PRIMARY_Y:
+ mastering_display.primaries.rgbPrimaries[2][1] = UINT32(metadata[i] * 50000);
+ break;
+ case PerFrameMetadataKey::WHITE_POINT_X:
+ mastering_display.primaries.whitePoint[0] = UINT32(metadata[i] * 50000);
+ break;
+ case PerFrameMetadataKey::WHITE_POINT_Y:
+ mastering_display.primaries.whitePoint[1] = UINT32(metadata[i] * 50000);
+ break;
+ case PerFrameMetadataKey::MAX_LUMINANCE:
+ mastering_display.maxDisplayLuminance = UINT32(metadata[i]);
+ break;
+ case PerFrameMetadataKey::MIN_LUMINANCE:
+ mastering_display.minDisplayLuminance = UINT32(metadata[i] * 10000);
+ break;
+ case PerFrameMetadataKey::MAX_CONTENT_LIGHT_LEVEL:
+ content_light.lightLevelSEIEnabled = true;
+ content_light.maxContentLightLevel = UINT32(metadata[i]);
+ break;
+ case PerFrameMetadataKey::MAX_FRAME_AVERAGE_LIGHT_LEVEL:
+ content_light.minPicAverageLightLevel = UINT32(metadata[i]);
+ break;
+ default:
+ break;
+ }
+ }
+ if ((!SameConfig(&old_mastering_display, &mastering_display, UINT32(sizeof(MasteringDisplay)))) ||
+ (!SameConfig(&old_content_light, &content_light, UINT32(sizeof(ContentLightLevel))))) {
+ layer_->update_mask.set(kMetadataUpdate);
+ geometry_changes_ |= kDataspace;
+ }
+ return HWC2::Error::None;
+}
+
+HWC2::Error HWCLayer::SetLayerPerFrameMetadataBlobs(uint32_t num_elements,
+ const PerFrameMetadataKey *keys,
+ const uint32_t *sizes,
+ const uint8_t* metadata) {
+ if (!keys || !sizes || !metadata) {
+ DLOGE("metadata or sizes or keys is null");
+ return HWC2::Error::BadParameter;
+ }
+
+ ColorMetaData &color_metadata = layer_->input_buffer.color_metadata;
+ for (uint32_t i = 0; i < num_elements; i++) {
+ switch (keys[i]) {
+ case PerFrameMetadataKey::HDR10_PLUS_SEI:
+ if (sizes[i] > HDR_DYNAMIC_META_DATA_SZ) {
+ DLOGE("Size of HDR10_PLUS_SEI = %d", sizes[i]);
+ return HWC2::Error::BadParameter;
+ }
+ // if dynamic metadata changes, store and set needs validate
+ if (!SameConfig(static_cast<const uint8_t*>(color_metadata.dynamicMetaDataPayload),
+ metadata, sizes[i])) {
+ geometry_changes_ |= kDataspace;
+ color_metadata.dynamicMetaDataValid = true;
+ color_metadata.dynamicMetaDataLen = sizes[i];
+ std::memcpy(color_metadata.dynamicMetaDataPayload, metadata, sizes[i]);
+ layer_->update_mask.set(kMetadataUpdate);
+ }
+ break;
+ default:
+ DLOGW("Invalid key = %d", keys[i]);
+ return HWC2::Error::BadParameter;
+ }
+ }
+ return HWC2::Error::None;
+}
+
+void HWCLayer::SetRect(const hwc_rect_t &source, LayerRect *target) {
+ target->left = FLOAT(source.left);
+ target->top = FLOAT(source.top);
+ target->right = FLOAT(source.right);
+ target->bottom = FLOAT(source.bottom);
+}
+
+void HWCLayer::SetRect(const hwc_frect_t &source, LayerRect *target) {
+ // Recommended way of rounding as in hwcomposer2.h - SetLayerSourceCrop
+ target->left = std::ceil(source.left);
+ target->top = std::ceil(source.top);
+ target->right = std::floor(source.right);
+ target->bottom = std::floor(source.bottom);
+}
+
+uint32_t HWCLayer::GetUint32Color(const hwc_color_t &source) {
+ // Returns 32 bit ARGB
+ uint32_t a = UINT32(source.a) << 24;
+ uint32_t r = UINT32(source.r) << 16;
+ uint32_t g = UINT32(source.g) << 8;
+ uint32_t b = UINT32(source.b);
+ uint32_t color = a | r | g | b;
+ return color;
+}
+
+LayerBufferFormat HWCLayer::GetSDMFormat(const int32_t &source, const int flags) {
+ LayerBufferFormat format = kFormatInvalid;
+ if (flags & private_handle_t::PRIV_FLAGS_UBWC_ALIGNED) {
+ switch (source) {
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ format = kFormatRGBA8888Ubwc;
+ break;
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ format = kFormatRGBX8888Ubwc;
+ break;
+ case HAL_PIXEL_FORMAT_BGR_565:
+ format = kFormatBGR565Ubwc;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ format = kFormatYCbCr420SPVenusUbwc;
+ break;
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ format = kFormatRGBA1010102Ubwc;
+ break;
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ format = kFormatRGBX1010102Ubwc;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ format = kFormatYCbCr420TP10Ubwc;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ format = kFormatYCbCr420P010Ubwc;
+ break;
+ default:
+ DLOGE("Unsupported format type for UBWC %d", source);
+ return kFormatInvalid;
+ }
+ return format;
+ }
+
+ switch (source) {
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ format = kFormatRGBA8888;
+ break;
+ case HAL_PIXEL_FORMAT_RGBA_5551:
+ format = kFormatRGBA5551;
+ break;
+ case HAL_PIXEL_FORMAT_RGBA_4444:
+ format = kFormatRGBA4444;
+ break;
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ format = kFormatBGRA8888;
+ break;
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ format = kFormatRGBX8888;
+ break;
+ case HAL_PIXEL_FORMAT_BGRX_8888:
+ format = kFormatBGRX8888;
+ break;
+ case HAL_PIXEL_FORMAT_RGB_888:
+ format = kFormatRGB888;
+ break;
+ case HAL_PIXEL_FORMAT_BGR_888:
+ format = kFormatBGR888;
+ break;
+ case HAL_PIXEL_FORMAT_RGB_565:
+ format = kFormatRGB565;
+ break;
+ case HAL_PIXEL_FORMAT_BGR_565:
+ format = kFormatBGR565;
+ break;
+ case HAL_PIXEL_FORMAT_NV12_ENCODEABLE:
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS:
+ format = kFormatYCbCr420SemiPlanarVenus;
+ break;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP_VENUS:
+ format = kFormatYCrCb420SemiPlanarVenus;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP_VENUS_UBWC:
+ format = kFormatYCbCr420SPVenusUbwc;
+ break;
+ case HAL_PIXEL_FORMAT_YV12:
+ format = kFormatYCrCb420PlanarStride16;
+ break;
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ format = kFormatYCrCb420SemiPlanar;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_SP:
+ format = kFormatYCbCr420SemiPlanar;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ format = kFormatYCbCr422H2V1SemiPlanar;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_422_I:
+ format = kFormatYCbCr422H2V1Packed;
+ break;
+ case HAL_PIXEL_FORMAT_CbYCrY_422_I:
+ format = kFormatCbYCrY422H2V1Packed;
+ break;
+ case HAL_PIXEL_FORMAT_RGBA_1010102:
+ format = kFormatRGBA1010102;
+ break;
+ case HAL_PIXEL_FORMAT_ARGB_2101010:
+ format = kFormatARGB2101010;
+ break;
+ case HAL_PIXEL_FORMAT_RGBX_1010102:
+ format = kFormatRGBX1010102;
+ break;
+ case HAL_PIXEL_FORMAT_XRGB_2101010:
+ format = kFormatXRGB2101010;
+ break;
+ case HAL_PIXEL_FORMAT_BGRA_1010102:
+ format = kFormatBGRA1010102;
+ break;
+ case HAL_PIXEL_FORMAT_ABGR_2101010:
+ format = kFormatABGR2101010;
+ break;
+ case HAL_PIXEL_FORMAT_BGRX_1010102:
+ format = kFormatBGRX1010102;
+ break;
+ case HAL_PIXEL_FORMAT_XBGR_2101010:
+ format = kFormatXBGR2101010;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010:
+ format = kFormatYCbCr420P010;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
+ format = kFormatYCbCr420TP10Ubwc;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_UBWC:
+ format = kFormatYCbCr420P010Ubwc;
+ break;
+ case HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS:
+ format = kFormatYCbCr420P010Venus;
+ break;
+ case HAL_PIXEL_FORMAT_RGBA_FP16:
+ format = kFormatInvalid;
+ break;
+ default:
+ DLOGW("Unsupported format type = %d", source);
+ return kFormatInvalid;
+ }
+
+ return format;
+}
+
+LayerBufferS3DFormat HWCLayer::GetS3DFormat(uint32_t s3d_format) {
+ LayerBufferS3DFormat sdm_s3d_format = kS3dFormatNone;
+ switch (s3d_format) {
+ case HAL_NO_3D:
+ sdm_s3d_format = kS3dFormatNone;
+ break;
+ case HAL_3D_SIDE_BY_SIDE_L_R:
+ sdm_s3d_format = kS3dFormatLeftRight;
+ break;
+ case HAL_3D_SIDE_BY_SIDE_R_L:
+ sdm_s3d_format = kS3dFormatRightLeft;
+ break;
+ case HAL_3D_TOP_BOTTOM:
+ sdm_s3d_format = kS3dFormatTopBottom;
+ break;
+ default:
+ DLOGW("Invalid S3D format %d", s3d_format);
+ }
+ return sdm_s3d_format;
+}
+
+void HWCLayer::GetUBWCStatsFromMetaData(UBWCStats *cr_stats, UbwcCrStatsVector *cr_vec) {
+ // TODO(user): Check if we can use UBWCStats directly
+ // in layer_buffer or copy directly to Vector
+ if (cr_stats->bDataValid) {
+ switch (cr_stats->version) {
+ case UBWC_3_0:
+ case UBWC_2_0:
+ cr_vec->push_back(std::make_pair(32, cr_stats->ubwc_stats.nCRStatsTile32));
+ cr_vec->push_back(std::make_pair(64, cr_stats->ubwc_stats.nCRStatsTile64));
+ cr_vec->push_back(std::make_pair(96, cr_stats->ubwc_stats.nCRStatsTile96));
+ cr_vec->push_back(std::make_pair(128, cr_stats->ubwc_stats.nCRStatsTile128));
+ cr_vec->push_back(std::make_pair(160, cr_stats->ubwc_stats.nCRStatsTile160));
+ cr_vec->push_back(std::make_pair(192, cr_stats->ubwc_stats.nCRStatsTile192));
+ cr_vec->push_back(std::make_pair(256, cr_stats->ubwc_stats.nCRStatsTile256));
+ break;
+ default:
+ DLOGW("Invalid UBWC Version %d", cr_stats->version);
+ break;
+ } // switch(cr_stats->version)
+ } // if (cr_stats->bDatvalid)
+}
+
+DisplayError HWCLayer::SetMetaData(const private_handle_t *pvt_handle, Layer *layer) {
+ LayerBuffer *layer_buffer = &layer->input_buffer;
+ private_handle_t *handle = const_cast<private_handle_t *>(pvt_handle);
+
+ float fps = 0;
+ uint32_t frame_rate = layer->frame_rate;
+ if (getMetaData(handle, GET_REFRESH_RATE, &fps) == 0) {
+ frame_rate = (fps != 0) ? RoundToStandardFPS(fps) : layer->frame_rate;
+ has_metadata_refresh_rate_ = true;
+ }
+
+ int32_t interlaced = 0;
+ getMetaData(handle, GET_PP_PARAM_INTERLACED, &interlaced);
+ bool interlace = interlaced ? true : false;
+
+ if (interlace != layer_buffer->flags.interlace) {
+ DLOGI("Layer buffer interlaced metadata has changed. old=%d, new=%d",
+ layer_buffer->flags.interlace, interlace);
+ }
+
+ uint32_t linear_format = 0;
+ if (getMetaData(handle, GET_LINEAR_FORMAT, &linear_format) == 0) {
+ layer_buffer->format = GetSDMFormat(INT32(linear_format), 0);
+ }
+
+ uint32_t s3d = 0;
+ LayerBufferS3DFormat s3d_format = layer_buffer->s3d_format;
+ if (getMetaData(handle, GET_S3D_FORMAT, &s3d) == 0) {
+ s3d_format = GetS3DFormat(s3d);
+ }
+
+ if ((interlace != layer_buffer->flags.interlace) ||
+ (frame_rate != layer->frame_rate) || (s3d_format != layer_buffer->s3d_format)) {
+ // Layer buffer metadata has changed.
+ layer->frame_rate = frame_rate;
+ layer_buffer->s3d_format = s3d_format;
+ layer_buffer->flags.interlace = interlace;
+ layer_->update_mask.set(kMetadataUpdate);
+ }
+
+ // Check if metadata is set
+ struct UBWCStats cr_stats[NUM_UBWC_CR_STATS_LAYERS] = {};
+
+ for (int i = 0; i < NUM_UBWC_CR_STATS_LAYERS; i++) {
+ layer_buffer->ubwc_crstats[i].clear();
+ }
+
+ if (getMetaData(handle, GET_UBWC_CR_STATS_INFO, cr_stats) == 0) {
+ // Only copy top layer for now as only top field for interlaced is used
+ GetUBWCStatsFromMetaData(&cr_stats[0], &(layer_buffer->ubwc_crstats[0]));
+ } // if (getMetaData)
+
+ uint32_t single_buffer = 0;
+ getMetaData(const_cast<private_handle_t *>(handle), GET_SINGLE_BUFFER_MODE, &single_buffer);
+ single_buffer_ = (single_buffer == 1);
+
+ // Handle colorMetaData / Dataspace handling now
+ ValidateAndSetCSC(handle);
+
+ return kErrorNone;
+}
+
+bool HWCLayer::IsDataSpaceSupported() {
+ if (client_requested_ != HWC2::Composition::Device &&
+ client_requested_ != HWC2::Composition::Cursor) {
+ // Layers marked for GPU can have any dataspace
+ return true;
+ }
+
+ return dataspace_supported_;
+}
+
+void HWCLayer::ValidateAndSetCSC(const private_handle_t *handle) {
+ LayerBuffer *layer_buffer = &layer_->input_buffer;
+ bool use_color_metadata = true;
+ ColorMetaData csc = {};
+ if (dataspace_ != HAL_DATASPACE_UNKNOWN) {
+ use_color_metadata = false;
+ bool valid_csc = GetSDMColorSpace(dataspace_, &csc);
+ if (!valid_csc) {
+ dataspace_supported_ = false;
+ return;
+ }
+
+ if (layer_buffer->color_metadata.transfer != csc.transfer ||
+ layer_buffer->color_metadata.colorPrimaries != csc.colorPrimaries ||
+ layer_buffer->color_metadata.range != csc.range) {
+ // ColorMetadata updated. Needs validate.
+ layer_->update_mask.set(kMetadataUpdate);
+ // if we are here here, update the sdm layer csc.
+ layer_buffer->color_metadata.transfer = csc.transfer;
+ layer_buffer->color_metadata.colorPrimaries = csc.colorPrimaries;
+ layer_buffer->color_metadata.range = csc.range;
+ }
+ }
+
+ if (IsBT2020(layer_buffer->color_metadata.colorPrimaries)) {
+ // android_dataspace_t doesnt support mastering display and light levels
+ // so retrieve it from metadata for BT2020(HDR)
+ use_color_metadata = true;
+ }
+
+ if (use_color_metadata) {
+ ColorMetaData new_metadata = layer_buffer->color_metadata;
+ if (sdm::SetCSC(handle, &new_metadata) == kErrorNone) {
+ // If dataspace is KNOWN, overwrite the gralloc metadata CSC using the previously derived CSC
+ // from dataspace.
+ if (dataspace_ != HAL_DATASPACE_UNKNOWN) {
+ new_metadata.colorPrimaries = layer_buffer->color_metadata.colorPrimaries;
+ new_metadata.transfer = layer_buffer->color_metadata.transfer;
+ new_metadata.range = layer_buffer->color_metadata.range;
+ }
+ if ((layer_buffer->color_metadata.colorPrimaries != new_metadata.colorPrimaries) ||
+ (layer_buffer->color_metadata.transfer != new_metadata.transfer) ||
+ (layer_buffer->color_metadata.range != new_metadata.range)) {
+ layer_buffer->color_metadata.colorPrimaries = new_metadata.colorPrimaries;
+ layer_buffer->color_metadata.transfer = new_metadata.transfer;
+ layer_buffer->color_metadata.range = new_metadata.range;
+ layer_->update_mask.set(kMetadataUpdate);
+ }
+ if (layer_buffer->color_metadata.matrixCoefficients != new_metadata.matrixCoefficients) {
+ layer_buffer->color_metadata.matrixCoefficients = new_metadata.matrixCoefficients;
+ layer_->update_mask.set(kMetadataUpdate);
+ }
+ DLOGV_IF(kTagClient, "Layer id = %lld ColorVolEnabled = %d ContentLightLevelEnabled = %d "
+ "cRIEnabled = %d Dynamic Metadata valid = %d size = %d", id_,
+ new_metadata.masteringDisplayInfo.colorVolumeSEIEnabled,
+ new_metadata.contentLightLevel.lightLevelSEIEnabled,
+ new_metadata.cRI.criEnabled, new_metadata.dynamicMetaDataValid,
+ new_metadata.dynamicMetaDataLen);
+ // Read color metadata from gralloc handle if it's enabled by clients, this will override the
+ // values set using the Composer API's(SetLayerPerFrameMetaData)
+ if (new_metadata.masteringDisplayInfo.colorVolumeSEIEnabled &&
+ !SameConfig(&new_metadata.masteringDisplayInfo,
+ &layer_buffer->color_metadata.masteringDisplayInfo, UINT32(sizeof(MasteringDisplay)))) {
+ layer_buffer->color_metadata.masteringDisplayInfo = new_metadata.masteringDisplayInfo;
+ layer_->update_mask.set(kMetadataUpdate);
+ }
+ if (new_metadata.contentLightLevel.lightLevelSEIEnabled &&
+ !SameConfig(&new_metadata.contentLightLevel,
+ &layer_buffer->color_metadata.contentLightLevel, UINT32(sizeof(ContentLightLevel)))) {
+ layer_buffer->color_metadata.contentLightLevel = new_metadata.contentLightLevel;
+ layer_->update_mask.set(kMetadataUpdate);
+ }
+ if (new_metadata.cRI.criEnabled &&
+ !SameConfig(&new_metadata.cRI, &layer_buffer->color_metadata.cRI,
+ UINT32(sizeof(ColorRemappingInfo)))) {
+ layer_buffer->color_metadata.cRI = new_metadata.cRI;
+ layer_->update_mask.set(kMetadataUpdate);
+ }
+ if (new_metadata.dynamicMetaDataValid &&
+ !SameConfig(layer_buffer->color_metadata.dynamicMetaDataPayload,
+ new_metadata.dynamicMetaDataPayload, HDR_DYNAMIC_META_DATA_SZ)) {
+ layer_buffer->color_metadata.dynamicMetaDataValid = true;
+ layer_buffer->color_metadata.dynamicMetaDataLen = new_metadata.dynamicMetaDataLen;
+ std::memcpy(layer_buffer->color_metadata.dynamicMetaDataPayload,
+ new_metadata.dynamicMetaDataPayload, new_metadata.dynamicMetaDataLen);
+ layer_->update_mask.set(kMetadataUpdate);
+ }
+ } else {
+ dataspace_supported_ = false;
+ return;
+ }
+ }
+
+ dataspace_supported_ = true;
+}
+
+
+uint32_t HWCLayer::RoundToStandardFPS(float fps) {
+ static const uint32_t standard_fps[4] = {24, 30, 48, 60};
+ uint32_t frame_rate = (uint32_t)(fps);
+
+ int count = INT(sizeof(standard_fps) / sizeof(standard_fps[0]));
+ for (int i = 0; i < count; i++) {
+ if ((standard_fps[i] - frame_rate) < 2) {
+ // Most likely used for video, the fps can fluctuate
+ // Ex: b/w 29 and 30 for 30 fps clip
+ return standard_fps[i];
+ }
+ }
+
+ return frame_rate;
+}
+
+void HWCLayer::SetComposition(const LayerComposition &sdm_composition) {
+ auto hwc_composition = HWC2::Composition::Invalid;
+ switch (sdm_composition) {
+ case kCompositionGPU:
+ hwc_composition = HWC2::Composition::Client;
+ break;
+ case kCompositionCursor:
+ hwc_composition = HWC2::Composition::Cursor;
+ break;
+ default:
+ hwc_composition = HWC2::Composition::Device;
+ break;
+ }
+ // Update solid fill composition
+ if (sdm_composition == kCompositionSDE && layer_->flags.solid_fill != 0) {
+ hwc_composition = HWC2::Composition::SolidColor;
+ }
+ device_selected_ = hwc_composition;
+
+ return;
+}
+
+void HWCLayer::PushBackReleaseFence(int32_t fence) {
+ release_fences_.push_back(fence);
+}
+
+int32_t HWCLayer::PopBackReleaseFence() {
+ if (release_fences_.empty())
+ return -1;
+
+ auto fence = release_fences_.back();
+ release_fences_.pop_back();
+
+ return fence;
+}
+
+int32_t HWCLayer::PopFrontReleaseFence() {
+ if (release_fences_.empty())
+ return -1;
+
+ auto fence = release_fences_.front();
+ release_fences_.pop_front();
+
+ return fence;
+}
+
+bool HWCLayer::IsRotationPresent() {
+ return ((layer_->transform.rotation != 0.0f) ||
+ layer_->transform.flip_horizontal ||
+ layer_->transform.flip_vertical);
+}
+
+bool HWCLayer::IsScalingPresent() {
+ uint32_t src_width = static_cast<uint32_t>(layer_->src_rect.right - layer_->src_rect.left);
+ uint32_t src_height = static_cast<uint32_t>(layer_->src_rect.bottom - layer_->src_rect.top);
+ uint32_t dst_width = static_cast<uint32_t>(layer_->dst_rect.right - layer_->dst_rect.left);
+ uint32_t dst_height = static_cast<uint32_t>(layer_->dst_rect.bottom - layer_->dst_rect.top);
+
+ return ((src_width != dst_width) || (dst_height != src_height));
+}
+
+void HWCLayer::SetDirtyRegions(hwc_region_t surface_damage) {
+ layer_->dirty_regions.clear();
+ for (uint32_t i = 0; i < surface_damage.numRects; i++) {
+ LayerRect rect;
+ SetRect(surface_damage.rects[i], &rect);
+ layer_->dirty_regions.push_back(rect);
+ }
+}
+
+void HWCLayer::SetLayerAsMask() {
+ layer_->input_buffer.flags.mask_layer = true;
+ DLOGV_IF(kTagClient, " Layer Id: ""[%" PRIu64 "]", id_);
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_layers.h b/sdm/libs/hwc2/hwc_layers.h
new file mode 100644
index 0000000..f6e9d71
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_layers.h
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __HWC_LAYERS_H__
+#define __HWC_LAYERS_H__
+
+/* This class translates HWC2 Layer functions to the SDM LayerStack
+ */
+
+#include <gralloc_priv.h>
+#include <qdMetaData.h>
+#include <core/layer_stack.h>
+#include <core/layer_buffer.h>
+#include <utils/utils.h>
+#define HWC2_INCLUDE_STRINGIFICATION
+#define HWC2_USE_CPP11
+#include <hardware/hwcomposer2.h>
+#undef HWC2_INCLUDE_STRINGIFICATION
+#undef HWC2_USE_CPP11
+#include <android/hardware/graphics/composer/2.3/IComposerClient.h>
+#include <deque>
+#include <map>
+#include <set>
+#include "core/buffer_allocator.h"
+#include "hwc_buffer_allocator.h"
+
+using PerFrameMetadataKey =
+ android::hardware::graphics::composer::V2_3::IComposerClient::PerFrameMetadataKey;
+
+namespace sdm {
+
+DisplayError SetCSC(const private_handle_t *pvt_handle, ColorMetaData *color_metadata);
+bool GetColorPrimary(const int32_t &dataspace, ColorPrimaries *color_primary);
+bool GetTransfer(const int32_t &dataspace, GammaTransfer *gamma_transfer);
+bool GetRange(const int32_t &dataspace, ColorRange *color_range);
+bool GetSDMColorSpace(const int32_t &dataspace, ColorMetaData *color_metadata);
+bool IsBT2020(const ColorPrimaries &color_primary);
+int32_t TranslateFromLegacyDataspace(const int32_t &legacy_ds);
+
+enum GeometryChanges {
+ kNone = 0x000,
+ kBlendMode = 0x001,
+ kDataspace = 0x002,
+ kDisplayFrame = 0x004,
+ kPlaneAlpha = 0x008,
+ kSourceCrop = 0x010,
+ kTransform = 0x020,
+ kZOrder = 0x040,
+ kAdded = 0x080,
+ kRemoved = 0x100,
+ kBufferGeometry = 0x200,
+ kConfigChanged = 0x400,
+};
+
+class HWCLayer {
+ public:
+ explicit HWCLayer(hwc2_display_t display_id, HWCBufferAllocator *buf_allocator);
+ ~HWCLayer();
+ uint32_t GetZ() const { return z_; }
+ hwc2_layer_t GetId() const { return id_; }
+ Layer *GetSDMLayer() { return layer_; }
+ void ResetPerFrameData();
+
+ HWC2::Error SetLayerBlendMode(HWC2::BlendMode mode);
+ HWC2::Error SetLayerBuffer(buffer_handle_t buffer, int32_t acquire_fence);
+ HWC2::Error SetLayerColor(hwc_color_t color);
+ HWC2::Error SetLayerCompositionType(HWC2::Composition type);
+ HWC2::Error SetLayerDataspace(int32_t dataspace);
+ HWC2::Error SetLayerDisplayFrame(hwc_rect_t frame);
+ HWC2::Error SetCursorPosition(int32_t x, int32_t y);
+ HWC2::Error SetLayerPlaneAlpha(float alpha);
+ HWC2::Error SetLayerSourceCrop(hwc_frect_t crop);
+ HWC2::Error SetLayerSurfaceDamage(hwc_region_t damage);
+ HWC2::Error SetLayerTransform(HWC2::Transform transform);
+ HWC2::Error SetLayerVisibleRegion(hwc_region_t visible);
+ HWC2::Error SetLayerPerFrameMetadata(uint32_t num_elements, const PerFrameMetadataKey *keys,
+ const float *metadata);
+ HWC2::Error SetLayerPerFrameMetadataBlobs(uint32_t num_elements, const PerFrameMetadataKey *keys,
+ const uint32_t *sizes, const uint8_t* metadata);
+ HWC2::Error SetLayerZOrder(uint32_t z);
+ void SetComposition(const LayerComposition &sdm_composition);
+ HWC2::Composition GetClientRequestedCompositionType() { return client_requested_; }
+ HWC2::Composition GetOrigClientRequestedCompositionType() { return client_requested_orig_; }
+ void UpdateClientCompositionType(HWC2::Composition type) { client_requested_ = type; }
+ HWC2::Composition GetDeviceSelectedCompositionType() { return device_selected_; }
+ int32_t GetLayerDataspace() { return dataspace_; }
+ uint32_t GetGeometryChanges() { return geometry_changes_; }
+ void ResetGeometryChanges() { geometry_changes_ = GeometryChanges::kNone; }
+ void PushBackReleaseFence(int32_t fence);
+ int32_t PopBackReleaseFence(void);
+ int32_t PopFrontReleaseFence(void);
+ void ResetValidation() { layer_->update_mask.reset(); }
+ bool NeedsValidation() { return (geometry_changes_ || layer_->update_mask.any()); }
+ bool IsSingleBuffered() { return single_buffer_; }
+ bool IsScalingPresent();
+ bool IsRotationPresent();
+ bool IsDataSpaceSupported();
+ static LayerBufferFormat GetSDMFormat(const int32_t &source, const int flags);
+ bool IsSurfaceUpdated() { return surface_updated_; }
+ void SetPartialUpdate(bool enabled) { partial_update_enabled_ = enabled; }
+ bool IsNonIntegralSourceCrop() { return non_integral_source_crop_; }
+ bool HasMetaDataRefreshRate() { return has_metadata_refresh_rate_; }
+ void SetLayerAsMask();
+ bool BufferLatched() { return buffer_flipped_; }
+ void ResetBufferFlip() { buffer_flipped_ = false; }
+
+ private:
+ Layer *layer_ = nullptr;
+ uint32_t z_ = 0;
+ const hwc2_layer_t id_;
+ const hwc2_display_t display_id_;
+ static std::atomic<hwc2_layer_t> next_id_;
+ std::deque<int32_t> release_fences_;
+ HWCBufferAllocator *buffer_allocator_ = NULL;
+ int32_t dataspace_ = HAL_DATASPACE_UNKNOWN;
+ LayerTransform layer_transform_ = {};
+ LayerRect dst_rect_ = {};
+ bool single_buffer_ = false;
+ int buffer_fd_ = -1;
+ bool dataspace_supported_ = false;
+ bool partial_update_enabled_ = false;
+ bool surface_updated_ = true;
+ bool non_integral_source_crop_ = false;
+ bool has_metadata_refresh_rate_ = false;
+ bool buffer_flipped_ = false;
+
+ // Composition requested by client(SF) Original
+ HWC2::Composition client_requested_orig_ = HWC2::Composition::Device;
+ // Composition requested by client(SF) Modified for internel use
+ HWC2::Composition client_requested_ = HWC2::Composition::Device;
+ // Composition selected by SDM
+ HWC2::Composition device_selected_ = HWC2::Composition::Device;
+ uint32_t geometry_changes_ = GeometryChanges::kNone;
+
+ void SetRect(const hwc_rect_t &source, LayerRect *target);
+ void SetRect(const hwc_frect_t &source, LayerRect *target);
+ uint32_t GetUint32Color(const hwc_color_t &source);
+ LayerBufferS3DFormat GetS3DFormat(uint32_t s3d_format);
+ void GetUBWCStatsFromMetaData(UBWCStats *cr_stats, UbwcCrStatsVector *cr_vec);
+ DisplayError SetMetaData(const private_handle_t *pvt_handle, Layer *layer);
+ uint32_t RoundToStandardFPS(float fps);
+ void ValidateAndSetCSC(const private_handle_t *handle);
+ void SetDirtyRegions(hwc_region_t surface_damage);
+};
+
+struct SortLayersByZ {
+ bool operator()(const HWCLayer *lhs, const HWCLayer *rhs) const {
+ return lhs->GetZ() < rhs->GetZ();
+ }
+};
+
+} // namespace sdm
+#endif // __HWC_LAYERS_H__
diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp
new file mode 100644
index 0000000..2cd107b
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_session.cpp
@@ -0,0 +1,3528 @@
+/*
+ * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <QService.h>
+#include <binder/Parcel.h>
+#include <core/buffer_allocator.h>
+#include <cutils/properties.h>
+#include <display_config.h>
+#include <hardware_legacy/uevent.h>
+#include <private/color_params.h>
+#include <qd_utils.h>
+#include <sync/sync.h>
+#include <sys/prctl.h>
+#include <sys/resource.h>
+#include <utils/String16.h>
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <QService.h>
+#include <utils/utils.h>
+#include <algorithm>
+#include <utility>
+#include <bitset>
+#include <iterator>
+#include <memory>
+#include <string>
+#include <thread>
+#include <vector>
+
+#include "hwc_buffer_allocator.h"
+#include "hwc_session.h"
+#include "hwc_debugger.h"
+
+#define __CLASS__ "HWCSession"
+
+#define HWC_UEVENT_SWITCH_HDMI "change@/devices/virtual/switch/hdmi"
+#define HWC_UEVENT_DRM_EXT_HOTPLUG "mdss_mdp/drm/card"
+
+static sdm::HWCSession::HWCModuleMethods g_hwc_module_methods;
+
+hwc_module_t HAL_MODULE_INFO_SYM = {
+ .common = {
+ .tag = HARDWARE_MODULE_TAG,
+ .version_major = 3,
+ .version_minor = 0,
+ .id = HWC_HARDWARE_MODULE_ID,
+ .name = "QTI Hardware Composer Module",
+ .author = "CodeAurora Forum",
+ .methods = &g_hwc_module_methods,
+ .dso = 0,
+ .reserved = {0},
+ }
+};
+
+namespace sdm {
+
+static HWCUEvent g_hwc_uevent_;
+Locker HWCSession::locker_[HWCCallbacks::kNumDisplays];
+bool HWCSession::power_on_pending_[HWCCallbacks::kNumDisplays];
+Locker HWCSession::power_state_[HWCCallbacks::kNumDisplays];
+Locker HWCSession::display_config_locker_;
+static const int kSolidFillDelay = 100 * 1000;
+int HWCSession::null_display_mode_ = 0;
+
+// Map the known color modes to dataspace.
+int32_t GetDataspaceFromColorMode(ColorMode mode) {
+ switch (mode) {
+ case ColorMode::SRGB:
+ case ColorMode::NATIVE:
+ return HAL_DATASPACE_V0_SRGB;
+ case ColorMode::DCI_P3:
+ return HAL_DATASPACE_DCI_P3;
+ case ColorMode::DISPLAY_P3:
+ return HAL_DATASPACE_DISPLAY_P3;
+ case ColorMode::BT2100_PQ:
+ return HAL_DATASPACE_BT2020_PQ;
+ case ColorMode::BT2100_HLG:
+ return HAL_DATASPACE_BT2020_HLG;
+ default:
+ return HAL_DATASPACE_UNKNOWN;
+ }
+}
+
+void HWCUEvent::UEventThread(HWCUEvent *hwc_uevent) {
+ const char *uevent_thread_name = "HWC_UeventThread";
+
+ prctl(PR_SET_NAME, uevent_thread_name, 0, 0, 0);
+ setpriority(PRIO_PROCESS, 0, HAL_PRIORITY_URGENT_DISPLAY);
+
+ int status = uevent_init();
+ if (!status) {
+ std::unique_lock<std::mutex> caller_lock(hwc_uevent->mutex_);
+ hwc_uevent->caller_cv_.notify_one();
+ DLOGE("Failed to init uevent with err %d", status);
+ return;
+ }
+
+ {
+ // Signal caller thread that worker thread is ready to listen to events.
+ std::unique_lock<std::mutex> caller_lock(hwc_uevent->mutex_);
+ hwc_uevent->init_done_ = true;
+ hwc_uevent->caller_cv_.notify_one();
+ }
+
+ while (1) {
+ char uevent_data[PAGE_SIZE] = {};
+
+ // keep last 2 zeros to ensure double 0 termination
+ int length = uevent_next_event(uevent_data, INT32(sizeof(uevent_data)) - 2);
+
+ // scope of lock to this block only, so that caller is free to set event handler to nullptr;
+ {
+ std::lock_guard<std::mutex> guard(hwc_uevent->mutex_);
+ if (hwc_uevent->uevent_listener_) {
+ hwc_uevent->uevent_listener_->UEventHandler(uevent_data, length);
+ } else {
+ DLOGW("UEvent dropped. No uevent listener.");
+ }
+ }
+ }
+}
+
+HWCUEvent::HWCUEvent() {
+ std::unique_lock<std::mutex> caller_lock(mutex_);
+ std::thread thread(HWCUEvent::UEventThread, this);
+ thread.detach();
+ caller_cv_.wait(caller_lock);
+}
+
+void HWCUEvent::Register(HWCUEventListener *uevent_listener) {
+ DLOGI("Set uevent listener = %p", uevent_listener);
+
+ std::lock_guard<std::mutex> obj(mutex_);
+ uevent_listener_ = uevent_listener;
+}
+
+HWCSession::HWCSession(const hw_module_t *module) {
+ hwc2_device_t::common.tag = HARDWARE_DEVICE_TAG;
+ hwc2_device_t::common.version = HWC_DEVICE_API_VERSION_2_0;
+ hwc2_device_t::common.module = const_cast<hw_module_t *>(module);
+ hwc2_device_t::common.close = Close;
+ hwc2_device_t::getCapabilities = GetCapabilities;
+ hwc2_device_t::getFunction = GetFunction;
+}
+
+int HWCSession::Init() {
+ SCOPE_LOCK(locker_[HWC_DISPLAY_PRIMARY]);
+
+ int status = -EINVAL;
+ const char *qservice_name = "display.qservice";
+
+ if (!g_hwc_uevent_.InitDone()) {
+ return status;
+ }
+
+
+#if defined(DISPLAY_CONFIG_1_2) && defined(CONFIG_BASEID_FROM_PROP)
+ char indices[kPropertyMax];
+ uint32_t index_start, index_size;
+ if (Debug::Get()->GetProperty(BUILTIN_BASEID_AND_SIZE_PROP, indices) == kErrorNone) {
+ if (std::sscanf(indices, "%d,%d", &index_start, &index_size) == 2) {
+ setDisplayIndex(IDisplayConfig::DisplayTypeExt::DISPLAY_BUILTIN,
+ index_start, index_size);
+ }
+ }
+ if (Debug::Get()->GetProperty(PLUGGABLE_BASEID_AND_SIZE_PROP, indices) == kErrorNone) {
+ if (std::sscanf(indices, "%d,%d", &index_start, &index_size) == 2) {
+ setDisplayIndex(IDisplayConfig::DisplayTypeExt::DISPLAY_PLUGGABLE,
+ index_start, index_size);
+ }
+ }
+ if (Debug::Get()->GetProperty(VIRTUAL_BASEID_AND_SIZE_PROP, indices) == kErrorNone) {
+ if (std::sscanf(indices, "%d,%d", &index_start, &index_size) == 2) {
+ setDisplayIndex(IDisplayConfig::DisplayTypeExt::DISPLAY_VIRTUAL,
+ index_start, index_size);
+ }
+ }
+#endif
+
+ // Start QService and connect to it.
+ qService::QService::init();
+ android::sp<qService::IQService> iqservice = android::interface_cast<qService::IQService>(
+ android::defaultServiceManager()->getService(android::String16(qservice_name)));
+
+ if (iqservice.get()) {
+ iqservice->connect(android::sp<qClient::IQClient>(this));
+ qservice_ = reinterpret_cast<qService::QService *>(iqservice.get());
+ } else {
+ DLOGE("Failed to acquire %s", qservice_name);
+ return -EINVAL;
+ }
+
+ HWCDebugHandler::Get()->GetProperty(ENABLE_NULL_DISPLAY_PROP, &null_display_mode_);
+ HWCDebugHandler::Get()->GetProperty(DISABLE_HOTPLUG_BWCHECK, &disable_hotplug_bwcheck_);
+ HWCDebugHandler::Get()->GetProperty(DISABLE_MASK_LAYER_HINT, &disable_mask_layer_hint_);
+
+ if (!null_display_mode_) {
+ g_hwc_uevent_.Register(this);
+ }
+
+ int value = 0;
+ Debug::Get()->GetProperty(ENABLE_ASYNC_POWERMODE, &value);
+ async_powermode_ = (value == 1);
+ DLOGI("builtin_powermode_override: %d", async_powermode_);
+
+ InitSupportedDisplaySlots();
+ // Create primary display here. Remaining builtin displays will be created after client has set
+ // display indexes which may happen sometime before callback is registered.
+ status = CreatePrimaryDisplay();
+ if (status) {
+ Deinit();
+ return status;
+ }
+
+ is_composer_up_ = true;
+ StartServices();
+
+ return 0;
+}
+
+int HWCSession::Deinit() {
+ // Destroy all connected displays
+ DestroyDisplay(&map_info_primary_);
+
+ for (auto &map_info : map_info_builtin_) {
+ DestroyDisplay(&map_info);
+ }
+
+ for (auto &map_info : map_info_pluggable_) {
+ DestroyDisplay(&map_info);
+ }
+
+ for (auto &map_info : map_info_virtual_) {
+ DestroyDisplay(&map_info);
+ }
+
+ if (color_mgr_) {
+ color_mgr_->DestroyColorManager();
+ }
+
+ if (!null_display_mode_) {
+ g_hwc_uevent_.Register(nullptr);
+
+ DisplayError error = CoreInterface::DestroyCore();
+ if (error != kErrorNone) {
+ DLOGE("Display core de-initialization failed. Error = %d", error);
+ }
+ }
+
+ return 0;
+}
+
+void HWCSession::InitSupportedDisplaySlots() {
+ // Default slots:
+ // Primary = 0, External = 1
+ // Additional external displays 2,3,...max_pluggable_count.
+ // Additional builtin displays max_pluggable_count + 1, max_pluggable_count + 2,...
+ // Last slots for virtual displays.
+ // Virtual display id is only for SF <--> HWC communication.
+ // It need not align with hwccomposer_defs
+
+ map_info_primary_.client_id = qdutils::DISPLAY_PRIMARY;
+
+ if (null_display_mode_) {
+ // Skip display slot initialization.
+ return;
+ }
+
+ DisplayError error = CoreInterface::CreateCore(&buffer_allocator_, &buffer_sync_handler_,
+ &socket_handler_, &core_intf_);
+ if (error != kErrorNone) {
+ DLOGE("Failed to create CoreInterface");
+ return;
+ }
+
+ HWDisplayInterfaceInfo hw_disp_info = {};
+ error = core_intf_->GetFirstDisplayInterfaceType(&hw_disp_info);
+ if (error != kErrorNone) {
+ CoreInterface::DestroyCore();
+ DLOGE("Primary display type not recognized. Error = %d", error);
+ return;
+ }
+
+ int max_builtin = 0;
+ int max_pluggable = 0;
+ int max_virtual = 0;
+
+ error = core_intf_->GetMaxDisplaysSupported(kBuiltIn, &max_builtin);
+ if (error != kErrorNone) {
+ CoreInterface::DestroyCore();
+ DLOGE("Could not find maximum built-in displays supported. Error = %d", error);
+ return;
+ }
+
+ error = core_intf_->GetMaxDisplaysSupported(kPluggable, &max_pluggable);
+ if (error != kErrorNone) {
+ CoreInterface::DestroyCore();
+ DLOGE("Could not find maximum pluggable displays supported. Error = %d", error);
+ return;
+ }
+
+ error = core_intf_->GetMaxDisplaysSupported(kVirtual, &max_virtual);
+ if (error != kErrorNone) {
+ CoreInterface::DestroyCore();
+ DLOGE("Could not find maximum virtual displays supported. Error = %d", error);
+ return;
+ }
+
+ if (kPluggable == hw_disp_info.type && max_pluggable != 0) {
+ // If primary is a pluggable display, we have already used one pluggable display interface.
+ max_pluggable--;
+ } else if (max_builtin != 0) {
+ max_builtin--;
+ }
+
+ // Init slots in accordance to h/w capability.
+ uint32_t disp_count = UINT32(std::min(max_pluggable, HWCCallbacks::kNumPluggable));
+ hwc2_display_t base_id = qdutils::DISPLAY_EXTERNAL;
+ map_info_pluggable_.resize(disp_count);
+ for (auto &map_info : map_info_pluggable_) {
+ map_info.client_id = base_id++;
+ }
+
+ disp_count = UINT32(std::min(max_builtin, HWCCallbacks::kNumBuiltIn));
+ map_info_builtin_.resize(disp_count);
+ for (auto &map_info : map_info_builtin_) {
+ map_info.client_id = base_id++;
+ }
+
+ disp_count = UINT32(std::min(max_virtual, HWCCallbacks::kNumVirtual));
+ map_info_virtual_.resize(disp_count);
+ for (auto &map_info : map_info_virtual_) {
+ map_info.client_id = base_id++;
+ }
+
+ // resize HDR supported map to total number of displays.
+ is_hdr_display_.resize(UINT32(base_id));
+
+ if (!async_powermode_) {
+ return;
+ }
+
+ int start_index = HWCCallbacks::kNumRealDisplays;
+ std::vector<DisplayMapInfo> map_info = {map_info_primary_};
+ std::copy(map_info_builtin_.begin(), map_info_builtin_.end(), std::back_inserter(map_info));
+ std::copy(map_info_pluggable_.begin(), map_info_pluggable_.end(), std::back_inserter(map_info));
+ for (auto &map : map_info) {
+ DLOGI("Display Pairs: map.client_id: %d, start_index: %d", map.client_id, start_index);
+ map_hwc_display_.insert(std::make_pair(map.client_id, start_index++));
+ }
+}
+
+int HWCSession::GetDisplayIndex(int dpy) {
+ DisplayMapInfo *map_info = nullptr;
+ switch (dpy) {
+ case qdutils::DISPLAY_PRIMARY:
+ map_info = &map_info_primary_;
+ break;
+ case qdutils::DISPLAY_EXTERNAL:
+ map_info = map_info_pluggable_.size() ? &map_info_pluggable_[0] : nullptr;
+ break;
+ case qdutils::DISPLAY_EXTERNAL_2:
+ map_info = (map_info_pluggable_.size() > 1) ? &map_info_pluggable_[1] : nullptr;
+ break;
+ case qdutils::DISPLAY_VIRTUAL:
+ map_info = map_info_virtual_.size() ? &map_info_virtual_[0] : nullptr;
+ break;
+ case qdutils::DISPLAY_BUILTIN_2:
+ map_info = map_info_builtin_.size() ? &map_info_builtin_[0] : nullptr;
+ break;
+ default:
+ DLOGW("Unknown display %d.", dpy);
+ break;
+ }
+
+ if (!map_info) {
+ DLOGE("Display index not found for display %d.", dpy);
+ return -1;
+ }
+
+ return INT(map_info->client_id);
+}
+
+int HWCSession::Open(const hw_module_t *module, const char *name, hw_device_t **device) {
+ if (!module || !name || !device) {
+ DLOGE("Invalid parameters.");
+ return -EINVAL;
+ }
+
+ if (!strcmp(name, HWC_HARDWARE_COMPOSER)) {
+ HWCSession *hwc_session = new HWCSession(module);
+ if (!hwc_session) {
+ return -ENOMEM;
+ }
+
+ int status = hwc_session->Init();
+ if (status != 0) {
+ delete hwc_session;
+ hwc_session = NULL;
+ return status;
+ }
+
+ hwc2_device_t *composer_device = hwc_session;
+ *device = reinterpret_cast<hw_device_t *>(composer_device);
+ }
+
+ return 0;
+}
+
+int HWCSession::Close(hw_device_t *device) {
+ if (!device) {
+ return -EINVAL;
+ }
+
+ hwc2_device_t *composer_device = reinterpret_cast<hwc2_device_t *>(device);
+ HWCSession *hwc_session = static_cast<HWCSession *>(composer_device);
+
+ hwc_session->Deinit();
+
+ return 0;
+}
+
+void HWCSession::GetCapabilities(struct hwc2_device *device, uint32_t *outCount,
+ int32_t *outCapabilities) {
+ if (!outCount) {
+ return;
+ }
+
+ int value = 0;
+ bool disable_skip_validate = false;
+ if (Debug::Get()->GetProperty(DISABLE_SKIP_VALIDATE_PROP, &value) == kErrorNone) {
+ disable_skip_validate = (value == 1);
+ }
+ uint32_t count = 1 + (disable_skip_validate ? 0 : 1);
+
+ if (outCapabilities != nullptr && (*outCount >= count)) {
+ outCapabilities[0] = HWC2_CAPABILITY_SKIP_CLIENT_COLOR_TRANSFORM;
+ if (!disable_skip_validate) {
+ outCapabilities[1] = HWC2_CAPABILITY_SKIP_VALIDATE;
+ }
+ }
+ *outCount = count;
+}
+
+template <typename PFN, typename T>
+static hwc2_function_pointer_t AsFP(T function) {
+ static_assert(std::is_same<PFN, T>::value, "Incompatible function pointer");
+ return reinterpret_cast<hwc2_function_pointer_t>(function);
+}
+
+// HWC2 functions returned in GetFunction
+// Defined in the same order as in the HWC2 header
+
+int32_t HWCSession::AcceptDisplayChanges(hwc2_device_t *device, hwc2_display_t display) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::AcceptDisplayChanges);
+}
+
+int32_t HWCSession::CreateLayer(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t *out_layer_id) {
+ if (!out_layer_id) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ return CallDisplayFunction(device, display, &HWCDisplay::CreateLayer, out_layer_id);
+}
+
+int32_t HWCSession::CreateVirtualDisplay(hwc2_device_t *device, uint32_t width, uint32_t height,
+ int32_t *format, hwc2_display_t *out_display_id) {
+ // TODO(user): Handle concurrency with HDMI
+ if (!device) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ if (!out_display_id || !width || !height || !format) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ auto status = hwc_session->CreateVirtualDisplayObj(width, height, format, out_display_id);
+ if (status == HWC2::Error::None) {
+ DLOGI("Created virtual display id:% " PRIu64 ", res: %dx%d", *out_display_id, width, height);
+ } else {
+ DLOGE("Failed to create virtual display: %s", to_string(status).c_str());
+ }
+ return INT32(status);
+}
+
+int32_t HWCSession::DestroyLayer(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t layer) {
+ return CallDisplayFunction(device, display, &HWCDisplay::DestroyLayer, layer);
+}
+
+int32_t HWCSession::DestroyVirtualDisplay(hwc2_device_t *device, hwc2_display_t display) {
+ if (!device || display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ auto *hwc_session = static_cast<HWCSession *>(device);
+ hwc2_display_t active_builtin_disp_id = hwc_session->GetActiveBuiltinDisplay();
+
+ if (active_builtin_disp_id < HWCCallbacks::kNumDisplays) {
+ Locker::ScopeLock lock_a(locker_[active_builtin_disp_id]);
+ std::bitset<kSecureMax> secure_sessions = 0;
+ hwc_session->hwc_display_[active_builtin_disp_id]->GetActiveSecureSession(&secure_sessions);
+ if (secure_sessions.any()) {
+ DLOGW("Secure session is active, defer destruction of virtual display id:%" PRIu64, display);
+ hwc_session->destroy_virtual_disp_pending_ = true;
+ return HWC2_ERROR_NONE;
+ }
+ }
+
+ for (auto &map_info : hwc_session->map_info_virtual_) {
+ if (map_info.client_id == display) {
+ DLOGI("Destroying virtual display id:%" PRIu64, display);
+ hwc_session->DestroyDisplay(&map_info);
+ break;
+ }
+ }
+
+ return HWC2_ERROR_NONE;
+}
+
+void HWCSession::Dump(hwc2_device_t *device, uint32_t *out_size, char *out_buffer) {
+ if (!device || !out_size) {
+ return;
+ }
+
+ auto *hwc_session = static_cast<HWCSession *>(device);
+ const size_t max_dump_size = 8192;
+
+ if (out_buffer == nullptr) {
+ *out_size = max_dump_size;
+ } else {
+ std::string s {};
+ for (int id = 0; id < HWCCallbacks::kNumRealDisplays; id++) {
+ SCOPE_LOCK(locker_[id]);
+ if (hwc_session->hwc_display_[id]) {
+ s += hwc_session->hwc_display_[id]->Dump();
+ }
+ }
+ auto copied = s.copy(out_buffer, std::min(s.size(), max_dump_size), 0);
+ *out_size = UINT32(copied);
+ }
+}
+
+uint32_t HWCSession::GetMaxVirtualDisplayCount(hwc2_device_t *device) {
+ if (device == nullptr) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ return 1;
+}
+
+static int32_t GetActiveConfig(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_config_t *out_config) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetActiveConfig, out_config);
+}
+
+static int32_t GetChangedCompositionTypes(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *out_num_elements, hwc2_layer_t *out_layers,
+ int32_t *out_types) {
+ // null_ptr check only for out_num_elements, as out_layers and out_types can be null.
+ if (!out_num_elements) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetChangedCompositionTypes,
+ out_num_elements, out_layers, out_types);
+}
+
+static int32_t GetClientTargetSupport(hwc2_device_t *device, hwc2_display_t display, uint32_t width,
+ uint32_t height, int32_t format, int32_t dataspace) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetClientTargetSupport,
+ width, height, format, dataspace);
+}
+
+static int32_t GetColorModes(hwc2_device_t *device, hwc2_display_t display, uint32_t *out_num_modes,
+ int32_t /*ColorMode*/ *int_out_modes) {
+ auto out_modes = reinterpret_cast<ColorMode *>(int_out_modes);
+ if (out_num_modes == nullptr) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetColorModes, out_num_modes,
+ out_modes);
+}
+
+static int32_t GetRenderIntents(hwc2_device_t *device, hwc2_display_t display,
+ int32_t /*ColorMode*/ int_mode, uint32_t *out_num_intents,
+ int32_t /*RenderIntent*/ *int_out_intents) {
+ auto mode = static_cast<ColorMode>(int_mode);
+ auto out_intents = reinterpret_cast<RenderIntent *>(int_out_intents);
+ if (out_num_intents == nullptr) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (mode < ColorMode::NATIVE || mode > ColorMode::BT2100_HLG) {
+ DLOGE("Invalid ColorMode: %d", mode);
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetRenderIntents, mode,
+ out_num_intents, out_intents);
+}
+
+static int32_t GetDataspaceSaturationMatrix(hwc2_device_t *device,
+ int32_t /*Dataspace*/ int_dataspace,
+ float *out_matrix) {
+ auto dataspace = static_cast<Dataspace>(int_dataspace);
+ if (device == nullptr || out_matrix == nullptr || dataspace != Dataspace::SRGB_LINEAR) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ // We only have the matrix for sRGB
+ float saturation_matrix[kDataspaceSaturationMatrixCount] = { 1.0, 0.0, 0.0, 0.0, \
+ 0.0, 1.0, 0.0, 0.0, \
+ 0.0, 0.0, 1.0, 0.0, \
+ 0.0, 0.0, 0.0, 1.0 };
+
+ // TODO(user): This value should ideally be retrieved from a QDCM configuration file
+ char value[kPropertyMax] = {};
+ if (Debug::Get()->GetProperty(DATASPACE_SATURATION_MATRIX_PROP, value) != kErrorNone) {
+ DLOGW("Undefined saturation matrix");
+ return HWC2_ERROR_BAD_CONFIG;
+ }
+ std::string value_string(value);
+ std::size_t start = 0, end = 0;
+ int index = 0;
+ while ((end = value_string.find(",", start)) != std::string::npos) {
+ saturation_matrix[index] = std::stof(value_string.substr(start, end - start));
+ start = end + 1;
+ index++;
+ // We expect a 3x3, SF needs 4x4, keep the last row/column identity
+ if ((index + 1) % 4 == 0) {
+ index++;
+ }
+ }
+ saturation_matrix[index] = std::stof(value_string.substr(start, end - start));
+ if (index < kDataspaceSaturationPropertyElements - 1) {
+ // The property must have kDataspaceSaturationPropertyElements delimited by commas
+ DLOGW("Invalid saturation matrix defined");
+ return HWC2_ERROR_BAD_CONFIG;
+ }
+ for (int32_t i = 0; i < kDataspaceSaturationMatrixCount; i += 4) {
+ DLOGD("%f %f %f %f", saturation_matrix[i], saturation_matrix[i + 1], saturation_matrix[i + 2],
+ saturation_matrix[i + 3]);
+ }
+ for (uint32_t i = 0; i < kDataspaceSaturationMatrixCount; i++) {
+ out_matrix[i] = saturation_matrix[i];
+ }
+ return HWC2_ERROR_NONE;
+}
+
+static int32_t GetPerFrameMetadataKeys(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *out_num_keys, int32_t *int_out_keys) {
+ auto out_keys = reinterpret_cast<PerFrameMetadataKey *>(int_out_keys);
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetPerFrameMetadataKeys,
+ out_num_keys, out_keys);
+}
+
+static int32_t SetLayerPerFrameMetadata(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t layer, uint32_t num_elements,
+ const int32_t *int_keys, const float *metadata) {
+ auto keys = reinterpret_cast<const PerFrameMetadataKey *>(int_keys);
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerPerFrameMetadata,
+ num_elements, keys, metadata);
+}
+
+static int32_t SetLayerPerFrameMetadataBlobs(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t layer, uint32_t num_elements,
+ const int32_t *int_keys, const uint32_t *sizes,
+ const uint8_t *metadata) {
+ auto keys = reinterpret_cast<const PerFrameMetadataKey *>(int_keys);
+ return HWCSession::CallLayerFunction(device, display, layer,
+ &HWCLayer::SetLayerPerFrameMetadataBlobs,
+ num_elements, keys, sizes, metadata);
+}
+
+static int32_t GetDisplayAttribute(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_config_t config, int32_t int_attribute,
+ int32_t *out_value) {
+ if (out_value == nullptr || int_attribute < HWC2_ATTRIBUTE_INVALID ||
+ int_attribute > HWC2_ATTRIBUTE_CONFIG_GROUP) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ auto attribute = static_cast<HWC2::Attribute>(int_attribute);
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetDisplayAttribute, config,
+ attribute, out_value);
+}
+
+static int32_t GetDisplayConfigs(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *out_num_configs, hwc2_config_t *out_configs) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetDisplayConfigs,
+ out_num_configs, out_configs);
+}
+
+static int32_t GetDisplayName(hwc2_device_t *device, hwc2_display_t display, uint32_t *out_size,
+ char *out_name) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetDisplayName, out_size,
+ out_name);
+}
+
+static int32_t GetDisplayRequests(hwc2_device_t *device, hwc2_display_t display,
+ int32_t *out_display_requests, uint32_t *out_num_elements,
+ hwc2_layer_t *out_layers, int32_t *out_layer_requests) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetDisplayRequests,
+ out_display_requests, out_num_elements, out_layers,
+ out_layer_requests);
+}
+
+static int32_t GetDisplayType(hwc2_device_t *device, hwc2_display_t display, int32_t *out_type) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetDisplayType, out_type);
+}
+
+
+static int32_t GetHdrCapabilities(hwc2_device_t* device, hwc2_display_t display,
+ uint32_t* out_num_types, int32_t* out_types,
+ float* out_max_luminance, float* out_max_average_luminance,
+ float* out_min_luminance) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetHdrCapabilities,
+ out_num_types, out_types, out_max_luminance,
+ out_max_average_luminance, out_min_luminance);
+}
+
+
+static int32_t GetReleaseFences(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *out_num_elements, hwc2_layer_t *out_layers,
+ int32_t *out_fences) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::GetReleaseFences,
+ out_num_elements, out_layers, out_fences);
+}
+
+int32_t HWCSession::PresentDisplay(hwc2_device_t *device, hwc2_display_t display,
+ int32_t *out_retire_fence) {
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ auto status = HWC2::Error::BadDisplay;
+ DTRACE_SCOPED();
+
+ if (!hwc_session || (display >= HWCCallbacks::kNumDisplays)) {
+ DLOGW("Invalid Display : hwc session = %s display = %" PRIu64,
+ hwc_session ? "Valid" : "NULL", display);
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ hwc_session->HandleSecureSession();
+ {
+ SCOPE_LOCK(power_state_[display]);
+ if (hwc_session->power_state_transition_[display]) {
+ // Route all interactions with client to dummy display.
+ display = hwc_session->map_hwc_display_.find(display)->second;
+ }
+ }
+
+ {
+ SEQUENCE_EXIT_SCOPE_LOCK(locker_[display]);
+ if (!hwc_session->hwc_display_[display]) {
+ DLOGW("Removed Display : display = %" PRIu64, display);
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ if (out_retire_fence == nullptr) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (power_on_pending_[display]) {
+ status = HWC2::Error::None;
+ } else {
+ hwc_session->hwc_display_[display]->ProcessActiveConfigChange();
+ status = hwc_session->PresentDisplayInternal(display, out_retire_fence);
+ if (status == HWC2::Error::None) {
+ // Check if hwc's refresh trigger is getting exercised.
+ if (hwc_session->callbacks_.NeedsRefresh(display)) {
+ hwc_session->hwc_display_[display]->SetPendingRefresh();
+ hwc_session->callbacks_.ResetRefresh(display);
+ }
+ status = hwc_session->hwc_display_[display]->Present(out_retire_fence);
+ }
+ }
+ }
+
+ if (status != HWC2::Error::None && status != HWC2::Error::NotValidated) {
+ SEQUENCE_CANCEL_SCOPE_LOCK(locker_[display]);
+ }
+
+ hwc_session->HandlePowerOnPending(display, *out_retire_fence);
+ hwc_session->HandleHotplugPending(display, *out_retire_fence);
+ hwc_session->display_ready_.set(UINT32(display));
+ hwc_session->HandlePendingRefresh();
+
+ return INT32(status);
+}
+
+void HWCSession::HandlePendingRefresh() {
+ if (pending_refresh_.none()) {
+ return;
+ }
+
+ for (size_t i = 0; i < pending_refresh_.size(); i++) {
+ if (pending_refresh_.test(i)) {
+ Refresh(i);
+ }
+ break;
+ }
+
+ pending_refresh_.reset();
+}
+
+int32_t HWCSession::RegisterCallback(hwc2_device_t *device, int32_t descriptor,
+ hwc2_callback_data_t callback_data,
+ hwc2_function_pointer_t pointer) {
+ if (!device) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ SCOPE_LOCK(hwc_session->callbacks_lock_);
+ auto desc = static_cast<HWC2::Callback>(descriptor);
+ auto error = hwc_session->callbacks_.Register(desc, callback_data, pointer);
+ if (error != HWC2::Error::None) {
+ return INT32(error);
+ }
+
+ DLOGD("%s callback: %s", pointer ? "Registering" : "Deregistering", to_string(desc).c_str());
+ if (descriptor == HWC2_CALLBACK_HOTPLUG) {
+ if (hwc_session->hwc_display_[HWC_DISPLAY_PRIMARY]) {
+ DLOGI("Hotplugging primary...");
+ hwc_session->callbacks_.Hotplug(HWC_DISPLAY_PRIMARY, HWC2::Connection::Connected);
+ }
+
+ std::vector<hwc2_display_t> pending_hotplugs;
+ if (pointer) {
+ for (auto &map_info : hwc_session->map_info_builtin_) {
+ SCOPE_LOCK(locker_[map_info.client_id]);
+ if (hwc_session->hwc_display_[map_info.client_id]) {
+ pending_hotplugs.push_back(static_cast<hwc2_display_t>(map_info.client_id));
+ }
+ }
+ for (auto &map_info : hwc_session->map_info_pluggable_) {
+ SCOPE_LOCK(locker_[map_info.client_id]);
+ if (hwc_session->hwc_display_[map_info.client_id]) {
+ pending_hotplugs.push_back(static_cast<hwc2_display_t>(map_info.client_id));
+ }
+ }
+ }
+
+ // Create displays since they should now have their final display indices set.
+ DLOGI("Handling built-in displays...");
+ if (hwc_session->HandleBuiltInDisplays()) {
+ DLOGW("Failed handling built-in displays.");
+ }
+ DLOGI("Handling pluggable displays...");
+ int32_t err = hwc_session->HandlePluggableDisplays(false);
+ if (err) {
+ DLOGW("All displays could not be created. Error %d '%s'. Hotplug handling %s.", err,
+ strerror(abs(err)), hwc_session->hotplug_pending_event_ == kHotPlugEvent ? "deferred" :
+ "dropped");
+ }
+
+ // If previously registered, call hotplug for all connected displays to refresh
+ if (pointer) {
+ std::vector<hwc2_display_t> updated_pending_hotplugs;
+ for (auto client_id : pending_hotplugs) {
+ SCOPE_LOCK(locker_[client_id]);
+ // check if the display is unregistered
+ if (hwc_session->hwc_display_[client_id]) {
+ updated_pending_hotplugs.push_back(client_id);
+ }
+ }
+ for (auto client_id : updated_pending_hotplugs) {
+ DLOGI("Re-hotplug display connected: client id = %d", client_id);
+ hwc_session->callbacks_.Hotplug(client_id, HWC2::Connection::Connected);
+ }
+ }
+
+ hwc_session->client_connected_ = !!pointer;
+ // Notfify all displays.
+ hwc_session->NotifyClientStatus(hwc_session->client_connected_);
+ }
+ hwc_session->need_invalidate_ = false;
+ hwc_session->callbacks_lock_.Broadcast();
+ return HWC2_ERROR_NONE;
+}
+
+static int32_t SetActiveConfig(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_config_t config) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::SetActiveConfig, config);
+}
+
+static int32_t SetClientTarget(hwc2_device_t *device, hwc2_display_t display,
+ buffer_handle_t target, int32_t acquire_fence,
+ int32_t dataspace, hwc_region_t damage) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::SetClientTarget, target,
+ acquire_fence, dataspace, damage);
+}
+
+int32_t HWCSession::SetColorMode(hwc2_device_t *device, hwc2_display_t display,
+ int32_t /*ColorMode*/ int_mode) {
+ auto mode = static_cast<ColorMode>(int_mode);
+ if (mode < ColorMode::NATIVE || mode > ColorMode::BT2100_HLG) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::SetColorMode, mode);
+}
+
+int32_t HWCSession::SetColorModeWithRenderIntent(hwc2_device_t *device, hwc2_display_t display,
+ int32_t /*ColorMode*/ int_mode,
+ int32_t /*RenderIntent*/ int_render_intent) {
+ auto mode = static_cast<ColorMode>(int_mode);
+ if (mode < ColorMode::NATIVE || mode > ColorMode::BT2100_HLG) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ auto render_intent = static_cast<RenderIntent>(int_render_intent);
+ if ((render_intent < RenderIntent::COLORIMETRIC) ||
+ (render_intent > RenderIntent::TONE_MAP_ENHANCE)) {
+ DLOGE("Invalid RenderIntent: %d", render_intent);
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::SetColorModeWithRenderIntent,
+ mode, render_intent);
+}
+
+int32_t HWCSession::SetColorTransform(hwc2_device_t *device, hwc2_display_t display,
+ const float *matrix,
+ int32_t /*android_color_transform_t*/ hint) {
+ if (!matrix || hint < HAL_COLOR_TRANSFORM_IDENTITY ||
+ hint > HAL_COLOR_TRANSFORM_CORRECT_TRITANOPIA) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ android_color_transform_t transform_hint = static_cast<android_color_transform_t>(hint);
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::SetColorTransform, matrix,
+ transform_hint);
+}
+
+static int32_t SetCursorPosition(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
+ int32_t x, int32_t y) {
+ auto status = INT32(HWC2::Error::None);
+ status = HWCSession::CallDisplayFunction(device, display, &HWCDisplay::SetCursorPosition,
+ layer, x, y);
+ if (status == INT32(HWC2::Error::None)) {
+ // Update cursor position
+ HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetCursorPosition, x, y);
+ }
+ return status;
+}
+
+static int32_t SetLayerBlendMode(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
+ int32_t int_mode) {
+ if (int_mode < HWC2_BLEND_MODE_INVALID || int_mode > HWC2_BLEND_MODE_COVERAGE) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ auto mode = static_cast<HWC2::BlendMode>(int_mode);
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerBlendMode, mode);
+}
+
+static int32_t SetLayerBuffer(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
+ buffer_handle_t buffer, int32_t acquire_fence) {
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerBuffer, buffer,
+ acquire_fence);
+}
+
+static int32_t SetLayerColor(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
+ hwc_color_t color) {
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerColor, color);
+}
+
+static int32_t SetLayerCompositionType(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t layer, int32_t int_type) {
+ auto type = static_cast<HWC2::Composition>(int_type);
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerCompositionType,
+ type);
+}
+
+static int32_t SetLayerDataspace(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
+ int32_t dataspace) {
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerDataspace,
+ dataspace);
+}
+
+static int32_t SetLayerDisplayFrame(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t layer, hwc_rect_t frame) {
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerDisplayFrame,
+ frame);
+}
+
+static int32_t SetLayerPlaneAlpha(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
+ float alpha) {
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerPlaneAlpha,
+ alpha);
+}
+
+static int32_t SetLayerSourceCrop(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
+ hwc_frect_t crop) {
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerSourceCrop, crop);
+}
+
+static int32_t SetLayerSurfaceDamage(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t layer, hwc_region_t damage) {
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerSurfaceDamage,
+ damage);
+}
+
+static int32_t SetLayerTransform(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
+ int32_t int_transform) {
+ auto transform = static_cast<HWC2::Transform>(int_transform);
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerTransform,
+ transform);
+}
+
+static int32_t SetLayerVisibleRegion(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t layer, hwc_region_t visible) {
+ return HWCSession::CallLayerFunction(device, display, layer, &HWCLayer::SetLayerVisibleRegion,
+ visible);
+}
+
+static int32_t SetLayerZOrder(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer,
+ uint32_t z) {
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::SetLayerZOrder, layer, z);
+}
+
+int32_t HWCSession::SetOutputBuffer(hwc2_device_t *device, hwc2_display_t display,
+ buffer_handle_t buffer, int32_t releaseFence) {
+ if (!device) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ auto *hwc_session = static_cast<HWCSession *>(device);
+ if (INT32(display) != hwc_session->GetDisplayIndex(qdutils::DISPLAY_VIRTUAL)) {
+ return HWC2_ERROR_UNSUPPORTED;
+ }
+
+ SCOPE_LOCK(locker_[display]);
+ if (hwc_session->hwc_display_[display]) {
+ auto vds = reinterpret_cast<HWCDisplayVirtual *>(hwc_session->hwc_display_[display]);
+ auto status = vds->SetOutputBuffer(buffer, releaseFence);
+ return INT32(status);
+ } else {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+}
+
+int32_t HWCSession::SetPowerMode(hwc2_device_t *device, hwc2_display_t display, int32_t int_mode) {
+ if (display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ // validate device and also avoid undefined behavior in cast to HWC2::PowerMode
+ if (!device || int_mode < HWC2_POWER_MODE_OFF || int_mode > HWC2_POWER_MODE_DOZE_SUSPEND) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ if (hwc_session->power_on_pending_[display]) {
+ DLOGW("Set power mode is not allowed during secure display session");
+ return HWC2_ERROR_UNSUPPORTED;
+ }
+
+ auto mode = static_cast<HWC2::PowerMode>(int_mode);
+
+ // all displays support on/off. Check for doze modes
+ int support = 0;
+ auto status = hwc_session->GetDozeSupport(device, display, &support);
+ if (status != HWC2_ERROR_NONE) {
+ DLOGE("Failed to get doze support Error = %d", status);
+ return INT32(status);
+ }
+
+ if (!support && (mode == HWC2::PowerMode::Doze || mode == HWC2::PowerMode::DozeSuspend)) {
+ return HWC2_ERROR_UNSUPPORTED;
+ }
+
+ bool override_mode = hwc_session->async_powermode_ &&
+ hwc_session->display_ready_.test(UINT32(display));
+ if (!override_mode) {
+ auto error = CallDisplayFunction(device, display, &HWCDisplay::SetPowerMode, mode,
+ false /* teardown */);
+ if (error != HWC2_ERROR_NONE) {
+ return error;
+ }
+ } else {
+ SCOPE_LOCK(locker_[display]);
+ // Update hwc state for now. Actual poweron will handled through DisplayConfig.
+ hwc_session->hwc_display_[display]->UpdatePowerMode(mode);
+ }
+ // Reset idle pc ref count on suspend, as we enable idle pc during suspend.
+ if (mode == HWC2::PowerMode::Off) {
+ hwc_session->idle_pc_ref_cnt_ = 0;
+ }
+
+ hwc_session->UpdateThrottlingRate();
+
+ if (mode == HWC2::PowerMode::Doze) {
+ // Trigger one more refresh for PP features to take effect.
+ hwc_session->pending_refresh_.set(UINT32(display));
+ } else {
+ // Reset the pending refresh bit
+ hwc_session->pending_refresh_.reset(UINT32(display));
+ }
+
+ return HWC2_ERROR_NONE;
+}
+
+int32_t HWCSession::SetVsyncEnabled(hwc2_device_t *device, hwc2_display_t display,
+ int32_t int_enabled) {
+ // avoid undefined behavior in cast to HWC2::Vsync
+ if (int_enabled < HWC2_VSYNC_INVALID || int_enabled > HWC2_VSYNC_DISABLE) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ auto enabled = static_cast<HWC2::Vsync>(int_enabled);
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+
+ if (int_enabled == HWC2_VSYNC_ENABLE) {
+ hwc_session->callbacks_.UpdateVsyncSource(display);
+ }
+
+ return HWCSession::CallDisplayFunction(device, display, &HWCDisplay::SetVsyncEnabled, enabled);
+}
+
+int32_t HWCSession::GetDozeSupport(hwc2_device_t *device, hwc2_display_t display,
+ int32_t *out_support) {
+ if (!device || !out_support) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ HWCDisplay *hwc_display = hwc_session->hwc_display_[display];;
+ if (display >= HWCCallbacks::kNumDisplays || (hwc_display == nullptr)) {
+ DLOGE("Invalid Display %d Handle %s ", display, hwc_display ?
+ "Valid" : "NULL");
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ *out_support = 0;
+
+ if (display != qdutils::DISPLAY_PRIMARY) {
+ return HWC2_ERROR_NONE;
+ }
+
+ SCOPE_LOCK(locker_[display]);
+ if (!hwc_session->hwc_display_[display]) {
+ DLOGE("Display %d is not created yet.", INT32(display));
+ return HWC2_ERROR_NONE;
+ }
+
+ *out_support = hwc_session->hwc_display_[display]->HasSmartPanelConfig() ? 1 : 0;
+
+ return HWC2_ERROR_NONE;
+}
+
+int32_t HWCSession::SetAutoLowLatencyMode(hwc2_device_t *device, hwc2_display_t display, bool on) {
+ if (!device || display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+ return HWC2_ERROR_UNSUPPORTED;
+}
+
+int32_t HWCSession::GetSupportedContentTypes(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *count, uint32_t *contentTypes) {
+ contentTypes = {};
+ if (!device || display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+ return HWC2_ERROR_NONE;
+}
+
+int32_t HWCSession::SetContentType(hwc2_device_t *device, hwc2_display_t display,
+ int32_t type) {
+ if (!device || display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+ if (type == UINT32(composer_V2_4::IComposerClient::ContentType::NONE)) {
+ return HWC2_ERROR_NONE;
+ }
+ return HWC2_ERROR_UNSUPPORTED;
+}
+
+int32_t HWCSession::ValidateDisplay(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *out_num_types, uint32_t *out_num_requests) {
+ // out_num_types and out_num_requests will be non-NULL
+ if (!device) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+
+ {
+ SCOPE_LOCK(power_state_[display]);
+ if (hwc_session->power_state_transition_[display]) {
+ // Route all interactions with client to dummy display.
+ display = hwc_session->map_hwc_display_.find(display)->second;
+ }
+ }
+ DTRACE_SCOPED();
+ // TODO(user): Handle secure session, handle QDCM solid fill
+ auto status = HWC2::Error::BadDisplay;
+ hwc_session->HandleSecureSession();
+ {
+ SEQUENCE_ENTRY_SCOPE_LOCK(locker_[display]);
+ if (power_on_pending_[display]) {
+ status = HWC2::Error::None;
+ } else if (hwc_session->hwc_display_[display]) {
+ hwc_session->hwc_display_[display]->ProcessActiveConfigChange();
+ hwc_session->hwc_display_[display]->SetFastPathComposition(false);
+ status = hwc_session->ValidateDisplayInternal(display, out_num_types, out_num_requests);
+ }
+ }
+
+ // Sequence locking currently begins on Validate, so cancel the sequence lock on failures
+ if (status != HWC2::Error::None && status != HWC2::Error::HasChanges) {
+ SEQUENCE_CANCEL_SCOPE_LOCK(locker_[display]);
+ }
+
+ return INT32(status);
+}
+
+hwc2_function_pointer_t HWCSession::GetFunction(struct hwc2_device *device,
+ int32_t int_descriptor) {
+ auto descriptor = static_cast<HWC2::FunctionDescriptor>(int_descriptor);
+
+ switch (descriptor) {
+ case HWC2::FunctionDescriptor::AcceptDisplayChanges:
+ return AsFP<HWC2_PFN_ACCEPT_DISPLAY_CHANGES>(HWCSession::AcceptDisplayChanges);
+ case HWC2::FunctionDescriptor::CreateLayer:
+ return AsFP<HWC2_PFN_CREATE_LAYER>(CreateLayer);
+ case HWC2::FunctionDescriptor::CreateVirtualDisplay:
+ return AsFP<HWC2_PFN_CREATE_VIRTUAL_DISPLAY>(HWCSession::CreateVirtualDisplay);
+ case HWC2::FunctionDescriptor::DestroyLayer:
+ return AsFP<HWC2_PFN_DESTROY_LAYER>(DestroyLayer);
+ case HWC2::FunctionDescriptor::DestroyVirtualDisplay:
+ return AsFP<HWC2_PFN_DESTROY_VIRTUAL_DISPLAY>(HWCSession::DestroyVirtualDisplay);
+ case HWC2::FunctionDescriptor::Dump:
+ return AsFP<HWC2_PFN_DUMP>(HWCSession::Dump);
+ case HWC2::FunctionDescriptor::GetActiveConfig:
+ return AsFP<HWC2_PFN_GET_ACTIVE_CONFIG>(GetActiveConfig);
+ case HWC2::FunctionDescriptor::GetChangedCompositionTypes:
+ return AsFP<HWC2_PFN_GET_CHANGED_COMPOSITION_TYPES>(GetChangedCompositionTypes);
+ case HWC2::FunctionDescriptor::GetClientTargetSupport:
+ return AsFP<HWC2_PFN_GET_CLIENT_TARGET_SUPPORT>(GetClientTargetSupport);
+ case HWC2::FunctionDescriptor::GetColorModes:
+ return AsFP<HWC2_PFN_GET_COLOR_MODES>(GetColorModes);
+ case HWC2::FunctionDescriptor::GetDisplayAttribute:
+ return AsFP<HWC2_PFN_GET_DISPLAY_ATTRIBUTE>(GetDisplayAttribute);
+ case HWC2::FunctionDescriptor::GetDisplayConfigs:
+ return AsFP<HWC2_PFN_GET_DISPLAY_CONFIGS>(GetDisplayConfigs);
+ case HWC2::FunctionDescriptor::GetDisplayName:
+ return AsFP<HWC2_PFN_GET_DISPLAY_NAME>(GetDisplayName);
+ case HWC2::FunctionDescriptor::GetDisplayRequests:
+ return AsFP<HWC2_PFN_GET_DISPLAY_REQUESTS>(GetDisplayRequests);
+ case HWC2::FunctionDescriptor::GetDisplayType:
+ return AsFP<HWC2_PFN_GET_DISPLAY_TYPE>(GetDisplayType);
+ case HWC2::FunctionDescriptor::GetHdrCapabilities:
+ return AsFP<HWC2_PFN_GET_HDR_CAPABILITIES>(GetHdrCapabilities);
+ case HWC2::FunctionDescriptor::GetDozeSupport:
+ return AsFP<HWC2_PFN_GET_DOZE_SUPPORT>(GetDozeSupport);
+ case HWC2::FunctionDescriptor::GetMaxVirtualDisplayCount:
+ return AsFP<HWC2_PFN_GET_MAX_VIRTUAL_DISPLAY_COUNT>(HWCSession::GetMaxVirtualDisplayCount);
+ case HWC2::FunctionDescriptor::GetReleaseFences:
+ return AsFP<HWC2_PFN_GET_RELEASE_FENCES>(GetReleaseFences);
+ case HWC2::FunctionDescriptor::PresentDisplay:
+ return AsFP<HWC2_PFN_PRESENT_DISPLAY>(PresentDisplay);
+ case HWC2::FunctionDescriptor::RegisterCallback:
+ return AsFP<HWC2_PFN_REGISTER_CALLBACK>(RegisterCallback);
+ case HWC2::FunctionDescriptor::SetActiveConfig:
+ return AsFP<HWC2_PFN_SET_ACTIVE_CONFIG>(SetActiveConfig);
+ case HWC2::FunctionDescriptor::SetClientTarget:
+ return AsFP<HWC2_PFN_SET_CLIENT_TARGET>(SetClientTarget);
+ case HWC2::FunctionDescriptor::SetColorMode:
+ return AsFP<HWC2_PFN_SET_COLOR_MODE>(SetColorMode);
+ case HWC2::FunctionDescriptor::SetColorTransform:
+ return AsFP<HWC2_PFN_SET_COLOR_TRANSFORM>(SetColorTransform);
+ case HWC2::FunctionDescriptor::SetCursorPosition:
+ return AsFP<HWC2_PFN_SET_CURSOR_POSITION>(SetCursorPosition);
+ case HWC2::FunctionDescriptor::SetLayerBlendMode:
+ return AsFP<HWC2_PFN_SET_LAYER_BLEND_MODE>(SetLayerBlendMode);
+ case HWC2::FunctionDescriptor::SetLayerBuffer:
+ return AsFP<HWC2_PFN_SET_LAYER_BUFFER>(SetLayerBuffer);
+ case HWC2::FunctionDescriptor::SetLayerColor:
+ return AsFP<HWC2_PFN_SET_LAYER_COLOR>(SetLayerColor);
+ case HWC2::FunctionDescriptor::SetLayerCompositionType:
+ return AsFP<HWC2_PFN_SET_LAYER_COMPOSITION_TYPE>(SetLayerCompositionType);
+ case HWC2::FunctionDescriptor::SetLayerDataspace:
+ return AsFP<HWC2_PFN_SET_LAYER_DATASPACE>(SetLayerDataspace);
+ case HWC2::FunctionDescriptor::SetLayerDisplayFrame:
+ return AsFP<HWC2_PFN_SET_LAYER_DISPLAY_FRAME>(SetLayerDisplayFrame);
+ case HWC2::FunctionDescriptor::SetLayerPlaneAlpha:
+ return AsFP<HWC2_PFN_SET_LAYER_PLANE_ALPHA>(SetLayerPlaneAlpha);
+ // Sideband stream is not supported
+ // case HWC2::FunctionDescriptor::SetLayerSidebandStream:
+ case HWC2::FunctionDescriptor::SetLayerSourceCrop:
+ return AsFP<HWC2_PFN_SET_LAYER_SOURCE_CROP>(SetLayerSourceCrop);
+ case HWC2::FunctionDescriptor::SetLayerSurfaceDamage:
+ return AsFP<HWC2_PFN_SET_LAYER_SURFACE_DAMAGE>(SetLayerSurfaceDamage);
+ case HWC2::FunctionDescriptor::SetLayerTransform:
+ return AsFP<HWC2_PFN_SET_LAYER_TRANSFORM>(SetLayerTransform);
+ case HWC2::FunctionDescriptor::SetLayerVisibleRegion:
+ return AsFP<HWC2_PFN_SET_LAYER_VISIBLE_REGION>(SetLayerVisibleRegion);
+ case HWC2::FunctionDescriptor::SetLayerZOrder:
+ return AsFP<HWC2_PFN_SET_LAYER_Z_ORDER>(SetLayerZOrder);
+ case HWC2::FunctionDescriptor::SetOutputBuffer:
+ return AsFP<HWC2_PFN_SET_OUTPUT_BUFFER>(SetOutputBuffer);
+ case HWC2::FunctionDescriptor::SetPowerMode:
+ return AsFP<HWC2_PFN_SET_POWER_MODE>(SetPowerMode);
+ case HWC2::FunctionDescriptor::SetVsyncEnabled:
+ return AsFP<HWC2_PFN_SET_VSYNC_ENABLED>(SetVsyncEnabled);
+ case HWC2::FunctionDescriptor::ValidateDisplay:
+ return AsFP<HWC2_PFN_VALIDATE_DISPLAY>(HWCSession::ValidateDisplay);
+ case HWC2::FunctionDescriptor::SetReadbackBuffer:
+ return AsFP<HWC2_PFN_SET_READBACK_BUFFER>(HWCSession::SetReadbackBuffer);
+ case HWC2::FunctionDescriptor::GetReadbackBufferAttributes:
+ return AsFP<HWC2_PFN_GET_READBACK_BUFFER_ATTRIBUTES>(HWCSession::GetReadbackBufferAttributes);
+ case HWC2::FunctionDescriptor::GetReadbackBufferFence:
+ return AsFP<HWC2_PFN_GET_READBACK_BUFFER_FENCE>(HWCSession::GetReadbackBufferFence);
+ case HWC2::FunctionDescriptor::GetRenderIntents:
+ return AsFP<HWC2_PFN_GET_RENDER_INTENTS>(GetRenderIntents);
+ case HWC2::FunctionDescriptor::SetColorModeWithRenderIntent:
+ return AsFP<HWC2_PFN_SET_COLOR_MODE_WITH_RENDER_INTENT>
+ (HWCSession::SetColorModeWithRenderIntent);
+ case HWC2::FunctionDescriptor::GetDataspaceSaturationMatrix:
+ return AsFP<HWC2_PFN_GET_DATASPACE_SATURATION_MATRIX>(GetDataspaceSaturationMatrix);
+ case HWC2::FunctionDescriptor::GetPerFrameMetadataKeys:
+ return AsFP<HWC2_PFN_GET_PER_FRAME_METADATA_KEYS>(GetPerFrameMetadataKeys);
+ case HWC2::FunctionDescriptor::SetLayerPerFrameMetadata:
+ return AsFP<HWC2_PFN_SET_LAYER_PER_FRAME_METADATA>(SetLayerPerFrameMetadata);
+ case HWC2::FunctionDescriptor::SetLayerPerFrameMetadataBlobs:
+ return AsFP<HWC2_PFN_SET_LAYER_PER_FRAME_METADATA_BLOBS>(SetLayerPerFrameMetadataBlobs);
+ case HWC2::FunctionDescriptor::GetDisplayIdentificationData:
+ return AsFP<HWC2_PFN_GET_DISPLAY_IDENTIFICATION_DATA>
+ (HWCSession::GetDisplayIdentificationData);
+ case HWC2::FunctionDescriptor::GetDisplayCapabilities:
+ return AsFP<HWC2_PFN_GET_DISPLAY_CAPABILITIES>(HWCSession::GetDisplayCapabilities);
+ case HWC2::FunctionDescriptor::GetDisplayBrightnessSupport:
+ return AsFP<HWC2_PFN_GET_DISPLAY_BRIGHTNESS_SUPPORT>(HWCSession::GetDisplayBrightnessSupport);
+ case HWC2::FunctionDescriptor::SetDisplayBrightness:
+ return AsFP<HWC2_PFN_SET_DISPLAY_BRIGHTNESS>(HWCSession::SetDisplayBrightness);
+ case HWC2::FunctionDescriptor::GetDisplayConnectionType:
+ return AsFP<HWC2_PFN_GET_DISPLAY_CONNECTION_TYPE>(HWCSession::GetDisplayConnectionType);
+ case HWC2::FunctionDescriptor::GetDisplayVsyncPeriod:
+ return AsFP<HWC2_PFN_GET_DISPLAY_VSYNC_PERIOD>(HWCSession::GetDisplayVsyncPeriod);
+ case HWC2::FunctionDescriptor::SetActiveConfigWithConstraints:
+ return AsFP<HWC2_PFN_SET_ACTIVE_CONFIG_WITH_CONSTRAINTS>
+ (HWCSession::SetActiveConfigWithConstraints);
+ case HWC2::FunctionDescriptor::SetAutoLowLatencyMode:
+ return AsFP<HWC2_PFN_SET_AUTO_LOW_LATENCY_MODE>(HWCSession::SetAutoLowLatencyMode);
+ case HWC2::FunctionDescriptor::GetSupportedContentTypes:
+ return AsFP<HWC2_PFN_GET_SUPPORTED_CONTENT_TYPES>(HWCSession::GetSupportedContentTypes);
+ case HWC2::FunctionDescriptor::SetContentType:
+ return AsFP<HWC2_PFN_SET_CONTENT_TYPE>(HWCSession::SetContentType);
+ default:
+ DLOGD("Unknown/Unimplemented function descriptor: %d (%s)", int_descriptor,
+ to_string(descriptor).c_str());
+ return nullptr;
+ }
+ return nullptr;
+}
+
+HWC2::Error HWCSession::CreateVirtualDisplayObj(uint32_t width, uint32_t height, int32_t *format,
+ hwc2_display_t *out_display_id) {
+ if (!client_connected_) {
+ DLOGE("Client is not ready yet.");
+ return HWC2::Error::BadDisplay;
+ }
+
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (active_builtin_disp_id < HWCCallbacks::kNumDisplays) {
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[active_builtin_disp_id]);
+ std::bitset<kSecureMax> secure_sessions = 0;
+ if (hwc_display_[active_builtin_disp_id]) {
+ hwc_display_[active_builtin_disp_id]->GetActiveSecureSession(&secure_sessions);
+ }
+ if (secure_sessions.any()) {
+ DLOGE("Secure session is active, cannot create virtual display.");
+ return HWC2::Error::Unsupported;
+ } else if (IsPluggableDisplayConnected()) {
+ DLOGE("External session is active, cannot create virtual display.");
+ return HWC2::Error::Unsupported;
+ }
+ }
+
+ if (hwc_display_[HWC_DISPLAY_PRIMARY]) {
+ DisplayError error = hwc_display_[HWC_DISPLAY_PRIMARY]->TeardownConcurrentWriteback();
+ if (error) {
+ return HWC2::Error::NoResources;
+ }
+ }
+
+ HWDisplaysInfo hw_displays_info = {};
+ DisplayError error = core_intf_->GetDisplaysStatus(&hw_displays_info);
+ if (error != kErrorNone) {
+ DLOGE("Failed to get connected display list. Error = %d", error);
+ return HWC2::Error::BadDisplay;
+ }
+
+ // Lock confined to this scope
+ int status = -EINVAL;
+ for (auto &iter : hw_displays_info) {
+ auto &info = iter.second;
+ if (info.display_type != kVirtual) {
+ continue;
+ }
+
+ for (auto &map_info : map_info_virtual_) {
+ hwc2_display_t client_id = map_info.client_id;
+ {
+ SCOPE_LOCK(locker_[client_id]);
+ auto &hwc_display = hwc_display_[client_id];
+ if (hwc_display) {
+ continue;
+ }
+
+ status = HWCDisplayVirtual::Create(core_intf_, &buffer_allocator_, &callbacks_, client_id,
+ info.display_id, width, height, format, &hwc_display,
+ set_min_lum_, set_max_lum_);
+ // TODO(user): validate width and height support
+ if (status) {
+ return HWC2::Error::NoResources;
+ }
+
+ is_hdr_display_[UINT32(client_id)] = HasHDRSupport(hwc_display);
+ DLOGI("Created virtual display id:% " PRIu64 " with res: %dx%d", client_id, width, height);
+
+ *out_display_id = client_id;
+ map_info.disp_type = info.display_type;
+ map_info.sdm_id = info.display_id;
+ break;
+ }
+ }
+ }
+
+ if (active_builtin_disp_id < HWCCallbacks::kNumDisplays) {
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[active_builtin_disp_id]);
+ hwc_display_[active_builtin_disp_id]->ResetValidation();
+ }
+
+ return HWC2::Error::None;
+}
+
+bool HWCSession::IsPluggableDisplayConnected() {
+ for (auto &map_info : map_info_pluggable_) {
+ if (hwc_display_[map_info.client_id]) {
+ return true;
+ }
+ }
+ return false;
+}
+
+// Qclient methods
+android::status_t HWCSession::notifyCallback(uint32_t command, const android::Parcel *input_parcel,
+ android::Parcel *output_parcel) {
+ android::status_t status = -EINVAL;
+
+ switch (command) {
+ case qService::IQService::DYNAMIC_DEBUG:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = 0;
+ DynamicDebug(input_parcel);
+ break;
+
+ case qService::IQService::SCREEN_REFRESH:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = RefreshScreen(input_parcel);
+ break;
+
+ case qService::IQService::SET_IDLE_TIMEOUT:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetIdleTimeout(UINT32(input_parcel->readInt32()));
+ break;
+
+ case qService::IQService::SET_FRAME_DUMP_CONFIG:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetFrameDumpConfig(input_parcel);
+ break;
+
+ case qService::IQService::SET_MAX_PIPES_PER_MIXER:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetMaxMixerStages(input_parcel);
+ break;
+
+ case qService::IQService::SET_DISPLAY_MODE:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetDisplayMode(input_parcel);
+ break;
+
+ case qService::IQService::SET_SECONDARY_DISPLAY_STATUS: {
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ int disp_id = INT(input_parcel->readInt32());
+ HWCDisplay::DisplayStatus disp_status =
+ static_cast<HWCDisplay::DisplayStatus>(input_parcel->readInt32());
+ status = SetDisplayStatus(disp_id, disp_status);
+ output_parcel->writeInt32(status);
+ }
+ break;
+
+ case qService::IQService::CONFIGURE_DYN_REFRESH_RATE:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = ConfigureRefreshRate(input_parcel);
+ break;
+
+ case qService::IQService::SET_VIEW_FRAME:
+ status = 0;
+ break;
+
+ case qService::IQService::TOGGLE_SCREEN_UPDATES: {
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ int32_t input = input_parcel->readInt32();
+ status = ToggleScreenUpdate(input == 1);
+ output_parcel->writeInt32(status);
+ }
+ break;
+
+ case qService::IQService::QDCM_SVC_CMDS:
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ status = QdcmCMDHandler(input_parcel, output_parcel);
+ break;
+
+ case qService::IQService::MIN_HDCP_ENCRYPTION_LEVEL_CHANGED: {
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ int disp_id = input_parcel->readInt32();
+ uint32_t min_enc_level = UINT32(input_parcel->readInt32());
+ status = MinHdcpEncryptionLevelChanged(disp_id, min_enc_level);
+ output_parcel->writeInt32(status);
+ }
+ break;
+
+ case qService::IQService::CONTROL_PARTIAL_UPDATE: {
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ int disp_id = input_parcel->readInt32();
+ uint32_t enable = UINT32(input_parcel->readInt32());
+ status = ControlPartialUpdate(disp_id, enable == 1);
+ output_parcel->writeInt32(status);
+ }
+ break;
+
+ case qService::IQService::SET_ACTIVE_CONFIG: {
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ uint32_t config = UINT32(input_parcel->readInt32());
+ int disp_id = input_parcel->readInt32();
+ status = SetActiveConfigIndex(disp_id, config);
+ }
+ break;
+
+ case qService::IQService::GET_ACTIVE_CONFIG: {
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ int disp_id = input_parcel->readInt32();
+ uint32_t config = 0;
+ status = GetActiveConfigIndex(disp_id, &config);
+ output_parcel->writeInt32(INT(config));
+ }
+ break;
+
+ case qService::IQService::GET_CONFIG_COUNT: {
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ int disp_id = input_parcel->readInt32();
+ uint32_t count = 0;
+ status = GetConfigCount(disp_id, &count);
+ output_parcel->writeInt32(INT(count));
+ }
+ break;
+
+ case qService::IQService::GET_DISPLAY_ATTRIBUTES_FOR_CONFIG:
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ status = GetDisplayAttributesForConfig(input_parcel, output_parcel);
+ break;
+
+ case qService::IQService::GET_PANEL_BRIGHTNESS: {
+ if (!output_parcel) {
+ DLOGE("QService command = %d: output_parcel needed.", command);
+ break;
+ }
+ float brightness = -1.0f;
+ uint32_t display = input_parcel->readUint32();
+ status = getDisplayBrightness(display, &brightness);
+ if (brightness == -1.0f) {
+ output_parcel->writeInt32(0);
+ } else {
+ output_parcel->writeInt32(INT32(brightness*254 + 1));
+ }
+ }
+ break;
+
+ case qService::IQService::SET_PANEL_BRIGHTNESS: {
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ int level = input_parcel->readInt32();
+ hwc2_device_t *device = static_cast<hwc2_device_t *>(this);
+ if (level == 0) {
+ status = SetDisplayBrightness(device, HWC_DISPLAY_PRIMARY, -1.0f);
+ } else {
+ status = SetDisplayBrightness(device, HWC_DISPLAY_PRIMARY, (level - 1)/254.0f);
+ }
+ output_parcel->writeInt32(status);
+ }
+ break;
+
+ case qService::IQService::GET_DISPLAY_VISIBLE_REGION:
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ status = GetVisibleDisplayRect(input_parcel, output_parcel);
+ break;
+
+ case qService::IQService::SET_CAMERA_STATUS: {
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ uint32_t camera_status = UINT32(input_parcel->readInt32());
+ status = SetCameraLaunchStatus(camera_status);
+ }
+ break;
+
+ case qService::IQService::GET_BW_TRANSACTION_STATUS: {
+ if (!output_parcel) {
+ DLOGE("QService command = %d: output_parcel needed.", command);
+ break;
+ }
+ bool state = true;
+ status = DisplayBWTransactionPending(&state);
+ output_parcel->writeInt32(state);
+ }
+ break;
+
+ case qService::IQService::SET_LAYER_MIXER_RESOLUTION:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetMixerResolution(input_parcel);
+ break;
+
+ case qService::IQService::SET_COLOR_MODE:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetColorModeOverride(input_parcel);
+ break;
+
+ case qService::IQService::SET_COLOR_MODE_WITH_RENDER_INTENT:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetColorModeWithRenderIntentOverride(input_parcel);
+ break;
+
+ case qService::IQService::SET_COLOR_MODE_BY_ID:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetColorModeById(input_parcel);
+ break;
+
+ case qService::IQService::GET_COMPOSER_STATUS:
+ if (!output_parcel) {
+ DLOGE("QService command = %d: output_parcel needed.", command);
+ break;
+ }
+ status = 0;
+ output_parcel->writeInt32(getComposerStatus());
+ break;
+
+ case qService::IQService::SET_QSYNC_MODE:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetQSyncMode(input_parcel);
+ break;
+
+ case qService::IQService::SET_IDLE_PC:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetIdlePC(input_parcel);
+ break;
+
+ case qService::IQService::SET_DPPS_AD4_ROI_CONFIG:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetAd4RoiConfig(input_parcel);
+ break;
+
+ case qService::IQService::SET_DSI_CLK:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetDsiClk(input_parcel);
+ break;
+
+ case qService::IQService::GET_DSI_CLK:
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ status = GetDsiClk(input_parcel, output_parcel);
+ break;
+
+ case qService::IQService::GET_SUPPORTED_DSI_CLK:
+ if (!input_parcel || !output_parcel) {
+ DLOGE("QService command = %d: input_parcel and output_parcel needed.", command);
+ break;
+ }
+ status = GetSupportedDsiClk(input_parcel, output_parcel);
+ break;
+
+ case qService::IQService::SET_PANEL_LUMINANCE:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetPanelLuminanceAttributes(input_parcel);
+ break;
+
+ case qService::IQService::SET_COLOR_MODE_FROM_CLIENT:
+ if (!input_parcel) {
+ DLOGE("QService command = %d: input_parcel needed.", command);
+ break;
+ }
+ status = SetColorModeFromClient(input_parcel);
+ break;
+
+ default:
+ DLOGW("QService command = %d is not supported.", command);
+ break;
+ }
+
+ return status;
+}
+
+android::status_t HWCSession::getComposerStatus() {
+ return is_composer_up_;
+}
+
+android::status_t HWCSession::GetDisplayAttributesForConfig(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel) {
+ int config = input_parcel->readInt32();
+ int dpy = input_parcel->readInt32();
+ int error = android::BAD_VALUE;
+ DisplayConfigVariableInfo display_attributes;
+
+ int disp_idx = GetDisplayIndex(dpy);
+ if (disp_idx == -1 || config < 0) {
+ DLOGE("Invalid display = %d, or config = %d", dpy, config);
+ return android::BAD_VALUE;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_idx]);
+ if (hwc_display_[disp_idx]) {
+ error = hwc_display_[disp_idx]->GetDisplayAttributesForConfig(config, &display_attributes);
+ if (error == 0) {
+ output_parcel->writeInt32(INT(display_attributes.vsync_period_ns));
+ output_parcel->writeInt32(INT(display_attributes.x_pixels));
+ output_parcel->writeInt32(INT(display_attributes.y_pixels));
+ output_parcel->writeFloat(display_attributes.x_dpi);
+ output_parcel->writeFloat(display_attributes.y_dpi);
+ output_parcel->writeInt32(0); // Panel type, unsupported.
+ }
+ }
+
+ return error;
+}
+
+android::status_t HWCSession::ConfigureRefreshRate(const android::Parcel *input_parcel) {
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[HWC_DISPLAY_PRIMARY]);
+
+ uint32_t operation = UINT32(input_parcel->readInt32());
+ HWCDisplay *hwc_display = hwc_display_[HWC_DISPLAY_PRIMARY];
+
+ if (!hwc_display) {
+ DLOGW("Display = %d is not connected.", HWC_DISPLAY_PRIMARY);
+ return -ENODEV;
+ }
+
+ switch (operation) {
+ case qdutils::DISABLE_METADATA_DYN_REFRESH_RATE:
+ return hwc_display->Perform(HWCDisplayBuiltIn::SET_METADATA_DYN_REFRESH_RATE, false);
+
+ case qdutils::ENABLE_METADATA_DYN_REFRESH_RATE:
+ return hwc_display->Perform(HWCDisplayBuiltIn::SET_METADATA_DYN_REFRESH_RATE, true);
+
+ case qdutils::SET_BINDER_DYN_REFRESH_RATE: {
+ uint32_t refresh_rate = UINT32(input_parcel->readInt32());
+ return hwc_display->Perform(HWCDisplayBuiltIn::SET_BINDER_DYN_REFRESH_RATE, refresh_rate);
+ }
+
+ default:
+ DLOGW("Invalid operation %d", operation);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+android::status_t HWCSession::SetDisplayMode(const android::Parcel *input_parcel) {
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[HWC_DISPLAY_PRIMARY]);
+
+ if (!hwc_display_[HWC_DISPLAY_PRIMARY]) {
+ DLOGW("Display = %d is not connected.", HWC_DISPLAY_PRIMARY);
+ return -ENODEV;
+ }
+
+ uint32_t mode = UINT32(input_parcel->readInt32());
+ return hwc_display_[HWC_DISPLAY_PRIMARY]->Perform(HWCDisplayBuiltIn::SET_DISPLAY_MODE, mode);
+}
+
+android::status_t HWCSession::SetMaxMixerStages(const android::Parcel *input_parcel) {
+ DisplayError error = kErrorNone;
+ std::bitset<32> bit_mask_display_type = UINT32(input_parcel->readInt32());
+ uint32_t max_mixer_stages = UINT32(input_parcel->readInt32());
+ android::status_t status = 0;
+
+ for (uint32_t i = 0; i < 32 && bit_mask_display_type[i]; i++) {
+ int disp_idx = GetDisplayIndex(INT(i));
+ if (disp_idx == -1) {
+ continue;
+ }
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_idx]);
+ auto &hwc_display = hwc_display_[disp_idx];
+ if (!hwc_display) {
+ DLOGW("Display = %d is not connected.", disp_idx);
+ status = (status)? status : -ENODEV; // Return higher priority error.
+ continue;
+ }
+
+ error = hwc_display->SetMaxMixerStages(max_mixer_stages);
+ if (error != kErrorNone) {
+ status = -EINVAL;
+ }
+ }
+
+ return status;
+}
+
+android::status_t HWCSession::SetFrameDumpConfig(const android::Parcel *input_parcel) {
+ uint32_t frame_dump_count = UINT32(input_parcel->readInt32());
+ std::bitset<32> bit_mask_display_type = UINT32(input_parcel->readInt32());
+ uint32_t bit_mask_layer_type = UINT32(input_parcel->readInt32());
+ int32_t output_format = HAL_PIXEL_FORMAT_RGB_888;
+ bool post_processed = true;
+
+ // Read optional user preferences: output_format and post_processed.
+ if (input_parcel->dataPosition() != input_parcel->dataSize()) {
+ // HAL Pixel Format for output buffer
+ output_format = input_parcel->readInt32();
+ }
+ if (input_parcel->dataPosition() != input_parcel->dataSize()) {
+ // Option to dump Layer Mixer output (0) or DSPP output (1)
+ post_processed = (input_parcel->readInt32() != 0);
+ }
+
+ android::status_t status = 0;
+
+ for (uint32_t i = 0; i < bit_mask_display_type.size(); i++) {
+ if (!bit_mask_display_type[i]) {
+ continue;
+ }
+ int disp_idx = GetDisplayIndex(INT(i));
+ if (disp_idx == -1) {
+ continue;
+ }
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_idx]);
+ auto &hwc_display = hwc_display_[disp_idx];
+ if (!hwc_display) {
+ DLOGW("Display = %d is not connected.", disp_idx);
+ status = (status)? status : -ENODEV; // Return higher priority error.
+ continue;
+ }
+
+ HWC2::Error error = hwc_display->SetFrameDumpConfig(frame_dump_count, bit_mask_layer_type,
+ output_format, post_processed);
+ if (error != HWC2::Error::None) {
+ status = (HWC2::Error::NoResources == error) ? -ENOMEM : -EINVAL;
+ }
+ }
+
+ return status;
+}
+
+android::status_t HWCSession::SetMixerResolution(const android::Parcel *input_parcel) {
+ DisplayError error = kErrorNone;
+ uint32_t dpy = UINT32(input_parcel->readInt32());
+
+ if (dpy != HWC_DISPLAY_PRIMARY) {
+ DLOGW("Resolution change not supported for this display = %d", dpy);
+ return -EINVAL;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[HWC_DISPLAY_PRIMARY]);
+ if (!hwc_display_[HWC_DISPLAY_PRIMARY]) {
+ DLOGW("Primary display is not initialized");
+ return -ENODEV;
+ }
+
+ uint32_t width = UINT32(input_parcel->readInt32());
+ uint32_t height = UINT32(input_parcel->readInt32());
+
+ error = hwc_display_[HWC_DISPLAY_PRIMARY]->SetMixerResolution(width, height);
+ if (error != kErrorNone) {
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+android::status_t HWCSession::SetColorModeOverride(const android::Parcel *input_parcel) {
+ int display = static_cast<int>(input_parcel->readInt32());
+ auto mode = static_cast<ColorMode>(input_parcel->readInt32());
+ auto device = static_cast<hwc2_device_t *>(this);
+
+ int disp_idx = GetDisplayIndex(display);
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", display);
+ return -EINVAL;
+ }
+
+ if (mode < ColorMode::NATIVE || mode > ColorMode::BT2100_HLG) {
+ DLOGE("Invalid ColorMode: %d", mode);
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ auto err = CallDisplayFunction(device, static_cast<hwc2_display_t>(disp_idx),
+ &HWCDisplay::SetColorMode, mode);
+ if (err != HWC2_ERROR_NONE)
+ return -EINVAL;
+
+ return 0;
+}
+
+android::status_t HWCSession::SetAd4RoiConfig(const android::Parcel *input_parcel) {
+ auto display_id = static_cast<uint32_t>(input_parcel->readInt32());
+ auto h_s = static_cast<uint32_t>(input_parcel->readInt32());
+ auto h_e = static_cast<uint32_t>(input_parcel->readInt32());
+ auto v_s = static_cast<uint32_t>(input_parcel->readInt32());
+ auto v_e = static_cast<uint32_t>(input_parcel->readInt32());
+ auto f_in = static_cast<uint32_t>(input_parcel->readInt32());
+ auto f_out = static_cast<uint32_t>(input_parcel->readInt32());
+
+ return static_cast<android::status_t>(SetDisplayDppsAdROI(display_id, h_s, h_e, v_s,
+ v_e, f_in, f_out));
+}
+
+android::status_t HWCSession::SetColorModeWithRenderIntentOverride(
+ const android::Parcel *input_parcel) {
+ auto display = static_cast<hwc2_display_t>(input_parcel->readInt32());
+ auto mode = static_cast<ColorMode>(input_parcel->readInt32());
+ auto intent = static_cast<RenderIntent>(input_parcel->readInt32());
+ auto device = static_cast<hwc2_device_t *>(this);
+
+ if (mode < ColorMode::NATIVE || mode > ColorMode::BT2100_HLG) {
+ DLOGE("Invalid ColorMode: %d", mode);
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (intent < RenderIntent::COLORIMETRIC || intent > RenderIntent::TONE_MAP_ENHANCE) {
+ DLOGE("Invalid RenderIntent: %d", intent);
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ auto err =
+ CallDisplayFunction(device, display, &HWCDisplay::SetColorModeWithRenderIntent, mode, intent);
+ if (err != HWC2_ERROR_NONE)
+ return -EINVAL;
+
+ return 0;
+}
+android::status_t HWCSession::SetColorModeById(const android::Parcel *input_parcel) {
+ int display = input_parcel->readInt32();
+ auto mode = input_parcel->readInt32();
+ auto device = static_cast<hwc2_device_t *>(this);
+
+ int disp_idx = GetDisplayIndex(display);
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", display);
+ return -EINVAL;
+ }
+
+ auto err = CallDisplayFunction(device, static_cast<hwc2_display_t>(disp_idx),
+ &HWCDisplay::SetColorModeById, mode);
+ if (err != HWC2_ERROR_NONE)
+ return -EINVAL;
+
+ return 0;
+}
+
+android::status_t HWCSession::SetColorModeFromClient(const android::Parcel *input_parcel) {
+ int display = input_parcel->readInt32();
+ auto mode = input_parcel->readInt32();
+ auto device = static_cast<hwc2_device_t *>(this);
+
+ int disp_idx = GetDisplayIndex(display);
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", display);
+ return -EINVAL;
+ }
+
+ auto err = CallDisplayFunction(device, static_cast<hwc2_display_t>(disp_idx),
+ &HWCDisplay::SetColorModeFromClientApi, mode);
+ if (err != HWC2_ERROR_NONE)
+ return -EINVAL;
+
+ Refresh(static_cast<hwc2_display_t>(disp_idx));
+
+ return 0;
+}
+
+android::status_t HWCSession::RefreshScreen(const android::Parcel *input_parcel) {
+ int display = input_parcel->readInt32();
+
+ int disp_idx = GetDisplayIndex(display);
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", display);
+ return -EINVAL;
+ }
+
+ Refresh(static_cast<hwc2_display_t>(disp_idx));
+
+ return 0;
+}
+
+void HWCSession::DynamicDebug(const android::Parcel *input_parcel) {
+ int type = input_parcel->readInt32();
+ bool enable = (input_parcel->readInt32() > 0);
+ DLOGI("type = %d enable = %d", type, enable);
+ int verbose_level = input_parcel->readInt32();
+
+ switch (type) {
+ case qService::IQService::DEBUG_ALL:
+ HWCDebugHandler::DebugAll(enable, verbose_level);
+ break;
+
+ case qService::IQService::DEBUG_MDPCOMP:
+ HWCDebugHandler::DebugStrategy(enable, verbose_level);
+ HWCDebugHandler::DebugCompManager(enable, verbose_level);
+ break;
+
+ case qService::IQService::DEBUG_PIPE_LIFECYCLE:
+ HWCDebugHandler::DebugResources(enable, verbose_level);
+ HWCDebugHandler::DebugQos(enable, verbose_level);
+ break;
+
+ case qService::IQService::DEBUG_DRIVER_CONFIG:
+ HWCDebugHandler::DebugDriverConfig(enable, verbose_level);
+ break;
+
+ case qService::IQService::DEBUG_ROTATOR:
+ HWCDebugHandler::DebugResources(enable, verbose_level);
+ HWCDebugHandler::DebugDriverConfig(enable, verbose_level);
+ HWCDebugHandler::DebugRotator(enable, verbose_level);
+ HWCDebugHandler::DebugQos(enable, verbose_level);
+ break;
+
+ case qService::IQService::DEBUG_QDCM:
+ HWCDebugHandler::DebugQdcm(enable, verbose_level);
+ break;
+
+ case qService::IQService::DEBUG_SCALAR:
+ HWCDebugHandler::DebugScalar(enable, verbose_level);
+ break;
+
+ case qService::IQService::DEBUG_CLIENT:
+ HWCDebugHandler::DebugClient(enable, verbose_level);
+ break;
+
+ case qService::IQService::DEBUG_DISPLAY:
+ HWCDebugHandler::DebugDisplay(enable, verbose_level);
+ break;
+
+ default:
+ DLOGW("type = %d is not supported", type);
+ }
+}
+
+android::status_t HWCSession::QdcmCMDDispatch(uint32_t display_id,
+ const PPDisplayAPIPayload &req_payload,
+ PPDisplayAPIPayload *resp_payload,
+ PPPendingParams *pending_action) {
+ int ret = 0;
+ bool is_physical_display = false;
+
+ if (display_id >= HWCCallbacks::kNumDisplays || !hwc_display_[display_id]) {
+ DLOGW("Invalid display id or display = %d is not connected.", display_id);
+ return -ENODEV;
+ }
+
+ if (display_id == map_info_primary_.client_id) {
+ is_physical_display = true;
+ } else {
+ for (auto &map_info : map_info_builtin_) {
+ if (map_info.client_id == display_id) {
+ is_physical_display = true;
+ break;
+ }
+ }
+ }
+
+ if (!is_physical_display) {
+ DLOGW("Skipping QDCM command dispatch on display = %d", display_id);
+ return ret;
+ }
+
+ ret = hwc_display_[display_id]->ColorSVCRequestRoute(req_payload,
+ resp_payload,
+ pending_action);
+
+ return ret;
+}
+
+android::status_t HWCSession::QdcmCMDHandler(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel) {
+ int ret = 0;
+ float *brightness = NULL;
+ uint32_t display_id(0);
+ PPPendingParams pending_action;
+ PPDisplayAPIPayload resp_payload, req_payload;
+ uint8_t *disp_id = NULL;
+ bool invalidate_needed = true;
+ int32_t *mode_id = NULL;
+
+ if (!color_mgr_) {
+ DLOGW("color_mgr_ not initialized.");
+ return -ENOENT;
+ }
+
+ pending_action.action = kNoAction;
+ pending_action.params = NULL;
+
+ // Read display_id, payload_size and payload from in_parcel.
+ ret = HWCColorManager::CreatePayloadFromParcel(*input_parcel, &display_id, &req_payload);
+ if (!ret) {
+ ret = QdcmCMDDispatch(display_id, req_payload, &resp_payload, &pending_action);
+ }
+
+ if (ret) {
+ output_parcel->writeInt32(ret); // first field in out parcel indicates return code.
+ req_payload.DestroyPayload();
+ resp_payload.DestroyPayload();
+ return ret;
+ }
+
+ if (kNoAction != pending_action.action) {
+ int32_t action = pending_action.action;
+ int count = -1;
+ while (action > 0) {
+ count++;
+ int32_t bit = (action & 1);
+ action = action >> 1;
+
+ if (!bit)
+ continue;
+
+ DLOGV_IF(kTagQDCM, "pending action = %d, display_id = %d", BITMAP(count), display_id);
+ switch (BITMAP(count)) {
+ case kInvalidating:
+ {
+ invalidate_needed = false;
+ Refresh(display_id);
+ }
+ break;
+ case kEnterQDCMMode:
+ ret = color_mgr_->EnableQDCMMode(true, hwc_display_[display_id]);
+ break;
+ case kExitQDCMMode:
+ ret = color_mgr_->EnableQDCMMode(false, hwc_display_[display_id]);
+ break;
+ case kApplySolidFill:
+ {
+ SCOPE_LOCK(locker_[display_id]);
+ ret = color_mgr_->SetSolidFill(pending_action.params,
+ true, hwc_display_[display_id]);
+ }
+ Refresh(display_id);
+ usleep(kSolidFillDelay);
+ break;
+ case kDisableSolidFill:
+ {
+ SCOPE_LOCK(locker_[display_id]);
+ ret = color_mgr_->SetSolidFill(pending_action.params,
+ false, hwc_display_[display_id]);
+ }
+ Refresh(display_id);
+ usleep(kSolidFillDelay);
+ break;
+ case kSetPanelBrightness:
+ ret = -EINVAL;
+ brightness = reinterpret_cast<float *>(resp_payload.payload);
+ if (brightness == NULL) {
+ DLOGE("Brightness payload is Null");
+ } else {
+ ret = INT(SetDisplayBrightness(static_cast<hwc2_device_t *>(this),
+ static_cast<hwc2_display_t>(display_id), *brightness));
+ }
+ break;
+ case kEnableFrameCapture:
+ ret = color_mgr_->SetFrameCapture(pending_action.params, true,
+ hwc_display_[display_id]);
+ Refresh(display_id);
+ break;
+ case kDisableFrameCapture:
+ ret = color_mgr_->SetFrameCapture(pending_action.params, false,
+ hwc_display_[display_id]);
+ break;
+ case kConfigureDetailedEnhancer:
+ ret = color_mgr_->SetDetailedEnhancer(pending_action.params,
+ hwc_display_[display_id]);
+ Refresh(display_id);
+ break;
+ case kModeSet:
+ ret = static_cast<int>
+ (hwc_display_[display_id]->RestoreColorTransform());
+ Refresh(display_id);
+ break;
+ case kNoAction:
+ break;
+ case kMultiDispProc:
+ for (auto &map_info : map_info_builtin_) {
+ uint32_t id = UINT32(map_info.client_id);
+ if (id < HWCCallbacks::kNumDisplays && hwc_display_[id]) {
+ int result = 0;
+ resp_payload.DestroyPayload();
+ result = hwc_display_[id]->ColorSVCRequestRoute(req_payload,
+ &resp_payload,
+ &pending_action);
+ if (result) {
+ DLOGW("Failed to dispatch action to disp %d ret %d", id, result);
+ ret = result;
+ }
+ }
+ }
+ break;
+ case kMultiDispGetId:
+ ret = resp_payload.CreatePayloadBytes(HWCCallbacks::kNumDisplays, &disp_id);
+ if (ret) {
+ DLOGW("Unable to create response payload!");
+ } else {
+ for (int i = 0; i < HWCCallbacks::kNumDisplays; i++) {
+ disp_id[i] = HWCCallbacks::kNumDisplays;
+ }
+ if (hwc_display_[HWC_DISPLAY_PRIMARY]) {
+ disp_id[HWC_DISPLAY_PRIMARY] = HWC_DISPLAY_PRIMARY;
+ }
+ for (auto &map_info : map_info_builtin_) {
+ uint64_t id = map_info.client_id;
+ if (id < HWCCallbacks::kNumDisplays && hwc_display_[id]) {
+ disp_id[id] = (uint8_t)id;
+ }
+ }
+ }
+ break;
+ case kSetModeFromClient:
+ {
+ SCOPE_LOCK(locker_[display_id]);
+ mode_id = reinterpret_cast<int32_t *>(resp_payload.payload);
+ if (mode_id) {
+ ret = static_cast<int>(hwc_display_[display_id]->SetColorModeFromClientApi(*mode_id));
+ } else {
+ DLOGE("mode_id is Null");
+ ret = -EINVAL;
+ }
+ }
+ if (!ret) {
+ Refresh(display_id);
+ }
+ break;
+ default:
+ DLOGW("Invalid pending action = %d!", pending_action.action);
+ break;
+ }
+ }
+ }
+ // for display API getter case, marshall returned params into out_parcel.
+ output_parcel->writeInt32(ret);
+ HWCColorManager::MarshallStructIntoParcel(resp_payload, output_parcel);
+ req_payload.DestroyPayload();
+ resp_payload.DestroyPayload();
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[display_id]);
+ if (invalidate_needed) {
+ hwc_display_[display_id]->ResetValidation();
+ }
+
+ return ret;
+}
+
+int GetEventValue(const char *uevent_data, int length, const char *event_info) {
+ const char *iterator_str = uevent_data;
+ while (((iterator_str - uevent_data) <= length) && (*iterator_str)) {
+ const char *pstr = strstr(iterator_str, event_info);
+ if (pstr != NULL) {
+ return (atoi(iterator_str + strlen(event_info)));
+ }
+ iterator_str += strlen(iterator_str) + 1;
+ }
+
+ return -1;
+}
+
+const char *GetTokenValue(const char *uevent_data, int length, const char *token) {
+ const char *iterator_str = uevent_data;
+ const char *pstr = NULL;
+ while (((iterator_str - uevent_data) <= length) && (*iterator_str)) {
+ pstr = strstr(iterator_str, token);
+ if (pstr) {
+ break;
+ }
+ iterator_str += strlen(iterator_str) + 1;
+ }
+
+ if (pstr)
+ pstr = pstr+strlen(token);
+
+ return pstr;
+}
+
+android::status_t HWCSession::SetDsiClk(const android::Parcel *input_parcel) {
+ int disp_id = input_parcel->readInt32();
+ uint64_t clk = UINT64(input_parcel->readInt64());
+ if (disp_id < 0) {
+ return -EINVAL;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_id]);
+ if (!hwc_display_[disp_id]) {
+ return -EINVAL;
+ }
+
+ return hwc_display_[disp_id]->SetDynamicDSIClock(clk);
+}
+
+android::status_t HWCSession::GetDsiClk(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel) {
+ int disp_id = input_parcel->readInt32();
+ if (disp_id < 0) {
+ return -EINVAL;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_id]);
+ if (!hwc_display_[disp_id]) {
+ return -EINVAL;
+ }
+
+ uint64_t bitrate = 0;
+ hwc_display_[disp_id]->GetDynamicDSIClock(&bitrate);
+ output_parcel->writeUint64(bitrate);
+
+ return 0;
+}
+
+android::status_t HWCSession::GetSupportedDsiClk(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel) {
+ int disp_id = input_parcel->readInt32();
+ if (disp_id < 0) {
+ return -EINVAL;
+ }
+
+ SCOPE_LOCK(locker_[disp_id]);
+ if (!hwc_display_[disp_id]) {
+ return -EINVAL;
+ }
+
+ std::vector<uint64_t> bit_rates;
+ hwc_display_[disp_id]->GetSupportedDSIClock(&bit_rates);
+ output_parcel->writeInt32(INT32(bit_rates.size()));
+ for (auto &bit_rate : bit_rates) {
+ output_parcel->writeUint64(bit_rate);
+ }
+
+ return 0;
+}
+
+android::status_t HWCSession::SetPanelLuminanceAttributes(const android::Parcel *input_parcel) {
+ int disp_id = input_parcel->readInt32();
+
+ // currently doing only for virtual display
+ if (disp_id != qdutils::DISPLAY_VIRTUAL) {
+ return -EINVAL;
+ }
+
+ std::lock_guard<std::mutex> obj(mutex_lum_);
+ set_min_lum_ = input_parcel->readFloat();
+ set_max_lum_ = input_parcel->readFloat();
+ DLOGI("set max_lum %f, min_lum %f", set_max_lum_, set_min_lum_);
+
+ return 0;
+}
+
+void HWCSession::UEventHandler(const char *uevent_data, int length) {
+ // Drop hotplug uevents until SurfaceFlinger (the client) is connected. The equivalent of hotplug
+ // uevent handling will be done once when SurfaceFlinger connects, at RegisterCallback(). Since
+ // HandlePluggableDisplays() reads the latest connection states of all displays, no uevent is
+ // lost.
+ if (client_connected_ && strcasestr(uevent_data, HWC_UEVENT_DRM_EXT_HOTPLUG)) {
+ // MST hotplug will not carry connection status/test pattern etc.
+ // Pluggable display handler will check all connection status' and take action accordingly.
+ const char *str_status = GetTokenValue(uevent_data, length, "status=");
+ const char *str_mst = GetTokenValue(uevent_data, length, "MST_HOTPLUG=");
+ if (!str_status && !str_mst) {
+ return;
+ }
+
+ hpd_bpp_ = GetEventValue(uevent_data, length, "bpp=");
+ hpd_pattern_ = GetEventValue(uevent_data, length, "pattern=");
+ DLOGI("Uevent = %s, status = %s, MST_HOTPLUG = %s, bpp = %d, pattern = %d", uevent_data,
+ str_status ? str_status : "NULL", str_mst ? str_mst : "NULL", hpd_bpp_, hpd_pattern_);
+
+ int virtual_display_index =
+ GetDisplayIndex(qdutils::DISPLAY_VIRTUAL);
+
+ std::bitset<kSecureMax> secure_sessions = 0;
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (active_builtin_disp_id < HWCCallbacks::kNumDisplays) {
+ Locker::ScopeLock lock_a(locker_[active_builtin_disp_id]);
+ hwc_display_[active_builtin_disp_id]->GetActiveSecureSession(&secure_sessions);
+ }
+ if (secure_sessions[kSecureDisplay] ||
+ ((virtual_display_index != -1) && (hwc_display_[virtual_display_index]))) {
+ // Defer hotplug handling.
+ SCOPE_LOCK(pluggable_handler_lock_);
+ DLOGI("Marking hotplug pending...");
+ hotplug_pending_event_ = kHotPlugEvent;
+ } else {
+ // Handle hotplug.
+ int32_t err = HandlePluggableDisplays(true);
+ if (err) {
+ DLOGW("Hotplug handling failed. Error %d '%s'. Hotplug handling %s.", err,
+ strerror(abs(err)), (hotplug_pending_event_ == kHotPlugEvent) ?
+ "deferred" : "dropped");
+ }
+ }
+
+ if (str_status) {
+ bool connected = (strncmp(str_status, "connected", strlen("connected")) == 0);
+ DLOGI("Connected = %d", connected);
+ // Pass on legacy HDMI hot-plug event.
+ qservice_->onHdmiHotplug(INT(connected));
+ }
+ }
+}
+
+int HWCSession::GetVsyncPeriod(int disp) {
+ SCOPE_LOCK(locker_[disp]);
+ // default value
+ int32_t vsync_period = 1000000000l / 60;
+ auto attribute = HWC2::Attribute::VsyncPeriod;
+
+ if (hwc_display_[disp]) {
+ hwc_display_[disp]->GetDisplayAttribute(0, attribute, &vsync_period);
+ }
+
+ return vsync_period;
+}
+
+android::status_t HWCSession::GetVisibleDisplayRect(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel) {
+ int disp_idx = GetDisplayIndex(input_parcel->readInt32());
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", disp_idx);
+ return android::BAD_VALUE;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_idx]);
+ if (!hwc_display_[disp_idx]) {
+ return android::NO_INIT;
+ }
+
+ hwc_rect_t visible_rect = {0, 0, 0, 0};
+ int error = hwc_display_[disp_idx]->GetVisibleDisplayRect(&visible_rect);
+ if (error < 0) {
+ return error;
+ }
+
+ output_parcel->writeInt32(visible_rect.left);
+ output_parcel->writeInt32(visible_rect.top);
+ output_parcel->writeInt32(visible_rect.right);
+ output_parcel->writeInt32(visible_rect.bottom);
+
+ return android::NO_ERROR;
+}
+
+void HWCSession::Refresh(hwc2_display_t display) {
+ SCOPE_LOCK(callbacks_lock_);
+ HWC2::Error err = callbacks_.Refresh(display);
+ while (err != HWC2::Error::None) {
+ callbacks_lock_.Wait();
+ err = callbacks_.Refresh(display);
+ }
+}
+
+void HWCSession::HotPlug(hwc2_display_t display, HWC2::Connection state) {
+ SCOPE_LOCK(callbacks_lock_);
+ HWC2::Error err = callbacks_.Hotplug(display, state);
+ while (err != HWC2::Error::None) {
+ callbacks_lock_.Wait();
+ err = callbacks_.Hotplug(display, state);
+ }
+}
+
+int HWCSession::CreatePrimaryDisplay() {
+ int status = -EINVAL;
+ HWDisplaysInfo hw_displays_info = {};
+
+ if (null_display_mode_) {
+ HWDisplayInfo hw_info = {};
+ hw_info.display_type = kBuiltIn;
+ hw_info.is_connected = 1;
+ hw_info.is_primary = 1;
+ hw_info.is_wb_ubwc_supported = 0;
+ hw_info.display_id = 1;
+ hw_displays_info[hw_info.display_id] = hw_info;
+ } else {
+ DisplayError error = core_intf_->GetDisplaysStatus(&hw_displays_info);
+ if (error != kErrorNone) {
+ DLOGE("Failed to get connected display list. Error = %d", error);
+ return status;
+ }
+ }
+
+ for (auto &iter : hw_displays_info) {
+ auto &info = iter.second;
+ if (!info.is_primary) {
+ continue;
+ }
+
+ // todo (user): If primary display is not connected (e.g. hdmi as primary), a NULL display
+ // need to be created. SF expects primary display hotplug during callback registration unlike
+ // previous implementation where first hotplug could be notified anytime.
+ if (!info.is_connected) {
+ DLOGE("Primary display is not connected. Not supported at present.");
+ break;
+ }
+
+ auto hwc_display = &hwc_display_[HWC_DISPLAY_PRIMARY];
+ hwc2_display_t client_id = map_info_primary_.client_id;
+
+ DLOGI("Create primary display type = %d, sdm id = %d, client id = %d", info.display_type,
+ info.display_id, client_id);
+ if (info.display_type == kBuiltIn) {
+ status = HWCDisplayBuiltIn::Create(core_intf_, &buffer_allocator_, &callbacks_, this,
+ qservice_, client_id, info.display_id, hwc_display);
+ } else if (info.display_type == kPluggable) {
+ status = HWCDisplayPluggable::Create(core_intf_, &buffer_allocator_, &callbacks_, this,
+ qservice_, client_id, info.display_id, 0, 0, false,
+ hwc_display);
+ } else {
+ DLOGE("Spurious primary display type = %d", info.display_type);
+ break;
+ }
+
+ if (!status) {
+ is_hdr_display_[UINT32(client_id)] = HasHDRSupport(*hwc_display);
+ DLOGI("Primary display created.");
+ map_info_primary_.disp_type = info.display_type;
+ map_info_primary_.sdm_id = info.display_id;
+
+ CreateDummyDisplay(HWC_DISPLAY_PRIMARY);
+ color_mgr_ = HWCColorManager::CreateColorManager(&buffer_allocator_);
+ if (!color_mgr_) {
+ DLOGW("Failed to load HWCColorManager.");
+ }
+ } else {
+ DLOGE("Primary display creation failed.");
+ }
+
+ // Primary display is found, no need to parse more.
+ break;
+ }
+
+ return status;
+}
+
+void HWCSession::CreateDummyDisplay(hwc2_display_t client_id) {
+ if (!async_powermode_) {
+ return;
+ }
+
+ hwc2_display_t dummy_disp_id = map_hwc_display_.find(client_id)->second;
+ auto hwc_display_dummy = &hwc_display_[dummy_disp_id];
+ HWCDisplayDummy::Create(core_intf_, &buffer_allocator_, &callbacks_, this, qservice_,
+ 0, 0, hwc_display_dummy);
+ if (!*hwc_display_dummy) {
+ DLOGE("Dummy display creation failed for %d display\n", client_id);
+ }
+}
+
+int HWCSession::HandleBuiltInDisplays() {
+ if (null_display_mode_) {
+ DLOGW("Skipped BuiltIn display handling in null-display mode");
+ return 0;
+ }
+
+ HWDisplaysInfo hw_displays_info = {};
+ DisplayError error = core_intf_->GetDisplaysStatus(&hw_displays_info);
+ if (error != kErrorNone) {
+ DLOGE("Failed to get connected display list. Error = %d", error);
+ return -EINVAL;
+ }
+
+ int status = 0;
+ for (auto &iter : hw_displays_info) {
+ auto &info = iter.second;
+
+ // Do not recreate primary display.
+ if (info.is_primary || info.display_type != kBuiltIn) {
+ continue;
+ }
+
+ for (auto &map_info : map_info_builtin_) {
+ hwc2_display_t client_id = map_info.client_id;
+
+ {
+ SCOPE_LOCK(locker_[client_id]);
+ // Lock confined to this scope
+ if (hwc_display_[client_id]) {
+ continue;
+ }
+
+ DLOGI("Create builtin display, sdm id = %d, client id = %d", info.display_id, client_id);
+ status = HWCDisplayBuiltIn::Create(core_intf_, &buffer_allocator_, &callbacks_, this,
+ qservice_, client_id, info.display_id,
+ &hwc_display_[client_id]);
+ if (status) {
+ DLOGE("Builtin display creation failed.");
+ break;
+ }
+ is_hdr_display_[UINT32(client_id)] = HasHDRSupport(hwc_display_[client_id]);
+ DLOGI("Builtin display created: sdm id = %d, client id = %d", info.display_id, client_id);
+ map_info.disp_type = info.display_type;
+ map_info.sdm_id = info.display_id;
+ CreateDummyDisplay(client_id);
+ }
+
+ DLOGI("Hotplugging builtin display, sdm id = %d, client id = %d", info.display_id, client_id);
+ callbacks_.Hotplug(client_id, HWC2::Connection::Connected);
+ break;
+ }
+ }
+
+ return status;
+}
+
+int HWCSession::HandlePluggableDisplays(bool delay_hotplug) {
+ SCOPE_LOCK(pluggable_handler_lock_);
+ if (null_display_mode_) {
+ DLOGW("Skipped pluggable display handling in null-display mode");
+ return 0;
+ }
+
+ DLOGI("Handling hotplug...");
+ HWDisplaysInfo hw_displays_info = {};
+ DisplayError error = core_intf_->GetDisplaysStatus(&hw_displays_info);
+ if (error != kErrorNone) {
+ DLOGE("Failed to get connected display list. Error = %d", error);
+ return -EINVAL;
+ }
+
+ int status = HandleDisconnectedDisplays(&hw_displays_info);
+ if (status) {
+ DLOGE("All displays could not be disconnected.");
+ return status;
+ }
+
+ status = HandleConnectedDisplays(&hw_displays_info, delay_hotplug);
+ if (status) {
+ switch (status) {
+ case -EAGAIN:
+ case -ENODEV:
+ // Errors like device removal or deferral for which we want to try another hotplug handling.
+ hotplug_pending_event_ = kHotPlugEvent;
+ status = 0;
+ break;
+ default:
+ // Real errors we want to flag and stop hotplug handling.
+ hotplug_pending_event_ = kHotPlugNone;
+ DLOGE("All displays could not be connected. Error %d '%s'.", status, strerror(abs(status)));
+ }
+ DLOGI("Handling hotplug... %s", (kHotPlugNone ==hotplug_pending_event_) ?
+ "Stopped." : "Done. Hotplug events pending.");
+ return status;
+ }
+
+ hotplug_pending_event_ = kHotPlugNone;
+
+ DLOGI("Handling hotplug... Done.");
+ return 0;
+}
+
+int HWCSession::HandleConnectedDisplays(HWDisplaysInfo *hw_displays_info, bool delay_hotplug) {
+ int status = 0;
+ std::vector<hwc2_display_t> pending_hotplugs = {};
+
+ for (auto &iter : *hw_displays_info) {
+ auto &info = iter.second;
+
+ // Do not recreate primary display or if display is not connected.
+ if (info.is_primary || info.display_type != kPluggable || !info.is_connected) {
+ continue;
+ }
+
+ // Check if we are already using the display.
+ auto display_used = std::find_if(map_info_pluggable_.begin(), map_info_pluggable_.end(),
+ [&](auto &p) {
+ return (p.sdm_id == info.display_id);
+ });
+ if (display_used != map_info_pluggable_.end()) {
+ // Display is already used in a slot.
+ continue;
+ }
+
+ // Count active pluggable display slots and slots with no commits.
+ bool first_commit_pending = false;
+ std::for_each(map_info_pluggable_.begin(), map_info_pluggable_.end(),
+ [&](auto &p) {
+ SCOPE_LOCK(locker_[p.client_id]);
+ if (hwc_display_[p.client_id]) {
+ if (!hwc_display_[p.client_id]->IsFirstCommitDone()) {
+ DLOGI("Display commit pending on display %d-1", p.sdm_id);
+ first_commit_pending = true;
+ }
+ }
+ });
+
+ if (!disable_hotplug_bwcheck_ && first_commit_pending) {
+ // Hotplug bandwidth check is accomplished by creating and hotplugging a new display after
+ // a display commit has happened on previous hotplugged displays. This allows the driver to
+ // return updated modes for the new display based on available link bandwidth.
+ DLOGI("Pending display commit on one of the displays. Deferring display creation.");
+ status = -EAGAIN;
+ if (client_connected_) {
+ // Trigger a display refresh since we depend on PresentDisplay() to handle pending hotplugs.
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (active_builtin_disp_id >= HWCCallbacks::kNumDisplays) {
+ active_builtin_disp_id = HWC_DISPLAY_PRIMARY;
+ }
+ Refresh(active_builtin_disp_id);
+ }
+ break;
+ }
+
+ // find an empty slot to create display.
+ for (auto &map_info : map_info_pluggable_) {
+ hwc2_display_t client_id = map_info.client_id;
+
+ // Lock confined to this scope
+ {
+ SCOPE_LOCK(locker_[client_id]);
+ auto &hwc_display = hwc_display_[client_id];
+ if (hwc_display) {
+ // Display slot is already used.
+ continue;
+ }
+
+ DLOGI("Create pluggable display, sdm id = %d, client id = %d", info.display_id, client_id);
+
+ // Test pattern generation ?
+ map_info.test_pattern = (hpd_bpp_ > 0) && (hpd_pattern_ > 0);
+ int err = 0;
+ if (!map_info.test_pattern) {
+ err = HWCDisplayPluggable::Create(core_intf_, &buffer_allocator_,
+ &callbacks_, this, qservice_, client_id,
+ info.display_id, 0, 0, false, &hwc_display);
+ } else {
+ err = HWCDisplayPluggableTest::Create(core_intf_, &buffer_allocator_,
+ &callbacks_, this, qservice_, client_id,
+ info.display_id, UINT32(hpd_bpp_),
+ UINT32(hpd_pattern_), &hwc_display);
+ }
+
+ if (err) {
+ DLOGW("Pluggable display creation failed/aborted. Error %d '%s'.", err,
+ strerror(abs(err)));
+ status = err;
+ // Attempt creating remaining pluggable displays.
+ break;
+ }
+
+ is_hdr_display_[UINT32(client_id)] = HasHDRSupport(hwc_display);
+ DLOGI("Created pluggable display successfully: sdm id = %d, client id = %d",
+ info.display_id, client_id);
+ CreateDummyDisplay(client_id);
+ }
+
+ map_info.disp_type = info.display_type;
+ map_info.sdm_id = info.display_id;
+
+ pending_hotplugs.push_back((hwc2_display_t)client_id);
+
+ // Display is created for this sdm id, move to next connected display.
+ break;
+ }
+ }
+
+ // No display was created.
+ if (!pending_hotplugs.size()) {
+ return status;
+ }
+
+ // Active builtin display needs revalidation
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (active_builtin_disp_id < HWCCallbacks::kNumDisplays) {
+ {
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[active_builtin_disp_id]);
+ hwc_display_[active_builtin_disp_id]->ResetValidation();
+ }
+
+ if (client_connected_) {
+ Refresh(active_builtin_disp_id);
+ }
+
+ // Do not sleep if this method is called from client thread.
+ if (delay_hotplug) {
+ // wait sufficient time to ensure resources are available for new display connection.
+ usleep(UINT32(GetVsyncPeriod(INT32(active_builtin_disp_id))) * 2 / 1000);
+ }
+ }
+
+ for (auto client_id : pending_hotplugs) {
+ DLOGI("Notify hotplug display connected: client id = %d", client_id);
+ callbacks_.Hotplug(client_id, HWC2::Connection::Connected);
+ }
+
+ return status;
+}
+
+bool HWCSession::HasHDRSupport(HWCDisplay *hwc_display) {
+ // query number of hdr types
+ uint32_t out_num_types = 0;
+ float out_max_luminance = 0.0f;
+ float out_max_average_luminance = 0.0f;
+ float out_min_luminance = 0.0f;
+ if (hwc_display->GetHdrCapabilities(&out_num_types, nullptr, &out_max_luminance,
+ &out_max_average_luminance, &out_min_luminance)
+ != HWC2::Error::None) {
+ return false;
+ }
+
+ return (out_num_types > 0);
+}
+
+int HWCSession::HandleDisconnectedDisplays(HWDisplaysInfo *hw_displays_info) {
+ // Destroy pluggable displays which were connected earlier but got disconnected now.
+ for (auto &map_info : map_info_pluggable_) {
+ bool disconnect = true; // disconnect in case display id is not found in list.
+
+ for (auto &iter : *hw_displays_info) {
+ auto &info = iter.second;
+ if (info.display_id != map_info.sdm_id) {
+ continue;
+ }
+ if (info.is_connected) {
+ disconnect = false;
+ }
+ break;
+ }
+
+ if (disconnect) {
+ DestroyDisplay(&map_info);
+ }
+ }
+
+ return 0;
+}
+
+void HWCSession::DestroyDisplay(DisplayMapInfo *map_info) {
+ switch (map_info->disp_type) {
+ case kPluggable:
+ DestroyPluggableDisplay(map_info);
+ break;
+ default:
+ DestroyNonPluggableDisplay(map_info);
+ break;
+ }
+}
+
+void HWCSession::DestroyPluggableDisplay(DisplayMapInfo *map_info) {
+ hwc2_display_t client_id = map_info->client_id;
+
+ DLOGI("Notify hotplug display disconnected: client id = %d", client_id);
+ callbacks_.Hotplug(client_id, HWC2::Connection::Disconnected);
+
+ // Trigger refresh to make sure disconnect event received/updated properly by SurfaceFlinger.
+ Refresh(HWC_DISPLAY_PRIMARY);
+
+ // wait for sufficient time to ensure sufficient resources are available to process
+ // connection.
+ usleep(UINT32(GetVsyncPeriod(HWC_DISPLAY_PRIMARY)) * 2 / 1000);
+
+ {
+ SCOPE_LOCK(locker_[client_id]);
+ auto &hwc_display = hwc_display_[client_id];
+ if (!hwc_display) {
+ return;
+ }
+ DLOGI("Destroy display %d-%d, client id = %d", map_info->sdm_id, map_info->disp_type,
+ client_id);
+
+ is_hdr_display_[UINT32(client_id)] = false;
+ if (!map_info->test_pattern) {
+ HWCDisplayPluggable::Destroy(hwc_display);
+ } else {
+ HWCDisplayPluggableTest::Destroy(hwc_display);
+ }
+
+ if (async_powermode_) {
+ hwc2_display_t dummy_disp_id = map_hwc_display_.find(client_id)->second;
+ auto &hwc_display_dummy = hwc_display_[dummy_disp_id];
+ display_ready_.reset(UINT32(dummy_disp_id));
+ if (hwc_display_dummy) {
+ HWCDisplayDummy::Destroy(hwc_display_dummy);
+ hwc_display_dummy = nullptr;
+ }
+ }
+ display_ready_.reset(UINT32(client_id));
+ hwc_display = nullptr;
+ map_info->Reset();
+ }
+}
+
+void HWCSession::DestroyNonPluggableDisplay(DisplayMapInfo *map_info) {
+ hwc2_display_t client_id = map_info->client_id;
+
+ SCOPE_LOCK(locker_[client_id]);
+ auto &hwc_display = hwc_display_[client_id];
+ if (!hwc_display) {
+ return;
+ }
+ DLOGI("Destroy display %d-%d, client id = %d", map_info->sdm_id, map_info->disp_type,
+ client_id);
+ is_hdr_display_[UINT32(client_id)] = false;
+ switch (map_info->disp_type) {
+ case kBuiltIn:
+ HWCDisplayBuiltIn::Destroy(hwc_display);
+ break;
+ default:
+ HWCDisplayVirtual::Destroy(hwc_display);
+ break;
+ }
+
+ if (async_powermode_ && map_info->disp_type == kBuiltIn) {
+ hwc2_display_t dummy_disp_id = map_hwc_display_.find(client_id)->second;
+ auto &hwc_display_dummy = hwc_display_[dummy_disp_id];
+ display_ready_.reset(UINT32(dummy_disp_id));
+ if (hwc_display_dummy) {
+ HWCDisplayDummy::Destroy(hwc_display_dummy);
+ hwc_display_dummy = nullptr;
+ }
+ }
+ hwc_display = nullptr;
+ display_ready_.reset(UINT32(client_id));
+ map_info->Reset();
+}
+
+HWC2::Error HWCSession::ValidateDisplayInternal(hwc2_display_t display, uint32_t *out_num_types,
+ uint32_t *out_num_requests) {
+ HWCDisplay *hwc_display = hwc_display_[display];
+
+ DTRACE_SCOPED();
+ if (hwc_display->IsInternalValidateState()) {
+ // Internal Validation has already been done on display, get the Output params.
+ return hwc_display->GetValidateDisplayOutput(out_num_types, out_num_requests);
+ }
+
+ if (display == HWC_DISPLAY_PRIMARY) {
+ // TODO(user): This can be moved to HWCDisplayPrimary
+ if (need_invalidate_) {
+ Refresh(display);
+ need_invalidate_ = false;
+ }
+
+ if (color_mgr_) {
+ color_mgr_->SetColorModeDetailEnhancer(hwc_display_[display]);
+ }
+ }
+
+ return hwc_display->Validate(out_num_types, out_num_requests);
+}
+
+HWC2::Error HWCSession::PresentDisplayInternal(hwc2_display_t display, int32_t *out_retire_fence) {
+ HWCDisplay *hwc_display = hwc_display_[display];
+
+ DTRACE_SCOPED();
+ // If display is in Skip-Validate state and Validate cannot be skipped, do Internal
+ // Validation to optimize for the frames which don't require the Client composition.
+ if (hwc_display->IsSkipValidateState() && !hwc_display->CanSkipValidate()) {
+ uint32_t out_num_types = 0, out_num_requests = 0;
+ hwc_display->SetFastPathComposition(true);
+ HWC2::Error error = ValidateDisplayInternal(display, &out_num_types, &out_num_requests);
+ if ((error != HWC2::Error::None) || hwc_display->HWCClientNeedsValidate()) {
+ hwc_display->SetValidationState(HWCDisplay::kInternalValidate);
+ hwc_display->SetFastPathComposition(false);
+ return HWC2::Error::NotValidated;
+ }
+ }
+ return HWC2::Error::None;
+}
+
+void HWCSession::DisplayPowerReset() {
+ // Acquire lock on all displays.
+ for (hwc2_display_t display = HWC_DISPLAY_PRIMARY;
+ display < HWCCallbacks::kNumDisplays; display++) {
+ locker_[display].Lock();
+ }
+
+ HWC2::Error status = HWC2::Error::None;
+ HWC2::PowerMode last_power_mode[HWCCallbacks::kNumDisplays] = {};
+
+ for (hwc2_display_t display = HWC_DISPLAY_PRIMARY;
+ display < HWCCallbacks::kNumDisplays; display++) {
+ if (hwc_display_[display] != NULL) {
+ last_power_mode[display] = hwc_display_[display]->GetCurrentPowerMode();
+ DLOGI("Powering off display = %d", display);
+ status = hwc_display_[display]->SetPowerMode(HWC2::PowerMode::Off,
+ true /* teardown */);
+ if (status != HWC2::Error::None) {
+ DLOGE("Power off for display = %d failed with error = %d", display, status);
+ }
+ }
+ }
+ for (hwc2_display_t display = HWC_DISPLAY_PRIMARY;
+ display < HWCCallbacks::kNumDisplays; display++) {
+ if (hwc_display_[display] != NULL) {
+ HWC2::PowerMode mode = last_power_mode[display];
+ DLOGI("Setting display %d to mode = %d", display, mode);
+ status = hwc_display_[display]->SetPowerMode(mode, false /* teardown */);
+ if (status != HWC2::Error::None) {
+ DLOGE("%d mode for display = %d failed with error = %d", mode, display, status);
+ }
+ ColorMode color_mode = hwc_display_[display]->GetCurrentColorMode();
+ RenderIntent intent = hwc_display_[display]->GetCurrentRenderIntent();
+ status = hwc_display_[display]->SetColorModeWithRenderIntent(color_mode, intent);
+ if (status != HWC2::Error::None) {
+ DLOGE("SetColorMode failed for display = %d error = %d", display, status);
+ }
+ }
+ }
+
+ hwc2_display_t vsync_source = callbacks_.GetVsyncSource();
+ status = hwc_display_[vsync_source]->SetVsyncEnabled(HWC2::Vsync::Enable);
+ if (status != HWC2::Error::None) {
+ DLOGE("Enabling vsync failed for disp: %" PRIu64 " with error = %d", vsync_source, status);
+ }
+
+ // Release lock on all displays.
+ for (hwc2_display_t display = HWC_DISPLAY_PRIMARY;
+ display < HWCCallbacks::kNumDisplays; display++) {
+ locker_[display].Unlock();
+ }
+
+ Refresh(vsync_source);
+}
+
+void HWCSession::HandleSecureSession() {
+ std::bitset<kSecureMax> secure_sessions = 0;
+ {
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (active_builtin_disp_id >= HWCCallbacks::kNumDisplays) {
+ return;
+ }
+ Locker::ScopeLock lock_a(locker_[active_builtin_disp_id]);
+ hwc_display_[active_builtin_disp_id]->GetActiveSecureSession(&secure_sessions);
+ }
+
+ // If it is called during primary prepare/commit, we need to pause any ongoing commit on
+ // external/virtual display.
+ for (hwc2_display_t display = HWC_DISPLAY_PRIMARY;
+ display < HWCCallbacks::kNumDisplays; display++) {
+ Locker::ScopeLock lock_d(locker_[display]);
+ if (hwc_display_[display]) {
+ hwc_display_[display]->HandleSecureSession(secure_sessions, &power_on_pending_[display]);
+ }
+ }
+}
+
+void HWCSession::HandlePowerOnPending(hwc2_display_t disp_id, int retire_fence) {
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (disp_id != active_builtin_disp_id) {
+ return;
+ }
+
+ Locker::ScopeLock lock_a(locker_[active_builtin_disp_id]);
+ bool power_on_pending = false;
+ for (hwc2_display_t display = HWC_DISPLAY_PRIMARY;
+ display < HWCCallbacks::kNumDisplays; display++) {
+ if (display != active_builtin_disp_id) {
+ Locker::ScopeLock lock_d(locker_[display]);
+ if (power_on_pending_[display]) {
+ power_on_pending = true;
+ break;
+ }
+ }
+ }
+ if (power_on_pending) {
+ // retire fence is set only after successful primary commit, So check for retire fence to know
+ // non secure commit went through to notify driver to change the CRTC mode to non secure.
+ // Otherwise any commit to non-primary display would fail.
+ if (retire_fence < 0) {
+ return;
+ }
+ int error = sync_wait(retire_fence, 1000);
+ if (error < 0) {
+ DLOGE("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ }
+ } else {
+ return;
+ }
+
+ for (hwc2_display_t display = HWC_DISPLAY_PRIMARY;
+ display < HWCCallbacks::kNumDisplays; display++) {
+ if (display != active_builtin_disp_id) {
+ Locker::ScopeLock lock_d(locker_[display]);
+ if (power_on_pending_[display] && hwc_display_[display]) {
+ HWC2::Error status =
+ hwc_display_[display]->SetPowerMode(HWC2::PowerMode::On, false /* teardown */);
+ if (status == HWC2::Error::None) {
+ power_on_pending_[display] = false;
+ }
+ }
+ }
+ }
+}
+
+void HWCSession::HandleHotplugPending(hwc2_display_t disp_id, int retire_fence) {
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (disp_id != active_builtin_disp_id ||
+ (kHotPlugNone == hotplug_pending_event_ && !destroy_virtual_disp_pending_)) {
+ return;
+ }
+
+ std :: bitset < kSecureMax > secure_sessions = 0;
+ if (active_builtin_disp_id < HWCCallbacks::kNumDisplays) {
+ Locker::ScopeLock lock_a(locker_[active_builtin_disp_id]);
+ hwc_display_[active_builtin_disp_id]->GetActiveSecureSession(&secure_sessions);
+ }
+
+ if (secure_sessions.any() || active_builtin_disp_id >= HWCCallbacks::kNumDisplays) {
+ return;
+ }
+
+ if (destroy_virtual_disp_pending_ || kHotPlugEvent == hotplug_pending_event_) {
+ if (retire_fence >= 0) {
+ int error = sync_wait(retire_fence, 1000);
+ if (error < 0) {
+ DLOGE("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ }
+ }
+ // Destroy the pending virtual display if secure session not present.
+ if (destroy_virtual_disp_pending_) {
+ for (auto &map_info : map_info_virtual_) {
+ DestroyDisplay(&map_info);
+ destroy_virtual_disp_pending_ = false;
+ }
+ }
+ // Handle connect/disconnect hotplugs if secure session is not present.
+ int virtual_display_idx = GetDisplayIndex(qdutils::DISPLAY_VIRTUAL);
+ if (!(virtual_display_idx != -1 && hwc_display_[virtual_display_idx]) &&
+ kHotPlugEvent == hotplug_pending_event_) {
+ // Handle deferred hotplug event.
+ int32_t err = pluggable_handler_lock_.TryLock();
+ if (!err) {
+ // Do hotplug handling in a different thread to avoid blocking PresentDisplay.
+ std::thread(&HWCSession::HandlePluggableDisplays, this, true).detach();
+ pluggable_handler_lock_.Unlock();
+ } else {
+ // EBUSY means another thread is already handling hotplug. Skip deferred hotplug handling.
+ if (EBUSY != err) {
+ DLOGW("Failed to acquire pluggable display handler lock. Error %d '%s'.", err,
+ strerror(abs(err)));
+ }
+ }
+ }
+ }
+}
+
+int32_t HWCSession::GetReadbackBufferAttributes(hwc2_device_t *device, hwc2_display_t display,
+ int32_t *format, int32_t *dataspace) {
+ if (!device || !format || !dataspace) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display != HWC_DISPLAY_PRIMARY) {
+ return HWC2_ERROR_UNSUPPORTED;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ HWCDisplay *hwc_display = hwc_session->hwc_display_[display];
+
+ if (hwc_display) {
+ if (!hwc_display->IsDisplayCommandMode()) {
+ return HWC2_ERROR_UNSUPPORTED;
+ }
+ *format = HAL_PIXEL_FORMAT_RGB_888;
+ *dataspace = GetDataspaceFromColorMode(hwc_display->GetCurrentColorMode());
+ return HWC2_ERROR_NONE;
+ }
+
+ return HWC2_ERROR_BAD_DISPLAY;
+}
+
+int32_t HWCSession::SetReadbackBuffer(hwc2_device_t *device, hwc2_display_t display,
+ const native_handle_t *buffer, int32_t acquire_fence) {
+ if (!buffer) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display != HWC_DISPLAY_PRIMARY) {
+ return HWC2_ERROR_UNSUPPORTED;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+
+ int external_display_index = hwc_session->GetDisplayIndex(qdutils::DISPLAY_EXTERNAL);
+ if ((external_display_index >=0) && (hwc_session->hwc_display_[external_display_index])) {
+ return HWC2_ERROR_UNSUPPORTED;
+ }
+
+ int virtual_display_index = hwc_session->GetDisplayIndex(qdutils::DISPLAY_VIRTUAL);
+ if ((virtual_display_index >=0) && (hwc_session->hwc_display_[virtual_display_index])) {
+ return HWC2_ERROR_UNSUPPORTED;
+ }
+
+ return CallDisplayFunction(device, display, &HWCDisplay::SetReadbackBuffer,
+ buffer, acquire_fence, false);
+}
+
+int32_t HWCSession::GetReadbackBufferFence(hwc2_device_t *device, hwc2_display_t display,
+ int32_t *release_fence) {
+ if (!release_fence) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display != HWC_DISPLAY_PRIMARY) {
+ return HWC2_ERROR_UNSUPPORTED;
+ }
+
+ return CallDisplayFunction(device, display, &HWCDisplay::GetReadbackBufferFence, release_fence);
+}
+
+int32_t HWCSession::GetDisplayIdentificationData(hwc2_device_t *device, hwc2_display_t display,
+ uint8_t *outPort, uint32_t *outDataSize,
+ uint8_t *outData) {
+ if (!outPort || !outDataSize) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ return CallDisplayFunction(device, display, &HWCDisplay::GetDisplayIdentificationData, outPort,
+ outDataSize, outData);
+}
+
+int32_t HWCSession::GetDisplayCapabilities(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *outNumCapabilities,
+ uint32_t *outCapabilities) {
+ if (!outNumCapabilities || !device) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ HWCDisplay *hwc_display = hwc_session->hwc_display_[display];
+ if (!hwc_display) {
+ DLOGE("Expected valid hwc_display");
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ bool isBuiltin = (hwc_display->GetDisplayClass() == DISPLAY_CLASS_BUILTIN);
+ if (!outCapabilities) {
+ *outNumCapabilities = 0;
+ if (isBuiltin) {
+ *outNumCapabilities = 4;
+ }
+ return HWC2_ERROR_NONE;
+ } else {
+ if (isBuiltin) {
+ // TODO(user): Handle SKIP_CLIENT_COLOR_TRANSFORM based on DSPP availability
+ uint32_t index = 0;
+ outCapabilities[index++] = HWC2_DISPLAY_CAPABILITY_SKIP_CLIENT_COLOR_TRANSFORM;
+ int32_t has_doze_support = 0;
+ GetDozeSupport(device, display, &has_doze_support);
+ if (has_doze_support) {
+ outCapabilities[index++] = HWC2_DISPLAY_CAPABILITY_DOZE;
+ }
+ outCapabilities[index++] = HWC2_DISPLAY_CAPABILITY_BRIGHTNESS;
+ outCapabilities[index++] = UINT32(HwcDisplayCapability::PROTECTED_CONTENTS);
+ *outNumCapabilities = index;
+ }
+ return HWC2_ERROR_NONE;
+ }
+}
+
+int32_t HWCSession::GetDisplayConnectionType(hwc2_device_t* device, hwc2_display_t display,
+ uint32_t *outType) {
+ if (!outType || !device) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ HWCDisplay *hwc_display = hwc_session->hwc_display_[display];
+ if (!hwc_display) {
+ DLOGE("Expected valid hwc_display");
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ *outType = HWC2_DISPLAY_CONNECTION_TYPE_EXTERNAL;
+ if (hwc_display->GetDisplayClass() == DISPLAY_CLASS_BUILTIN) {
+ *outType = HWC2_DISPLAY_CONNECTION_TYPE_INTERNAL;
+ }
+
+ return HWC2_ERROR_NONE;
+}
+
+int32_t HWCSession::GetDisplayVsyncPeriod(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_vsync_period_t *out_vsync_period) {
+ if (!out_vsync_period || !device) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ return CallDisplayFunction(device, display, &HWCDisplay::GetDisplayVsyncPeriod, out_vsync_period);
+}
+
+int32_t HWCSession::SetActiveConfigWithConstraints(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_config_t config,
+ hwc_vsync_period_change_constraints_t *vsync_period_change_constraints,
+ hwc_vsync_period_change_timeline_t *out_timeline) {
+ if (!vsync_period_change_constraints || !out_timeline || !device) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ return CallDisplayFunction(device, display, &HWCDisplay::SetActiveConfigWithConstraints, config,
+ vsync_period_change_constraints, out_timeline);
+}
+
+int32_t HWCSession::GetDisplayBrightnessSupport(hwc2_device_t *device, hwc2_display_t display,
+ bool *outSupport) {
+ if (!device || !outSupport) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ HWCDisplay *hwc_display = hwc_session->hwc_display_[display];
+ if (!hwc_display) {
+ DLOGE("Expected valid hwc_display");
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+ *outSupport = (hwc_display->GetDisplayClass() == DISPLAY_CLASS_BUILTIN);
+ return HWC2_ERROR_NONE;
+}
+
+int32_t HWCSession::SetDisplayBrightness(hwc2_device_t *device, hwc2_display_t display,
+ float brightness) {
+ if (!device) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ HWCDisplay *hwc_display = hwc_session->hwc_display_[display];
+
+ if (!hwc_display) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ return INT32(hwc_display->SetPanelBrightness(brightness));
+}
+
+android::status_t HWCSession::SetQSyncMode(const android::Parcel *input_parcel) {
+ auto mode = input_parcel->readInt32();
+ auto device = static_cast<hwc2_device_t *>(this);
+
+ QSyncMode qsync_mode = kQSyncModeNone;
+ switch (mode) {
+ case qService::IQService::QSYNC_MODE_NONE:
+ qsync_mode = kQSyncModeNone;
+ break;
+ case qService::IQService::QSYNC_MODE_CONTINUOUS:
+ qsync_mode = kQSyncModeContinuous;
+ break;
+ case qService::IQService::QSYNC_MODE_ONESHOT:
+ qsync_mode = kQsyncModeOneShot;
+ break;
+ default:
+ DLOGE("Qsync mode not supported %d", mode);
+ return -EINVAL;
+ }
+ return CallDisplayFunction(device, HWC_DISPLAY_PRIMARY, &HWCDisplay::SetQSyncMode, qsync_mode);
+}
+
+void HWCSession::UpdateThrottlingRate() {
+ uint32_t new_min = 0;
+
+ for (int i=0; i < HWCCallbacks::kNumDisplays; i++) {
+ auto &display = hwc_display_[i];
+ if (!display)
+ continue;
+ if (display->GetCurrentPowerMode() != HWC2::PowerMode::Off)
+ new_min = (new_min == 0) ? display->GetMaxRefreshRate() :
+ std::min(new_min, display->GetMaxRefreshRate());
+ }
+
+ SetNewThrottlingRate(new_min);
+}
+
+void HWCSession::SetNewThrottlingRate(const uint32_t new_rate) {
+ if (new_rate !=0 && throttling_refresh_rate_ != new_rate) {
+ HWCDisplay::SetThrottlingRefreshRate(new_rate);
+ throttling_refresh_rate_ = new_rate;
+ }
+}
+
+android::status_t HWCSession::SetIdlePC(const android::Parcel *input_parcel) {
+ auto enable = input_parcel->readInt32();
+ auto synchronous = input_parcel->readInt32();
+
+ return static_cast<android::status_t>(ControlIdlePowerCollapse(enable, synchronous));
+}
+
+hwc2_display_t HWCSession::GetActiveBuiltinDisplay() {
+ hwc2_display_t disp_id = HWCCallbacks::kNumDisplays;
+ // Get first active display among primary and built-in displays.
+ std::vector<DisplayMapInfo> map_info = {map_info_primary_};
+ std::copy(map_info_builtin_.begin(), map_info_builtin_.end(), std::back_inserter(map_info));
+
+ for (auto &info : map_info) {
+ SCOPE_LOCK(locker_[info.client_id]);
+ auto &hwc_display = hwc_display_[info.client_id];
+ if (hwc_display && hwc_display->GetCurrentPowerMode() != HWC2::PowerMode::Off) {
+ disp_id = info.client_id;
+ break;
+ }
+ }
+
+ return disp_id;
+}
+
+void HWCSession::NotifyClientStatus(bool connected) {
+ for (uint32_t i = 0; i < HWCCallbacks::kNumDisplays; i++) {
+ if (!hwc_display_[i]) {
+ continue;
+ }
+ SCOPE_LOCK(locker_[i]);
+ hwc_display_[i]->NotifyClientStatus(connected);
+ }
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_session.h b/sdm/libs/hwc2/hwc_session.h
new file mode 100644
index 0000000..f1b054a
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_session.h
@@ -0,0 +1,457 @@
+/*
+ * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __HWC_SESSION_H__
+#define __HWC_SESSION_H__
+
+#include <cutils/native_handle.h>
+#include <config/device_interface.h>
+#include <core/core_interface.h>
+#include <utils/locker.h>
+#include <qd_utils.h>
+#include <display_config.h>
+#include <vector>
+#include <utility>
+#include <map>
+#include <string>
+
+#include "hwc_callbacks.h"
+#include "hwc_layers.h"
+#include "hwc_display.h"
+#include "hwc_display_builtin.h"
+#include "hwc_display_pluggable.h"
+#include "hwc_display_dummy.h"
+#include "hwc_display_virtual.h"
+#include "hwc_display_pluggable_test.h"
+#include "hwc_color_manager.h"
+#include "hwc_socket_handler.h"
+#include "hwc_display_event_handler.h"
+#include "hwc_buffer_sync_handler.h"
+#include <android/hardware/graphics/composer/2.4/IComposerClient.h>
+namespace sdm {
+using ::android::hardware::Return;
+using ::android::hardware::hidl_string;
+using android::hardware::hidl_handle;
+using ::android::hardware::hidl_vec;
+
+namespace composer_V2_4 = ::android::hardware::graphics::composer::V2_4;
+using HwcDisplayCapability = composer_V2_4::IComposerClient::DisplayCapability;
+
+int32_t GetDataspaceFromColorMode(ColorMode mode);
+
+typedef DisplayConfig::DisplayType DispType;
+
+// Create a singleton uevent listener thread valid for life of hardware composer process.
+// This thread blocks on uevents poll inside uevent library implementation. This poll exits
+// only when there is a valid uevent, it can not be interrupted otherwise. Tieing life cycle
+// of this thread with HWC session cause HWC deinitialization to wait infinitely for the
+// thread to exit.
+class HWCUEventListener {
+ public:
+ virtual ~HWCUEventListener() {}
+ virtual void UEventHandler(const char *uevent_data, int length) = 0;
+};
+
+class HWCUEvent {
+ public:
+ HWCUEvent();
+ static void UEventThread(HWCUEvent *hwc_event);
+ void Register(HWCUEventListener *uevent_listener);
+ inline bool InitDone() { return init_done_; }
+
+ private:
+ std::mutex mutex_;
+ std::condition_variable caller_cv_;
+ HWCUEventListener *uevent_listener_ = nullptr;
+ bool init_done_ = false;
+};
+
+constexpr int32_t kDataspaceSaturationMatrixCount = 16;
+constexpr int32_t kDataspaceSaturationPropertyElements = 9;
+constexpr int32_t kPropertyMax = 256;
+
+class HWCSession : hwc2_device_t, HWCUEventListener, public qClient::BnQClient,
+ public HWCDisplayEventHandler, public DisplayConfig::ClientContext {
+ public:
+ struct HWCModuleMethods : public hw_module_methods_t {
+ HWCModuleMethods() { hw_module_methods_t::open = HWCSession::Open; }
+ };
+
+ enum HotPlugEvent {
+ kHotPlugNone,
+ kHotPlugEvent,
+ };
+
+ explicit HWCSession(const hw_module_t *module);
+ int Init();
+ int Deinit();
+ HWC2::Error CreateVirtualDisplayObj(uint32_t width, uint32_t height, int32_t *format,
+ hwc2_display_t *out_display_id);
+
+ template <typename... Args>
+ static int32_t CallDisplayFunction(hwc2_device_t *device, hwc2_display_t display,
+ HWC2::Error (HWCDisplay::*member)(Args...), Args... args) {
+ if (!device) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ {
+ // Power state transition start.
+ SCOPE_LOCK(power_state_[display]);
+ if (hwc_session->power_state_transition_[display]) {
+ display = hwc_session->map_hwc_display_.find(display)->second;
+ }
+ }
+
+ SCOPE_LOCK(locker_[display]);
+ auto status = HWC2::Error::BadDisplay;
+ if (hwc_session->hwc_display_[display]) {
+ auto hwc_display = hwc_session->hwc_display_[display];
+ status = (hwc_display->*member)(std::forward<Args>(args)...);
+ }
+ return INT32(status);
+ }
+
+ template <typename... Args>
+ static int32_t CallLayerFunction(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t layer, HWC2::Error (HWCLayer::*member)(Args...),
+ Args... args) {
+ if (!device) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ HWCSession *hwc_session = static_cast<HWCSession *>(device);
+ {
+ // Power state transition start.
+ SCOPE_LOCK(power_state_[display]);
+ if (hwc_session->power_state_transition_[display]) {
+ display = hwc_session->map_hwc_display_.find(display)->second;
+ }
+ }
+
+ SCOPE_LOCK(locker_[display]);
+ auto status = HWC2::Error::BadDisplay;
+ if (hwc_session->hwc_display_[display]) {
+ status = HWC2::Error::BadLayer;
+ auto hwc_layer = hwc_session->hwc_display_[display]->GetHWCLayer(layer);
+ if (hwc_layer != nullptr) {
+ status = (hwc_layer->*member)(std::forward<Args>(args)...);
+ if (hwc_session->hwc_display_[display]->GetGeometryChanges()) {
+ hwc_session->hwc_display_[display]->ResetValidation();
+ }
+ }
+ }
+ return INT32(status);
+ }
+
+ // HWC2 Functions that require a concrete implementation in hwc session
+ // and hence need to be member functions
+ static int32_t AcceptDisplayChanges(hwc2_device_t *device, hwc2_display_t display);
+ static int32_t CreateLayer(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_layer_t *out_layer_id);
+ static int32_t CreateVirtualDisplay(hwc2_device_t *device, uint32_t width, uint32_t height,
+ int32_t *format, hwc2_display_t *out_display_id);
+ static int32_t DestroyLayer(hwc2_device_t *device, hwc2_display_t display, hwc2_layer_t layer);
+ static int32_t DestroyVirtualDisplay(hwc2_device_t *device, hwc2_display_t display);
+ static void Dump(hwc2_device_t *device, uint32_t *out_size, char *out_buffer);
+ static int32_t PresentDisplay(hwc2_device_t *device, hwc2_display_t display,
+ int32_t *out_retire_fence);
+ static int32_t RegisterCallback(hwc2_device_t *device, int32_t descriptor,
+ hwc2_callback_data_t callback_data,
+ hwc2_function_pointer_t pointer);
+ static int32_t SetOutputBuffer(hwc2_device_t *device, hwc2_display_t display,
+ buffer_handle_t buffer, int32_t releaseFence);
+ static int32_t SetPowerMode(hwc2_device_t *device, hwc2_display_t display, int32_t int_mode);
+ static int32_t ValidateDisplay(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *out_num_types, uint32_t *out_num_requests);
+ static int32_t SetColorMode(hwc2_device_t *device, hwc2_display_t display,
+ int32_t /*ColorMode*/ int_mode);
+ static int32_t SetColorModeWithRenderIntent(hwc2_device_t *device, hwc2_display_t display,
+ int32_t /*ColorMode*/ int_mode,
+ int32_t /*RenderIntent*/ int_render_intent);
+ static int32_t SetColorTransform(hwc2_device_t *device, hwc2_display_t display,
+ const float *matrix, int32_t /*android_color_transform_t*/ hint);
+ static int32_t GetReadbackBufferAttributes(hwc2_device_t *device, hwc2_display_t display,
+ int32_t *format, int32_t *dataspace);
+ static int32_t SetReadbackBuffer(hwc2_device_t *device, hwc2_display_t display,
+ const native_handle_t *buffer, int32_t acquire_fence);
+ static int32_t GetReadbackBufferFence(hwc2_device_t *device, hwc2_display_t display,
+ int32_t *release_fence);
+ static uint32_t GetMaxVirtualDisplayCount(hwc2_device_t *device);
+ static int32_t GetDisplayIdentificationData(hwc2_device_t *device, hwc2_display_t display,
+ uint8_t *outPort, uint32_t *outDataSize,
+ uint8_t *outData);
+ static int32_t GetDisplayCapabilities(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *outNumCapabilities, uint32_t *outCapabilities);
+ static int32_t GetDisplayBrightnessSupport(hwc2_device_t *device, hwc2_display_t display,
+ bool *outSupport);
+ static int32_t SetDisplayBrightness(hwc2_device_t *device, hwc2_display_t display,
+ float brightness);
+ static int32_t GetDisplayConnectionType(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *outType);
+ static int32_t GetDisplayVsyncPeriod(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_vsync_period_t *out_vsync_period);
+ static int32_t SetActiveConfigWithConstraints(hwc2_device_t *device, hwc2_display_t display,
+ hwc2_config_t config,
+ hwc_vsync_period_change_constraints_t *vsync_period_change_constraints,
+ hwc_vsync_period_change_timeline_t *out_timeline);
+
+ virtual int RegisterClientContext(std::shared_ptr<DisplayConfig::ConfigCallback> callback,
+ DisplayConfig::ConfigInterface **intf);
+ virtual void UnRegisterClientContext(DisplayConfig::ConfigInterface *intf);
+
+ // HWCDisplayEventHandler
+ virtual void DisplayPowerReset();
+
+ static int32_t SetVsyncEnabled(hwc2_device_t *device, hwc2_display_t display,
+ int32_t int_enabled);
+ static int32_t GetDozeSupport(hwc2_device_t *device, hwc2_display_t display,
+ int32_t *out_support);
+ static int32_t SetAutoLowLatencyMode(hwc2_device_t *device, hwc2_display_t display, bool on);
+ static int32_t GetSupportedContentTypes(hwc2_device_t *device, hwc2_display_t display,
+ uint32_t *count, uint32_t *contentTypes);
+ static int32_t SetContentType(hwc2_device_t *device, hwc2_display_t display,int32_t type);
+ static Locker locker_[HWCCallbacks::kNumDisplays];
+ static Locker power_state_[HWCCallbacks::kNumDisplays];
+ static Locker display_config_locker_;
+
+ private:
+
+ class DisplayConfigImpl: public DisplayConfig::ConfigInterface {
+ public:
+ explicit DisplayConfigImpl(std::weak_ptr<DisplayConfig::ConfigCallback> callback,
+ HWCSession *hwc_session);
+
+ private:
+ virtual int IsDisplayConnected(DispType dpy, bool *connected);
+ virtual int SetDisplayStatus(DispType dpy, DisplayConfig::ExternalStatus status);
+ virtual int ConfigureDynRefreshRate(DisplayConfig::DynRefreshRateOp op, uint32_t refresh_rate);
+ virtual int GetConfigCount(DispType dpy, uint32_t *count);
+ virtual int GetActiveConfig(DispType dpy, uint32_t *config);
+ virtual int SetActiveConfig(DispType dpy, uint32_t config);
+ virtual int GetDisplayAttributes(uint32_t config_index, DispType dpy,
+ DisplayConfig::Attributes *attributes);
+ virtual int SetPanelBrightness(uint32_t level);
+ virtual int GetPanelBrightness(uint32_t *level);
+ virtual int MinHdcpEncryptionLevelChanged(DispType dpy, uint32_t min_enc_level);
+ virtual int RefreshScreen();
+ virtual int ControlPartialUpdate(DispType dpy, bool enable);
+ virtual int ToggleScreenUpdate(bool on);
+ virtual int SetIdleTimeout(uint32_t value);
+ virtual int GetHDRCapabilities(DispType dpy, DisplayConfig::HDRCapsParams *caps);
+ virtual int SetCameraLaunchStatus(uint32_t on);
+ virtual int DisplayBWTransactionPending(bool *status);
+ virtual int SetDisplayAnimating(uint64_t display_id, bool animating);
+ virtual int ControlIdlePowerCollapse(bool enable, bool synchronous);
+ virtual int GetWriteBackCapabilities(bool *is_wb_ubwc_supported);
+ virtual int SetDisplayDppsAdROI(uint32_t display_id, uint32_t h_start, uint32_t h_end,
+ uint32_t v_start, uint32_t v_end, uint32_t factor_in,
+ uint32_t factor_out);
+ virtual int UpdateVSyncSourceOnPowerModeOff();
+ virtual int UpdateVSyncSourceOnPowerModeDoze();
+ virtual int SetPowerMode(uint32_t disp_id, DisplayConfig::PowerMode power_mode);
+ virtual int IsPowerModeOverrideSupported(uint32_t disp_id, bool *supported);
+ virtual int IsHDRSupported(uint32_t disp_id, bool *supported);
+ virtual int IsWCGSupported(uint32_t disp_id, bool *supported);
+ virtual int SetLayerAsMask(uint32_t disp_id, uint64_t layer_id);
+ virtual int GetDebugProperty(const std::string prop_name, std::string value) {return -EINVAL;}
+ virtual int GetDebugProperty(const std::string prop_name, std::string *value);
+ virtual int GetActiveBuiltinDisplayAttributes(DisplayConfig::Attributes *attr);
+ virtual int SetPanelLuminanceAttributes(uint32_t disp_id, float min_lum, float max_lum);
+ virtual int IsBuiltInDisplay(uint32_t disp_id, bool *is_builtin);
+ virtual int GetSupportedDSIBitClks(uint32_t disp_id,
+ std::vector<uint64_t> bit_clks) {return -EINVAL;}
+ virtual int GetSupportedDSIBitClks(uint32_t disp_id, std::vector<uint64_t> *bit_clks);
+ virtual int GetDSIClk(uint32_t disp_id, uint64_t *bit_clk);
+ virtual int SetDSIClk(uint32_t disp_id, uint64_t bit_clk);
+ virtual int SetCWBOutputBuffer(uint32_t disp_id, const DisplayConfig::Rect rect,
+ bool post_processed, const native_handle_t *buffer);
+ virtual int SetQsyncMode(uint32_t disp_id, DisplayConfig::QsyncMode mode);
+
+ std::weak_ptr<DisplayConfig::ConfigCallback> callback_;
+ HWCSession *hwc_session_ = nullptr;
+ };
+
+ struct DisplayMapInfo {
+ hwc2_display_t client_id = HWCCallbacks::kNumDisplays; // mapped sf id for this display
+ int32_t sdm_id = -1; // sdm id for this display
+ sdm:: DisplayType disp_type = kDisplayTypeMax; // sdm display type
+ bool test_pattern = false; // display will show test pattern
+ void Reset() {
+ // Do not clear client id
+ sdm_id = -1;
+ disp_type = kDisplayTypeMax;
+ test_pattern = false;
+ }
+ };
+
+ static const int kExternalConnectionTimeoutMs = 500;
+ static const int kCommitDoneTimeoutMs = 100;
+ uint32_t throttling_refresh_rate_ = 60;
+ void UpdateThrottlingRate();
+ void SetNewThrottlingRate(uint32_t new_rate);
+ // hwc methods
+ static int Open(const hw_module_t *module, const char *name, hw_device_t **device);
+ static int Close(hw_device_t *device);
+ static void GetCapabilities(struct hwc2_device *device, uint32_t *outCount,
+ int32_t *outCapabilities);
+ static hwc2_function_pointer_t GetFunction(struct hwc2_device *device, int32_t descriptor);
+
+ // Uevent handler
+ virtual void UEventHandler(const char *uevent_data, int length);
+ void ResetPanel();
+ void InitSupportedDisplaySlots();
+ int GetDisplayIndex(int dpy);
+ int CreatePrimaryDisplay();
+ void CreateDummyDisplay(hwc2_display_t client_id);
+ int HandleBuiltInDisplays();
+ int HandlePluggableDisplays(bool delay_hotplug);
+ int HandleConnectedDisplays(HWDisplaysInfo *hw_displays_info, bool delay_hotplug);
+ int HandleDisconnectedDisplays(HWDisplaysInfo *hw_displays_info);
+ void DestroyDisplay(DisplayMapInfo *map_info);
+ void DestroyPluggableDisplay(DisplayMapInfo *map_info);
+ void DestroyNonPluggableDisplay(DisplayMapInfo *map_info);
+ int GetVsyncPeriod(int disp);
+ int GetConfigCount(int disp_id, uint32_t *count);
+ int GetActiveConfigIndex(int disp_id, uint32_t *config);
+ int SetActiveConfigIndex(int disp_id, uint32_t config);
+ int ControlPartialUpdate(int dpy, bool enable);
+ int DisplayBWTransactionPending(bool *status);
+ int SetDisplayStatus(int disp_id, HWCDisplay::DisplayStatus status);
+ int MinHdcpEncryptionLevelChanged(int disp_id, uint32_t min_enc_level);
+ int IsWbUbwcSupported(bool *value);
+ int SetIdleTimeout(uint32_t value);
+ int ToggleScreenUpdate(bool on);
+ int SetCameraLaunchStatus(uint32_t on);
+ int SetDisplayDppsAdROI(uint32_t display_id, uint32_t h_start, uint32_t h_end,
+ uint32_t v_start, uint32_t v_end, uint32_t factor_in,
+ uint32_t factor_out);
+ int ControlIdlePowerCollapse(bool enable, bool synchronous);
+ int32_t SetDynamicDSIClock(int64_t disp_id, uint32_t bitrate);
+ bool HasHDRSupport(HWCDisplay *hwc_display);
+ int32_t getDisplayBrightness(uint32_t display, float *brightness);
+ int32_t setDisplayBrightness(uint32_t display, float brightness);
+ bool isSmartPanelConfig(uint32_t disp_id, uint32_t config_id);
+
+ // service methods
+ void StartServices();
+
+ // QClient methods
+ virtual android::status_t notifyCallback(uint32_t command, const android::Parcel *input_parcel,
+ android::Parcel *output_parcel);
+ void DynamicDebug(const android::Parcel *input_parcel);
+ android::status_t SetFrameDumpConfig(const android::Parcel *input_parcel);
+ android::status_t SetMaxMixerStages(const android::Parcel *input_parcel);
+ android::status_t SetDisplayMode(const android::Parcel *input_parcel);
+ android::status_t ConfigureRefreshRate(const android::Parcel *input_parcel);
+ android::status_t QdcmCMDHandler(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel);
+ android::status_t QdcmCMDDispatch(uint32_t display_id,
+ const PPDisplayAPIPayload &req_payload,
+ PPDisplayAPIPayload *resp_payload,
+ PPPendingParams *pending_action);
+ android::status_t GetDisplayAttributesForConfig(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel);
+ android::status_t GetVisibleDisplayRect(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel);
+ android::status_t SetMixerResolution(const android::Parcel *input_parcel);
+ android::status_t SetColorModeOverride(const android::Parcel *input_parcel);
+ android::status_t SetColorModeWithRenderIntentOverride(const android::Parcel *input_parcel);
+
+ android::status_t SetColorModeById(const android::Parcel *input_parcel);
+ android::status_t SetColorModeFromClient(const android::Parcel *input_parcel);
+ android::status_t getComposerStatus();
+ android::status_t SetQSyncMode(const android::Parcel *input_parcel);
+ android::status_t SetIdlePC(const android::Parcel *input_parcel);
+ android::status_t RefreshScreen(const android::Parcel *input_parcel);
+ android::status_t SetAd4RoiConfig(const android::Parcel *input_parcel);
+ android::status_t SetDsiClk(const android::Parcel *input_parcel);
+ android::status_t GetDsiClk(const android::Parcel *input_parcel, android::Parcel *output_parcel);
+ android::status_t GetSupportedDsiClk(const android::Parcel *input_parcel,
+ android::Parcel *output_parcel);
+ android::status_t SetPanelLuminanceAttributes(const android::Parcel *input_parcel);
+
+ void Refresh(hwc2_display_t display);
+ void HotPlug(hwc2_display_t display, HWC2::Connection state);
+
+ // Internal methods
+ HWC2::Error ValidateDisplayInternal(hwc2_display_t display, uint32_t *out_num_types,
+ uint32_t *out_num_requests);
+ HWC2::Error PresentDisplayInternal(hwc2_display_t display, int32_t *out_retire_fence);
+ void HandleSecureSession();
+ void HandlePowerOnPending(hwc2_display_t display, int retire_fence);
+ void HandleHotplugPending(hwc2_display_t disp_id, int retire_fence);
+ bool IsPluggableDisplayConnected();
+ hwc2_display_t GetActiveBuiltinDisplay();
+ void HandlePendingRefresh();
+ void NotifyClientStatus(bool connected);
+
+ CoreInterface *core_intf_ = nullptr;
+ HWCDisplay *hwc_display_[HWCCallbacks::kNumDisplays] = {nullptr};
+ HWCCallbacks callbacks_;
+ HWCBufferAllocator buffer_allocator_;
+ HWCBufferSyncHandler buffer_sync_handler_;
+ HWCColorManager *color_mgr_ = nullptr;
+ DisplayMapInfo map_info_primary_; // Primary display (either builtin or pluggable)
+ std::vector<DisplayMapInfo> map_info_builtin_; // Builtin displays excluding primary
+ std::vector<DisplayMapInfo> map_info_pluggable_; // Pluggable displays excluding primary
+ std::vector<DisplayMapInfo> map_info_virtual_; // Virtual displays
+ std::vector<bool> is_hdr_display_; // info on HDR supported
+ std::map <hwc2_display_t, hwc2_display_t> map_hwc_display_; // Real and dummy display pairs.
+ bool reset_panel_ = false;
+ bool client_connected_ = false;
+ bool new_bw_mode_ = false;
+ bool need_invalidate_ = false;
+ int bw_mode_release_fd_ = -1;
+ qService::QService *qservice_ = nullptr;
+ HWCSocketHandler socket_handler_;
+ bool hdmi_is_primary_ = false;
+ bool is_composer_up_ = false;
+ Locker callbacks_lock_;
+ std::mutex mutex_lum_;
+ int hpd_bpp_ = 0;
+ int hpd_pattern_ = 0;
+ static bool power_on_pending_[HWCCallbacks::kNumDisplays];
+ static int null_display_mode_;
+ HotPlugEvent hotplug_pending_event_ = kHotPlugNone;
+ Locker pluggable_handler_lock_;
+ bool destroy_virtual_disp_pending_ = false;
+ uint32_t idle_pc_ref_cnt_ = 0;
+ int32_t disable_hotplug_bwcheck_ = 0;
+ int32_t disable_mask_layer_hint_ = 0;
+ float set_max_lum_ = -1.0;
+ float set_min_lum_ = -1.0;
+ std::bitset<HWCCallbacks::kNumDisplays> pending_refresh_;
+ bool async_powermode_ = false;
+ bool power_state_transition_[HWCCallbacks::kNumDisplays] = {}; // +1 to account for primary.
+ std::bitset<HWCCallbacks::kNumDisplays> display_ready_;
+};
+
+} // namespace sdm
+
+#endif // __HWC_SESSION_H__
diff --git a/sdm/libs/hwc2/hwc_session_services.cpp b/sdm/libs/hwc2/hwc_session_services.cpp
new file mode 100644
index 0000000..a46c13b
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_session_services.cpp
@@ -0,0 +1,942 @@
+/*
+* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation. nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <core/buffer_allocator.h>
+#include <utils/debug.h>
+#include <sync/sync.h>
+#include <vector>
+#include <string>
+#include <errno.h>
+#include <math.h>
+
+#include "hwc_buffer_sync_handler.h"
+#include "hwc_session.h"
+#include "hwc_debugger.h"
+
+#define __CLASS__ "HWCSession"
+
+namespace sdm {
+
+void HWCSession::StartServices() {
+ int error = DisplayConfig::DeviceInterface::RegisterDevice(this);
+ if (error) {
+ DLOGW("Could not register IDisplayConfig as service (%d).", error);
+ } else {
+ DLOGI("IDisplayConfig service registration completed.");
+ }
+}
+
+int MapDisplayType(DispType dpy) {
+ switch (dpy) {
+ case DispType::kPrimary:
+ return qdutils::DISPLAY_PRIMARY;
+
+ case DispType::kExternal:
+ return qdutils::DISPLAY_EXTERNAL;
+
+ case DispType::kVirtual:
+ return qdutils::DISPLAY_VIRTUAL;
+
+ default:
+ break;
+ }
+
+ return -EINVAL;
+}
+
+HWCDisplay::DisplayStatus MapExternalStatus(DisplayConfig::ExternalStatus status) {
+ switch (status) {
+ case DisplayConfig::ExternalStatus::kOffline:
+ return HWCDisplay::kDisplayStatusOffline;
+
+ case DisplayConfig::ExternalStatus::kOnline:
+ return HWCDisplay::kDisplayStatusOnline;
+
+ case DisplayConfig::ExternalStatus::kPause:
+ return HWCDisplay::kDisplayStatusPause;
+
+ case DisplayConfig::ExternalStatus::kResume:
+ return HWCDisplay::kDisplayStatusResume;
+
+ default:
+ break;
+ }
+
+ return HWCDisplay::kDisplayStatusInvalid;
+}
+
+int HWCSession::RegisterClientContext(std::shared_ptr<DisplayConfig::ConfigCallback> callback,
+ DisplayConfig::ConfigInterface **intf) {
+ if (!intf) {
+ DLOGE("Invalid DisplayConfigIntf location");
+ return -EINVAL;
+ }
+
+ std::weak_ptr<DisplayConfig::ConfigCallback> wp_callback = callback;
+ DisplayConfigImpl *impl = new DisplayConfigImpl(wp_callback, this);
+ *intf = impl;
+
+ return 0;
+}
+
+void HWCSession::UnRegisterClientContext(DisplayConfig::ConfigInterface *intf) {
+ delete static_cast<DisplayConfigImpl *>(intf);
+}
+
+HWCSession::DisplayConfigImpl::DisplayConfigImpl(
+ std::weak_ptr<DisplayConfig::ConfigCallback> callback,
+ HWCSession *hwc_session) {
+ callback_ = callback;
+ hwc_session_ = hwc_session;
+}
+
+int HWCSession::DisplayConfigImpl::IsDisplayConnected(DispType dpy, bool *connected) {
+ int disp_id = MapDisplayType(dpy);
+ int disp_idx = hwc_session_->GetDisplayIndex(disp_id);
+
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", disp_id);
+ return -EINVAL;
+ } else {
+ SEQUENCE_WAIT_SCOPE_LOCK(hwc_session_->locker_[disp_idx]);
+ *connected = hwc_session_->hwc_display_[disp_idx];
+ }
+
+ return 0;
+}
+
+int HWCSession::SetDisplayStatus(int disp_id, HWCDisplay::DisplayStatus status) {
+ int disp_idx = GetDisplayIndex(disp_id);
+ int err = -EINVAL;
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", disp_id);
+ return -EINVAL;
+ }
+
+ if (disp_idx == qdutils::DISPLAY_PRIMARY) {
+ DLOGE("Not supported for this display");
+ return err;
+ }
+
+ {
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_idx]);
+ if (!hwc_display_[disp_idx]) {
+ DLOGW("Display is not connected");
+ return err;
+ }
+ DLOGI("Display = %d, Status = %d", disp_idx, status);
+ err = hwc_display_[disp_idx]->SetDisplayStatus(status);
+ if (err != 0) {
+ return err;
+ }
+ }
+
+ if (status == HWCDisplay::kDisplayStatusResume || status == HWCDisplay::kDisplayStatusPause) {
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (active_builtin_disp_id < HWCCallbacks::kNumDisplays) {
+ {
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[active_builtin_disp_id]);
+ hwc_display_[active_builtin_disp_id]->ResetValidation();
+ }
+ callbacks_.Refresh(active_builtin_disp_id);
+ }
+ }
+
+ return err;
+}
+
+int HWCSession::DisplayConfigImpl::SetDisplayStatus(DispType dpy,
+ DisplayConfig::ExternalStatus status) {
+ return hwc_session_->SetDisplayStatus(MapDisplayType(dpy), MapExternalStatus(status));
+}
+
+int HWCSession::DisplayConfigImpl::ConfigureDynRefreshRate(DisplayConfig::DynRefreshRateOp op,
+ uint32_t refresh_rate) {
+ SEQUENCE_WAIT_SCOPE_LOCK(hwc_session_->locker_[HWC_DISPLAY_PRIMARY]);
+ HWCDisplay *hwc_display = hwc_session_->hwc_display_[HWC_DISPLAY_PRIMARY];
+
+ if (!hwc_display) {
+ DLOGW("Display = %d is not connected.", HWC_DISPLAY_PRIMARY);
+ return -EINVAL;
+ }
+
+ switch (op) {
+ case DisplayConfig::DynRefreshRateOp::kDisableMetadata:
+ return hwc_display->Perform(HWCDisplayBuiltIn::SET_METADATA_DYN_REFRESH_RATE, false);
+
+ case DisplayConfig::DynRefreshRateOp::kEnableMetadata:
+ return hwc_display->Perform(HWCDisplayBuiltIn::SET_METADATA_DYN_REFRESH_RATE, true);
+
+ case DisplayConfig::DynRefreshRateOp::kSetBinder:
+ return hwc_display->Perform(HWCDisplayBuiltIn::SET_BINDER_DYN_REFRESH_RATE, refresh_rate);
+
+ default:
+ DLOGW("Invalid operation %d", op);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+int HWCSession::GetConfigCount(int disp_id, uint32_t *count) {
+ int disp_idx = GetDisplayIndex(disp_id);
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", disp_id);
+ return -EINVAL;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_idx]);
+
+ if (hwc_display_[disp_idx]) {
+ return hwc_display_[disp_idx]->GetDisplayConfigCount(count);
+ }
+
+ return -EINVAL;
+}
+
+int HWCSession::DisplayConfigImpl::GetConfigCount(DispType dpy, uint32_t *count) {
+ return hwc_session_->GetConfigCount(MapDisplayType(dpy), count);
+}
+
+int HWCSession::GetActiveConfigIndex(int disp_id, uint32_t *config) {
+ int disp_idx = GetDisplayIndex(disp_id);
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", disp_id);
+ return -EINVAL;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_idx]);
+
+ if (hwc_display_[disp_idx]) {
+ return hwc_display_[disp_idx]->GetActiveDisplayConfig(config);
+ }
+
+ return -EINVAL;
+}
+
+int HWCSession::DisplayConfigImpl::GetActiveConfig(DispType dpy, uint32_t *config) {
+ return hwc_session_->GetActiveConfigIndex(MapDisplayType(dpy), config);
+}
+
+int HWCSession::SetActiveConfigIndex(int disp_id, uint32_t config) {
+ int disp_idx = GetDisplayIndex(disp_id);
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", disp_id);
+ return -EINVAL;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_idx]);
+ int error = -EINVAL;
+ if (hwc_display_[disp_idx]) {
+ error = hwc_display_[disp_idx]->SetActiveDisplayConfig(config);
+ if (!error) {
+ Refresh(0);
+ }
+ }
+
+ return error;
+}
+
+int HWCSession::DisplayConfigImpl::SetActiveConfig(DispType dpy, uint32_t config) {
+ return hwc_session_->SetActiveConfigIndex(MapDisplayType(dpy), config);
+}
+
+int HWCSession::DisplayConfigImpl::GetDisplayAttributes(uint32_t config_index, DispType dpy,
+ DisplayConfig::Attributes *attributes) {
+ int error = -EINVAL;
+
+ int disp_id = MapDisplayType(dpy);
+ int disp_idx = hwc_session_->GetDisplayIndex(disp_id);
+
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", disp_id);
+ } else {
+ SEQUENCE_WAIT_SCOPE_LOCK(hwc_session_->locker_[disp_idx]);
+ if (hwc_session_->hwc_display_[disp_idx]) {
+ DisplayConfigVariableInfo var_info;
+ error = hwc_session_->hwc_display_[disp_idx]->GetDisplayAttributesForConfig(INT(config_index),
+ &var_info);
+ if (!error) {
+ attributes->vsync_period = var_info.vsync_period_ns;
+ attributes->x_res = var_info.x_pixels;
+ attributes->y_res = var_info.y_pixels;
+ attributes->x_dpi = var_info.x_dpi;
+ attributes->y_dpi = var_info.y_dpi;
+ attributes->panel_type = DisplayConfig::DisplayPortType::kDefault;
+ attributes->is_yuv = var_info.is_yuv;
+ }
+ }
+ }
+
+ return error;
+}
+
+int HWCSession::DisplayConfigImpl::SetPanelBrightness(uint32_t level) {
+ if (!(0 <= level && level <= 255)) {
+ return -EINVAL;
+ }
+
+ hwc2_device_t *device = static_cast<hwc2_device_t *>(hwc_session_);
+ if (level == 0) {
+ return INT32(hwc_session_->SetDisplayBrightness(device, HWC_DISPLAY_PRIMARY, -1.0f));
+ } else {
+ return INT32(hwc_session_->SetDisplayBrightness(device, HWC_DISPLAY_PRIMARY,
+ (level - 1)/254.0f));
+ }
+}
+
+int HWCSession::DisplayConfigImpl::GetPanelBrightness(uint32_t *level) {
+ float brightness = -1.0f;
+ int32_t error = -EINVAL;
+
+ error = hwc_session_->getDisplayBrightness(HWC_DISPLAY_PRIMARY, &brightness);
+ if (brightness == -1.0f) {
+ *level = 0;
+ } else {
+ *level = static_cast<uint32_t>(254.0f*brightness + 1);
+ }
+
+ return error;
+}
+
+int HWCSession::MinHdcpEncryptionLevelChanged(int disp_id, uint32_t min_enc_level) {
+ DLOGI("Display %d", disp_id);
+
+ int disp_idx = GetDisplayIndex(disp_id);
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", disp_id);
+ return -EINVAL;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_idx]);
+ if (disp_idx != HWC_DISPLAY_EXTERNAL) {
+ DLOGE("Not supported for display");
+ } else if (!hwc_display_[disp_idx]) {
+ DLOGW("Display is not connected");
+ } else {
+ return hwc_display_[disp_idx]->OnMinHdcpEncryptionLevelChange(min_enc_level);
+ }
+
+ return -EINVAL;
+}
+
+int HWCSession::DisplayConfigImpl::MinHdcpEncryptionLevelChanged(DispType dpy,
+ uint32_t min_enc_level) {
+ return hwc_session_->MinHdcpEncryptionLevelChanged(MapDisplayType(dpy), min_enc_level);
+}
+
+int HWCSession::DisplayConfigImpl::RefreshScreen() {
+ SEQUENCE_WAIT_SCOPE_LOCK(hwc_session_->locker_[HWC_DISPLAY_PRIMARY]);
+ hwc_session_->Refresh(HWC_DISPLAY_PRIMARY);
+ return 0;
+}
+
+int HWCSession::ControlPartialUpdate(int disp_id, bool enable) {
+ int disp_idx = GetDisplayIndex(disp_id);
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", disp_id);
+ return -EINVAL;
+ }
+
+ if (disp_idx != HWC_DISPLAY_PRIMARY) {
+ DLOGW("CONTROL_PARTIAL_UPDATE is not applicable for display = %d", disp_idx);
+ return -EINVAL;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[disp_idx]);
+ HWCDisplay *hwc_display = hwc_display_[HWC_DISPLAY_PRIMARY];
+ if (!hwc_display) {
+ DLOGE("primary display object is not instantiated");
+ return -EINVAL;
+ }
+
+ uint32_t pending = 0;
+ DisplayError hwc_error = hwc_display->ControlPartialUpdate(enable, &pending);
+
+ if (hwc_error == kErrorNone) {
+ if (!pending) {
+ return 0;
+ }
+ } else if (hwc_error == kErrorNotSupported) {
+ return 0;
+ } else {
+ return -EINVAL;
+ }
+
+ // Todo(user): Unlock it before sending events to client. It may cause deadlocks in future.
+ Refresh(HWC_DISPLAY_PRIMARY);
+
+ // Wait until partial update control is complete
+ int error = locker_[disp_idx].WaitFinite(kCommitDoneTimeoutMs);
+
+ return error;
+}
+
+int HWCSession::DisplayConfigImpl::ControlPartialUpdate(DispType dpy, bool enable) {
+ return hwc_session_->ControlPartialUpdate(MapDisplayType(dpy), enable);
+}
+
+int HWCSession::ToggleScreenUpdate(bool on) {
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[HWC_DISPLAY_PRIMARY]);
+
+ int32_t error = -EINVAL;
+ if (hwc_display_[HWC_DISPLAY_PRIMARY]) {
+ error = hwc_display_[HWC_DISPLAY_PRIMARY]->ToggleScreenUpdates(on);
+ if (error) {
+ DLOGE("Failed to toggle screen updates = %d. Error = %d", on, error);
+ }
+ }
+
+ return error;
+}
+
+int HWCSession::DisplayConfigImpl::ToggleScreenUpdate(bool on) {
+ return hwc_session_->ToggleScreenUpdate(on);
+}
+
+int HWCSession::SetIdleTimeout(uint32_t value) {
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[HWC_DISPLAY_PRIMARY]);
+
+ if (hwc_display_[HWC_DISPLAY_PRIMARY]) {
+ hwc_display_[HWC_DISPLAY_PRIMARY]->SetIdleTimeoutMs(value);
+ return 0;
+ }
+
+ DLOGW("Display = %d is not connected.", HWC_DISPLAY_PRIMARY);
+ return -ENODEV;
+}
+
+int HWCSession::DisplayConfigImpl::SetIdleTimeout(uint32_t value) {
+ return hwc_session_->SetIdleTimeout(value);
+}
+
+int HWCSession::DisplayConfigImpl::GetHDRCapabilities(DispType dpy,
+ DisplayConfig::HDRCapsParams *caps) {
+ int error = -EINVAL;
+
+ do {
+ int disp_id = MapDisplayType(dpy);
+ int disp_idx = hwc_session_->GetDisplayIndex(disp_id);
+ if (disp_idx == -1) {
+ DLOGE("Invalid display = %d", disp_id);
+ break;
+ }
+
+ SCOPE_LOCK(hwc_session_->locker_[disp_id]);
+ HWCDisplay *hwc_display = hwc_session_->hwc_display_[disp_idx];
+ if (!hwc_display) {
+ DLOGW("Display = %d is not connected.", disp_idx);
+ error = -ENODEV;
+ break;
+ }
+
+ // query number of hdr types
+ uint32_t out_num_types = 0;
+ float out_max_luminance = 0.0f;
+ float out_max_average_luminance = 0.0f;
+ float out_min_luminance = 0.0f;
+ if (hwc_display->GetHdrCapabilities(&out_num_types, nullptr, &out_max_luminance,
+ &out_max_average_luminance, &out_min_luminance)
+ != HWC2::Error::None) {
+ break;
+ }
+ if (!out_num_types) {
+ error = 0;
+ break;
+ }
+
+ // query hdr caps
+ caps->supported_hdr_types.resize(out_num_types);
+
+ if (hwc_display->GetHdrCapabilities(&out_num_types, caps->supported_hdr_types.data(),
+ &out_max_luminance, &out_max_average_luminance,
+ &out_min_luminance) == HWC2::Error::None) {
+ error = 0;
+ }
+ } while (false);
+
+ return error;
+}
+
+int HWCSession::SetCameraLaunchStatus(uint32_t on) {
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (active_builtin_disp_id >= HWCCallbacks::kNumDisplays) {
+ DLOGE("No active displays");
+ return -EINVAL;
+ }
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[active_builtin_disp_id]);
+
+ if (null_display_mode_) {
+ return 0;
+ }
+
+ if (!core_intf_) {
+ DLOGW("core_intf_ not initialized.");
+ return -ENOENT;
+ }
+
+ if (!hwc_display_[active_builtin_disp_id]) {
+ DLOGW("Display = %d is not connected.", active_builtin_disp_id);
+ return -ENODEV;
+ }
+
+ HWBwModes mode = on > 0 ? kBwCamera : kBwDefault;
+
+ // trigger invalidate to apply new bw caps.
+ Refresh(active_builtin_disp_id);
+
+ if (core_intf_->SetMaxBandwidthMode(mode) != kErrorNone) {
+ return -EINVAL;
+ }
+
+ new_bw_mode_ = true;
+ need_invalidate_ = true;
+ hwc_display_[active_builtin_disp_id]->ResetValidation();
+
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::SetCameraLaunchStatus(uint32_t on) {
+ return hwc_session_->SetCameraLaunchStatus(on);
+}
+
+int HWCSession::DisplayBWTransactionPending(bool *status) {
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[HWC_DISPLAY_PRIMARY]);
+
+ if (hwc_display_[HWC_DISPLAY_PRIMARY]) {
+ if (sync_wait(bw_mode_release_fd_, 0) < 0) {
+ DLOGI("bw_transaction_release_fd is not yet signaled: err= %s", strerror(errno));
+ *status = false;
+ }
+
+ return 0;
+ }
+
+ DLOGW("Display = %d is not connected.", HWC_DISPLAY_PRIMARY);
+ return -ENODEV;
+}
+
+int HWCSession::DisplayConfigImpl::DisplayBWTransactionPending(bool *status) {
+ return hwc_session_->DisplayBWTransactionPending(status);
+}
+
+int HWCSession::DisplayConfigImpl::SetDisplayAnimating(uint64_t display_id, bool animating) {
+ return hwc_session_->CallDisplayFunction(static_cast<hwc2_device_t *>(hwc_session_), display_id,
+ &HWCDisplay::SetDisplayAnimating, animating);
+}
+
+int HWCSession::ControlIdlePowerCollapse(bool enable, bool synchronous) {
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (active_builtin_disp_id >= HWCCallbacks::kNumDisplays) {
+ DLOGE("No active displays");
+ return -EINVAL;
+ }
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[active_builtin_disp_id]);
+
+ if (hwc_display_[active_builtin_disp_id]) {
+ if (!enable) {
+ if (!idle_pc_ref_cnt_) {
+ auto err = hwc_display_[active_builtin_disp_id]->ControlIdlePowerCollapse(enable,
+ synchronous);
+ if (err != kErrorNone) {
+ return (err == kErrorNotSupported) ? 0 : -EINVAL;
+ }
+ Refresh(active_builtin_disp_id);
+ int error = locker_[active_builtin_disp_id].WaitFinite(kCommitDoneTimeoutMs);
+ if (error == ETIMEDOUT) {
+ DLOGE("Timed out!! Next frame commit done event not received!!");
+ return error;
+ }
+ DLOGI("Idle PC disabled!!");
+ }
+ idle_pc_ref_cnt_++;
+ } else if (idle_pc_ref_cnt_ > 0) {
+ if (!(idle_pc_ref_cnt_ - 1)) {
+ auto err = hwc_display_[active_builtin_disp_id]->ControlIdlePowerCollapse(enable,
+ synchronous);
+ if (err != kErrorNone) {
+ return (err == kErrorNotSupported) ? 0 : -EINVAL;
+ }
+ DLOGI("Idle PC enabled!!");
+ }
+ idle_pc_ref_cnt_--;
+ }
+ return 0;
+ }
+
+ DLOGW("Display = %d is not connected.", active_builtin_disp_id);
+ return -ENODEV;
+}
+
+int HWCSession::DisplayConfigImpl::ControlIdlePowerCollapse(bool enable, bool synchronous) {
+ return hwc_session_->ControlIdlePowerCollapse(enable, synchronous);
+}
+
+int HWCSession::IsWbUbwcSupported(bool *value) {
+ HWDisplaysInfo hw_displays_info = {};
+ DisplayError error = core_intf_->GetDisplaysStatus(&hw_displays_info);
+ if (error != kErrorNone) {
+ return -EINVAL;
+ }
+
+ for (auto &iter : hw_displays_info) {
+ auto &info = iter.second;
+ if (info.display_type == kVirtual && info.is_wb_ubwc_supported) {
+ *value = 1;
+ }
+ }
+
+ return error;
+}
+
+int HWCSession::DisplayConfigImpl::GetWriteBackCapabilities(bool *isWbUbwcSupported) {
+ return hwc_session_->IsWbUbwcSupported(isWbUbwcSupported);
+}
+
+int HWCSession::SetDisplayDppsAdROI(uint32_t display_id, uint32_t h_start,
+ uint32_t h_end, uint32_t v_start, uint32_t v_end,
+ uint32_t factor_in, uint32_t factor_out) {
+ return CallDisplayFunction(static_cast<hwc2_device_t *>(this), display_id,
+ &HWCDisplay::SetDisplayDppsAdROI, h_start, h_end, v_start, v_end,
+ factor_in, factor_out);
+}
+
+int HWCSession::DisplayConfigImpl::SetDisplayDppsAdROI(uint32_t display_id, uint32_t h_start,
+ uint32_t h_end, uint32_t v_start,
+ uint32_t v_end, uint32_t factor_in,
+ uint32_t factor_out) {
+ return hwc_session_->SetDisplayDppsAdROI(display_id, h_start, h_end, v_start, v_end,
+ factor_in, factor_out);
+}
+
+int HWCSession::DisplayConfigImpl::UpdateVSyncSourceOnPowerModeOff() {
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::UpdateVSyncSourceOnPowerModeDoze() {
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::IsPowerModeOverrideSupported(uint32_t disp_id,
+ bool *supported) {
+ if (!hwc_session_->async_powermode_ || (disp_id > HWCCallbacks::kNumRealDisplays)) {
+ *supported = false;
+ } else {
+ *supported = true;
+ }
+
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::SetPowerMode(uint32_t disp_id,
+ DisplayConfig::PowerMode power_mode) {
+ SCOPE_LOCK(hwc_session_->display_config_locker_);
+
+ bool supported = false;
+ IsPowerModeOverrideSupported(disp_id, &supported);
+ if (!supported) {
+ return 0;
+ }
+
+ DLOGI("disp_id: %d power_mode: %d", disp_id, power_mode);
+ HWCDisplay::HWCLayerStack stack = {};
+ hwc2_display_t dummy_disp_id = hwc_session_->map_hwc_display_.at(disp_id);
+
+ {
+ // Power state transition start.
+ Locker::ScopeLock lock_power(hwc_session_->power_state_[disp_id]);
+ Locker::ScopeLock lock_primary(hwc_session_->locker_[disp_id]);
+ Locker::ScopeLock lock_dummy(hwc_session_->locker_[dummy_disp_id]);
+
+ hwc_session_->power_state_transition_[disp_id] = true;
+ // Pass on the complete stack to dummy display.
+ hwc_session_->hwc_display_[disp_id]->GetLayerStack(&stack);
+ // Update the same stack onto dummy display.
+ hwc_session_->hwc_display_[dummy_disp_id]->SetLayerStack(&stack);
+ }
+
+ {
+ SCOPE_LOCK(hwc_session_->locker_[disp_id]);
+ auto mode = static_cast<HWC2::PowerMode>(power_mode);
+ hwc_session_->hwc_display_[disp_id]->SetPowerMode(mode, false /* teardown */);
+ }
+
+ {
+ // Power state transition end.
+ Locker::ScopeLock lock_power(hwc_session_->power_state_[disp_id]);
+ Locker::ScopeLock lock_primary(hwc_session_->locker_[disp_id]);
+ Locker::ScopeLock lock_dummy(hwc_session_->locker_[dummy_disp_id]);
+ // Pass on the layer stack to real display.
+ hwc_session_->hwc_display_[dummy_disp_id]->GetLayerStack(&stack);
+ // Update the same stack onto real display.
+ hwc_session_->hwc_display_[disp_id]->SetLayerStack(&stack);
+ // Read display has got layerstack. Update the fences.
+ hwc_session_->hwc_display_[disp_id]->PostPowerMode();
+
+ hwc_session_->power_state_transition_[disp_id] = false;
+ }
+
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::IsHDRSupported(uint32_t disp_id, bool *supported) {
+ if (disp_id < 0 || disp_id >= HWCCallbacks::kNumDisplays) {
+ DLOGE("Not valid display");
+ return -EINVAL;
+ }
+ SCOPE_LOCK(hwc_session_->locker_[disp_id]);
+
+ if (hwc_session_->is_hdr_display_.size() <= disp_id) {
+ DLOGW("is_hdr_display_ is not initialized for display %d!! Reporting it as HDR not supported",
+ disp_id);
+ *supported = false;
+ return 0;
+ }
+
+ *supported = static_cast<bool>(hwc_session_->is_hdr_display_[disp_id]);
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::IsWCGSupported(uint32_t disp_id, bool *supported) {
+ // todo(user): Query wcg from sdm. For now assume them same.
+ return IsHDRSupported(disp_id, supported);
+}
+
+int HWCSession::DisplayConfigImpl::SetLayerAsMask(uint32_t disp_id, uint64_t layer_id) {
+ SCOPE_LOCK(hwc_session_->locker_[disp_id]);
+ HWCDisplay *hwc_display = hwc_session_->hwc_display_[disp_id];
+ if (!hwc_display) {
+ DLOGW("Display = %d is not connected.", disp_id);
+ return -EINVAL;
+ }
+
+ if (hwc_session_->disable_mask_layer_hint_) {
+ DLOGW("Mask layer hint is disabled!");
+ return -EINVAL;
+ }
+
+ auto hwc_layer = hwc_display->GetHWCLayer(layer_id);
+ if (hwc_layer == nullptr) {
+ return -EINVAL;
+ }
+
+ hwc_layer->SetLayerAsMask();
+
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::GetDebugProperty(const std::string prop_name,
+ std::string *value) {
+ std::string vendor_prop_name = DISP_PROP_PREFIX;
+ int error = -EINVAL;
+ char val[64] = {};
+
+ vendor_prop_name += prop_name.c_str();
+ if (HWCDebugHandler::Get()->GetProperty(vendor_prop_name.c_str(), val) == kErrorNone) {
+ *value = val;
+ error = 0;
+ }
+
+ return error;
+}
+
+int HWCSession::DisplayConfigImpl::GetActiveBuiltinDisplayAttributes(
+ DisplayConfig::Attributes *attr) {
+ int error = -EINVAL;
+ hwc2_display_t disp_id = hwc_session_->GetActiveBuiltinDisplay();
+
+ if (disp_id >= HWCCallbacks::kNumDisplays) {
+ DLOGE("Invalid display = %d", disp_id);
+ } else {
+ if (hwc_session_->hwc_display_[disp_id]) {
+ uint32_t config_index = 0;
+ HWC2::Error ret = hwc_session_->hwc_display_[disp_id]->GetActiveConfig(&config_index);
+ if (ret != HWC2::Error::None) {
+ goto err;
+ }
+ DisplayConfigVariableInfo var_info;
+ error = hwc_session_->hwc_display_[disp_id]->GetDisplayAttributesForConfig(INT(config_index),
+ &var_info);
+ if (!error) {
+ attr->vsync_period = var_info.vsync_period_ns;
+ attr->x_res = var_info.x_pixels;
+ attr->y_res = var_info.y_pixels;
+ attr->x_dpi = var_info.x_dpi;
+ attr->y_dpi = var_info.y_dpi;
+ attr->panel_type = DisplayConfig::DisplayPortType::kDefault;
+ attr->is_yuv = var_info.is_yuv;
+ }
+ }
+ }
+
+err:
+ return error;
+}
+
+int HWCSession::DisplayConfigImpl::SetPanelLuminanceAttributes(uint32_t disp_id, float pan_min_lum,
+ float pan_max_lum) {
+ // currently doing only for virtual display
+ if (disp_id != qdutils::DISPLAY_VIRTUAL) {
+ return -EINVAL;
+ }
+
+ std::lock_guard<std::mutex> obj(hwc_session_->mutex_lum_);
+ hwc_session_->set_min_lum_ = pan_min_lum;
+ hwc_session_->set_max_lum_ = pan_max_lum;
+ DLOGI("set max_lum %f, min_lum %f", pan_max_lum, pan_min_lum);
+
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::IsBuiltInDisplay(uint32_t disp_id, bool *is_builtin) {
+ if ((hwc_session_->map_info_primary_.client_id == disp_id) &&
+ (hwc_session_->map_info_primary_.disp_type == kBuiltIn)) {
+ *is_builtin = true;
+ return 0;
+ }
+
+ for (auto &info : hwc_session_->map_info_builtin_) {
+ if (disp_id == info.client_id) {
+ *is_builtin = true;
+ return 0;
+ }
+ }
+
+ *is_builtin = false;
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::GetSupportedDSIBitClks(uint32_t disp_id,
+ std::vector<uint64_t> *bit_clks) {
+ SCOPE_LOCK(hwc_session_->locker_[disp_id]);
+ if (!hwc_session_->hwc_display_[disp_id]) {
+ return -EINVAL;
+ }
+
+ hwc_session_->hwc_display_[disp_id]->GetSupportedDSIClock(bit_clks);
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::GetDSIClk(uint32_t disp_id, uint64_t *bit_clk) {
+ SCOPE_LOCK(hwc_session_->locker_[disp_id]);
+ if (!hwc_session_->hwc_display_[disp_id]) {
+ return -EINVAL;
+ }
+
+ hwc_session_->hwc_display_[disp_id]->GetDynamicDSIClock(bit_clk);
+
+ return 0;
+}
+
+int HWCSession::DisplayConfigImpl::SetDSIClk(uint32_t disp_id, uint64_t bit_clk) {
+ SCOPE_LOCK(hwc_session_->locker_[disp_id]);
+ if (!hwc_session_->hwc_display_[disp_id]) {
+ return -1;
+ }
+
+ return hwc_session_->hwc_display_[disp_id]->SetDynamicDSIClock(bit_clk);
+}
+
+int HWCSession::DisplayConfigImpl::SetCWBOutputBuffer(uint32_t disp_id,
+ const DisplayConfig::Rect rect,
+ bool post_processed,
+ const native_handle_t *buffer) {
+ return -1;
+}
+
+bool HWCSession::isSmartPanelConfig(uint32_t disp_id, uint32_t config_id) {
+ if (disp_id != qdutils::DISPLAY_PRIMARY) {
+ return false;
+ }
+
+ SCOPE_LOCK(locker_[disp_id]);
+ if (!hwc_display_[disp_id]) {
+ DLOGE("Display %d is not created yet.", disp_id);
+ return false;
+ }
+
+ return hwc_display_[disp_id]->IsSmartPanelConfig(config_id);
+}
+
+int HWCSession::DisplayConfigImpl::SetQsyncMode(uint32_t disp_id, DisplayConfig::QsyncMode mode) {
+ SEQUENCE_WAIT_SCOPE_LOCK(hwc_session_->locker_[disp_id]);
+ if (!hwc_session_->hwc_display_[disp_id]) {
+ return -1;
+ }
+
+ QSyncMode qsync_mode = kQSyncModeNone;
+ switch (mode) {
+ case DisplayConfig::QsyncMode::kNone:
+ qsync_mode = kQSyncModeNone;
+ break;
+ case DisplayConfig::QsyncMode::kWaitForFencesOneFrame:
+ qsync_mode = kQsyncModeOneShot;
+ break;
+ case DisplayConfig::QsyncMode::kWaitForFencesEachFrame:
+ qsync_mode = kQsyncModeOneShotContinuous;
+ break;
+ case DisplayConfig::QsyncMode::kWaitForCommitEachFrame:
+ qsync_mode = kQSyncModeContinuous;
+ break;
+ }
+
+ hwc_session_->hwc_display_[disp_id]->SetQSyncMode(qsync_mode);
+ return 0;
+}
+
+int32_t HWCSession::getDisplayBrightness(uint32_t display, float *brightness) {
+ if (!brightness) {
+ return HWC2_ERROR_BAD_PARAMETER;
+ }
+
+ if (display >= HWCCallbacks::kNumDisplays) {
+ return HWC2_ERROR_BAD_DISPLAY;
+ }
+
+ SEQUENCE_WAIT_SCOPE_LOCK(locker_[display]);
+ int32_t error = -EINVAL;
+ *brightness = -1.0f;
+
+ HWCDisplay *hwc_display = hwc_display_[display];
+ if (hwc_display && hwc_display_[display]->GetDisplayClass() == DISPLAY_CLASS_BUILTIN) {
+ error = INT32(hwc_display_[display]->GetPanelBrightness(brightness));
+ if (error) {
+ DLOGE("Failed to get the panel brightness. Error = %d", error);
+ }
+ }
+
+ return error;
+}
+
+int32_t HWCSession::setDisplayBrightness(uint32_t display, float brightness) {
+ return SetDisplayBrightness(static_cast<hwc2_device_t *>(this),
+ static_cast<hwc2_display_t>(display), brightness);
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_socket_handler.cpp b/sdm/libs/hwc2/hwc_socket_handler.cpp
new file mode 100644
index 0000000..7ebaab4
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_socket_handler.cpp
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <cutils/sockets.h>
+#include "hwc_socket_handler.h"
+
+#define __CLASS__ "HWCSocketHandler"
+
+#define DPPS_SOCKET "pps"
+
+namespace sdm {
+
+int HWCSocketHandler::GetSocketFd(SocketType socket_type) {
+ switch (socket_type) {
+ case kDpps:
+ return socket_local_client(DPPS_SOCKET, ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM);
+ default:
+ return -1;
+ }
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_socket_handler.h b/sdm/libs/hwc2/hwc_socket_handler.h
new file mode 100644
index 0000000..5b2292a
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_socket_handler.h
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+
+#ifndef __HWC_SOCKET_HANDLER_H__
+#define __HWC_SOCKET_HANDLER_H__
+
+#include <core/socket_handler.h>
+
+namespace sdm {
+
+class HWCSocketHandler : public SocketHandler {
+ public:
+ HWCSocketHandler() { }
+
+ virtual int GetSocketFd(SocketType socket_type);
+};
+
+} // namespace sdm
+
+#endif // __HWC_SOCKET_HANDLER_H__
diff --git a/sdm/libs/hwc2/hwc_tonemapper.cpp b/sdm/libs/hwc2/hwc_tonemapper.cpp
new file mode 100644
index 0000000..d417258
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_tonemapper.cpp
@@ -0,0 +1,388 @@
+/*
+* Copyright (c) 2016 - 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <gralloc_priv.h>
+#include <sync/sync.h>
+
+#include <TonemapFactory.h>
+
+#include <core/buffer_allocator.h>
+
+#include <utils/constants.h>
+#include <utils/debug.h>
+#include <utils/formats.h>
+#include <utils/rect.h>
+#include <utils/utils.h>
+
+#include <vector>
+
+#include "hwc_debugger.h"
+#include "hwc_tonemapper.h"
+
+#define __CLASS__ "HWCToneMapper"
+
+namespace sdm {
+
+ToneMapSession::ToneMapSession(HWCBufferAllocator *buffer_allocator)
+ : tone_map_task_(*this), buffer_allocator_(buffer_allocator) {
+ buffer_info_.resize(kNumIntermediateBuffers);
+}
+
+ToneMapSession::~ToneMapSession() {
+ tone_map_task_.PerformTask(ToneMapTaskCode::kCodeDestroy, nullptr);
+ FreeIntermediateBuffers();
+ buffer_info_.clear();
+}
+
+void ToneMapSession::OnTask(const ToneMapTaskCode &task_code,
+ SyncTask<ToneMapTaskCode>::TaskContext *task_context) {
+ switch (task_code) {
+ case ToneMapTaskCode::kCodeGetInstance: {
+ ToneMapGetInstanceContext *ctx = static_cast<ToneMapGetInstanceContext *>(task_context);
+ Lut3d &lut_3d = ctx->layer->lut_3d;
+ Color10Bit *grid_entries = NULL;
+ int grid_size = 0;
+ if (lut_3d.validGridEntries) {
+ grid_entries = lut_3d.gridEntries;
+ grid_size = INT(lut_3d.gridSize);
+ }
+ gpu_tone_mapper_ = TonemapperFactory_GetInstance(tone_map_config_.type,
+ lut_3d.lutEntries, lut_3d.dim,
+ grid_entries, grid_size,
+ tone_map_config_.secure);
+ }
+ break;
+
+ case ToneMapTaskCode::kCodeBlit: {
+ ToneMapBlitContext *ctx = static_cast<ToneMapBlitContext *>(task_context);
+ uint8_t buffer_index = current_buffer_index_;
+ const void *dst_hnd = reinterpret_cast<const void *>
+ (buffer_info_[buffer_index].private_data);
+ const void *src_hnd = reinterpret_cast<const void *>
+ (ctx->layer->input_buffer.buffer_id);
+ ctx->fence_fd = gpu_tone_mapper_->blit(dst_hnd, src_hnd, ctx->merged_fd);
+ }
+ break;
+
+ case ToneMapTaskCode::kCodeDestroy: {
+ delete gpu_tone_mapper_;
+ }
+ break;
+
+ default:
+ break;
+ }
+}
+
+DisplayError ToneMapSession::AllocateIntermediateBuffers(const Layer *layer) {
+ DisplayError error = kErrorNone;
+ for (uint8_t i = 0; i < kNumIntermediateBuffers; i++) {
+ BufferInfo &buffer_info = buffer_info_[i];
+ buffer_info.buffer_config.width = layer->request.width;
+ buffer_info.buffer_config.height = layer->request.height;
+ buffer_info.buffer_config.format = layer->request.format;
+ buffer_info.buffer_config.secure = layer->request.flags.secure;
+ buffer_info.buffer_config.gfx_client = true;
+ error = buffer_allocator_->AllocateBuffer(&buffer_info);
+ if (error != kErrorNone) {
+ FreeIntermediateBuffers();
+ return error;
+ }
+ }
+
+ return kErrorNone;
+}
+
+void ToneMapSession::FreeIntermediateBuffers() {
+ for (uint8_t i = 0; i < kNumIntermediateBuffers; i++) {
+ // Free the valid fence
+ if (release_fence_fd_[i] >= 0) {
+ CloseFd(&release_fence_fd_[i]);
+ }
+ BufferInfo &buffer_info = buffer_info_[i];
+ if (buffer_info.private_data) {
+ buffer_allocator_->FreeBuffer(&buffer_info);
+ }
+ }
+}
+
+void ToneMapSession::UpdateBuffer(int acquire_fence, LayerBuffer *buffer) {
+ // Acquire fence will be closed by HWC Display.
+ // Fence returned by GPU will be closed in PostCommit.
+ buffer->acquire_fence_fd = acquire_fence;
+ buffer->size = buffer_info_[current_buffer_index_].alloc_buffer_info.size;
+ buffer->planes[0].fd = buffer_info_[current_buffer_index_].alloc_buffer_info.fd;
+ buffer->handle_id = buffer_info_[current_buffer_index_].alloc_buffer_info.id;
+}
+
+void ToneMapSession::SetReleaseFence(int fd) {
+ CloseFd(&release_fence_fd_[current_buffer_index_]);
+ // Used to give to GPU tonemapper along with input layer fd
+ release_fence_fd_[current_buffer_index_] = dup(fd);
+}
+
+void ToneMapSession::SetToneMapConfig(Layer *layer, PrimariesTransfer blend_cs) {
+ // HDR -> SDR is FORWARD and SDR - > HDR is INVERSE
+ tone_map_config_.type = layer->input_buffer.flags.hdr ? TONEMAP_FORWARD : TONEMAP_INVERSE;
+ tone_map_config_.blend_cs = blend_cs;
+ tone_map_config_.transfer = layer->input_buffer.color_metadata.transfer;
+ tone_map_config_.secure = layer->request.flags.secure;
+ tone_map_config_.format = layer->request.format;
+}
+
+bool ToneMapSession::IsSameToneMapConfig(Layer *layer, PrimariesTransfer blend_cs) {
+ LayerBuffer& buffer = layer->input_buffer;
+ private_handle_t *handle = static_cast<private_handle_t *>(buffer_info_[0].private_data);
+ int tonemap_type = buffer.flags.hdr ? TONEMAP_FORWARD : TONEMAP_INVERSE;
+
+ return ((tonemap_type == tone_map_config_.type) &&
+ (blend_cs == tone_map_config_.blend_cs) &&
+ (buffer.color_metadata.transfer == tone_map_config_.transfer) &&
+ (layer->request.flags.secure == tone_map_config_.secure) &&
+ (layer->request.format == tone_map_config_.format) &&
+ (layer->request.width == UINT32(handle->unaligned_width)) &&
+ (layer->request.height == UINT32(handle->unaligned_height)));
+}
+
+int HWCToneMapper::HandleToneMap(LayerStack *layer_stack) {
+ uint32_t gpu_count = 0;
+ DisplayError error = kErrorNone;
+
+ for (uint32_t i = 0; i < layer_stack->layers.size(); i++) {
+ uint32_t session_index = 0;
+ Layer *layer = layer_stack->layers.at(i);
+ if (layer->composition == kCompositionGPU) {
+ gpu_count++;
+ }
+
+ if (layer->request.flags.tone_map) {
+ DLOGV_IF(kTagClient, "Tonemapping for layer at index %d", i);
+ switch (layer->composition) {
+ case kCompositionGPUTarget:
+ if (!gpu_count) {
+ // When all layers are on FrameBuffer and if they do not update in the next draw cycle,
+ // then SDM marks them for SDE Composition because the cached FB layer gets displayed.
+ // GPU count will be 0 in this case. Try to use the existing tone-mapped frame buffer.
+ // No ToneMap/Blit is required. Just update the buffer & acquire fence fd of FB layer.
+ if (!tone_map_sessions_.empty() && (fb_session_index_ >= 0)) {
+ ToneMapSession *fb_tone_map_session = tone_map_sessions_.at(UINT32(fb_session_index_));
+ fb_tone_map_session->UpdateBuffer(-1 /* acquire_fence */, &layer->input_buffer);
+ fb_tone_map_session->layer_index_ = INT(i);
+ fb_tone_map_session->acquired_ = true;
+ return 0;
+ }
+ }
+ error = AcquireToneMapSession(layer, &session_index, layer_stack->blend_cs);
+ fb_session_index_ = INT(session_index);
+ break;
+ default:
+ error = AcquireToneMapSession(layer, &session_index, layer_stack->blend_cs);
+ break;
+ }
+
+ if (error != kErrorNone) {
+ Terminate();
+ return -1;
+ }
+
+ ToneMapSession *session = tone_map_sessions_.at(session_index);
+ ToneMap(layer, session);
+ DLOGI_IF(kTagClient, "Layer %d associated with session index %d", i, session_index);
+ session->layer_index_ = INT(i);
+ }
+ }
+
+ return 0;
+}
+
+void HWCToneMapper::ToneMap(Layer* layer, ToneMapSession *session) {
+ ToneMapBlitContext ctx = {};
+ ctx.layer = layer;
+
+ uint8_t buffer_index = session->current_buffer_index_;
+ int &release_fence_fd = session->release_fence_fd_[buffer_index];
+
+ // use and close the layer->input_buffer acquire fence fd.
+ int acquire_fd = layer->input_buffer.acquire_fence_fd;
+ buffer_sync_handler_.SyncMerge(release_fence_fd, acquire_fd, &ctx.merged_fd);
+
+ if (acquire_fd >= 0) {
+ CloseFd(&acquire_fd);
+ }
+
+ if (release_fence_fd >= 0) {
+ CloseFd(&release_fence_fd);
+ }
+
+ DTRACE_BEGIN("GPU_TM_BLIT");
+ session->tone_map_task_.PerformTask(ToneMapTaskCode::kCodeBlit, &ctx);
+ DTRACE_END();
+
+ DumpToneMapOutput(session, &ctx.fence_fd);
+ session->UpdateBuffer(ctx.fence_fd, &layer->input_buffer);
+}
+
+void HWCToneMapper::PostCommit(LayerStack *layer_stack) {
+ auto it = tone_map_sessions_.begin();
+ while (it != tone_map_sessions_.end()) {
+ uint32_t session_index = UINT32(std::distance(tone_map_sessions_.begin(), it));
+ ToneMapSession *session = tone_map_sessions_.at(session_index);
+ if (session->acquired_) {
+ Layer *layer = layer_stack->layers.at(UINT32(session->layer_index_));
+ // Close the fd returned by GPU ToneMapper and set release fence.
+ LayerBuffer &layer_buffer = layer->input_buffer;
+ CloseFd(&layer_buffer.acquire_fence_fd);
+ session->SetReleaseFence(layer_buffer.release_fence_fd);
+ session->acquired_ = false;
+ it++;
+ } else {
+ DLOGI_IF(kTagClient, "Tone map session %d closed.", session_index);
+ delete session;
+ it = tone_map_sessions_.erase(it);
+ int deleted_session = INT(session_index);
+ // If FB tonemap session gets deleted, reset fb_session_index_, else update it.
+ if (deleted_session == fb_session_index_) {
+ fb_session_index_ = -1;
+ } else if (deleted_session < fb_session_index_) {
+ fb_session_index_--;
+ }
+ }
+ }
+}
+
+void HWCToneMapper::Terminate() {
+ if (tone_map_sessions_.size()) {
+ while (!tone_map_sessions_.empty()) {
+ delete tone_map_sessions_.back();
+ tone_map_sessions_.pop_back();
+ }
+ fb_session_index_ = -1;
+ }
+}
+
+void HWCToneMapper::SetFrameDumpConfig(uint32_t count) {
+ DLOGI("Dump FrameConfig count = %d", count);
+ dump_frame_count_ = count;
+ dump_frame_index_ = 0;
+}
+
+void HWCToneMapper::DumpToneMapOutput(ToneMapSession *session, int *acquire_fd) {
+ DisplayError error = kErrorNone;
+ if (!dump_frame_count_) {
+ return;
+ }
+
+ BufferInfo &buffer_info = session->buffer_info_[session->current_buffer_index_];
+ private_handle_t *target_buffer = static_cast<private_handle_t *>(buffer_info.private_data);
+
+ if (*acquire_fd >= 0) {
+ int error = sync_wait(*acquire_fd, 1000);
+ if (error < 0) {
+ DLOGW("sync_wait error errno = %d, desc = %s", errno, strerror(errno));
+ return;
+ }
+ }
+
+ error = buffer_allocator_->MapBuffer(target_buffer, *acquire_fd);
+ if (error != kErrorNone) {
+ DLOGE("MapBuffer failed, base addr = %x", target_buffer->base);
+ return;
+ }
+
+ size_t result = 0;
+ char dump_file_name[PATH_MAX];
+ snprintf(dump_file_name, sizeof(dump_file_name), "%s/frame_dump_primary"
+ "/tonemap_%dx%d_frame%d.raw", HWCDebugHandler::DumpDir(), target_buffer->width,
+ target_buffer->height, dump_frame_index_);
+
+ FILE* fp = fopen(dump_file_name, "w+");
+ if (fp) {
+ DLOGI("base addr = %x", target_buffer->base);
+ result = fwrite(reinterpret_cast<void *>(target_buffer->base), target_buffer->size, 1, fp);
+ fclose(fp);
+ }
+ dump_frame_count_--;
+ dump_frame_index_++;
+ CloseFd(acquire_fd);
+}
+
+DisplayError HWCToneMapper::AcquireToneMapSession(Layer *layer, uint32_t *session_index,
+ PrimariesTransfer blend_cs) {
+ // When the property vendor.display.disable_hdr_lut_gen is set, the lutEntries and gridEntries in
+ // the Lut3d will be NULL, clients needs to allocate the memory and set correct 3D Lut
+ // for Tonemapping.
+ if (!layer->lut_3d.lutEntries || !layer->lut_3d.dim) {
+ // Atleast lutEntries must be valid for GPU Tonemapper.
+ DLOGE("Invalid Lut Entries or lut dimension = %d", layer->lut_3d.dim);
+ return kErrorParameters;
+ }
+
+ // Check if we can re-use an existing tone map session.
+ for (uint32_t i = 0; i < tone_map_sessions_.size(); i++) {
+ ToneMapSession *tonemap_session = tone_map_sessions_.at(i);
+ if (!tonemap_session->acquired_ && tonemap_session->IsSameToneMapConfig(layer, blend_cs)) {
+ tonemap_session->current_buffer_index_ = (tonemap_session->current_buffer_index_ + 1) %
+ ToneMapSession::kNumIntermediateBuffers;
+ tonemap_session->acquired_ = true;
+ *session_index = i;
+ return kErrorNone;
+ }
+ }
+
+ ToneMapSession *session = new ToneMapSession(buffer_allocator_);
+ if (!session) {
+ return kErrorMemory;
+ }
+
+ session->SetToneMapConfig(layer, blend_cs);
+
+ ToneMapGetInstanceContext ctx;
+ ctx.layer = layer;
+ session->tone_map_task_.PerformTask(ToneMapTaskCode::kCodeGetInstance, &ctx);
+
+ if (session->gpu_tone_mapper_ == NULL) {
+ DLOGE("Get Tonemapper failed!");
+ delete session;
+ return kErrorNotSupported;
+ }
+ DisplayError error = session->AllocateIntermediateBuffers(layer);
+ if (error != kErrorNone) {
+ DLOGE("Allocation of Intermediate Buffers failed!");
+ delete session;
+ return error;
+ }
+
+ session->acquired_ = true;
+ tone_map_sessions_.push_back(session);
+ *session_index = UINT32(tone_map_sessions_.size() - 1);
+
+ return kErrorNone;
+}
+
+} // namespace sdm
diff --git a/sdm/libs/hwc2/hwc_tonemapper.h b/sdm/libs/hwc2/hwc_tonemapper.h
new file mode 100644
index 0000000..bc564eb
--- /dev/null
+++ b/sdm/libs/hwc2/hwc_tonemapper.h
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2016 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#ifndef __HWC_TONEMAPPER_H__
+#define __HWC_TONEMAPPER_H__
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#include <hardware/hwcomposer.h>
+
+#include <core/layer_stack.h>
+#include <utils/sys.h>
+#include <utils/sync_task.h>
+#include <vector>
+#include "hwc_buffer_sync_handler.h"
+#include "hwc_buffer_allocator.h"
+
+class Tonemapper;
+
+namespace sdm {
+
+enum class ToneMapTaskCode : int32_t {
+ kCodeGetInstance,
+ kCodeBlit,
+ kCodeDestroy,
+};
+
+struct ToneMapGetInstanceContext : public SyncTask<ToneMapTaskCode>::TaskContext {
+ Layer *layer = nullptr;
+};
+
+struct ToneMapBlitContext : public SyncTask<ToneMapTaskCode>::TaskContext {
+ Layer *layer = nullptr;
+ int merged_fd = -1;
+ int fence_fd = -1;
+};
+
+struct ToneMapConfig {
+ int type = 0;
+ PrimariesTransfer blend_cs = {};
+ GammaTransfer transfer = Transfer_Max;
+ LayerBufferFormat format = kFormatRGBA8888;
+ bool secure = false;
+};
+
+class ToneMapSession : public SyncTask<ToneMapTaskCode>::TaskHandler {
+ public:
+ explicit ToneMapSession(HWCBufferAllocator *buffer_allocator);
+ ~ToneMapSession();
+ DisplayError AllocateIntermediateBuffers(const Layer *layer);
+ void FreeIntermediateBuffers();
+ void UpdateBuffer(int acquire_fence, LayerBuffer *buffer);
+ void SetReleaseFence(int fd);
+ void SetToneMapConfig(Layer *layer, PrimariesTransfer blend_cs);
+ bool IsSameToneMapConfig(Layer *layer, PrimariesTransfer blend_cs);
+
+ // TaskHandler methods implementation.
+ virtual void OnTask(const ToneMapTaskCode &task_code,
+ SyncTask<ToneMapTaskCode>::TaskContext *task_context);
+
+ static const uint8_t kNumIntermediateBuffers = 2;
+ SyncTask<ToneMapTaskCode> tone_map_task_;
+ Tonemapper *gpu_tone_mapper_ = nullptr;
+ HWCBufferAllocator *buffer_allocator_ = nullptr;
+ ToneMapConfig tone_map_config_ = {};
+ uint8_t current_buffer_index_ = 0;
+ std::vector<BufferInfo> buffer_info_ = {};
+ int release_fence_fd_[kNumIntermediateBuffers] = {-1, -1};
+ bool acquired_ = false;
+ int layer_index_ = -1;
+};
+
+class HWCToneMapper {
+ public:
+ explicit HWCToneMapper(HWCBufferAllocator *allocator) : buffer_allocator_(allocator) {}
+ ~HWCToneMapper() {}
+
+ int HandleToneMap(LayerStack *layer_stack);
+ bool IsActive() { return !tone_map_sessions_.empty(); }
+ void PostCommit(LayerStack *layer_stack);
+ void SetFrameDumpConfig(uint32_t count);
+ void Terminate();
+
+ private:
+ void ToneMap(Layer *layer, ToneMapSession *session);
+ DisplayError AcquireToneMapSession(Layer *layer, uint32_t *sess_idx, PrimariesTransfer blend_cs);
+ void DumpToneMapOutput(ToneMapSession *session, int *acquire_fence);
+
+ std::vector<ToneMapSession*> tone_map_sessions_;
+ HWCBufferSyncHandler buffer_sync_handler_ = {};
+ HWCBufferAllocator *buffer_allocator_ = nullptr;
+ uint32_t dump_frame_count_ = 0;
+ uint32_t dump_frame_index_ = 0;
+ int fb_session_index_ = -1;
+};
+
+} // namespace sdm
+#endif // __HWC_TONEMAPPER_H__
diff --git a/sdm/libs/utils/Android.mk b/sdm/libs/utils/Android.mk
new file mode 100644
index 0000000..a9d705c
--- /dev/null
+++ b/sdm/libs/utils/Android.mk
@@ -0,0 +1,34 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+include $(LOCAL_PATH)/../../../common.mk
+
+LOCAL_MODULE := libsdmutils
+LOCAL_VENDOR_MODULE := true
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := $(common_includes)
+LOCAL_HEADER_LIBRARIES := display_headers
+LOCAL_CFLAGS := -DLOG_TAG=\"SDM\" $(common_flags)
+LOCAL_SRC_FILES := debug.cpp \
+ rect.cpp \
+ sys.cpp \
+ formats.cpp \
+ utils.cpp
+
+LOCAL_SHARED_LIBRARIES := libdisplaydebug
+include $(BUILD_SHARED_LIBRARY)
+
+SDM_HEADER_PATH := ../../include
+include $(CLEAR_VARS)
+LOCAL_VENDOR_MODULE := true
+LOCAL_COPY_HEADERS_TO := $(common_header_export_path)/sdm/utils
+LOCAL_COPY_HEADERS = $(SDM_HEADER_PATH)/utils/constants.h \
+ $(SDM_HEADER_PATH)/utils/debug.h \
+ $(SDM_HEADER_PATH)/utils/formats.h \
+ $(SDM_HEADER_PATH)/utils/locker.h \
+ $(SDM_HEADER_PATH)/utils/rect.h \
+ $(SDM_HEADER_PATH)/utils/sys.h \
+ $(SDM_HEADER_PATH)/utils/sync_task.h \
+ $(SDM_HEADER_PATH)/utils/utils.h \
+ $(SDM_HEADER_PATH)/utils/factory.h
+
+include $(BUILD_COPY_HEADERS)
diff --git a/sdm/libs/utils/Makefile.am b/sdm/libs/utils/Makefile.am
new file mode 100644
index 0000000..098775a
--- /dev/null
+++ b/sdm/libs/utils/Makefile.am
@@ -0,0 +1,13 @@
+cpp_sources = debug.cpp \
+ rect.cpp \
+ sys.cpp \
+ formats.cpp \
+ utils.cpp
+
+lib_LTLIBRARIES = libsdmutils.la
+libsdmutils_la_CC = @CC@
+libsdmutils_la_SOURCES = $(cpp_sources)
+libsdmutils_la_CFLAGS = $(COMMON_CFLAGS) -DLOG_TAG=\"SDM\"
+libsdmutils_la_CPPFLAGS = $(AM_CPPFLAGS)
+libsdmutils_la_LIBADD = ../../../libdebug/libdisplaydebug.la
+libsdmutils_la_LDFLAGS = -shared -avoid-version
diff --git a/sdm/libs/utils/debug.cpp b/sdm/libs/utils/debug.cpp
new file mode 100644
index 0000000..17e02e8
--- /dev/null
+++ b/sdm/libs/utils/debug.cpp
@@ -0,0 +1,238 @@
+/*
+* Copyright (c) 2014 - 2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <stdlib.h>
+#include <utils/debug.h>
+#include <utils/constants.h>
+#include <string>
+#include <algorithm>
+
+namespace sdm {
+
+int Debug::GetSimulationFlag() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(COMPOSITION_MASK_PROP, &value);
+
+ return value;
+}
+
+bool Debug::GetExternalResolution(char *value) {
+ uint32_t retval = 0;
+ DebugHandler::Get()->GetProperty(HDMI_CONFIG_INDEX_PROP, value);
+ if (value[0]) {
+ retval = 1;
+ }
+
+ return retval;
+}
+
+void Debug::GetIdleTimeoutMs(uint32_t *active_ms, uint32_t *inactive_ms) {
+ int active_val = IDLE_TIMEOUT_ACTIVE_MS;
+ int inactive_val = IDLE_TIMEOUT_INACTIVE_MS;
+
+ DebugHandler::Get()->GetProperty(IDLE_TIME_PROP, &active_val);
+ DebugHandler::Get()->GetProperty(IDLE_TIME_INACTIVE_PROP, &inactive_val);
+
+ *active_ms = UINT32(active_val);
+ *inactive_ms = UINT32(inactive_val);
+}
+
+int Debug::GetBootAnimLayerCount() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(BOOT_ANIMATION_LAYER_COUNT_PROP, &value);
+
+ return value;
+}
+
+bool Debug::IsRotatorDownScaleDisabled() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(DISABLE_ROTATOR_DOWNSCALE_PROP, &value);
+
+ return (value == 1);
+}
+
+bool Debug::IsDecimationDisabled() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(DISABLE_DECIMATION_PROP, &value);
+
+ return (value == 1);
+}
+
+int Debug::GetMaxPipesPerMixer(DisplayType display_type) {
+ int value = -1;
+ switch (display_type) {
+ case kBuiltIn:
+ DebugHandler::Get()->GetProperty(PRIMARY_MIXER_STAGES_PROP, &value);
+ break;
+ case kPluggable:
+ DebugHandler::Get()->GetProperty(EXTERNAL_MIXER_STAGES_PROP, &value);
+ break;
+ case kVirtual:
+ DebugHandler::Get()->GetProperty(VIRTUAL_MIXER_STAGES_PROP, &value);
+ break;
+ default:
+ break;
+ }
+
+ return value;
+}
+
+int Debug::GetMaxUpscale() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(MAX_UPSCALE_PROP, &value);
+
+ return value;
+}
+
+bool Debug::IsVideoModeEnabled() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(VIDEO_MODE_PANEL_PROP, &value);
+
+ return (value == 1);
+}
+
+bool Debug::IsRotatorUbwcDisabled() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(DISABLE_ROTATOR_UBWC_PROP, &value);
+
+ return (value == 1);
+}
+
+bool Debug::IsRotatorSplitDisabled() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(DISABLE_ROTATOR_SPLIT_PROP, &value);
+
+ return (value == 1);
+}
+
+bool Debug::IsScalarDisabled() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(DISABLE_SCALER_PROP, &value);
+
+ return (value == 1);
+}
+
+bool Debug::IsUbwcTiledFrameBuffer() {
+ int ubwc_disabled = 0;
+ int ubwc_framebuffer = 0;
+
+ DebugHandler::Get()->GetProperty(DISABLE_UBWC_PROP, &ubwc_disabled);
+
+ if (!ubwc_disabled) {
+ DebugHandler::Get()->GetProperty(ENABLE_FB_UBWC_PROP, &ubwc_framebuffer);
+ }
+
+ return (ubwc_framebuffer == 1);
+}
+
+bool Debug::IsAVRDisabled() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(DISABLE_AVR_PROP, &value);
+
+ return (value == 1);
+}
+
+bool Debug::IsExtAnimDisabled() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(DISABLE_EXTERNAL_ANIMATION_PROP, &value);
+
+ return (value == 1);
+}
+
+bool Debug::IsPartialSplitDisabled() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(DISABLE_PARTIAL_SPLIT_PROP, &value);
+
+ return (value == 1);
+}
+
+bool Debug::IsSrcSplitPreferred() {
+ int value = 0;
+ DebugHandler::Get()->GetProperty(PREFER_SOURCE_SPLIT_PROP, &value);
+
+ return (value == 1);
+}
+
+DisplayError Debug::GetMixerResolution(uint32_t *width, uint32_t *height) {
+ char value[64] = {};
+
+ int error = DebugHandler::Get()->GetProperty(MIXER_RESOLUTION_PROP, value);
+ if (error != 0) {
+ return kErrorUndefined;
+ }
+
+ std::string str(value);
+
+ *width = UINT32(stoi(str));
+ *height = UINT32(stoi(str.substr(str.find('x') + 1)));
+
+ return kErrorNone;
+}
+
+DisplayError Debug::GetReducedConfig(uint32_t *num_vig_pipes, uint32_t *num_dma_pipes) {
+ char value[64] = {};
+
+ int error = DebugHandler::Get()->GetProperty(SIMULATED_CONFIG_PROP, value);
+ if (error != 0) {
+ return kErrorUndefined;
+ }
+
+ std::string str(value);
+
+ *num_vig_pipes = UINT32(stoi(str));
+ *num_dma_pipes = UINT32(stoi(str.substr(str.find('x') + 1)));
+
+ return kErrorNone;
+}
+
+int Debug::GetExtMaxlayers() {
+ int max_external_layers = 0;
+ DebugHandler::Get()->GetProperty(MAX_EXTERNAL_LAYERS_PROP, &max_external_layers);
+
+ return std::max(max_external_layers, 2);
+}
+
+DisplayError Debug::GetProperty(const char *property_name, char *value) {
+ if (DebugHandler::Get()->GetProperty(property_name, value)) {
+ return kErrorUndefined;
+ }
+
+ return kErrorNone;
+}
+
+DisplayError Debug::GetProperty(const char *property_name, int *value) {
+ if (DebugHandler::Get()->GetProperty(property_name, value)) {
+ return kErrorUndefined;
+ }
+
+ return kErrorNone;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/utils/formats.cpp b/sdm/libs/utils/formats.cpp
new file mode 100644
index 0000000..5f29ddc
--- /dev/null
+++ b/sdm/libs/utils/formats.cpp
@@ -0,0 +1,258 @@
+/*
+* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <utils/formats.h>
+
+#define __CLASS__ "FormatsUtils"
+
+namespace sdm {
+
+bool IsUBWCFormat(LayerBufferFormat format) {
+ switch (format) {
+ case kFormatRGBA8888Ubwc:
+ case kFormatRGBX8888Ubwc:
+ case kFormatBGR565Ubwc:
+ case kFormatYCbCr420SPVenusUbwc:
+ case kFormatRGBA1010102Ubwc:
+ case kFormatRGBX1010102Ubwc:
+ case kFormatYCbCr420TP10Ubwc:
+ case kFormatYCbCr420P010Ubwc:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool Is10BitFormat(LayerBufferFormat format) {
+ switch (format) {
+ case kFormatRGBA1010102:
+ case kFormatARGB2101010:
+ case kFormatRGBX1010102:
+ case kFormatXRGB2101010:
+ case kFormatBGRA1010102:
+ case kFormatABGR2101010:
+ case kFormatBGRX1010102:
+ case kFormatXBGR2101010:
+ case kFormatRGBA1010102Ubwc:
+ case kFormatRGBX1010102Ubwc:
+ case kFormatYCbCr420P010:
+ case kFormatYCbCr420TP10Ubwc:
+ case kFormatYCbCr420P010Ubwc:
+ case kFormatYCbCr420P010Venus:
+ return true;
+ default:
+ return false;
+ }
+}
+
+const char *GetFormatString(const LayerBufferFormat &format) {
+ switch (format) {
+ case kFormatARGB8888: return "ARGB_8888";
+ case kFormatRGBA8888: return "RGBA_8888";
+ case kFormatBGRA8888: return "BGRA_8888";
+ case kFormatXRGB8888: return "XRGB_8888";
+ case kFormatRGBX8888: return "RGBX_8888";
+ case kFormatBGRX8888: return "BGRX_8888";
+ case kFormatRGBA5551: return "RGBA_5551";
+ case kFormatRGBA4444: return "RGBA_4444";
+ case kFormatRGB888: return "RGB_888";
+ case kFormatBGR888: return "BGR_888";
+ case kFormatRGB565: return "RGB_565";
+ case kFormatBGR565: return "BGR_565";
+ case kFormatRGBA8888Ubwc: return "RGBA_8888_UBWC";
+ case kFormatRGBX8888Ubwc: return "RGBX_8888_UBWC";
+ case kFormatBGR565Ubwc: return "BGR_565_UBWC";
+ case kFormatYCbCr420Planar: return "Y_CB_CR_420";
+ case kFormatYCrCb420Planar: return "Y_CR_CB_420";
+ case kFormatYCrCb420PlanarStride16: return "Y_CR_CB_420_STRIDE16";
+ case kFormatYCbCr420SemiPlanar: return "Y_CBCR_420";
+ case kFormatYCrCb420SemiPlanar: return "Y_CRCB_420";
+ case kFormatYCbCr420SemiPlanarVenus: return "Y_CBCR_420_VENUS";
+ case kFormatYCrCb420SemiPlanarVenus: return "Y_CRCB_420_VENUS";
+ case kFormatYCbCr422H1V2SemiPlanar: return "Y_CBCR_422_H1V2";
+ case kFormatYCrCb422H1V2SemiPlanar: return "Y_CRCB_422_H1V2";
+ case kFormatYCbCr422H2V1SemiPlanar: return "Y_CBCR_422_H2V1";
+ case kFormatYCrCb422H2V1SemiPlanar: return "Y_CRCB_422_H2V2";
+ case kFormatYCbCr420SPVenusUbwc: return "Y_CBCR_420_VENUS_UBWC";
+ case kFormatYCbCr420SPVenusTile: return "Y_CBCR_420_VENUS_TILED";
+ case kFormatYCbCr422H2V1Packed: return "YCBYCR_422_H2V1";
+ case kFormatCbYCrY422H2V1Packed: return "CBYCRY_422_H2V1";
+ case kFormatRGBA1010102: return "RGBA_1010102";
+ case kFormatARGB2101010: return "ARGB_2101010";
+ case kFormatRGBX1010102: return "RGBX_1010102";
+ case kFormatXRGB2101010: return "XRGB_2101010";
+ case kFormatBGRA1010102: return "BGRA_1010102";
+ case kFormatABGR2101010: return "ABGR_2101010";
+ case kFormatBGRX1010102: return "BGRX_1010102";
+ case kFormatXBGR2101010: return "XBGR_2101010";
+ case kFormatRGBA1010102Ubwc: return "RGBA_1010102_UBWC";
+ case kFormatRGBX1010102Ubwc: return "RGBX_1010102_UBWC";
+ case kFormatYCbCr420P010: return "Y_CBCR_420_P010";
+ case kFormatYCbCr420TP10Ubwc: return "Y_CBCR_420_TP10_UBWC";
+ case kFormatYCbCr420P010Ubwc: return "Y_CBCR_420_P010_UBWC";
+ case kFormatYCbCr420P010Venus: return "Y_CBCR_420_P010_VENUS";
+ case kFormatYCbCr420TP10Tile: return "Y_CBCR_420_TP10_TILED";
+ case kFormatYCbCr420P010Tile: return "Y_CBCR_420_P010_TILED";
+ default: return "UNKNOWN";
+ }
+}
+
+BufferLayout GetBufferLayout(LayerBufferFormat format) {
+ switch (format) {
+ case kFormatYCbCr420TP10Ubwc:
+ case kFormatYCbCr420TP10Tile:
+ return kTPTiled;
+ case kFormatYCbCr420SPVenusTile:
+ case kFormatYCbCr420P010Tile:
+ return kUBWC;
+ default:
+ return (IsUBWCFormat(format) ? kUBWC : kLinear);
+ }
+}
+
+float GetBufferFormatBpp(LayerBufferFormat format) {
+ float bpp = 0.0f;
+ switch (format) {
+ case kFormatARGB8888:
+ case kFormatRGBA8888:
+ case kFormatBGRA8888:
+ case kFormatXRGB8888:
+ case kFormatRGBX8888:
+ case kFormatBGRX8888:
+ case kFormatRGBA8888Ubwc:
+ case kFormatRGBX8888Ubwc:
+ case kFormatRGBA1010102:
+ case kFormatARGB2101010:
+ case kFormatRGBX1010102:
+ case kFormatXRGB2101010:
+ case kFormatBGRA1010102:
+ case kFormatABGR2101010:
+ case kFormatBGRX1010102:
+ case kFormatXBGR2101010:
+ case kFormatRGBA1010102Ubwc:
+ case kFormatRGBX1010102Ubwc:
+ return 4.0f;
+ case kFormatRGB888:
+ case kFormatBGR888:
+ case kFormatYCbCr420P010:
+ case kFormatYCbCr420P010Ubwc:
+ case kFormatYCbCr420P010Venus:
+ case kFormatYCbCr420P010Tile:
+ return 3.0f;
+ case kFormatRGB565:
+ case kFormatBGR565:
+ case kFormatRGBA5551:
+ case kFormatRGBA4444:
+ case kFormatBGR565Ubwc:
+ case kFormatYCbCr422H2V1Packed:
+ case kFormatCbYCrY422H2V1Packed:
+ case kFormatYCrCb422H2V1SemiPlanar:
+ case kFormatYCbCr422H2V1SemiPlanar:
+ case kFormatYCbCr420TP10Ubwc:
+ case kFormatYCbCr420TP10Tile:
+ case kFormatYCbCr422H1V2SemiPlanar:
+ case kFormatYCrCb422H1V2SemiPlanar:
+ return 2.0f;
+ case kFormatYCbCr420Planar:
+ case kFormatYCrCb420Planar:
+ case kFormatYCrCb420PlanarStride16:
+ case kFormatYCbCr420SemiPlanar:
+ case kFormatYCrCb420SemiPlanar:
+ case kFormatYCbCr420SemiPlanarVenus:
+ case kFormatYCrCb420SemiPlanarVenus:
+ case kFormatYCbCr420SPVenusUbwc:
+ case kFormatYCbCr420SPVenusTile:
+ return 1.5f;
+ default:
+ return 0.0f;
+ }
+
+ return bpp;
+}
+
+DisplayError GetBufferFormatTileSize(LayerBufferFormat format, FormatTileSize *tile_size) {
+ switch (format) {
+ case kFormatYCbCr420SPVenusUbwc:
+ case kFormatYCbCr420SPVenusTile:
+ tile_size->tile_width = 32;
+ tile_size->tile_height = 8;
+ tile_size->uv_tile_width = 16;
+ tile_size->uv_tile_height = 8;
+ break;
+ case kFormatYCbCr420TP10Ubwc:
+ case kFormatYCbCr420TP10Tile:
+ tile_size->tile_width = 48;
+ tile_size->tile_height = 4;
+ tile_size->uv_tile_width = 24;
+ tile_size->uv_tile_height = 4;
+ break;
+ case kFormatYCbCr420P010Ubwc:
+ case kFormatYCbCr420P010Tile:
+ tile_size->tile_width = 32;
+ tile_size->tile_height = 4;
+ tile_size->uv_tile_width = 16;
+ tile_size->uv_tile_height = 4;
+ break;
+ default:
+ return kErrorNotSupported;
+ }
+ return kErrorNone;
+}
+
+bool HasAlphaChannel(LayerBufferFormat format) {
+ switch (format) {
+ case kFormatARGB8888:
+ case kFormatRGBA8888:
+ case kFormatBGRA8888:
+ case kFormatRGBA5551:
+ case kFormatRGBA4444:
+ case kFormatRGBA8888Ubwc:
+ case kFormatRGBA1010102:
+ case kFormatARGB2101010:
+ case kFormatBGRA1010102:
+ case kFormatABGR2101010:
+ case kFormatRGBA1010102Ubwc:
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool IsWideColor(const ColorPrimaries &primary) {
+ switch (primary) {
+ case ColorPrimaries_DCIP3:
+ case ColorPrimaries_BT2020:
+ return true;
+ default:
+ return false;
+ }
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/utils/rect.cpp b/sdm/libs/utils/rect.cpp
new file mode 100644
index 0000000..e121b58
--- /dev/null
+++ b/sdm/libs/utils/rect.cpp
@@ -0,0 +1,353 @@
+/*
+* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <math.h>
+#include <utils/rect.h>
+#include <utils/constants.h>
+#include <algorithm>
+
+#define __CLASS__ "RectUtils"
+
+namespace sdm {
+
+bool IsValid(const LayerRect &rect) {
+ return ((rect.bottom > rect.top) && (rect.right > rect.left));
+}
+
+bool IsCongruent(const LayerRect &rect1, const LayerRect &rect2) {
+ return ((rect1.left == rect2.left) &&
+ (rect1.top == rect2.top) &&
+ (rect1.right == rect2.right) &&
+ (rect1.bottom == rect2.bottom));
+}
+
+void LogI(DebugTag debug_tag, const char *prefix, const LayerRect &roi) {
+ DLOGI_IF(debug_tag, "%s: left = %.0f, top = %.0f, right = %.0f, bottom = %.0f",
+ prefix, roi.left, roi.top, roi.right, roi.bottom);
+}
+
+void Log(DebugTag debug_tag, const char *prefix, const LayerRect &roi) {
+ DLOGV_IF(debug_tag, "%s: left = %.0f, top = %.0f, right = %.0f, bottom = %.0f",
+ prefix, roi.left, roi.top, roi.right, roi.bottom);
+}
+
+void Normalize(const uint32_t &align_x, const uint32_t &align_y, LayerRect *rect) {
+ rect->left = ROUND_UP_ALIGN_UP(rect->left, align_x);
+ rect->right = ROUND_UP_ALIGN_DOWN(rect->right, align_x);
+ rect->top = ROUND_UP_ALIGN_UP(rect->top, align_y);
+ rect->bottom = ROUND_UP_ALIGN_DOWN(rect->bottom, align_y);
+}
+
+LayerRect Intersection(const LayerRect &rect1, const LayerRect &rect2) {
+ LayerRect res;
+
+ if (!IsValid(rect1) || !IsValid(rect2)) {
+ return LayerRect();
+ }
+
+ res.left = std::max(rect1.left, rect2.left);
+ res.top = std::max(rect1.top, rect2.top);
+ res.right = std::min(rect1.right, rect2.right);
+ res.bottom = std::min(rect1.bottom, rect2.bottom);
+
+ if (!IsValid(res)) {
+ return LayerRect();
+ }
+
+ return res;
+}
+
+LayerRect Reposition(const LayerRect &rect, const int &x_offset, const int &y_offset) {
+ LayerRect res;
+
+ if (!IsValid(rect)) {
+ return LayerRect();
+ }
+
+ res.left = rect.left + FLOAT(x_offset);
+ res.top = rect.top + FLOAT(y_offset);
+ res.right = rect.right + FLOAT(x_offset);
+ res.bottom = rect.bottom + FLOAT(y_offset);
+
+ return res;
+}
+
+// Is rect2 completely inside rect1?
+bool Contains(const LayerRect &rect1, const LayerRect &rect2) {
+ if (!IsValid(rect1) || !IsValid(rect2)) {
+ return false;
+ }
+ return (rect1.top <= rect2.top && rect1.bottom >= rect2.bottom &&
+ rect1.left <= rect2.left && rect1.right >= rect2.right);
+}
+
+// subtracts 2 rects iff result of subtraction is 2 rects.
+void Subtract(const LayerRect &rect1, const LayerRect &rect2, LayerRect *res) {
+ if (!res) {
+ return;
+ }
+ if (!IsValid(rect1) || !IsValid(rect2)) {
+ return;
+ }
+
+ if (rect1.left != rect2.left || rect1.right != rect2.right) {
+ return;
+ }
+ res[0].left = rect1.left;
+ res[0].right = rect1.right;
+ if (rect1.top < rect2.top) {
+ res[0].top = rect1.top;
+ res[0].bottom = rect2.top;
+ } else {
+ res[0].top = rect2.top;
+ res[0].bottom = rect1.top;
+ }
+ res[1].left = rect1.left;
+ res[1].right = rect1.right;
+ if (rect1.bottom < rect2.bottom) {
+ res[1].top = rect1.bottom;
+ res[1].bottom = rect2.bottom;
+ } else {
+ res[1].top = rect2.bottom;
+ res[1].bottom = rect1.bottom;
+ }
+}
+
+// Not a geometrical rect deduction. Deducts rect2 from rect1 only if it results a single rect
+LayerRect Subtract(const LayerRect &rect1, const LayerRect &rect2) {
+ LayerRect res;
+
+ res = rect1;
+
+ if ((rect1.left == rect2.left) && (rect1.right == rect2.right)) {
+ if ((rect1.top == rect2.top) && (rect2.bottom <= rect1.bottom)) {
+ res.top = rect2.bottom;
+ } else if ((rect1.bottom == rect2.bottom) && (rect2.top >= rect1.top)) {
+ res.bottom = rect2.top;
+ }
+ } else if ((rect1.top == rect2.top) && (rect1.bottom == rect2.bottom)) {
+ if ((rect1.left == rect2.left) && (rect2.right <= rect1.right)) {
+ res.left = rect2.right;
+ } else if ((rect1.right == rect2.right) && (rect2.left >= rect1.left)) {
+ res.right = rect2.left;
+ }
+ }
+
+ return res;
+}
+
+LayerRect Union(const LayerRect &rect1, const LayerRect &rect2) {
+ LayerRect res;
+
+ if (!IsValid(rect1) && !IsValid(rect2)) {
+ return LayerRect();
+ }
+
+ if (!IsValid(rect1)) {
+ return rect2;
+ }
+
+ if (!IsValid(rect2)) {
+ return rect1;
+ }
+
+ res.left = std::min(rect1.left, rect2.left);
+ res.top = std::min(rect1.top, rect2.top);
+ res.right = std::max(rect1.right, rect2.right);
+ res.bottom = std::max(rect1.bottom, rect2.bottom);
+
+ return res;
+}
+
+void SplitLeftRight(const LayerRect &in_rect, uint32_t split_count, uint32_t align_x,
+ bool flip_horizontal, LayerRect *out_rects) {
+ LayerRect rect_temp = in_rect;
+
+ uint32_t split_width = UINT32(rect_temp.right - rect_temp.left) / split_count;
+ float aligned_width = FLOAT(CeilToMultipleOf(split_width, align_x));
+
+ for (uint32_t count = 0; count < split_count; count++) {
+ float aligned_right = rect_temp.left + aligned_width;
+ out_rects[count].left = rect_temp.left;
+ out_rects[count].right = std::min(rect_temp.right, aligned_right);
+ out_rects[count].top = rect_temp.top;
+ out_rects[count].bottom = rect_temp.bottom;
+
+ rect_temp.left = out_rects[count].right;
+
+ Log(kTagRotator, "SplitLeftRight", out_rects[count]);
+ }
+
+ // If we have a horizontal flip, then we should be splitting the source from right to left
+ // to ensure that the right split will have an aligned width that matches the alignment on the
+ // destination.
+ if (flip_horizontal && split_count > 1) {
+ out_rects[0].right = out_rects[0].left + (out_rects[1].right - out_rects[1].left);
+ out_rects[1].left = out_rects[0].right;
+ Log(kTagRotator, "Adjusted Left", out_rects[0]);
+ Log(kTagRotator, "Adjusted Right", out_rects[1]);
+ }
+}
+
+void SplitTopBottom(const LayerRect &in_rect, uint32_t split_count, uint32_t align_y,
+ bool flip_horizontal, LayerRect *out_rects) {
+ LayerRect rect_temp = in_rect;
+
+ uint32_t split_height = UINT32(rect_temp.bottom - rect_temp.top) / split_count;
+ float aligned_height = FLOAT(CeilToMultipleOf(split_height, align_y));
+
+ for (uint32_t count = 0; count < split_count; count++) {
+ float aligned_bottom = rect_temp.top + aligned_height;
+ out_rects[count].top = rect_temp.top;
+ out_rects[count].bottom = std::min(rect_temp.bottom, aligned_bottom);
+ out_rects[count].left = rect_temp.left;
+ out_rects[count].right = rect_temp.right;
+
+ rect_temp.top = out_rects[count].bottom;
+
+ Log(kTagRotator, "SplitTopBottom", out_rects[count]);
+ }
+
+ // If we have a horizontal flip, then we should be splitting the destination from bottom to top
+ // to ensure that the bottom split's y-offset is aligned correctly after we swap the destinations
+ // while accounting for the flip.
+ if (flip_horizontal && split_count > 1) {
+ out_rects[0].bottom = out_rects[0].top + (out_rects[1].bottom - out_rects[1].top);
+ out_rects[1].top = out_rects[0].bottom;
+ Log(kTagRotator, "Adjusted Top", out_rects[0]);
+ Log(kTagRotator, "Adjusted Bottom", out_rects[1]);
+ }
+}
+
+void MapRect(const LayerRect &src_domain, const LayerRect &dst_domain, const LayerRect &in_rect,
+ LayerRect *out_rect) {
+ if (!IsValid(src_domain) || !IsValid(dst_domain) || !IsValid(in_rect)) {
+ return;
+ }
+
+ int x_offset = INT(src_domain.left);
+ int y_offset = INT(src_domain.top);
+
+ LayerRect modified_in_rect = Reposition(in_rect, -x_offset, -y_offset);
+ float src_domain_width = src_domain.right - src_domain.left;
+ float src_domain_height = src_domain.bottom - src_domain.top;
+ float dst_domain_width = dst_domain.right - dst_domain.left;
+ float dst_domain_height = dst_domain.bottom - dst_domain.top;
+
+ float width_ratio = dst_domain_width / src_domain_width;
+ float height_ratio = dst_domain_height / src_domain_height;
+
+ out_rect->left = dst_domain.left + (width_ratio * modified_in_rect.left);
+ out_rect->top = dst_domain.top + (height_ratio * modified_in_rect.top);
+ out_rect->right = dst_domain.left + (width_ratio * modified_in_rect.right);
+ out_rect->bottom = dst_domain.top + (height_ratio * modified_in_rect.bottom);
+}
+
+void TransformHV(const LayerRect &src_domain, const LayerRect &in_rect,
+ const LayerTransform &transform, LayerRect *out_rect) {
+ if (!IsValid(src_domain) || !IsValid(in_rect)) {
+ return;
+ }
+
+ float in_width = in_rect.right - in_rect.left;
+ float in_height = in_rect.bottom - in_rect.top;
+ float x_offset = in_rect.left - src_domain.left;
+ float y_offset = in_rect.top - src_domain.top;
+ *out_rect = in_rect;
+
+ if (transform.flip_horizontal) {
+ out_rect->right = src_domain.right - x_offset;
+ out_rect->left = out_rect->right - in_width;
+ }
+
+ if (transform.flip_vertical) {
+ out_rect->bottom = src_domain.bottom - y_offset;
+ out_rect->top = out_rect->bottom - in_height;
+ }
+}
+
+RectOrientation GetOrientation(const LayerRect &in_rect) {
+ if (!IsValid(in_rect)) {
+ return kOrientationUnknown;
+ }
+
+ float input_width = in_rect.right - in_rect.left;
+ float input_height = in_rect.bottom - in_rect.top;
+
+ if (input_width < input_height) {
+ return kOrientationPortrait;
+ }
+
+ return kOrientationLandscape;
+}
+
+DisplayError GetCropAndDestination(const LayerRect &crop, const LayerRect &dst,
+ const bool rotated90, float *crop_width,
+ float *crop_height, float *dst_width,
+ float *dst_height) {
+ if (!IsValid(crop)) {
+ Log(kTagResources, "Invalid crop rect", crop);
+ return kErrorNotSupported;
+ }
+
+ if (!IsValid(dst)) {
+ Log(kTagResources, "Invalid dst rect", dst);
+ return kErrorNotSupported;
+ }
+
+ *crop_width = crop.right - crop.left;
+ *crop_height = crop.bottom - crop.top;
+ if (rotated90) {
+ std::swap(*crop_width, *crop_height);
+ }
+
+ *dst_width = dst.right - dst.left;
+ *dst_height = dst.bottom - dst.top;
+
+ return kErrorNone;
+}
+
+DisplayError GetScaleFactor(const LayerRect &crop, const LayerRect &dst,
+ bool rotated90, float *scale_x, float *scale_y) {
+ float crop_width = 1.0f, crop_height = 1.0f, dst_width = 1.0f, dst_height = 1.0f;
+
+ DisplayError error = GetCropAndDestination(crop, dst, rotated90, &crop_width, &crop_height,
+ &dst_width, &dst_height);
+ if (error != kErrorNone) {
+ return error;
+ }
+
+ *scale_x = crop_width / dst_width;
+ *scale_y = crop_height / dst_height;
+
+ return kErrorNone;
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/utils/sys.cpp b/sdm/libs/utils/sys.cpp
new file mode 100644
index 0000000..f5e0f29
--- /dev/null
+++ b/sdm/libs/utils/sys.cpp
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <utils/sys.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string>
+
+#define __CLASS__ "Sys"
+
+namespace sdm {
+
+#ifndef SDM_VIRTUAL_DRIVER
+
+int PthreadCancel(pthread_t /* thread */) {
+ return 0;
+}
+
+// Pointer to actual driver interfaces.
+Sys::ioctl Sys::ioctl_ = ::ioctl;
+Sys::access Sys::access_ = ::access;
+Sys::open Sys::open_ = ::open;
+Sys::close Sys::close_ = ::close;
+Sys::poll Sys::poll_ = ::poll;
+Sys::pread Sys::pread_ = ::pread;
+Sys::pwrite Sys::pwrite_ = ::pwrite;
+Sys::pthread_cancel Sys::pthread_cancel_ = PthreadCancel;
+Sys::dup Sys::dup_ = ::dup;
+Sys::read Sys::read_ = ::read;
+Sys::write Sys::write_ = ::write;
+Sys::eventfd Sys::eventfd_ = ::eventfd;
+
+bool Sys::getline_(fstream &fs, std::string &line) {
+ return std::getline(fs, line) ? true : false;
+}
+
+#endif // SDM_VIRTUAL_DRIVER
+
+DynLib::~DynLib() {
+ Close();
+}
+
+bool DynLib::Open(const char *lib_name) {
+ Close();
+ lib_ = ::dlopen(lib_name, RTLD_NOW);
+
+ return (lib_ != NULL);
+}
+
+bool DynLib::Sym(const char *func_name, void **func_ptr) {
+ if (lib_) {
+ *func_ptr = ::dlsym(lib_, func_name);
+ } else {
+ *func_ptr = NULL;
+ }
+
+ return (*func_ptr != NULL);
+}
+
+void DynLib::Close() {
+ if (lib_) {
+ ::dlclose(lib_);
+ lib_ = NULL;
+ }
+}
+
+} // namespace sdm
+
diff --git a/sdm/libs/utils/utils.cpp b/sdm/libs/utils/utils.cpp
new file mode 100644
index 0000000..07211a1
--- /dev/null
+++ b/sdm/libs/utils/utils.cpp
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2016 - 2017, The Linux Foundation. All rights reserved.
+*
+* 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.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* 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.
+*/
+
+#include <unistd.h>
+#include <math.h>
+#include <utils/sys.h>
+#include <utils/utils.h>
+
+#include <algorithm>
+
+#define __CLASS__ "Utils"
+
+namespace sdm {
+
+float gcd(float a, float b) {
+ if (a < b) {
+ std::swap(a, b);
+ }
+
+ while (b != 0) {
+ float tmp = b;
+ b = fmodf(a, b);
+ a = tmp;
+ }
+
+ return a;
+}
+
+float lcm(float a, float b) {
+ return (a * b) / gcd(a, b);
+}
+
+void CloseFd(int *fd) {
+ if (*fd >= 0) {
+ Sys::close_(*fd);
+ *fd = -1;
+ }
+}
+
+DriverType GetDriverType() {
+ const char *fb_caps = "/sys/devices/virtual/graphics/fb0/mdp/caps";
+ // 0 - File exists
+ return Sys::access_(fb_caps, F_OK) ? DriverType::DRM : DriverType::FB;
+}
+} // namespace sdm